Merge pull request #17432 from ShyRed/tilemapupdate

Update TileMap when its TileSet changes
This commit is contained in:
Rémi Verschelde 2018-03-13 09:30:38 +01:00 committed by GitHub
commit 7e246a0cb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 3 deletions

View File

@ -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();
}

View File

@ -217,6 +217,8 @@ protected:
void _notification(int p_what);
static void _bind_methods();
virtual void _changed_callback(Object *p_changed, const char *p_prop);
public:
enum {
INVALID_CELL = -1