From: Brendan Hansen Date: Wed, 23 Feb 2022 04:05:03 +0000 (-0600) Subject: added aligning entity size and position to grid X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=8716413f7018b2af89d8e77767837058a02628b6;p=bar-game.git added aligning entity size and position to grid --- diff --git a/run_tree/scenes/quick_save.scene b/run_tree/scenes/quick_save.scene index dfd3855..5015cbb 100644 --- a/run_tree/scenes/quick_save.scene +++ b/run_tree/scenes/quick_save.scene @@ -1,26 +1,26 @@ :Wall entity.id = 10 entity.flags = 2 -entity.pos.x = 178.0000 -entity.pos.y = 312.0000 -entity.size.x = 355.0000 -entity.size.y = 28.0000 +entity.pos.x = 168.0000 +entity.pos.y = 320.0000 +entity.size.x = 336.0000 +entity.size.y = 32.0000 :Wall entity.id = 11 entity.flags = 2 -entity.pos.x = 447.0000 -entity.pos.y = 165.0000 -entity.size.x = 31.0000 -entity.size.y = 328.0000 +entity.pos.x = 448.0000 +entity.pos.y = 168.0000 +entity.size.x = 32.0000 +entity.size.y = 336.0000 :Player entity.id = 12 entity.flags = 2 -entity.pos.x = 237.4579 -entity.pos.y = 133.2012 -entity.size.x = 32.0000 -entity.size.y = 32.0000 +entity.pos.x = 200.0000 +entity.pos.y = 152.0000 +entity.size.x = 48.0000 +entity.size.y = 48.0000 holding = 0 controls.up = 87 controls.down = 83 @@ -37,18 +37,18 @@ facing = 4 :Door entity.id = 13 entity.flags = 7 -entity.pos.x = 353.0000 -entity.pos.y = 312.0000 -entity.size.x = 156.0000 -entity.size.y = 30.0000 +entity.pos.x = 352.0000 +entity.pos.y = 320.0000 +entity.size.x = 160.0000 +entity.size.y = 32.0000 target_openness = 0.0000 :Item_Entity entity.id = 14 entity.flags = 4 -entity.pos.x = 269.4578 -entity.pos.y = 133.2012 -entity.size.x = 24.0000 -entity.size.y = 24.0000 +entity.pos.x = 272.0000 +entity.pos.y = 144.0000 +entity.size.x = 32.0000 +entity.size.y = 32.0000 item = "beer" diff --git a/src/entity/editor.onyx b/src/entity/editor.onyx index 27d98bd..109c406 100644 --- a/src/entity/editor.onyx +++ b/src/entity/editor.onyx @@ -98,7 +98,19 @@ editor_update :: (dt: f32) { selected_entity := scene->get(selected_entity_id); if dragging { - selected_entity.pos += mouse_get_delta_vector(); + if editor_grid_shown { + new_top_left := mouse_get_position_vector(); + new_top_left.x = editor_grid_size * math.floor(new_top_left.x / editor_grid_size); + new_top_left.y = editor_grid_size * math.floor(new_top_left.y / editor_grid_size); + + rect := scene.entity_types[selected_entity.type].get_rect(selected_entity); + new_rect := Rect.{ new_top_left.x, new_top_left.y, rect.w, rect.h }; + selected_entity.pos = Rect.center(new_rect); + + } else { + selected_entity.pos += mouse_get_delta_vector(); + } + } else { if is_key_down(GLFW_KEY_UP) do selected_entity.pos.y -= 32 * dt; if is_key_down(GLFW_KEY_DOWN) do selected_entity.pos.y += 32 * dt; @@ -107,7 +119,20 @@ editor_update :: (dt: f32) { } if resizing { - selected_entity.size += mouse_get_delta_vector(); + if editor_grid_shown { + E :: macro (e: ^Entity) => scene.entity_types[e.type]; + + rect := E(selected_entity).get_rect(selected_entity); + new_size := mouse_get_position_vector() - Rect.top_left(rect); + new_size.x = editor_grid_size * math.floor(new_size.x / editor_grid_size); + new_size.y = editor_grid_size * math.floor(new_size.y / editor_grid_size); + new_rect := Rect.{ rect.x, rect.y, new_size.x, new_size.y }; + selected_entity.pos = Rect.center(new_rect); + selected_entity.size = new_size; + + } else { + selected_entity.size += mouse_get_delta_vector(); + } } if is_key_just_down(GLFW_KEY_DELETE) { diff --git a/src/utils/vecmath.onyx b/src/utils/vecmath.onyx index ad3937c..07423f5 100644 --- a/src/utils/vecmath.onyx +++ b/src/utils/vecmath.onyx @@ -91,4 +91,11 @@ Rect :: struct { return r.x <= p.x && r.x + r.w >= p.x && r.y <= p.y && r.y + r.h >= p.y; } + + center :: macro (use r: Rect) => Vector2.{ r.x+r.w/2, r.y+r.h/2 }; + + top_left :: macro (use r: Rect) => Vector2.{ r.x, r.y }; + top_right :: macro (use r: Rect) => Vector2.{ r.x+r.w, r.y }; + bottom_left :: macro (use r: Rect) => Vector2.{ r.x, r.y+r.h }; + bottom_right :: macro (use r: Rect) => Vector2.{ r.x+r.w, r.y+r.h }; }