Fix converting to tileset crashes Godot if existing file is not tileset
also make TileSetEditorPlgn tile list updates the preview modulate
This commit is contained in:
parent
cc34406b5d
commit
ed3b080ca6
6 changed files with 63 additions and 18 deletions
|
|
@ -1227,29 +1227,25 @@ void EditorNode::_dialog_action(String p_file) {
|
|||
} break;
|
||||
case FILE_EXPORT_TILESET: {
|
||||
|
||||
Ref<TileSet> ml;
|
||||
if (FileAccess::exists(p_file)) {
|
||||
ml = ResourceLoader::load(p_file, "TileSet");
|
||||
Ref<TileSet> tileset;
|
||||
if (FileAccess::exists(p_file) && file_export_lib_merge->is_pressed()) {
|
||||
tileset = ResourceLoader::load(p_file, "TileSet");
|
||||
|
||||
if (ml.is_null()) {
|
||||
if (file_export_lib_merge->is_pressed()) {
|
||||
current_option = -1;
|
||||
accept->get_ok()->set_text(TTR("I see.."));
|
||||
accept->set_text(TTR("Can't load TileSet for merging!"));
|
||||
accept->popup_centered_minsize();
|
||||
return;
|
||||
}
|
||||
} else if (!file_export_lib_merge->is_pressed()) {
|
||||
ml->clear();
|
||||
if (tileset.is_null()) {
|
||||
current_option = -1;
|
||||
accept->get_ok()->set_text(TTR("I see.."));
|
||||
accept->set_text(TTR("Can't load TileSet for merging!"));
|
||||
accept->popup_centered_minsize();
|
||||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
ml = Ref<TileSet>(memnew(TileSet));
|
||||
tileset = Ref<TileSet>(memnew(TileSet));
|
||||
}
|
||||
|
||||
TileSetEditor::update_library_file(editor_data.get_edited_scene_root(), ml, true);
|
||||
TileSetEditor::update_library_file(editor_data.get_edited_scene_root(), tileset, true);
|
||||
|
||||
Error err = ResourceSaver::save(p_file, ml);
|
||||
Error err = ResourceSaver::save(p_file, tileset);
|
||||
if (err) {
|
||||
|
||||
current_option = -1;
|
||||
|
|
|
|||
|
|
@ -278,10 +278,11 @@ void TileSetEditor::_changed_callback(Object *p_changed, const char *p_prop) {
|
|||
preview->set_region_rect(tileset->tile_get_region(get_current_tile()));
|
||||
} else if (p_prop == StringName("name")) {
|
||||
update_tile_list_icon();
|
||||
} else if (p_prop == StringName("texture") || p_prop == StringName("tile_mode")) {
|
||||
} else if (p_prop == StringName("texture") || p_prop == StringName("modulate") || p_prop == StringName("tile_mode")) {
|
||||
_on_tile_list_selected(get_current_tile());
|
||||
workspace->update();
|
||||
preview->set_texture(tileset->tile_get_texture(get_current_tile()));
|
||||
preview->set_modulate(tileset->tile_get_modulate(get_current_tile()));
|
||||
preview->set_region_rect(tileset->tile_get_region(get_current_tile()));
|
||||
if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE)
|
||||
property_editor->show();
|
||||
|
|
@ -578,6 +579,7 @@ void TileSetEditor::_on_tile_list_selected(int p_index) {
|
|||
if (get_current_tile() >= 0) {
|
||||
current_item_index = p_index;
|
||||
preview->set_texture(tileset->tile_get_texture(get_current_tile()));
|
||||
preview->set_modulate(tileset->tile_get_modulate(get_current_tile()));
|
||||
preview->set_region_rect(tileset->tile_get_region(get_current_tile()));
|
||||
workspace->set_custom_minimum_size(tileset->tile_get_region(get_current_tile()).size);
|
||||
update_workspace_tile_mode();
|
||||
|
|
@ -1736,6 +1738,7 @@ void TileSetEditor::update_tile_list() {
|
|||
region.position += pos;
|
||||
}
|
||||
tile_list->set_item_icon_region(tile_list->get_item_count() - 1, region);
|
||||
tile_list->set_item_icon_modulate(tile_list->get_item_count() - 1, tileset->tile_get_modulate(E->get()));
|
||||
}
|
||||
if (tile_list->get_item_count() > 0 && selected_tile < tile_list->get_item_count()) {
|
||||
tile_list->select(selected_tile);
|
||||
|
|
@ -1763,6 +1766,7 @@ void TileSetEditor::update_tile_list_icon() {
|
|||
tile_list->set_item_metadata(current_idx, E->get());
|
||||
tile_list->set_item_icon(current_idx, tileset->tile_get_texture(E->get()));
|
||||
tile_list->set_item_icon_region(current_idx, region);
|
||||
tile_list->set_item_icon_modulate(current_idx, tileset->tile_get_modulate(E->get()));
|
||||
tile_list->set_item_text(current_idx, tileset->tile_get_name(E->get()));
|
||||
current_idx += 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue