Ver Fonte

TileSet&TextureRegion: fix error when getting nonexistent tile

Poommetee Ketson há 7 anos atrás
pai
commit
86938a06aa

+ 5 - 2
editor/plugins/texture_region_editor_plugin.cpp

@@ -57,8 +57,9 @@ void TextureRegionEditor::_region_draw() {
 		base_tex = obj_styleBox->get_texture();
 	else if (atlas_tex.is_valid())
 		base_tex = atlas_tex->get_atlas();
-	else if (tile_set.is_valid() && selected_tile != -1)
+	else if (tile_set.is_valid() && selected_tile != -1 && tile_set->has_tile(selected_tile))
 		base_tex = tile_set->tile_get_texture(selected_tile);
+
 	if (base_tex.is_null())
 		return;
 
@@ -688,10 +689,11 @@ void TextureRegionEditor::_edit_region() {
 		texture = obj_styleBox->get_texture();
 	else if (atlas_tex.is_valid())
 		texture = atlas_tex->get_atlas();
-	else if (tile_set.is_valid() && selected_tile != -1)
+	else if (tile_set.is_valid() && selected_tile != -1 && tile_set->has_tile(selected_tile))
 		texture = tile_set->tile_get_texture(selected_tile);
 
 	if (texture.is_null()) {
+		edit_draw->update();
 		return;
 	}
 
@@ -780,6 +782,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) {
 	tile_set = Ref<TileSet>(NULL);
 	editor = p_editor;
 	undo_redo = editor->get_undo_redo();
+	selected_tile = -1;
 
 	snap_step = Vector2(10, 10);
 	snap_separation = Vector2(0, 0);

+ 3 - 0
editor/plugins/tile_set_editor_plugin.cpp

@@ -1809,6 +1809,8 @@ bool TileSetEditorHelper::_get(const StringName &p_name, Variant &r_ret) const {
 
 	if (selected_tile < 0 || tileset.is_null())
 		return false;
+	if (!tileset->has_tile(selected_tile))
+		return false;
 
 	String name = p_name.operator String();
 	bool v = false;
@@ -1833,6 +1835,7 @@ void TileSetEditorHelper::_get_property_list(List<PropertyInfo> *p_list) const {
 TileSetEditorHelper::TileSetEditorHelper(TileSetEditor *p_tileset_editor) {
 
 	tileset_editor = p_tileset_editor;
+	selected_tile = -1;
 }
 
 void TileSetEditorPlugin::edit(Object *p_node) {