|
@@ -142,16 +142,20 @@ void TileMap::_update_quadrant_transform() {
|
|
|
|
|
|
void TileMap::set_tileset(const Ref<TileSet> &p_tileset) {
|
|
|
|
|
|
- if (tile_set.is_valid())
|
|
|
+ if (tile_set.is_valid()) {
|
|
|
tile_set->disconnect("changed", this, "_recreate_quadrants");
|
|
|
+ tile_set->remove_change_receptor(this);
|
|
|
+ }
|
|
|
|
|
|
_clear_quadrants();
|
|
|
tile_set = p_tileset;
|
|
|
|
|
|
- if (tile_set.is_valid())
|
|
|
+ if (tile_set.is_valid()) {
|
|
|
tile_set->connect("changed", this, "_recreate_quadrants");
|
|
|
- else
|
|
|
+ tile_set->add_change_receptor(this);
|
|
|
+ } else {
|
|
|
clear();
|
|
|
+ }
|
|
|
|
|
|
_recreate_quadrants();
|
|
|
emit_signal("settings_changed");
|
|
@@ -1573,6 +1577,12 @@ void TileMap::_bind_methods() {
|
|
|
BIND_ENUM_CONSTANT(TILE_ORIGIN_BOTTOM_LEFT);
|
|
|
}
|
|
|
|
|
|
+void TileMap::_changed_callback(Object *p_changed, const char *p_prop) {
|
|
|
+ if (tile_set.is_valid() && tile_set.ptr() == p_changed) {
|
|
|
+ emit_signal("settings_changed");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
TileMap::TileMap() {
|
|
|
|
|
|
rect_cache_dirty = true;
|
|
@@ -1601,5 +1611,8 @@ TileMap::TileMap() {
|
|
|
|
|
|
TileMap::~TileMap() {
|
|
|
|
|
|
+ if (tile_set.is_valid())
|
|
|
+ tile_set->remove_change_receptor(this);
|
|
|
+
|
|
|
clear();
|
|
|
}
|