Skip to content

Commit b954ddc

Browse files
committed
Draw the mouse position's tilemap co-ordinate (and rectangle size) on the screen when using the TileMapLayer's Terrains plugin.
1 parent 03359c8 commit b954ddc

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

editor/plugins/tiles/tile_map_layer_editor.cpp

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,23 @@ TileMapLayer *TileMapLayerSubEditorPlugin::_get_edited_layer() const {
5050
return Object::cast_to<TileMapLayer>(ObjectDB::get_instance(edited_tile_map_layer_id));
5151
}
5252

53+
void TileMapLayerSubEditorPlugin::draw_tile_coords_over_viewport(Control *p_overlay, const TileMapLayer *p_edited_layer, Ref<TileSet> p_tile_set, bool p_show_rectangle_size, const Vector2i &p_rectangle_origin) {
54+
Point2 msgpos = Point2(20 * EDSCALE, p_overlay->get_size().y - 20 * EDSCALE);
55+
String text = p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position());
56+
57+
if (p_show_rectangle_size) {
58+
Vector2i rect_size = p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position()) - p_tile_set->local_to_map(p_rectangle_origin);
59+
text += vformat(" %s (%dx%d)", TTR("Drawing Rect:"), Math::abs(rect_size.x) + 1, Math::abs(rect_size.y) + 1);
60+
}
61+
62+
Ref<Font> font = p_overlay->get_theme_font(SceneStringName(font), SNAME("Label"));
63+
int font_size = p_overlay->get_theme_font_size(SceneStringName(font_size), SNAME("Label"));
64+
65+
p_overlay->draw_string(font, msgpos + Point2(1, 1), text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
66+
p_overlay->draw_string(font, msgpos + Point2(-1, -1), text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
67+
p_overlay->draw_string(font, msgpos, text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1, 1, 1, 1));
68+
}
69+
5370
void TileMapLayerEditorTilesPlugin::tile_set_changed() {
5471
_update_fix_selected_and_hovered();
5572
_update_tile_set_sources_list();
@@ -66,7 +83,7 @@ void TileMapLayerEditorTilesPlugin::_on_scattering_spinbox_changed(double p_valu
6683
}
6784

6885
void TileMapLayerEditorTilesPlugin::_update_toolbar() {
69-
// Stop draggig if needed.
86+
// Stop dragging if needed.
7087
_stop_dragging();
7188

7289
// Hide all settings.
@@ -783,7 +800,7 @@ bool TileMapLayerEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEven
783800
}
784801

785802
void TileMapLayerEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_overlay) {
786-
TileMapLayer *edited_layer = _get_edited_layer();
803+
const TileMapLayer *edited_layer = _get_edited_layer();
787804
if (!edited_layer) {
788805
return;
789806
}
@@ -1000,19 +1017,7 @@ void TileMapLayerEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p
10001017
}
10011018
}
10021019

1003-
Ref<Font> font = p_overlay->get_theme_font(SceneStringName(font), SNAME("Label"));
1004-
int font_size = p_overlay->get_theme_font_size(SceneStringName(font_size), SNAME("Label"));
1005-
Point2 msgpos = Point2(20 * EDSCALE, p_overlay->get_size().y - 20 * EDSCALE);
1006-
1007-
String text = tile_set->local_to_map(edited_layer->get_local_mouse_position());
1008-
if (drawing_rect) {
1009-
Vector2i size = tile_set->local_to_map(edited_layer->get_local_mouse_position()) - tile_set->local_to_map(drag_start_mouse_pos);
1010-
text += vformat(" %s (%dx%d)", TTR("Drawing Rect:"), Math::abs(size.x) + 1, Math::abs(size.y) + 1);
1011-
}
1012-
1013-
p_overlay->draw_string(font, msgpos + Point2(1, 1), text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
1014-
p_overlay->draw_string(font, msgpos + Point2(-1, -1), text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
1015-
p_overlay->draw_string(font, msgpos, text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1, 1, 1, 1));
1020+
draw_tile_coords_over_viewport(p_overlay, edited_layer, tile_set, drawing_rect, drag_start_mouse_pos);
10161021
}
10171022
}
10181023

@@ -3168,6 +3173,7 @@ void TileMapLayerEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control
31683173
Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * edited_layer->get_global_transform_with_canvas();
31693174
Vector2 mpos = edited_layer->get_local_mouse_position();
31703175
Vector2i tile_shape_size = tile_set->get_tile_size();
3176+
bool drawing_rect = false;
31713177

31723178
// Handle the preview of the tiles to be placed.
31733179
if (main_vbox_container->is_visible_in_tree() && has_mouse) { // Only if the tilemap editor is opened and the viewport is hovered.
@@ -3214,6 +3220,8 @@ void TileMapLayerEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control
32143220
preview.insert(Vector2i(x, y));
32153221
}
32163222
}
3223+
3224+
drawing_rect = !preview.is_empty();
32173225
expand_grid = true;
32183226
} else if (tool_buttons_group->get_pressed_button() == bucket_tool_button && drag_type == DRAG_TYPE_NONE) {
32193227
// Preview for a fill.
@@ -3272,6 +3280,8 @@ void TileMapLayerEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control
32723280
}
32733281
}
32743282
}
3283+
3284+
draw_tile_coords_over_viewport(p_overlay, edited_layer, tile_set, drawing_rect, drag_start_mouse_pos);
32753285
}
32763286
}
32773287

editor/plugins/tiles/tile_map_layer_editor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class TileMapLayerSubEditorPlugin : public Object {
6767
virtual void forward_canvas_draw_over_viewport(Control *p_overlay) {}
6868
virtual void tile_set_changed() {}
6969
virtual void edit(ObjectID p_tile_map_layer_id) {}
70+
virtual void draw_tile_coords_over_viewport(Control *p_overlay, const TileMapLayer *p_edited_layer, Ref<TileSet> p_tile_set, bool p_show_rectangle_size, const Vector2i &p_rectangle_origin);
7071
};
7172

7273
class TileMapLayerEditorTilesPlugin : public TileMapLayerSubEditorPlugin {

0 commit comments

Comments
 (0)