Skip to content

Commit

Permalink
fix errors when moving away from origin view
Browse files Browse the repository at this point in the history
  • Loading branch information
H4kor committed Dec 20, 2023
1 parent 6be0c4a commit d59dab2
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 13 deletions.
4 changes: 4 additions & 0 deletions src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ impl State {
None => None,
}
}

pub fn cursor_world_pos(&self) -> Vec2<f64> {
self.cursor.pos + self.view.world_min().into()
}
}

impl StateController {
Expand Down
21 changes: 8 additions & 13 deletions src/view/canvas.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ impl Canvas {
}

// draw chambers
let cp = control.state.cursor.pos + control.state.view.world_min().into();
let cp = control.state.cursor_world_pos();
let next_vert = control.state.grid.snap(cp.into());

for chamber in control.dungeon().chambers.iter() {
Expand Down Expand Up @@ -155,7 +155,7 @@ impl Canvas {
Some(wall_id) => {
if let Some(chamber) = control.state.active_chamber() {
let wall = chamber.wall(wall_id).unwrap();
let door_pos = wall.nearest_relative_pos(control.state.cursor.pos);
let door_pos = wall.nearest_relative_pos(control.state.cursor_world_pos());

let door = Door::new(
chamber.id, None,
Expand Down Expand Up @@ -190,11 +190,11 @@ impl Canvas {
let control = &mut *control.borrow_mut();
match control.state.mode {
EditMode::Select => {
let door_id = control.state.dungeon.door_at(control.state.cursor.pos);
let door_id = control.state.dungeon.door_at(control.state.cursor_world_pos());
if let Some(id) = door_id {
control.apply(StateCommand::SelectDoor(Some(id)));
} else {
let chamber_id = control.state.dungeon.chamber_at(control.state.cursor.pos);
let chamber_id = control.state.dungeon.chamber_at(control.state.cursor_world_pos());
control.apply(StateCommand::SelectChamber(chamber_id));
}
}
Expand All @@ -205,8 +205,7 @@ impl Canvas {
control.apply(StateCommand::AddVertexToChamber(
chamber_id,
control.state.grid.snap(
(control.state.cursor.pos
+ control.state.view.world_min().into())
(control.state.cursor_world_pos())
.into(),
),
));
Expand All @@ -224,9 +223,7 @@ impl Canvas {
chamber_id,
wall_id,
control.state.grid.snap(
(control.state.cursor.pos
+ control.state.view.world_min().into())
.into(),
control.state.cursor_world_pos().into(),
),
));
canvas.borrow_mut().set_selected_wall(None);
Expand All @@ -246,7 +243,7 @@ impl Canvas {
Some(wall_id) => {
if let Some(chamber) = control.state.active_chamber() {
let wall = chamber.wall(wall_id).unwrap();
let door_pos = wall.nearest_relative_pos(control.state.cursor.pos);
let door_pos = wall.nearest_relative_pos(control.state.cursor_world_pos());

let door = Door::new(
chamber.id, None,
Expand Down Expand Up @@ -306,9 +303,7 @@ impl Canvas {
pub fn select_nearest_wall(&mut self, state: &State) {
if let Some(active_chamber_id) = state.active_chamber_id {
if let Some(chamber) = state.dungeon.chamber(active_chamber_id) {
if let Some(wall) =
chamber.nearest_wall(state.cursor.pos + state.view.world_min().into())
{
if let Some(wall) = chamber.nearest_wall(state.cursor_world_pos()) {
self.set_selected_wall(Some(wall.id))
}
}
Expand Down

0 comments on commit d59dab2

Please sign in to comment.