Merge pull request #80782 from KoBeWi/MessLibrary
Cleanup MeshLibrary changed signals
This commit is contained in:
commit
4bba963f0a
|
@ -228,6 +228,11 @@
|
||||||
Emitted when [member cell_size] changes.
|
Emitted when [member cell_size] changes.
|
||||||
</description>
|
</description>
|
||||||
</signal>
|
</signal>
|
||||||
|
<signal name="changed">
|
||||||
|
<description>
|
||||||
|
Emitted when the [MeshLibrary] of this GridMap changes.
|
||||||
|
</description>
|
||||||
|
</signal>
|
||||||
</signals>
|
</signals>
|
||||||
<constants>
|
<constants>
|
||||||
<constant name="INVALID_CELL_ITEM" value="-1">
|
<constant name="INVALID_CELL_ITEM" value="-1">
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
|
|
||||||
|
#include "core/core_string_names.h"
|
||||||
#include "core/input/input.h"
|
#include "core/input/input.h"
|
||||||
#include "core/os/keyboard.h"
|
#include "core/os/keyboard.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
|
@ -341,7 +342,6 @@ bool GridMapEditor::do_input_action(Camera3D *p_camera, const Point2 &p_point, b
|
||||||
if (selected_palette < 0 && input_action != INPUT_PICK && input_action != INPUT_SELECT && input_action != INPUT_PASTE) {
|
if (selected_palette < 0 && input_action != INPUT_PICK && input_action != INPUT_SELECT && input_action != INPUT_PASTE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Ref<MeshLibrary> mesh_library = node->get_mesh_library();
|
|
||||||
if (mesh_library.is_null()) {
|
if (mesh_library.is_null()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -866,10 +866,7 @@ void GridMapEditor::update_palette() {
|
||||||
mesh_library_palette->set_fixed_icon_size(Size2(min_size, min_size));
|
mesh_library_palette->set_fixed_icon_size(Size2(min_size, min_size));
|
||||||
mesh_library_palette->set_max_text_lines(2);
|
mesh_library_palette->set_max_text_lines(2);
|
||||||
|
|
||||||
Ref<MeshLibrary> mesh_library = node->get_mesh_library();
|
|
||||||
|
|
||||||
if (mesh_library.is_null()) {
|
if (mesh_library.is_null()) {
|
||||||
last_mesh_library = nullptr;
|
|
||||||
search_box->set_text("");
|
search_box->set_text("");
|
||||||
search_box->set_editable(false);
|
search_box->set_editable(false);
|
||||||
info_message->show();
|
info_message->show();
|
||||||
|
@ -922,13 +919,39 @@ void GridMapEditor::update_palette() {
|
||||||
|
|
||||||
item++;
|
item++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
last_mesh_library = *mesh_library;
|
void GridMapEditor::_update_mesh_library() {
|
||||||
|
ERR_FAIL_NULL(node);
|
||||||
|
|
||||||
|
Ref<MeshLibrary> new_mesh_library = node->get_mesh_library();
|
||||||
|
if (new_mesh_library != mesh_library) {
|
||||||
|
if (mesh_library.is_valid()) {
|
||||||
|
mesh_library->disconnect_changed(callable_mp(this, &GridMapEditor::update_palette));
|
||||||
|
}
|
||||||
|
mesh_library = new_mesh_library;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mesh_library.is_valid()) {
|
||||||
|
mesh_library->connect_changed(callable_mp(this, &GridMapEditor::update_palette));
|
||||||
|
}
|
||||||
|
|
||||||
|
update_palette();
|
||||||
|
// Update the cursor and grid in case the library is changed or removed.
|
||||||
|
_update_cursor_instance();
|
||||||
|
update_grid();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridMapEditor::edit(GridMap *p_gridmap) {
|
void GridMapEditor::edit(GridMap *p_gridmap) {
|
||||||
if (node && node->is_connected("cell_size_changed", callable_mp(this, &GridMapEditor::_draw_grids))) {
|
if (node) {
|
||||||
node->disconnect("cell_size_changed", callable_mp(this, &GridMapEditor::_draw_grids));
|
node->disconnect(SNAME("cell_size_changed"), callable_mp(this, &GridMapEditor::_draw_grids));
|
||||||
|
node->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &GridMapEditor::_update_mesh_library));
|
||||||
|
if (mesh_library.is_valid()) {
|
||||||
|
mesh_library->disconnect_changed(callable_mp(this, &GridMapEditor::update_palette));
|
||||||
|
mesh_library = Ref<MeshLibrary>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
node = p_gridmap;
|
node = p_gridmap;
|
||||||
|
@ -961,7 +984,9 @@ void GridMapEditor::edit(GridMap *p_gridmap) {
|
||||||
_draw_grids(node->get_cell_size());
|
_draw_grids(node->get_cell_size());
|
||||||
update_grid();
|
update_grid();
|
||||||
|
|
||||||
node->connect("cell_size_changed", callable_mp(this, &GridMapEditor::_draw_grids));
|
node->connect(SNAME("cell_size_changed"), callable_mp(this, &GridMapEditor::_draw_grids));
|
||||||
|
node->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &GridMapEditor::_update_mesh_library));
|
||||||
|
_update_mesh_library();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridMapEditor::update_grid() {
|
void GridMapEditor::update_grid() {
|
||||||
|
@ -1092,13 +1117,6 @@ void GridMapEditor::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
grid_xform = xf;
|
grid_xform = xf;
|
||||||
}
|
}
|
||||||
Ref<MeshLibrary> cgmt = node->get_mesh_library();
|
|
||||||
if (cgmt.operator->() != last_mesh_library) {
|
|
||||||
update_palette();
|
|
||||||
// Update the cursor and grid in case the library is changed or removed.
|
|
||||||
_update_cursor_instance();
|
|
||||||
update_grid();
|
|
||||||
}
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_THEME_CHANGED: {
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
|
|
@ -92,7 +92,7 @@ class GridMapEditor : public VBoxContainer {
|
||||||
List<SetItem> set_items;
|
List<SetItem> set_items;
|
||||||
|
|
||||||
GridMap *node = nullptr;
|
GridMap *node = nullptr;
|
||||||
MeshLibrary *last_mesh_library = nullptr;
|
Ref<MeshLibrary> mesh_library = nullptr;
|
||||||
|
|
||||||
Transform3D grid_xform;
|
Transform3D grid_xform;
|
||||||
Transform3D edit_grid_xform;
|
Transform3D edit_grid_xform;
|
||||||
|
@ -191,6 +191,7 @@ class GridMapEditor : public VBoxContainer {
|
||||||
void _configure();
|
void _configure();
|
||||||
void _menu_option(int);
|
void _menu_option(int);
|
||||||
void update_palette();
|
void update_palette();
|
||||||
|
void _update_mesh_library();
|
||||||
void _set_display_mode(int p_mode);
|
void _set_display_mode(int p_mode);
|
||||||
void _item_selected_cbk(int idx);
|
void _item_selected_cbk(int idx);
|
||||||
void _update_cursor_transform();
|
void _update_cursor_transform();
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include "grid_map.h"
|
#include "grid_map.h"
|
||||||
|
|
||||||
|
#include "core/core_string_names.h"
|
||||||
#include "core/io/marshalls.h"
|
#include "core/io/marshalls.h"
|
||||||
#include "core/object/message_queue.h"
|
#include "core/object/message_queue.h"
|
||||||
#include "scene/3d/light_3d.h"
|
#include "scene/3d/light_3d.h"
|
||||||
|
@ -1122,6 +1123,7 @@ void GridMap::_bind_methods() {
|
||||||
BIND_CONSTANT(INVALID_CELL_ITEM);
|
BIND_CONSTANT(INVALID_CELL_ITEM);
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("cell_size_changed", PropertyInfo(Variant::VECTOR3, "cell_size")));
|
ADD_SIGNAL(MethodInfo("cell_size_changed", PropertyInfo(Variant::VECTOR3, "cell_size")));
|
||||||
|
ADD_SIGNAL(MethodInfo(CoreStringNames::get_singleton()->changed));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridMap::set_cell_scale(float p_scale) {
|
void GridMap::set_cell_scale(float p_scale) {
|
||||||
|
|
|
@ -132,6 +132,7 @@ void MeshLibrary::create_item(int p_item) {
|
||||||
ERR_FAIL_COND(p_item < 0);
|
ERR_FAIL_COND(p_item < 0);
|
||||||
ERR_FAIL_COND(item_map.has(p_item));
|
ERR_FAIL_COND(item_map.has(p_item));
|
||||||
item_map[p_item] = Item();
|
item_map[p_item] = Item();
|
||||||
|
emit_changed();
|
||||||
notify_property_list_changed();
|
notify_property_list_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +146,6 @@ void MeshLibrary::set_item_mesh(int p_item, const Ref<Mesh> &p_mesh) {
|
||||||
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
||||||
item_map[p_item].mesh = p_mesh;
|
item_map[p_item].mesh = p_mesh;
|
||||||
emit_changed();
|
emit_changed();
|
||||||
notify_property_list_changed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshLibrary::set_item_mesh_transform(int p_item, const Transform3D &p_transform) {
|
void MeshLibrary::set_item_mesh_transform(int p_item, const Transform3D &p_transform) {
|
||||||
|
@ -157,7 +157,6 @@ void MeshLibrary::set_item_mesh_transform(int p_item, const Transform3D &p_trans
|
||||||
void MeshLibrary::set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes) {
|
void MeshLibrary::set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes) {
|
||||||
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
||||||
item_map[p_item].shapes = p_shapes;
|
item_map[p_item].shapes = p_shapes;
|
||||||
notify_property_list_changed();
|
|
||||||
emit_changed();
|
emit_changed();
|
||||||
notify_property_list_changed();
|
notify_property_list_changed();
|
||||||
}
|
}
|
||||||
|
@ -165,22 +164,18 @@ void MeshLibrary::set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes)
|
||||||
void MeshLibrary::set_item_navigation_mesh(int p_item, const Ref<NavigationMesh> &p_navigation_mesh) {
|
void MeshLibrary::set_item_navigation_mesh(int p_item, const Ref<NavigationMesh> &p_navigation_mesh) {
|
||||||
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
||||||
item_map[p_item].navigation_mesh = p_navigation_mesh;
|
item_map[p_item].navigation_mesh = p_navigation_mesh;
|
||||||
notify_property_list_changed();
|
|
||||||
emit_changed();
|
emit_changed();
|
||||||
notify_property_list_changed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshLibrary::set_item_navigation_mesh_transform(int p_item, const Transform3D &p_transform) {
|
void MeshLibrary::set_item_navigation_mesh_transform(int p_item, const Transform3D &p_transform) {
|
||||||
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
||||||
item_map[p_item].navigation_mesh_transform = p_transform;
|
item_map[p_item].navigation_mesh_transform = p_transform;
|
||||||
emit_changed();
|
emit_changed();
|
||||||
notify_property_list_changed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshLibrary::set_item_navigation_layers(int p_item, uint32_t p_navigation_layers) {
|
void MeshLibrary::set_item_navigation_layers(int p_item, uint32_t p_navigation_layers) {
|
||||||
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
||||||
item_map[p_item].navigation_layers = p_navigation_layers;
|
item_map[p_item].navigation_layers = p_navigation_layers;
|
||||||
notify_property_list_changed();
|
|
||||||
emit_changed();
|
emit_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +183,6 @@ void MeshLibrary::set_item_preview(int p_item, const Ref<Texture2D> &p_preview)
|
||||||
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'.");
|
||||||
item_map[p_item].preview = p_preview;
|
item_map[p_item].preview = p_preview;
|
||||||
emit_changed();
|
emit_changed();
|
||||||
notify_property_list_changed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String MeshLibrary::get_item_name(int p_item) const {
|
String MeshLibrary::get_item_name(int p_item) const {
|
||||||
|
|
Loading…
Reference in New Issue