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.
(cherry picked from commit 67f4944a21
)
This commit is contained in:
parent
b855bc44ae
commit
171542d96a
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue