Fix some TileMap errors and crashes

This commit is contained in:
kobewi 2023-02-14 00:39:41 +01:00
parent 4848877b80
commit be6d5bbba6
2 changed files with 16 additions and 6 deletions

View file

@ -404,13 +404,16 @@ void TileAtlasView::_draw_background_right() {
} }
void TileAtlasView::set_atlas_source(TileSet *p_tile_set, TileSetAtlasSource *p_tile_set_atlas_source, int p_source_id) { void TileAtlasView::set_atlas_source(TileSet *p_tile_set, TileSetAtlasSource *p_tile_set_atlas_source, int p_source_id) {
ERR_FAIL_COND(!p_tile_set); tile_set = p_tile_set;
ERR_FAIL_COND(!p_tile_set_atlas_source); tile_set_atlas_source = p_tile_set_atlas_source;
if (!tile_set) {
return;
}
ERR_FAIL_COND(p_source_id < 0); ERR_FAIL_COND(p_source_id < 0);
ERR_FAIL_COND(p_tile_set->get_source(p_source_id) != p_tile_set_atlas_source); ERR_FAIL_COND(p_tile_set->get_source(p_source_id) != p_tile_set_atlas_source);
tile_set = p_tile_set;
tile_set_atlas_source = p_tile_set_atlas_source;
source_id = p_source_id; source_id = p_source_id;
// Show or hide the view. // Show or hide the view.

View file

@ -120,10 +120,9 @@ void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_bind_methods() {
} }
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::edit(Ref<TileSet> p_tile_set, TileSetAtlasSource *p_tile_set_atlas_source, int p_source_id) { void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::edit(Ref<TileSet> p_tile_set, TileSetAtlasSource *p_tile_set_atlas_source, int p_source_id) {
ERR_FAIL_COND(!p_tile_set.is_valid());
ERR_FAIL_COND(!p_tile_set_atlas_source); ERR_FAIL_COND(!p_tile_set_atlas_source);
ERR_FAIL_COND(p_source_id < 0); ERR_FAIL_COND(p_source_id < 0);
ERR_FAIL_COND(p_tile_set->get_source(p_source_id) != p_tile_set_atlas_source); ERR_FAIL_COND(p_tile_set.is_valid() && p_tile_set->get_source(p_source_id) != p_tile_set_atlas_source);
if (p_tile_set == tile_set && p_tile_set_atlas_source == tile_set_atlas_source && p_source_id == source_id) { if (p_tile_set == tile_set && p_tile_set_atlas_source == tile_set_atlas_source && p_source_id == source_id) {
return; return;
@ -611,6 +610,10 @@ void TileSetAtlasSourceEditor::_update_tile_data_editors() {
tile_data_editors_tree->clear(); tile_data_editors_tree->clear();
if (tile_set.is_null()) {
return;
}
TreeItem *root = tile_data_editors_tree->create_item(); TreeItem *root = tile_data_editors_tree->create_item();
TreeItem *group; TreeItem *group;
@ -919,6 +922,10 @@ void TileSetAtlasSourceEditor::_update_atlas_view() {
alternative_tiles_control->get_child(i)->queue_free(); alternative_tiles_control->get_child(i)->queue_free();
} }
if (tile_set.is_null()) {
return;
}
Vector2i pos; Vector2i pos;
Vector2 texture_region_base_size = tile_set_atlas_source->get_texture_region_size(); Vector2 texture_region_base_size = tile_set_atlas_source->get_texture_region_size();
int texture_region_base_size_min = MIN(texture_region_base_size.x, texture_region_base_size.y); int texture_region_base_size_min = MIN(texture_region_base_size.x, texture_region_base_size.y);