Update TileMap when its TileSet changes

Make TileMap monitor its TileSet for changes and emit a signal when the TileSet changes. This makes the editor update and show the updated version of the TileSet.
This commit is contained in:
ShyRed 2018-03-11 12:24:50 +01:00
parent eceba5aa6a
commit 67f4944a21
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) { 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->disconnect("changed", this, "_recreate_quadrants");
tile_set->remove_change_receptor(this);
}
_clear_quadrants(); _clear_quadrants();
tile_set = p_tileset; tile_set = p_tileset;
if (tile_set.is_valid()) if (tile_set.is_valid()) {
tile_set->connect("changed", this, "_recreate_quadrants"); tile_set->connect("changed", this, "_recreate_quadrants");
else tile_set->add_change_receptor(this);
} else {
clear(); clear();
}
_recreate_quadrants(); _recreate_quadrants();
emit_signal("settings_changed"); emit_signal("settings_changed");
@ -1573,6 +1577,12 @@ void TileMap::_bind_methods() {
BIND_ENUM_CONSTANT(TILE_ORIGIN_BOTTOM_LEFT); 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() { TileMap::TileMap() {
rect_cache_dirty = true; rect_cache_dirty = true;
@ -1601,5 +1611,8 @@ TileMap::TileMap() {
TileMap::~TileMap() { TileMap::~TileMap() {
if (tile_set.is_valid())
tile_set->remove_change_receptor(this);
clear(); clear();
} }

View File

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