More fixes.

This commit is contained in:
Relintai 2021-12-11 22:40:54 +01:00
parent 63140f46c7
commit b4c9be6299

View File

@ -38,6 +38,9 @@
#include "editor/editor_properties.h" #include "editor/editor_properties.h"
#include "editor/editor_scale.h" #include "editor/editor_scale.h"
#include "core/os/keyboard.h"
#include "core/os/input_event.h"
void RTileDataEditor::_tile_set_changed_plan_update() { void RTileDataEditor::_tile_set_changed_plan_update() {
_tile_set_changed_update_needed = true; _tile_set_changed_update_needed = true;
call_deferred("_tile_set_changed_deferred_update"); call_deferred("_tile_set_changed_deferred_update");
@ -69,16 +72,18 @@ RTileData *RTileDataEditor::_get_tile_data(RTileMapCell p_cell) {
void RTileDataEditor::_bind_methods() { void RTileDataEditor::_bind_methods() {
ClassDB::bind_method(D_METHOD("_tile_set_changed_deferred_update"), &RTileDataEditor::_tile_set_changed_deferred_update); ClassDB::bind_method(D_METHOD("_tile_set_changed_deferred_update"), &RTileDataEditor::_tile_set_changed_deferred_update);
ClassDB::bind_method(D_METHOD("_tile_set_changed_plan_update"), &RTileDataEditor::_tile_set_changed_plan_update);
ADD_SIGNAL(MethodInfo("needs_redraw")); ADD_SIGNAL(MethodInfo("needs_redraw"));
} }
void RTileDataEditor::set_tile_set(Ref<RTileSet> p_tile_set) { void RTileDataEditor::set_tile_set(Ref<RTileSet> p_tile_set) {
if (tile_set.is_valid()) { if (tile_set.is_valid()) {
tile_set->disconnect("changed", callable_mp(this, &RTileDataEditor::_tile_set_changed_plan_update)); tile_set->disconnect("changed", this, "_tile_set_changed_plan_update");
} }
tile_set = p_tile_set; tile_set = p_tile_set;
if (tile_set.is_valid()) { if (tile_set.is_valid()) {
tile_set->connect("changed", callable_mp(this, &RTileDataEditor::_tile_set_changed_plan_update)); tile_set->connect("changed", this, "_tile_set_changed_plan_update");
} }
_tile_set_changed_plan_update(); _tile_set_changed_plan_update();
} }
@ -123,9 +128,9 @@ void RGenericTilePolygonEditor::_base_control_draw() {
real_t grab_threshold = EDITOR_GET("editors/polygon_editor/point_grab_radius"); real_t grab_threshold = EDITOR_GET("editors/polygon_editor/point_grab_radius");
Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color"); Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color");
const Ref<Texture> handle = get_theme_icon(("EditorPathSharpHandle"), ("EditorIcons")); const Ref<Texture> handle = get_icon(("EditorPathSharpHandle"), ("EditorIcons"));
const Ref<Texture> add_handle = get_theme_icon(("EditorHandleAdd"), ("EditorIcons")); const Ref<Texture> add_handle = get_icon(("EditorHandleAdd"), ("EditorIcons"));
const Ref<StyleBox> focus_stylebox = get_theme_stylebox(("Focus"), ("EditorStyles")); const Ref<StyleBox> focus_stylebox = get_stylebox(("Focus"), ("EditorStyles"));
// Draw the focus rectangle. // Draw the focus rectangle.
if (base_control->has_focus()) { if (base_control->has_focus()) {
@ -154,7 +159,7 @@ void RGenericTilePolygonEditor::_base_control_draw() {
for (unsigned int i = 0; i < polygons.size(); i++) { for (unsigned int i = 0; i < polygons.size(); i++) {
const Vector<Vector2> &polygon = polygons[i]; const Vector<Vector2> &polygon = polygons[i];
Color color = polygon_color; Color color = polygon_color;
if (!in_creation_polygon.is_empty()) { if (!in_creation_polygon.empty()) {
color = color.darkened(0.3); color = color.darkened(0.3);
} }
color.a = 0.5; color.a = 0.5;
@ -169,7 +174,7 @@ void RGenericTilePolygonEditor::_base_control_draw() {
} }
// Draw the polygon in creation. // Draw the polygon in creation.
if (!in_creation_polygon.is_empty()) { if (!in_creation_polygon.empty()) {
for (int i = 0; i < in_creation_polygon.size() - 1; i++) { for (int i = 0; i < in_creation_polygon.size() - 1; i++) {
base_control->draw_line(in_creation_polygon[i], in_creation_polygon[i + 1], Color(1.0, 1.0, 1.0)); base_control->draw_line(in_creation_polygon[i], in_creation_polygon[i + 1], Color(1.0, 1.0, 1.0));
} }
@ -182,7 +187,7 @@ void RGenericTilePolygonEditor::_base_control_draw() {
_snap_to_half_pixel(in_creation_point); _snap_to_half_pixel(in_creation_point);
} }
if (drag_type == DRAG_TYPE_CREATE_POINT && !in_creation_polygon.is_empty()) { if (drag_type == DRAG_TYPE_CREATE_POINT && !in_creation_polygon.empty()) {
base_control->draw_line(in_creation_polygon[in_creation_polygon.size() - 1], in_creation_point, Color(1.0, 1.0, 1.0)); base_control->draw_line(in_creation_polygon[in_creation_polygon.size() - 1], in_creation_point, Color(1.0, 1.0, 1.0));
} }
@ -198,7 +203,7 @@ void RGenericTilePolygonEditor::_base_control_draw() {
} }
base_control->draw_set_transform_matrix(Transform2D()); base_control->draw_set_transform_matrix(Transform2D());
if (!in_creation_polygon.is_empty()) { if (!in_creation_polygon.empty()) {
for (int i = 0; i < in_creation_polygon.size(); i++) { for (int i = 0; i < in_creation_polygon.size(); i++) {
base_control->draw_texture(handle, xform.xform(in_creation_polygon[i]) - handle->get_size() / 2); base_control->draw_texture(handle, xform.xform(in_creation_polygon[i]) - handle->get_size() / 2);
} }
@ -214,8 +219,8 @@ void RGenericTilePolygonEditor::_base_control_draw() {
// Draw the text on top of the selected point. // Draw the text on top of the selected point.
if (tinted_polygon_index >= 0) { if (tinted_polygon_index >= 0) {
Ref<Font> font = get_theme_font(("font"), ("Label")); Ref<Font> font = get_font(("font"), ("Label"));
int font_size = get_theme_font_size(("font_size"), ("Label")); int font_size = get_font_size(("font_size"), ("Label"));
String text = multiple_polygon_mode ? vformat("%d:%d", tinted_polygon_index, tinted_point_index) : vformat("%d", tinted_point_index); String text = multiple_polygon_mode ? vformat("%d:%d", tinted_polygon_index, tinted_point_index) : vformat("%d", tinted_point_index);
Size2 text_size = font->get_string_size(text, font_size); Size2 text_size = font->get_string_size(text, font_size);
base_control->draw_string(font, xform.xform(polygons[tinted_polygon_index][tinted_point_index]) - text_size * 0.5, text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5)); base_control->draw_string(font, xform.xform(polygons[tinted_polygon_index][tinted_point_index]) - text_size * 0.5, text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5));
@ -265,7 +270,7 @@ void RGenericTilePolygonEditor::_advanced_menu_item_pressed(int p_item_pressed)
} }
undo_redo->add_undo_method(base_control, "update"); undo_redo->add_undo_method(base_control, "update");
undo_redo->add_undo_method(this, "emit_signal", "polygons_changed"); undo_redo->add_undo_method(this, "emit_signal", "polygons_changed");
undo_redo->commit_action(true); undo_redo->commit_action();
} break; } break;
case CLEAR_TILE: { case CLEAR_TILE: {
undo_redo->create_action(TTR("Clear Polygons")); undo_redo->create_action(TTR("Clear Polygons"));
@ -278,7 +283,7 @@ void RGenericTilePolygonEditor::_advanced_menu_item_pressed(int p_item_pressed)
} }
undo_redo->add_undo_method(base_control, "update"); undo_redo->add_undo_method(base_control, "update");
undo_redo->add_undo_method(this, "emit_signal", "polygons_changed"); undo_redo->add_undo_method(this, "emit_signal", "polygons_changed");
undo_redo->commit_action(true); undo_redo->commit_action();
} break; } break;
case ROTATE_RIGHT: case ROTATE_RIGHT:
case ROTATE_LEFT: case ROTATE_LEFT:
@ -449,15 +454,15 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
Ref<InputEventMouseButton> mb = p_event; Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) { if (mb.is_valid()) {
if (mb->get_button_index() == MouseButton::WHEEL_UP && mb->is_ctrl_pressed()) { if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->get_control()) {
editor_zoom_widget->set_zoom_by_increments(1); editor_zoom_widget->set_zoom_by_increments(1);
_zoom_changed(); _zoom_changed();
accept_event(); accept_event();
} else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && mb->is_ctrl_pressed()) { } else if (mb->get_button_index() == BUTTON_WHEEL_DOWN && mb->get_control()) {
editor_zoom_widget->set_zoom_by_increments(-1); editor_zoom_widget->set_zoom_by_increments(-1);
_zoom_changed(); _zoom_changed();
accept_event(); accept_event();
} else if (mb->get_button_index() == MouseButton::LEFT) { } else if (mb->get_button_index() == BUTTON_LEFT) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
if (tools_button_group->get_pressed_button() != button_create) { if (tools_button_group->get_pressed_button() != button_create) {
in_creation_polygon.clear(); in_creation_polygon.clear();
@ -481,7 +486,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
undo_redo->add_do_method(base_control, "update"); undo_redo->add_do_method(base_control, "update");
undo_redo->add_undo_method(this, "remove_polygon", added); undo_redo->add_undo_method(this, "remove_polygon", added);
undo_redo->add_undo_method(base_control, "update"); undo_redo->add_undo_method(base_control, "update");
undo_redo->commit_action(false); undo_redo->commit_action();
emit_signal(("polygons_changed")); emit_signal(("polygons_changed"));
} else { } else {
// Create a new point. // Create a new point.
@ -516,7 +521,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
_grab_polygon_point(mb->get_position(), xform, closest_polygon, closest_point); _grab_polygon_point(mb->get_position(), xform, closest_polygon, closest_point);
if (closest_polygon >= 0) { if (closest_polygon >= 0) {
PoolVector2Array old_polygon = polygons[closest_polygon]; PoolVector2Array old_polygon = polygons[closest_polygon];
polygons[closest_polygon].remove_at(closest_point); polygons[closest_polygon].remove(closest_point);
undo_redo->create_action(TTR("Edit Polygons")); undo_redo->create_action(TTR("Edit Polygons"));
if (polygons[closest_polygon].size() < 3) { if (polygons[closest_polygon].size() < 3) {
remove_polygon(closest_polygon); remove_polygon(closest_polygon);
@ -528,7 +533,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
} }
undo_redo->add_do_method(base_control, "update"); undo_redo->add_do_method(base_control, "update");
undo_redo->add_undo_method(base_control, "update"); undo_redo->add_undo_method(base_control, "update");
undo_redo->commit_action(false); undo_redo->commit_action();
emit_signal(("polygons_changed")); emit_signal(("polygons_changed"));
} }
} }
@ -539,7 +544,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
undo_redo->add_do_method(base_control, "update"); undo_redo->add_do_method(base_control, "update");
undo_redo->add_undo_method(this, "set_polygon", drag_polygon_index, drag_old_polygon); undo_redo->add_undo_method(this, "set_polygon", drag_polygon_index, drag_old_polygon);
undo_redo->add_undo_method(base_control, "update"); undo_redo->add_undo_method(base_control, "update");
undo_redo->commit_action(false); undo_redo->commit_action();
emit_signal(("polygons_changed")); emit_signal(("polygons_changed"));
} else if (drag_type == DRAG_TYPE_CREATE_POINT) { } else if (drag_type == DRAG_TYPE_CREATE_POINT) {
Point2 point = xform.affine_inverse().xform(mb->get_position()); Point2 point = xform.affine_inverse().xform(mb->get_position());
@ -554,7 +559,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
drag_point_index = -1; drag_point_index = -1;
} }
} else if (mb->get_button_index() == MouseButton::RIGHT) { } else if (mb->get_button_index() == BUTTON_RIGHT) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
if (tools_button_group->get_pressed_button() == button_edit) { if (tools_button_group->get_pressed_button() == button_edit) {
// Remove point or pan. // Remove point or pan.
@ -563,7 +568,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
_grab_polygon_point(mb->get_position(), xform, closest_polygon, closest_point); _grab_polygon_point(mb->get_position(), xform, closest_polygon, closest_point);
if (closest_polygon >= 0) { if (closest_polygon >= 0) {
PoolVector2Array old_polygon = polygons[closest_polygon]; PoolVector2Array old_polygon = polygons[closest_polygon];
polygons[closest_polygon].remove_at(closest_point); polygons[closest_polygon].remove(closest_point);
undo_redo->create_action(TTR("Edit Polygons")); undo_redo->create_action(TTR("Edit Polygons"));
if (polygons[closest_polygon].size() < 3) { if (polygons[closest_polygon].size() < 3) {
remove_polygon(closest_polygon); remove_polygon(closest_polygon);
@ -575,7 +580,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
} }
undo_redo->add_do_method(base_control, "update"); undo_redo->add_do_method(base_control, "update");
undo_redo->add_undo_method(base_control, "update"); undo_redo->add_undo_method(base_control, "update");
undo_redo->commit_action(false); undo_redo->commit_action();
emit_signal(("polygons_changed")); emit_signal(("polygons_changed"));
} else { } else {
drag_type = DRAG_TYPE_PAN; drag_type = DRAG_TYPE_PAN;
@ -588,7 +593,7 @@ void RGenericTilePolygonEditor::_base_control_gui_input(Ref<InputEvent> p_event)
} else { } else {
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} }
} else if (mb->get_button_index() == MouseButton::MIDDLE) { } else if (mb->get_button_index() == BUTTON_MIDDLE) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
drag_type = DRAG_TYPE_PAN; drag_type = DRAG_TYPE_PAN;
drag_last_pos = mb->get_position(); drag_last_pos = mb->get_position();
@ -676,7 +681,7 @@ int RGenericTilePolygonEditor::add_polygon(Vector<Point2> p_polygon, int p_index
void RGenericTilePolygonEditor::remove_polygon(int p_index) { void RGenericTilePolygonEditor::remove_polygon(int p_index) {
ERR_FAIL_INDEX(p_index, (int)polygons.size()); ERR_FAIL_INDEX(p_index, (int)polygons.size());
polygons.remove_at(p_index); polygons.remove(p_index);
if (polygons.size() == 0) { if (polygons.size() == 0) {
button_create->set_pressed(true); button_create->set_pressed(true);
@ -714,18 +719,18 @@ void RGenericTilePolygonEditor::set_multiple_polygon_mode(bool p_multiple_polygo
void RGenericTilePolygonEditor::_notification(int p_what) { void RGenericTilePolygonEditor::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_READY: case NOTIFICATION_READY:
button_create->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("CurveCreate"), ("EditorIcons"))); button_create->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("CurveCreate"), ("EditorIcons")));
button_edit->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("CurveEdit"), ("EditorIcons"))); button_edit->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("CurveEdit"), ("EditorIcons")));
button_delete->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("CurveDelete"), ("EditorIcons"))); button_delete->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("CurveDelete"), ("EditorIcons")));
button_center_view->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("CenterView"), ("EditorIcons"))); button_center_view->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("CenterView"), ("EditorIcons")));
button_pixel_snap->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("Snap"), ("EditorIcons"))); button_pixel_snap->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("Snap"), ("EditorIcons")));
button_advanced_menu->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("GuiTabMenuHl"), ("EditorIcons"))); button_advanced_menu->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("GuiTabMenuHl"), ("EditorIcons")));
PopupMenu *p = button_advanced_menu->get_popup(); PopupMenu *p = button_advanced_menu->get_popup();
p->set_item_icon(p->get_item_index(ROTATE_RIGHT), get_theme_icon(("RotateRight"), ("EditorIcons"))); p->set_item_icon(p->get_item_index(ROTATE_RIGHT), get_icon(("RotateRight"), ("EditorIcons")));
p->set_item_icon(p->get_item_index(ROTATE_LEFT), get_theme_icon(("RotateLeft"), ("EditorIcons"))); p->set_item_icon(p->get_item_index(ROTATE_LEFT), get_icon(("RotateLeft"), ("EditorIcons")));
p->set_item_icon(p->get_item_index(FLIP_HORIZONTALLY), get_theme_icon(("MirrorX"), ("EditorIcons"))); p->set_item_icon(p->get_item_index(FLIP_HORIZONTALLY), get_icon(("MirrorX"), ("EditorIcons")));
p->set_item_icon(p->get_item_index(FLIP_VERTICALLY), get_theme_icon(("MirrorY"), ("EditorIcons"))); p->set_item_icon(p->get_item_index(FLIP_VERTICALLY), get_icon(("MirrorY"), ("EditorIcons")));
break; break;
} }
} }
@ -739,6 +744,12 @@ void RGenericTilePolygonEditor::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_polygon", "index"), &RGenericTilePolygonEditor::set_polygon); ClassDB::bind_method(D_METHOD("get_polygon", "index"), &RGenericTilePolygonEditor::set_polygon);
ADD_SIGNAL(MethodInfo("polygons_changed")); ADD_SIGNAL(MethodInfo("polygons_changed"));
ClassDB::bind_method(D_METHOD("_advanced_menu_item_pressed", "pressed"), &RGenericTilePolygonEditor::_advanced_menu_item_pressed);
ClassDB::bind_method(D_METHOD("_base_control_draw"), &RGenericTilePolygonEditor::_base_control_draw);
ClassDB::bind_method(D_METHOD("_base_control_gui_input", "event"), &RGenericTilePolygonEditor::_base_control_gui_input);
ClassDB::bind_method(D_METHOD("_zoom_changed"), &RGenericTilePolygonEditor::_zoom_changed);
ClassDB::bind_method(D_METHOD("_center_view"), &RGenericTilePolygonEditor::_center_view);
} }
RGenericTilePolygonEditor::RGenericTilePolygonEditor() { RGenericTilePolygonEditor::RGenericTilePolygonEditor() {
@ -775,11 +786,11 @@ RGenericTilePolygonEditor::RGenericTilePolygonEditor() {
button_advanced_menu->get_popup()->add_item(TTR("Reset to default tile shape"), RESET_TO_DEFAULT_TILE); button_advanced_menu->get_popup()->add_item(TTR("Reset to default tile shape"), RESET_TO_DEFAULT_TILE);
button_advanced_menu->get_popup()->add_item(TTR("Clear"), CLEAR_TILE); button_advanced_menu->get_popup()->add_item(TTR("Clear"), CLEAR_TILE);
button_advanced_menu->get_popup()->add_separator(); button_advanced_menu->get_popup()->add_separator();
button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(("RotateRight"), ("EditorIcons")), TTR("Rotate Right"), ROTATE_RIGHT); button_advanced_menu->get_popup()->add_icon_item(get_icon(("RotateRight"), ("EditorIcons")), TTR("Rotate Right"), ROTATE_RIGHT);
button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(("RotateLeft"), ("EditorIcons")), TTR("Rotate Left"), ROTATE_LEFT); button_advanced_menu->get_popup()->add_icon_item(get_icon(("RotateLeft"), ("EditorIcons")), TTR("Rotate Left"), ROTATE_LEFT);
button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(("MirrorX"), ("EditorIcons")), TTR("Flip Horizontally"), FLIP_HORIZONTALLY); button_advanced_menu->get_popup()->add_icon_item(get_icon(("MirrorX"), ("EditorIcons")), TTR("Flip Horizontally"), FLIP_HORIZONTALLY);
button_advanced_menu->get_popup()->add_icon_item(get_theme_icon(("MirrorY"), ("EditorIcons")), TTR("Flip Vertically"), FLIP_VERTICALLY); button_advanced_menu->get_popup()->add_icon_item(get_icon(("MirrorY"), ("EditorIcons")), TTR("Flip Vertically"), FLIP_VERTICALLY);
button_advanced_menu->get_popup()->connect("id_pressed", callable_mp(this, &RGenericTilePolygonEditor::_advanced_menu_item_pressed)); button_advanced_menu->get_popup()->connect("id_pressed", this, "_advanced_menu_item_pressed");
button_advanced_menu->set_focus_mode(FOCUS_ALL); button_advanced_menu->set_focus_mode(FOCUS_ALL);
toolbar->add_child(button_advanced_menu); toolbar->add_child(button_advanced_menu);
@ -799,28 +810,28 @@ RGenericTilePolygonEditor::RGenericTilePolygonEditor() {
add_child(root); add_child(root);
panel = memnew(Panel); panel = memnew(Panel);
panel->set_anchors_and_offsets_preset(Control::PRESET_WIDE); panel->set_anchors_and_margins_preset(Control::PRESET_WIDE);
panel->set_mouse_filter(Control::MOUSE_FILTER_IGNORE); panel->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
root->add_child(panel); root->add_child(panel);
base_control = memnew(Control); base_control = memnew(Control);
//base_control->set_texture_filter(CanvasItem::TEXTURE_FILTER_NEAREST); //base_control->set_texture_filter(CanvasItem::TEXTURE_FILTER_NEAREST);
base_control->set_anchors_and_offsets_preset(Control::PRESET_WIDE); base_control->set_anchors_and_margins_preset(Control::PRESET_WIDE);
base_control->connect("draw", callable_mp(this, &RGenericTilePolygonEditor::_base_control_draw)); base_control->connect("draw", this, "_base_control_draw");
base_control->connect("gui_input", callable_mp(this, &RGenericTilePolygonEditor::_base_control_gui_input)); base_control->connect("gui_input", this, "_base_control_gui_input");
base_control->set_clip_contents(true); base_control->set_clip_contents(true);
base_control->set_focus_mode(Control::FOCUS_CLICK); base_control->set_focus_mode(Control::FOCUS_CLICK);
root->add_child(base_control); root->add_child(base_control);
editor_zoom_widget = memnew(EditorZoomWidget); editor_zoom_widget = memnew(EditorZoomWidget);
editor_zoom_widget->set_position(Vector2(5, 5)); editor_zoom_widget->set_position(Vector2(5, 5));
editor_zoom_widget->connect("zoom_changed", callable_mp(this, &RGenericTilePolygonEditor::_zoom_changed).unbind(1)); editor_zoom_widget->connect("zoom_changed", this, "_zoom_changed");
root->add_child(editor_zoom_widget); root->add_child(editor_zoom_widget);
button_center_view = memnew(Button); button_center_view = memnew(Button);
button_center_view->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(("CenterView"), ("EditorIcons"))); button_center_view->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon(("CenterView"), ("EditorIcons")));
button_center_view->set_anchors_and_offsets_preset(Control::PRESET_TOP_RIGHT, Control::PRESET_MODE_MINSIZE, 5); button_center_view->set_anchors_and_margins_preset(Control::PRESET_TOP_RIGHT, Control::PRESET_MODE_MINSIZE, 5);
button_center_view->connect("pressed", callable_mp(this, &RGenericTilePolygonEditor::_center_view)); button_center_view->connect("pressed", this, "_center_view");
button_center_view->set_flat(true); button_center_view->set_flat(true);
button_center_view->set_disabled(true); button_center_view->set_disabled(true);
root->add_child(button_center_view); root->add_child(button_center_view);
@ -929,7 +940,7 @@ void RTileDataDefaultEditor::forward_painting_atlas_gui_input(RTileAtlasView *p_
Ref<InputEventMouseButton> mb = p_event; Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) { if (mb.is_valid()) {
if (mb->get_button_index() == MouseButton::LEFT) { if (mb->get_button_index() == BUTTON_LEFT) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
if (picker_button->is_pressed()) { if (picker_button->is_pressed()) {
Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position()); Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position());
@ -938,7 +949,7 @@ void RTileDataDefaultEditor::forward_painting_atlas_gui_input(RTileAtlasView *p_
_set_painted_value(p_tile_set_atlas_source, coords, 0); _set_painted_value(p_tile_set_atlas_source, coords, 0);
picker_button->set_pressed(false); picker_button->set_pressed(false);
} }
} else if (mb->is_ctrl_pressed()) { } else if (mb->get_control()) {
drag_type = DRAG_TYPE_PAINT_RECT; drag_type = DRAG_TYPE_PAINT_RECT;
drag_modified.clear(); drag_modified.clear();
drag_painted_value = _get_painted_value(); drag_painted_value = _get_painted_value();
@ -982,12 +993,12 @@ void RTileDataDefaultEditor::forward_painting_atlas_gui_input(RTileAtlasView *p_
} }
undo_redo->create_action(TTR("Painting Tiles Property")); undo_redo->create_action(TTR("Painting Tiles Property"));
_setup_undo_redo_action(p_tile_set_atlas_source, drag_modified, drag_painted_value); _setup_undo_redo_action(p_tile_set_atlas_source, drag_modified, drag_painted_value);
undo_redo->commit_action(true); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} else if (drag_type == DRAG_TYPE_PAINT) { } else if (drag_type == DRAG_TYPE_PAINT) {
undo_redo->create_action(TTR("Painting Tiles Property")); undo_redo->create_action(TTR("Painting Tiles Property"));
_setup_undo_redo_action(p_tile_set_atlas_source, drag_modified, drag_painted_value); _setup_undo_redo_action(p_tile_set_atlas_source, drag_modified, drag_painted_value);
undo_redo->commit_action(false); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} }
} }
@ -1020,13 +1031,13 @@ void RTileDataDefaultEditor::forward_painting_alternatives_gui_input(RTileAtlasV
Ref<InputEventMouseButton> mb = p_event; Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) { if (mb.is_valid()) {
if (mb->get_button_index() == MouseButton::LEFT) { if (mb->get_button_index() == BUTTON_LEFT) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
if (picker_button->is_pressed()) { if (picker_button->is_pressed()) {
Vector3i tile = p_tile_atlas_view->get_alternative_tile_at_pos(mb->get_position()); Vector3i tile = p_tile_atlas_view->get_alternative_tile_at_pos(mb->get_position());
Vector2i coords = Vector2i(tile.x, tile.y); Vector2i coords = Vector2i(tile.x, tile.y);
int alternative_tile = tile.z; int alternative_tile = tile.z;
if (coords != TileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
_set_painted_value(p_tile_set_atlas_source, coords, alternative_tile); _set_painted_value(p_tile_set_atlas_source, coords, alternative_tile);
picker_button->set_pressed(false); picker_button->set_pressed(false);
} }
@ -1052,7 +1063,7 @@ void RTileDataDefaultEditor::forward_painting_alternatives_gui_input(RTileAtlasV
} else { } else {
undo_redo->create_action(TTR("Painting Tiles Property")); undo_redo->create_action(TTR("Painting Tiles Property"));
_setup_undo_redo_action(p_tile_set_atlas_source, drag_modified, drag_painted_value); _setup_undo_redo_action(p_tile_set_atlas_source, drag_modified, drag_painted_value);
undo_redo->commit_action(false); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} }
} }
@ -1079,7 +1090,7 @@ void RTileDataDefaultEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform
Rect2 rect = p_transform.xform(Rect2(Vector2(-size / 2, -size / 2), Vector2(size, size))); Rect2 rect = p_transform.xform(Rect2(Vector2(-size / 2, -size / 2), Vector2(size, size)));
p_canvas_item->draw_rect(rect, value); p_canvas_item->draw_rect(rect, value);
} else { } else {
Ref<Font> font = RTileSetEditor::get_singleton()->get_theme_font(("bold"), ("EditorFonts")); Ref<Font> font = RTileSetEditor::get_singleton()->get_font(("bold"), ("EditorFonts"));
int font_size = RTileSetEditor::get_singleton()->get_theme_font_size(("bold_size"), ("EditorFonts")); int font_size = RTileSetEditor::get_singleton()->get_theme_font_size(("bold_size"), ("EditorFonts"));
String text; String text;
switch (value.get_type()) { switch (value.get_type()) {
@ -1142,7 +1153,7 @@ void RTileDataDefaultEditor::setup_property_editor(Variant::Type p_type, String
// Create and setup the property editor. // Create and setup the property editor.
property_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, p_type, p_property, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT); property_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, p_type, p_property, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT);
property_editor->set_object_and_property(dummy_object, p_property); property_editor->set_object_and_property(dummy_object, p_property);
if (p_label.is_empty()) { if (p_label.empty()) {
property_editor->set_label(p_property); property_editor->set_label(p_property);
} else { } else {
property_editor->set_label(p_label); property_editor->set_label(p_label);
@ -1156,9 +1167,9 @@ void RTileDataDefaultEditor::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_TREE: case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: case NOTIFICATION_THEME_CHANGED:
picker_button->set_icon(get_theme_icon(("ColorPick"), ("EditorIcons"))); picker_button->set_icon(get_icon(("ColorPick"), ("EditorIcons")));
tile_bool_checked = get_theme_icon(("TileChecked"), ("EditorIcons")); tile_bool_checked = get_icon(("TileChecked"), ("EditorIcons"));
tile_bool_unchecked = get_theme_icon(("TileUnchecked"), ("EditorIcons")); tile_bool_unchecked = get_icon(("TileUnchecked"), ("EditorIcons"));
break; break;
default: default:
break; break;
@ -1175,7 +1186,7 @@ RTileDataDefaultEditor::RTileDataDefaultEditor() {
picker_button = memnew(Button); picker_button = memnew(Button);
picker_button->set_flat(true); picker_button->set_flat(true);
picker_button->set_toggle_mode(true); picker_button->set_toggle_mode(true);
picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P)); picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", KEY_P));
toolbar->add_child(picker_button); toolbar->add_child(picker_button);
} }
@ -1200,8 +1211,8 @@ void RTileDataTextureOffsetEditor::draw_over_tile(CanvasItem *p_canvas_item, Tra
tile_set->draw_tile_shape(p_canvas_item, p_transform * tile_xform, color); tile_set->draw_tile_shape(p_canvas_item, p_transform * tile_xform, color);
} }
void RRTileDataPositionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, TileMapCell p_cell, bool p_selected) { void RTileDataPositionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) {
TileData *tile_data = _get_tile_data(p_cell); RTileData *tile_data = _get_tile_data(p_cell);
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
bool valid; bool valid;
@ -1209,7 +1220,7 @@ void RRTileDataPositionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transfo
if (!valid) { if (!valid) {
return; return;
} }
ERR_FAIL_COND(value.get_type() != Variant::VECTOR2I && value.get_type() != Variant::VECTOR2); ERR_FAIL_COND(value.get_type() != Variant::VECTOR2 && value.get_type() != Variant::VECTOR2);
Color color = Color(1.0, 1.0, 1.0); Color color = Color(1.0, 1.0, 1.0);
if (p_selected) { if (p_selected) {
@ -1217,12 +1228,12 @@ void RRTileDataPositionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transfo
Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0); Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0);
color = selection_color; color = selection_color;
} }
Ref<Texture> position_icon = RTileSetEditor::get_singleton()->get_theme_icon(("EditorPosition"), ("EditorIcons")); Ref<Texture> position_icon = RTileSetEditor::get_singleton()->get_icon(("EditorPosition"), ("EditorIcons"));
p_canvas_item->draw_texture(position_icon, p_transform.xform(Vector2(value)) - position_icon->get_size() / 2, color); p_canvas_item->draw_texture(position_icon, p_transform.xform(Vector2(value)) - position_icon->get_size() / 2, color);
} }
void RTileDataYSortEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, TileMapCell p_cell, bool p_selected) { void RTileDataYSortEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) {
TileData *tile_data = _get_tile_data(p_cell); RTileData *tile_data = _get_tile_data(p_cell);
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
Color color = Color(1.0, 1.0, 1.0); Color color = Color(1.0, 1.0, 1.0);
@ -1231,12 +1242,12 @@ void RTileDataYSortEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D
Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0); Color selection_color = Color().from_hsv(Math::fposmod(grid_color.get_h() + 0.5, 1.0), grid_color.get_s(), grid_color.get_v(), 1.0);
color = selection_color; color = selection_color;
} }
Ref<Texture> position_icon = RTileSetEditor::get_singleton()->get_theme_icon(("EditorPosition"), ("EditorIcons")); Ref<Texture> position_icon = RTileSetEditor::get_singleton()->get_icon(("EditorPosition"), ("EditorIcons"));
p_canvas_item->draw_texture(position_icon, p_transform.xform(Vector2(0, tile_data->get_y_sort_origin())) - position_icon->get_size() / 2, color); p_canvas_item->draw_texture(position_icon, p_transform.xform(Vector2(0, tile_data->get_y_sort_origin())) - position_icon->get_size() / 2, color);
} }
void RTileDataOcclusionShapeEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, TileMapCell p_cell, bool p_selected) { void RTileDataOcclusionShapeEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) {
TileData *tile_data = _get_tile_data(p_cell); RTileData *tile_data = _get_tile_data(p_cell);
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color"); Color grid_color = EditorSettings::get_singleton()->get("editors/tiles_editor/grid_color");
@ -1250,12 +1261,12 @@ void RTileDataOcclusionShapeEditor::draw_over_tile(CanvasItem *p_canvas_item, Tr
Vector<Color> debug_occlusion_color; Vector<Color> debug_occlusion_color;
debug_occlusion_color.push_back(color); debug_occlusion_color.push_back(color);
RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform); VisualServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform);
Ref<OccluderPolygon2D> occluder = tile_data->get_occluder(occlusion_layer); Ref<OccluderPolygon2D> occluder = tile_data->get_occluder(occlusion_layer);
if (occluder.is_valid() && occluder->get_polygon().size() >= 3) { if (occluder.is_valid() && occluder->get_polygon().size() >= 3) {
p_canvas_item->draw_polygon(Variant(occluder->get_polygon()), debug_occlusion_color); p_canvas_item->draw_polygon(Variant(occluder->get_polygon()), debug_occlusion_color);
} }
RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D()); VisualServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D());
} }
Variant RTileDataOcclusionShapeEditor::_get_painted_value() { Variant RTileDataOcclusionShapeEditor::_get_painted_value() {
@ -1352,7 +1363,7 @@ void RTileDataCollisionEditor::_polygons_changed() {
} }
if (!property_editors.has(one_way_margin_property)) { if (!property_editors.has(one_way_margin_property)) {
EditorProperty *one_way_margin_property_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, Variant::FLOAT, one_way_margin_property, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT); EditorProperty *one_way_margin_property_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, Variant::REAL, one_way_margin_property, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT);
one_way_margin_property_editor->set_object_and_property(dummy_object, one_way_margin_property); one_way_margin_property_editor->set_object_and_property(dummy_object, one_way_margin_property);
one_way_margin_property_editor->set_label(one_way_margin_property); one_way_margin_property_editor->set_label(one_way_margin_property);
one_way_margin_property_editor->connect("property_changed", callable_mp(this, &RTileDataCollisionEditor::_property_value_changed).unbind(1)); one_way_margin_property_editor->connect("property_changed", callable_mp(this, &RTileDataCollisionEditor::_property_value_changed).unbind(1));
@ -1397,8 +1408,8 @@ Variant RTileDataCollisionEditor::_get_painted_value() {
return dict; return dict;
} }
void RTileDataCollisionEditor::_set_painted_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { void RTileDataCollisionEditor::_set_painted_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile));
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
polygon_editor->clear_polygons(); polygon_editor->clear_polygons();
@ -1423,8 +1434,8 @@ void RTileDataCollisionEditor::_set_painted_value(TileSetAtlasSource *p_tile_set
polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), p_tile_set_atlas_source->get_tile_effective_texture_offset(p_coords, p_alternative_tile), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), p_tile_set_atlas_source->get_tile_effective_texture_offset(p_coords, p_alternative_tile), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate());
} }
void RTileDataCollisionEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, Variant p_value) { void RTileDataCollisionEditor::_set_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, Variant p_value) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile));
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
Dictionary dict = p_value; Dictionary dict = p_value;
@ -1442,8 +1453,8 @@ void RTileDataCollisionEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_s
polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), p_tile_set_atlas_source->get_tile_effective_texture_offset(p_coords, p_alternative_tile), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), p_tile_set_atlas_source->get_tile_effective_texture_offset(p_coords, p_alternative_tile), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate());
} }
Variant RTileDataCollisionEditor::_get_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { Variant RTileDataCollisionEditor::_get_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile));
ERR_FAIL_COND_V(!tile_data, Variant()); ERR_FAIL_COND_V(!tile_data, Variant());
Dictionary dict; Dictionary dict;
@ -1461,7 +1472,7 @@ Variant RTileDataCollisionEditor::_get_value(TileSetAtlasSource *p_tile_set_atla
return dict; return dict;
} }
void RTileDataCollisionEditor::_setup_undo_redo_action(TileSetAtlasSource *p_tile_set_atlas_source, Map<TileMapCell, Variant> p_previous_values, Variant p_new_value) { void RTileDataCollisionEditor::_setup_undo_redo_action(RTileSetAtlasSource *p_tile_set_atlas_source, Map<RTileMapCell, Variant> p_previous_values, Variant p_new_value) {
Array new_array = p_new_value; Array new_array = p_new_value;
for (KeyValue<TileMapCell, Variant> &E : p_previous_values) { for (KeyValue<TileMapCell, Variant> &E : p_previous_values) {
Array old_array = E.value; Array old_array = E.value;
@ -1519,7 +1530,7 @@ RTileDataCollisionEditor::RTileDataCollisionEditor() {
add_child(linear_velocity_editor); add_child(linear_velocity_editor);
property_editors["linear_velocity"] = linear_velocity_editor; property_editors["linear_velocity"] = linear_velocity_editor;
EditorProperty *angular_velocity_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, Variant::FLOAT, "angular_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT); EditorProperty *angular_velocity_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, Variant::REAL, "angular_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT);
angular_velocity_editor->set_object_and_property(dummy_object, "angular_velocity"); angular_velocity_editor->set_object_and_property(dummy_object, "angular_velocity");
angular_velocity_editor->set_label("angular_velocity"); angular_velocity_editor->set_label("angular_velocity");
angular_velocity_editor->connect("property_changed", callable_mp(this, &RTileDataCollisionEditor::_property_value_changed).unbind(1)); angular_velocity_editor->connect("property_changed", callable_mp(this, &RTileDataCollisionEditor::_property_value_changed).unbind(1));
@ -1534,8 +1545,8 @@ RTileDataCollisionEditor::~RTileDataCollisionEditor() {
memdelete(dummy_object); memdelete(dummy_object);
} }
void RTileDataCollisionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, TileMapCell p_cell, bool p_selected) { void RTileDataCollisionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) {
TileData *tile_data = _get_tile_data(p_cell); RTileData *tile_data = _get_tile_data(p_cell);
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
// Draw all shapes. // Draw all shapes.
@ -1550,14 +1561,14 @@ void RTileDataCollisionEditor::draw_over_tile(CanvasItem *p_canvas_item, Transfo
color.push_back(debug_collision_color); color.push_back(debug_collision_color);
} }
RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform); VisualServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform);
for (int i = 0; i < tile_data->get_collision_polygons_count(physics_layer); i++) { for (int i = 0; i < tile_data->get_collision_polygons_count(physics_layer); i++) {
Vector<Vector2> polygon = tile_data->get_collision_polygon_points(physics_layer, i); Vector<Vector2> polygon = tile_data->get_collision_polygon_points(physics_layer, i);
if (polygon.size() >= 3) { if (polygon.size() >= 3) {
p_canvas_item->draw_polygon(polygon, color); p_canvas_item->draw_polygon(polygon, color);
} }
} }
RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D()); VisualServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D());
} }
void RTileDataTerrainsEditor::_update_terrain_selector() { void RTileDataTerrainsEditor::_update_terrain_selector() {
@ -1582,7 +1593,7 @@ void RTileDataTerrainsEditor::_update_terrain_selector() {
options.push_back(String(TTR("No terrain")) + String(":-1")); options.push_back(String(TTR("No terrain")) + String(":-1"));
for (int i = 0; i < tile_set->get_terrains_count(terrain_set); i++) { for (int i = 0; i < tile_set->get_terrains_count(terrain_set); i++) {
String name = tile_set->get_terrain_name(terrain_set, i); String name = tile_set->get_terrain_name(terrain_set, i);
if (name.is_empty()) { if (name.empty()) {
options.push_back(vformat("Terrain %d", i)); options.push_back(vformat("Terrain %d", i));
} else { } else {
options.push_back(name); options.push_back(name);
@ -1631,17 +1642,17 @@ void RTileDataTerrainsEditor::_tile_set_changed() {
_update_terrain_selector(); _update_terrain_selector();
} }
void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_set_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) { void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atlas_view, RTileSetAtlasSource *p_tile_set_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) {
ERR_FAIL_COND(!tile_set.is_valid()); ERR_FAIL_COND(!tile_set.is_valid());
// Draw the hovered terrain bit, or the whole tile if it has the wrong terrain set. // Draw the hovered terrain bit, or the whole tile if it has the wrong terrain set.
Vector2i hovered_coords = TileSetSource::INVALID_ATLAS_COORDS; Vector2i hovered_coords = RTileSetSource::INVALID_ATLAS_COORDS;
if (drag_type == DRAG_TYPE_NONE) { if (drag_type == DRAG_TYPE_NONE) {
Vector2i mouse_pos = p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position()); Vector2i mouse_pos = p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position());
hovered_coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mouse_pos); hovered_coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mouse_pos);
hovered_coords = p_tile_set_atlas_source->get_tile_at_coords(hovered_coords); hovered_coords = p_tile_set_atlas_source->get_tile_at_coords(hovered_coords);
if (hovered_coords != TileSetSource::INVALID_ATLAS_COORDS) { if (hovered_coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(hovered_coords, 0)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(hovered_coords, 0));
int terrain_set = tile_data->get_terrain_set(); int terrain_set = tile_data->get_terrain_set();
Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(hovered_coords); Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(hovered_coords);
Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(hovered_coords, 0); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(hovered_coords, 0);
@ -1654,7 +1665,7 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
Vector<Color> color; Vector<Color> color;
color.push_back(Color(1.0, 1.0, 1.0, 0.5)); color.push_back(Color(1.0, 1.0, 1.0, 0.5));
for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { for (int i = 0; i < RTileSet::CELL_NEIGHBOR_MAX; i++) {
RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(i); RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(i);
if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) {
Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit);
@ -1675,12 +1686,12 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
} }
// Dim terrains with wrong terrain set. // Dim terrains with wrong terrain set.
Ref<Font> font = RTileSetEditor::get_singleton()->get_theme_font(("bold"), ("EditorFonts")); Ref<Font> font = RTileSetEditor::get_singleton()->get_font(("bold"), ("EditorFonts"));
int font_size = RTileSetEditor::get_singleton()->get_theme_font_size(("bold_size"), ("EditorFonts")); int font_size = RTileSetEditor::get_singleton()->get_theme_font_size(("bold_size"), ("EditorFonts"));
for (int i = 0; i < p_tile_set_atlas_source->get_tiles_count(); i++) { for (int i = 0; i < p_tile_set_atlas_source->get_tiles_count(); i++) {
Vector2i coords = p_tile_set_atlas_source->get_tile_id(i); Vector2i coords = p_tile_set_atlas_source->get_tile_id(i);
if (coords != hovered_coords) { if (coords != hovered_coords) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(coords, 0)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0));
if (tile_data->get_terrain_set() != int(dummy_object->get("terrain_set"))) { if (tile_data->get_terrain_set() != int(dummy_object->get("terrain_set"))) {
// Dimming // Dimming
p_canvas_item->draw_set_transform_matrix(p_transform); p_canvas_item->draw_set_transform_matrix(p_transform);
@ -1718,13 +1729,13 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position()))); rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position())));
rect = rect.abs(); rect = rect.abs();
Set<TileMapCell> edited; Set<RTileMapCell> edited;
for (int x = rect.get_position().x; x <= rect.get_end().x; x++) { for (int x = rect.get_position().x; x <= rect.get_end().x; x++) {
for (int y = rect.get_position().y; y <= rect.get_end().y; y++) { for (int y = rect.get_position().y; y <= rect.get_end().y; y++) {
Vector2i coords = Vector2i(x, y); Vector2i coords = Vector2i(x, y);
coords = p_tile_set_atlas_source->get_tile_at_coords(coords); coords = p_tile_set_atlas_source->get_tile_at_coords(coords);
if (coords != TileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -1733,7 +1744,7 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
} }
} }
for (Set<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { for (Set<RTileMapCell>::Element *E = edited.front(); E; E = E->next()) {
Vector2i coords = E->get().get_atlas_coords(); Vector2i coords = E->get().get_atlas_coords();
p_canvas_item->draw_rect(p_tile_set_atlas_source->get_tile_texture_region(coords), selection_color, false); p_canvas_item->draw_rect(p_tile_set_atlas_source->get_tile_texture_region(coords), selection_color, false);
} }
@ -1748,15 +1759,15 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position()))); rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position())));
rect = rect.abs(); rect = rect.abs();
Set<TileMapCell> edited; Set<RTileMapCell> edited;
for (int x = rect.get_position().x; x <= rect.get_end().x; x++) { for (int x = rect.get_position().x; x <= rect.get_end().x; x++) {
for (int y = rect.get_position().y; y <= rect.get_end().y; y++) { for (int y = rect.get_position().y; y <= rect.get_end().y; y++) {
Vector2i coords = Vector2i(x, y); Vector2i coords = Vector2i(x, y);
coords = p_tile_set_atlas_source->get_tile_at_coords(coords); coords = p_tile_set_atlas_source->get_tile_at_coords(coords);
if (coords != TileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(coords, 0)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0));
if (tile_data->get_terrain_set() == terrain_set) { if (tile_data->get_terrain_set() == terrain_set) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -1778,20 +1789,20 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
p_canvas_item->draw_set_transform_matrix(p_transform); p_canvas_item->draw_set_transform_matrix(p_transform);
for (Set<TileMapCell>::Element *E = edited.front(); E; E = E->next()) { for (Set<RTileMapCell>::Element *E = edited.front(); E; E = E->next()) {
Vector2i coords = E->get().get_atlas_coords(); Vector2i coords = E->get().get_atlas_coords();
Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords);
Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0);
for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { for (int i = 0; i < RTileSet::CELL_NEIGHBOR_MAX; i++) {
TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(i);
if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) {
Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit);
for (int j = 0; j < polygon.size(); j++) { for (int j = 0; j < polygon.size(); j++) {
polygon.write[j] += position; polygon.write[j] += position;
} }
if (!Geometry2D::intersect_polygons(polygon, mouse_pos_rect_polygon).is_empty()) { if (!Geometry2D::intersect_polygons(polygon, mouse_pos_rect_polygon).empty()) {
// Draw bit. // Draw bit.
p_canvas_item->draw_polygon(polygon, color); p_canvas_item->draw_polygon(polygon, color);
} }
@ -1803,19 +1814,19 @@ void RTileDataTerrainsEditor::forward_draw_over_atlas(RTileAtlasView *p_tile_atl
} }
} }
void RTileDataTerrainsEditor::forward_draw_over_alternatives(RTileAtlasView *p_tile_atlas_view, TileSetAtlasSource *p_tile_set_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) { void RTileDataTerrainsEditor::forward_draw_over_alternatives(RTileAtlasView *p_tile_atlas_view, RTileSetAtlasSource *p_tile_set_atlas_source, CanvasItem *p_canvas_item, Transform2D p_transform) {
ERR_FAIL_COND(!tile_set.is_valid()); ERR_FAIL_COND(!tile_set.is_valid());
// Draw the hovered terrain bit, or the whole tile if it has the wrong terrain set. // Draw the hovered terrain bit, or the whole tile if it has the wrong terrain set.
Vector2i hovered_coords = TileSetSource::INVALID_ATLAS_COORDS; Vector2i hovered_coords = RTileSetSource::INVALID_ATLAS_COORDS;
int hovered_alternative = TileSetSource::INVALID_TILE_ALTERNATIVE; int hovered_alternative = RTileSetSource::INVALID_TILE_ALTERNATIVE;
if (drag_type == DRAG_TYPE_NONE) { if (drag_type == DRAG_TYPE_NONE) {
Vector2i mouse_pos = p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position()); Vector2i mouse_pos = p_transform.affine_inverse().xform(p_canvas_item->get_local_mouse_position());
Vector3i hovered = p_tile_atlas_view->get_alternative_tile_at_pos(mouse_pos); Vector3i hovered = p_tile_atlas_view->get_alternative_tile_at_pos(mouse_pos);
hovered_coords = Vector2i(hovered.x, hovered.y); hovered_coords = Vector2i(hovered.x, hovered.y);
hovered_alternative = hovered.z; hovered_alternative = hovered.z;
if (hovered_coords != TileSetSource::INVALID_ATLAS_COORDS) { if (hovered_coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(hovered_coords, hovered_alternative)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(hovered_coords, hovered_alternative));
int terrain_set = tile_data->get_terrain_set(); int terrain_set = tile_data->get_terrain_set();
Rect2i texture_region = p_tile_atlas_view->get_alternative_tile_rect(hovered_coords, hovered_alternative); Rect2i texture_region = p_tile_atlas_view->get_alternative_tile_rect(hovered_coords, hovered_alternative);
Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(hovered_coords, hovered_alternative); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(hovered_coords, hovered_alternative);
@ -1828,8 +1839,8 @@ void RTileDataTerrainsEditor::forward_draw_over_alternatives(RTileAtlasView *p_t
Vector<Color> color; Vector<Color> color;
color.push_back(Color(1.0, 1.0, 1.0, 0.5)); color.push_back(Color(1.0, 1.0, 1.0, 0.5));
for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { for (int i = 0; i < RTileSet::CELL_NEIGHBOR_MAX; i++) {
TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(i);
if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) {
Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit);
if (Geometry2D::is_point_in_polygon(xform.affine_inverse().xform(mouse_pos), polygon)) { if (Geometry2D::is_point_in_polygon(xform.affine_inverse().xform(mouse_pos), polygon)) {
@ -1849,14 +1860,14 @@ void RTileDataTerrainsEditor::forward_draw_over_alternatives(RTileAtlasView *p_t
} }
// Dim terrains with wrong terrain set. // Dim terrains with wrong terrain set.
Ref<Font> font = RTileSetEditor::get_singleton()->get_theme_font(("bold"), ("EditorFonts")); Ref<Font> font = RTileSetEditor::get_singleton()->get_font(("bold"), ("EditorFonts"));
int font_size = RTileSetEditor::get_singleton()->get_theme_font_size(("bold_size"), ("EditorFonts")); int font_size = RTileSetEditor::get_singleton()->get_theme_font_size(("bold_size"), ("EditorFonts"));
for (int i = 0; i < p_tile_set_atlas_source->get_tiles_count(); i++) { for (int i = 0; i < p_tile_set_atlas_source->get_tiles_count(); i++) {
Vector2i coords = p_tile_set_atlas_source->get_tile_id(i); Vector2i coords = p_tile_set_atlas_source->get_tile_id(i);
for (int j = 1; j < p_tile_set_atlas_source->get_alternative_tiles_count(coords); j++) { for (int j = 1; j < p_tile_set_atlas_source->get_alternative_tiles_count(coords); j++) {
int alternative_tile = p_tile_set_atlas_source->get_alternative_tile_id(coords, j); int alternative_tile = p_tile_set_atlas_source->get_alternative_tile_id(coords, j);
if (coords != hovered_coords || alternative_tile != hovered_alternative) { if (coords != hovered_coords || alternative_tile != hovered_alternative) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(coords, alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, alternative_tile));
if (tile_data->get_terrain_set() != int(dummy_object->get("terrain_set"))) { if (tile_data->get_terrain_set() != int(dummy_object->get("terrain_set"))) {
// Dimming // Dimming
p_canvas_item->draw_set_transform_matrix(p_transform); p_canvas_item->draw_set_transform_matrix(p_transform);
@ -1894,7 +1905,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
Vector2i coords = p_tile_set_atlas_source->get_tile_at_coords(line[i]); Vector2i coords = p_tile_set_atlas_source->get_tile_at_coords(line[i]);
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
int terrain_set = drag_painted_value; int terrain_set = drag_painted_value;
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -1925,7 +1936,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
for (int i = 0; i < line.size(); i++) { for (int i = 0; i < line.size(); i++) {
Vector2i coords = p_tile_set_atlas_source->get_tile_at_coords(line[i]); Vector2i coords = p_tile_set_atlas_source->get_tile_at_coords(line[i]);
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -1937,8 +1948,8 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
Dictionary dict; Dictionary dict;
dict["terrain_set"] = tile_data->get_terrain_set(); dict["terrain_set"] = tile_data->get_terrain_set();
Array array; Array array;
for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { for (int j = 0; j < RTileSet::CELL_NEIGHBOR_MAX; j++) {
TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(j);
array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1);
} }
dict["terrain_peering_bits"] = array; dict["terrain_peering_bits"] = array;
@ -1948,7 +1959,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
// Set the terrains bits. // Set the terrains bits.
Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords);
Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0);
for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { for (int j = 0; j < RTileSet::CELL_NEIGHBOR_MAX; j++) {
RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(j); RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(j);
if (tile_data->is_valid_peering_bit_terrain(bit)) { if (tile_data->is_valid_peering_bit_terrain(bit)) {
Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(tile_data->get_terrain_set(), bit); Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(tile_data->get_terrain_set(), bit);
@ -1966,7 +1977,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
Ref<InputEventMouseButton> mb = p_event; Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) { if (mb.is_valid()) {
if (mb->get_button_index() == MouseButton::LEFT) { if (mb->get_button_index() == BUTTON_LEFT) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
if (picker_button->is_pressed()) { if (picker_button->is_pressed()) {
Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position()); Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position());
@ -1994,14 +2005,14 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
} else { } else {
Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position()); Vector2i coords = p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position());
coords = p_tile_set_atlas_source->get_tile_at_coords(coords); coords = p_tile_set_atlas_source->get_tile_at_coords(coords);
TileData *tile_data = nullptr; RTileData *tile_data = nullptr;
if (coords != RTileSetAtlasSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetAtlasSource::INVALID_ATLAS_COORDS) {
tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0)); tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0));
} }
int terrain_set = int(dummy_object->get("terrain_set")); int terrain_set = int(dummy_object->get("terrain_set"));
int terrain = int(dummy_object->get("terrain")); int terrain = int(dummy_object->get("terrain"));
if (terrain_set == -1 || !tile_data || tile_data->get_terrain_set() != terrain_set) { if (terrain_set == -1 || !tile_data || tile_data->get_terrain_set() != terrain_set) {
if (mb->is_ctrl_pressed()) { if (mb->get_control()) {
// Paint terrain set with rect. // Paint terrain set with rect.
drag_type = DRAG_TYPE_PAINT_TERRAIN_SET_RECT; drag_type = DRAG_TYPE_PAINT_TERRAIN_SET_RECT;
drag_modified.clear(); drag_modified.clear();
@ -2013,8 +2024,8 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
drag_modified.clear(); drag_modified.clear();
drag_painted_value = terrain_set; drag_painted_value = terrain_set;
if (coords != TileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -2036,7 +2047,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
drag_last_pos = mb->get_position(); drag_last_pos = mb->get_position();
} }
} else if (tile_data && tile_data->get_terrain_set() == terrain_set) { } else if (tile_data && tile_data->get_terrain_set() == terrain_set) {
if (mb->is_ctrl_pressed()) { if (mb->get_control()) {
// Paint terrain set with rect. // Paint terrain set with rect.
drag_type = DRAG_TYPE_PAINT_TERRAIN_BITS_RECT; drag_type = DRAG_TYPE_PAINT_TERRAIN_BITS_RECT;
drag_modified.clear(); drag_modified.clear();
@ -2055,7 +2066,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
drag_painted_value = painted_dict; drag_painted_value = painted_dict;
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -2096,13 +2107,13 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position())); rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position()));
rect = rect.abs(); rect = rect.abs();
Set<TileMapCell> edited; Set<RTileMapCell> edited;
for (int x = rect.get_position().x; x <= rect.get_end().x; x++) { for (int x = rect.get_position().x; x <= rect.get_end().x; x++) {
for (int y = rect.get_position().y; y <= rect.get_end().y; y++) { for (int y = rect.get_position().y; y <= rect.get_end().y; y++) {
Vector2i coords = Vector2i(x, y); Vector2i coords = Vector2i(x, y);
coords = p_tile_set_atlas_source->get_tile_at_coords(coords); coords = p_tile_set_atlas_source->get_tile_at_coords(coords);
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -2127,7 +2138,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} else if (drag_type == DRAG_TYPE_PAINT_TERRAIN_SET) { } else if (drag_type == DRAG_TYPE_PAINT_TERRAIN_SET) {
undo_redo->create_action(TTR("Painting Terrain Set")); undo_redo->create_action(TTR("Painting Terrain Set"));
for (KeyValue<TileMapCell, Variant> &E : drag_modified) { for (KeyValue<RTileMapCell, Variant> &E : drag_modified) {
Dictionary dict = E.value; Dictionary dict = E.value;
Vector2i coords = E.key.get_atlas_coords(); Vector2i coords = E.key.get_atlas_coords();
undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), drag_painted_value); undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), drag_painted_value);
@ -2140,14 +2151,14 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
} }
} }
} }
undo_redo->commit_action(false); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} else if (drag_type == DRAG_TYPE_PAINT_TERRAIN_BITS) { } else if (drag_type == DRAG_TYPE_PAINT_TERRAIN_BITS) {
Dictionary painted = Dictionary(drag_painted_value); Dictionary painted = Dictionary(drag_painted_value);
int terrain_set = int(painted["terrain_set"]); int terrain_set = int(painted["terrain_set"]);
int terrain = int(painted["terrain"]); int terrain = int(painted["terrain"]);
undo_redo->create_action(TTR("Painting Terrain")); undo_redo->create_action(TTR("Painting Terrain"));
for (KeyValue<TileMapCell, Variant> &E : drag_modified) { for (KeyValue<RTileMapCell, Variant> &E : drag_modified) {
Dictionary dict = E.value; Dictionary dict = E.value;
Vector2i coords = E.key.get_atlas_coords(); Vector2i coords = E.key.get_atlas_coords();
Array array = dict["terrain_peering_bits"]; Array array = dict["terrain_peering_bits"];
@ -2161,7 +2172,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
} }
} }
} }
undo_redo->commit_action(false); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} else if (drag_type == DRAG_TYPE_PAINT_TERRAIN_BITS_RECT) { } else if (drag_type == DRAG_TYPE_PAINT_TERRAIN_BITS_RECT) {
Dictionary painted = Dictionary(drag_painted_value); Dictionary painted = Dictionary(drag_painted_value);
@ -2173,15 +2184,15 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position())); rect.set_end(p_tile_atlas_view->get_atlas_tile_coords_at_pos(mb->get_position()));
rect = rect.abs(); rect = rect.abs();
Set<TileMapCell> edited; Set<RTileMapCell> edited;
for (int x = rect.get_position().x; x <= rect.get_end().x; x++) { for (int x = rect.get_position().x; x <= rect.get_end().x; x++) {
for (int y = rect.get_position().y; y <= rect.get_end().y; y++) { for (int y = rect.get_position().y; y <= rect.get_end().y; y++) {
Vector2i coords = Vector2i(x, y); Vector2i coords = Vector2i(x, y);
coords = p_tile_set_atlas_source->get_tile_at_coords(coords); coords = p_tile_set_atlas_source->get_tile_at_coords(coords);
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0));
if (tile_data->get_terrain_set() == terrain_set) { if (tile_data->get_terrain_set() == terrain_set) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = 0; cell.alternative_tile = 0;
@ -2200,7 +2211,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
undo_redo->create_action(TTR("Painting Terrain")); undo_redo->create_action(TTR("Painting Terrain"));
for (Set<RTileMapCell>::Element *E = edited.front(); E; E = E->next()) { for (Set<RTileMapCell>::Element *E = edited.front(); E; E = E->next()) {
Vector2i coords = E->get().get_atlas_coords(); Vector2i coords = E->get().get_atlas_coords();
TileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, 0));
for (int i = 0; i < RTileSet::CELL_NEIGHBOR_MAX; i++) { for (int i = 0; i < RTileSet::CELL_NEIGHBOR_MAX; i++) {
RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(i); RTileSet::CellNeighbor bit = RTileSet::CellNeighbor(i);
@ -2220,7 +2231,7 @@ void RTileDataTerrainsEditor::forward_painting_atlas_gui_input(RTileAtlasView *p
} }
} }
} }
undo_redo->commit_action(true); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} }
} }
@ -2237,7 +2248,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
int alternative_tile = tile.z; int alternative_tile = tile.z;
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = alternative_tile; cell.alternative_tile = alternative_tile;
@ -2267,7 +2278,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
int alternative_tile = tile.z; int alternative_tile = tile.z;
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = alternative_tile; cell.alternative_tile = alternative_tile;
@ -2307,7 +2318,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
Ref<InputEventMouseButton> mb = p_event; Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) { if (mb.is_valid()) {
if (mb->get_button_index() == MouseButton::LEFT) { if (mb->get_button_index() == BUTTON_LEFT) {
if (mb->is_pressed()) { if (mb->is_pressed()) {
if (picker_button->is_pressed()) { if (picker_button->is_pressed()) {
Vector3i tile = p_tile_atlas_view->get_alternative_tile_at_pos(mb->get_position()); Vector3i tile = p_tile_atlas_view->get_alternative_tile_at_pos(mb->get_position());
@ -2342,14 +2353,14 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
Vector2i coords = Vector2i(tile.x, tile.y); Vector2i coords = Vector2i(tile.x, tile.y);
int alternative_tile = tile.z; int alternative_tile = tile.z;
TileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(coords, alternative_tile));
if (terrain_set == -1 || !tile_data || tile_data->get_terrain_set() != terrain_set) { if (terrain_set == -1 || !tile_data || tile_data->get_terrain_set() != terrain_set) {
drag_type = DRAG_TYPE_PAINT_TERRAIN_SET; drag_type = DRAG_TYPE_PAINT_TERRAIN_SET;
drag_modified.clear(); drag_modified.clear();
drag_painted_value = int(dummy_object->get("terrain_set")); drag_painted_value = int(dummy_object->get("terrain_set"));
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = alternative_tile; cell.alternative_tile = alternative_tile;
@ -2375,7 +2386,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
drag_painted_value = painted_dict; drag_painted_value = painted_dict;
if (coords != RTileSetSource::INVALID_ATLAS_COORDS) { if (coords != RTileSetSource::INVALID_ATLAS_COORDS) {
TileMapCell cell; RTileMapCell cell;
cell.source_id = 0; cell.source_id = 0;
cell.set_atlas_coords(coords); cell.set_atlas_coords(coords);
cell.alternative_tile = alternative_tile; cell.alternative_tile = alternative_tile;
@ -2410,7 +2421,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
} else { } else {
if (drag_type == DRAG_TYPE_PAINT_TERRAIN_SET) { if (drag_type == DRAG_TYPE_PAINT_TERRAIN_SET) {
undo_redo->create_action(TTR("Painting Tiles Property")); undo_redo->create_action(TTR("Painting Tiles Property"));
for (KeyValue<TileMapCell, Variant> &E : drag_modified) { for (KeyValue<RTileMapCell, Variant> &E : drag_modified) {
Dictionary dict = E.value; Dictionary dict = E.value;
Vector2i coords = E.key.get_atlas_coords(); Vector2i coords = E.key.get_atlas_coords();
undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), dict["terrain_set"]); undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), dict["terrain_set"]);
@ -2427,7 +2438,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
int terrain_set = int(painted["terrain_set"]); int terrain_set = int(painted["terrain_set"]);
int terrain = int(painted["terrain"]); int terrain = int(painted["terrain"]);
undo_redo->create_action(TTR("Painting Terrain")); undo_redo->create_action(TTR("Painting Terrain"));
for (KeyValue<TileMapCell, Variant> &E : drag_modified) { for (KeyValue<RTileMapCell, Variant> &E : drag_modified) {
Dictionary dict = E.value; Dictionary dict = E.value;
Vector2i coords = E.key.get_atlas_coords(); Vector2i coords = E.key.get_atlas_coords();
Array array = dict["terrain_peering_bits"]; Array array = dict["terrain_peering_bits"];
@ -2441,7 +2452,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
} }
} }
} }
undo_redo->commit_action(false); undo_redo->commit_action();
drag_type = DRAG_TYPE_NONE; drag_type = DRAG_TYPE_NONE;
} }
} }
@ -2450,7 +2461,7 @@ void RTileDataTerrainsEditor::forward_painting_alternatives_gui_input(RTileAtlas
} }
void RTileDataTerrainsEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) { void RTileDataTerrainsEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) {
TileData *tile_data = _get_tile_data(p_cell); RTileData *tile_data = _get_tile_data(p_cell);
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
tile_set->draw_terrains(p_canvas_item, p_transform, tile_data); tile_set->draw_terrains(p_canvas_item, p_transform, tile_data);
@ -2460,7 +2471,7 @@ void RTileDataTerrainsEditor::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_TREE: case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: case NOTIFICATION_THEME_CHANGED:
picker_button->set_icon(get_theme_icon(("ColorPick"), ("EditorIcons"))); picker_button->set_icon(get_icon(("ColorPick"), ("EditorIcons")));
break; break;
default: default:
break; break;
@ -2478,7 +2489,7 @@ RTileDataTerrainsEditor::RTileDataTerrainsEditor() {
picker_button = memnew(Button); picker_button = memnew(Button);
picker_button->set_flat(true); picker_button->set_flat(true);
picker_button->set_toggle_mode(true); picker_button->set_toggle_mode(true);
picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P)); picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", KEY_P));
toolbar->add_child(picker_button); toolbar->add_child(picker_button);
// Setup // Setup
@ -2519,8 +2530,8 @@ Variant RTileDataNavigationEditor::_get_painted_value() {
return navigation_polygon; return navigation_polygon;
} }
void RTileDataNavigationEditor::_set_painted_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { void RTileDataNavigationEditor::_set_painted_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile));
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
Ref<NavigationPolygon> navigation_polygon = tile_data->get_navigation_polygon(navigation_layer); Ref<NavigationPolygon> navigation_polygon = tile_data->get_navigation_polygon(navigation_layer);
@ -2534,7 +2545,7 @@ void RTileDataNavigationEditor::_set_painted_value(TileSetAtlasSource *p_tile_se
} }
void RTileDataNavigationEditor::_set_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, Variant p_value) { void RTileDataNavigationEditor::_set_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, Variant p_value) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile));
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
Ref<NavigationPolygon> navigation_polygon = p_value; Ref<NavigationPolygon> navigation_polygon = p_value;
tile_data->set_navigation_polygon(navigation_layer, navigation_polygon); tile_data->set_navigation_polygon(navigation_layer, navigation_polygon);
@ -2543,13 +2554,13 @@ void RTileDataNavigationEditor::_set_value(RTileSetAtlasSource *p_tile_set_atlas
} }
Variant RTileDataNavigationEditor::_get_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { Variant RTileDataNavigationEditor::_get_value(RTileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) {
TileData *tile_data = Object::cast_to<TileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile)); RTileData *tile_data = Object::cast_to<RTileData>(p_tile_set_atlas_source->get_tile_data(p_coords, p_alternative_tile));
ERR_FAIL_COND_V(!tile_data, Variant()); ERR_FAIL_COND_V(!tile_data, Variant());
return tile_data->get_navigation_polygon(navigation_layer); return tile_data->get_navigation_polygon(navigation_layer);
} }
void RTileDataNavigationEditor::_setup_undo_redo_action(TileSetAtlasSource *p_tile_set_atlas_source, Map<RTileMapCell, Variant> p_previous_values, Variant p_new_value) { void RTileDataNavigationEditor::_setup_undo_redo_action(RTileSetAtlasSource *p_tile_set_atlas_source, Map<RTileMapCell, Variant> p_previous_values, Variant p_new_value) {
for (const KeyValue<TileMapCell, Variant> &E : p_previous_values) { for (const KeyValue<RTileMapCell, Variant> &E : p_previous_values) {
Vector2i coords = E.key.get_atlas_coords(); Vector2i coords = E.key.get_atlas_coords();
undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/navigation_layer_%d/polygon", coords.x, coords.y, E.key.alternative_tile, navigation_layer), E.value); undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/navigation_layer_%d/polygon", coords.x, coords.y, E.key.alternative_tile, navigation_layer), E.value);
undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/navigation_layer_%d/polygon", coords.x, coords.y, E.key.alternative_tile, navigation_layer), p_new_value); undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/navigation_layer_%d/polygon", coords.x, coords.y, E.key.alternative_tile, navigation_layer), p_new_value);
@ -2577,11 +2588,11 @@ RTileDataNavigationEditor::RTileDataNavigationEditor() {
} }
void RTileDataNavigationEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) { void RTileDataNavigationEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform2D p_transform, RTileMapCell p_cell, bool p_selected) {
TileData *tile_data = _get_tile_data(p_cell); RTileData *tile_data = _get_tile_data(p_cell);
ERR_FAIL_COND(!tile_data); ERR_FAIL_COND(!tile_data);
// Draw all shapes. // Draw all shapes.
RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform); VisualServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform);
Ref<NavigationPolygon> navigation_polygon = tile_data->get_navigation_polygon(navigation_layer); Ref<NavigationPolygon> navigation_polygon = tile_data->get_navigation_polygon(navigation_layer);
if (navigation_polygon.is_valid()) { if (navigation_polygon.is_valid()) {
@ -2616,9 +2627,9 @@ void RTileDataNavigationEditor::draw_over_tile(CanvasItem *p_canvas_item, Transf
Vector<Color> colors; Vector<Color> colors;
colors.push_back(random_variation_color); colors.push_back(random_variation_color);
RenderingServer::get_singleton()->canvas_item_add_polygon(p_canvas_item->get_canvas_item(), vertices, colors); VisualServer::get_singleton()->canvas_item_add_polygon(p_canvas_item->get_canvas_item(), vertices, colors);
} }
} }
RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D()); VisualServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), Transform2D());
} }