Преглед на файлове

Merge pull request #15579 from damarindra/add-receptor-tileset

fix updating tileset list when assign texture and set autotile true
Rémi Verschelde преди 7 години
родител
ревизия
2c17af0509
променени са 3 файла, в които са добавени 12 реда и са изтрити 1 реда
  1. 9 0
      editor/plugins/tile_set_editor_plugin.cpp
  2. 1 0
      editor/plugins/tile_set_editor_plugin.h
  3. 2 1
      scene/resources/tile_set.cpp

+ 9 - 0
editor/plugins/tile_set_editor_plugin.cpp

@@ -583,6 +583,14 @@ void AutotileEditor::_notification(int p_what) {
 	}
 }
 
+void AutotileEditor::_changed_callback(Object *p_changed, const char *p_prop) {
+	if (p_prop == StringName("texture") || p_prop == StringName("is_autotile")) {
+		edit(tile_set.ptr());
+		autotile_list->update();
+		workspace->update();
+	}
+}
+
 void AutotileEditor::_on_autotile_selected(int p_index) {
 
 	if (get_current_tile() >= 0) {
@@ -1581,6 +1589,7 @@ Vector2 AutotileEditor::snap_point(const Vector2 &point) {
 void AutotileEditor::edit(Object *p_node) {
 
 	tile_set = Ref<TileSet>(Object::cast_to<TileSet>(p_node));
+	tile_set->add_change_receptor(this);
 	helper->set_tileset(tile_set);
 
 	autotile_list->clear();

+ 1 - 0
editor/plugins/tile_set_editor_plugin.h

@@ -124,6 +124,7 @@ class AutotileEditor : public Control {
 protected:
 	static void _bind_methods();
 	void _notification(int p_what);
+	virtual void _changed_callback(Object *p_changed, const char *p_prop);
 
 private:
 	void _on_autotile_selected(int p_index);

+ 2 - 1
scene/resources/tile_set.cpp

@@ -309,6 +309,7 @@ void TileSet::tile_set_texture(int p_id, const Ref<Texture> &p_texture) {
 	ERR_FAIL_COND(!tile_map.has(p_id));
 	tile_map[p_id].texture = p_texture;
 	emit_changed();
+	_change_notify("texture");
 }
 
 Ref<Texture> TileSet::tile_get_texture(int p_id) const {
@@ -386,8 +387,8 @@ void TileSet::tile_set_is_autotile(int p_id, bool p_is_autotile) {
 
 	ERR_FAIL_COND(!tile_map.has(p_id));
 	tile_map[p_id].is_autotile = p_is_autotile;
-	_change_notify("");
 	emit_changed();
+	_change_notify("is_autotile");
 }
 
 bool TileSet::tile_get_is_autotile(int p_id) const {