Browse Source

Merge pull request #80529 from KoBeWi/unfortunate_fix_is_unfortunate🤦‍♂️

Fix TileSet not disappearing on deselecting TileMap
Rémi Verschelde 2 năm trước cách đây
mục cha
commit
3417f34a37

+ 16 - 0
editor/plugins/tiles/tiles_editor_plugin.cpp

@@ -369,6 +369,13 @@ void TileMapEditorPlugin::edit(Object *p_object) {
 			tile_set_plugin_singleton->make_visible(true);
 			edited_tileset = tile_map->get_tileset()->get_instance_id();
 		}
+	} else if (edited_tileset.is_valid()) {
+		// Hide the TileSet editor, unless another TileSet is being edited.
+		if (tile_set_plugin_singleton->get_edited_tileset() == edited_tileset) {
+			tile_set_plugin_singleton->edit(nullptr);
+			tile_set_plugin_singleton->make_visible(false);
+		}
+		edited_tileset = ObjectID();
 	}
 }
 
@@ -426,6 +433,11 @@ TileMapEditorPlugin::~TileMapEditorPlugin() {
 
 void TileSetEditorPlugin::edit(Object *p_object) {
 	editor->edit(Ref<TileSet>(p_object));
+	if (p_object) {
+		edited_tileset = p_object->get_instance_id();
+	} else {
+		edited_tileset = ObjectID();
+	}
 }
 
 bool TileSetEditorPlugin::handles(Object *p_object) const {
@@ -446,6 +458,10 @@ void TileSetEditorPlugin::make_visible(bool p_visible) {
 	}
 }
 
+ObjectID TileSetEditorPlugin::get_edited_tileset() const {
+	return edited_tileset;
+}
+
 TileSetEditorPlugin::TileSetEditorPlugin() {
 	DEV_ASSERT(tile_map_plugin_singleton);
 	tile_set_plugin_singleton = this;

+ 5 - 1
editor/plugins/tiles/tiles_editor_plugin.h

@@ -118,7 +118,7 @@ class TileMapEditorPlugin : public EditorPlugin {
 	ObjectID tile_map_id;
 
 	bool tile_map_changed_needs_update = false;
-	ObjectID edited_tileset;
+	ObjectID edited_tileset; // The TileSet associated with the TileMap.
 
 	void _tile_map_changed();
 	void _update_tile_map();
@@ -147,11 +147,15 @@ class TileSetEditorPlugin : public EditorPlugin {
 	TileSetEditor *editor = nullptr;
 	Button *button = nullptr;
 
+	ObjectID edited_tileset;
+
 public:
 	virtual void edit(Object *p_object) override;
 	virtual bool handles(Object *p_object) const override;
 	virtual void make_visible(bool p_visible) override;
 
+	ObjectID get_edited_tileset() const;
+
 	TileSetEditorPlugin();
 	~TileSetEditorPlugin();
 };