: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
: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"
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;
}
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) {
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 };
}