Skip to content

Commit 6b5b84c

Browse files
committed
Merge pull request #101737 from btgs-0/add-tile-coordinate-and-rectangle-size-display-to-terrains-editor-101634
Draw tilemap coordinate and rectangle size on the screen when using the TileMapLayer's Terrains plugin
2 parents ef42154 + b954ddc commit 6b5b84c

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
@@ -51,6 +51,23 @@ TileMapLayer *TileMapLayerSubEditorPlugin::_get_edited_layer() const {
5151
return Object::cast_to<TileMapLayer>(ObjectDB::get_instance(edited_tile_map_layer_id));
5252
}
5353

54+
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) {
55+
Point2 msgpos = Point2(20 * EDSCALE, p_overlay->get_size().y - 20 * EDSCALE);
56+
String text = p_tile_set->local_to_map(p_edited_layer->get_local_mouse_position());
57+
58+
if (p_show_rectangle_size) {
59+
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);
60+
text += vformat(" %s (%dx%d)", TTR("Drawing Rect:"), Math::abs(rect_size.x) + 1, Math::abs(rect_size.y) + 1);
61+
}
62+
63+
Ref<Font> font = p_overlay->get_theme_font(SceneStringName(font), SNAME("Label"));
64+
int font_size = p_overlay->get_theme_font_size(SceneStringName(font_size), SNAME("Label"));
65+
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 + Point2(-1, -1), text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8));
68+
p_overlay->draw_string(font, msgpos, text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1, 1, 1, 1));
69+
}
70+
5471
void TileMapLayerEditorTilesPlugin::tile_set_changed() {
5572
_update_fix_selected_and_hovered();
5673
_update_tile_set_sources_list();
@@ -67,7 +84,7 @@ void TileMapLayerEditorTilesPlugin::_on_scattering_spinbox_changed(double p_valu
6784
}
6885

6986
void TileMapLayerEditorTilesPlugin::_update_toolbar() {
70-
// Stop draggig if needed.
87+
// Stop dragging if needed.
7188
_stop_dragging();
7289

7390
// Hide all settings.
@@ -784,7 +801,7 @@ bool TileMapLayerEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEven
784801
}
785802

786803
void TileMapLayerEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_overlay) {
787-
TileMapLayer *edited_layer = _get_edited_layer();
804+
const TileMapLayer *edited_layer = _get_edited_layer();
788805
if (!edited_layer) {
789806
return;
790807
}
@@ -1001,19 +1018,7 @@ void TileMapLayerEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p
10011018
}
10021019
}
10031020

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

@@ -3169,6 +3174,7 @@ void TileMapLayerEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control
31693174
Transform2D xform = CanvasItemEditor::get_singleton()->get_canvas_transform() * edited_layer->get_global_transform_with_canvas();
31703175
Vector2 mpos = edited_layer->get_local_mouse_position();
31713176
Vector2i tile_shape_size = tile_set->get_tile_size();
3177+
bool drawing_rect = false;
31723178

31733179
// Handle the preview of the tiles to be placed.
31743180
if (main_vbox_container->is_visible_in_tree() && has_mouse) { // Only if the tilemap editor is opened and the viewport is hovered.
@@ -3215,6 +3221,8 @@ void TileMapLayerEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control
32153221
preview.insert(Vector2i(x, y));
32163222
}
32173223
}
3224+
3225+
drawing_rect = !preview.is_empty();
32183226
expand_grid = true;
32193227
} else if (tool_buttons_group->get_pressed_button() == bucket_tool_button && drag_type == DRAG_TYPE_NONE) {
32203228
// Preview for a fill.
@@ -3273,6 +3281,8 @@ void TileMapLayerEditorTerrainsPlugin::forward_canvas_draw_over_viewport(Control
32733281
}
32743282
}
32753283
}
3284+
3285+
draw_tile_coords_over_viewport(p_overlay, edited_layer, tile_set, drawing_rect, drag_start_mouse_pos);
32763286
}
32773287
}
32783288

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)