diff options
Diffstat (limited to 'editor')
| -rw-r--r-- | editor/editor_export.cpp | 50 | ||||
| -rw-r--r-- | editor/editor_export.h | 20 | ||||
| -rw-r--r-- | editor/import/editor_scene_importer_gltf.cpp | 38 | ||||
| -rw-r--r-- | editor/plugins/editor_preview_plugins.cpp | 3 | ||||
| -rw-r--r-- | editor/project_export.cpp | 146 | ||||
| -rw-r--r-- | editor/project_export.h | 12 | ||||
| -rw-r--r-- | editor/scene_tree_dock.cpp | 13 |
7 files changed, 248 insertions, 34 deletions
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index cd0add4ba4..b36ed72125 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -222,10 +222,33 @@ String EditorExportPreset::get_custom_features() const { return custom_features; } +void EditorExportPreset::set_script_export_mode(int p_mode) { + + script_mode = p_mode; + EditorExport::singleton->save_presets(); +} + +int EditorExportPreset::get_script_export_mode() const { + + return script_mode; +} + +void EditorExportPreset::set_script_encryption_key(const String &p_key) { + + script_key = p_key; + EditorExport::singleton->save_presets(); +} + +String EditorExportPreset::get_script_encryption_key() const { + + return script_key; +} + EditorExportPreset::EditorExportPreset() : export_filter(EXPORT_ALL_RESOURCES), export_path(""), - runnable(false) { + runnable(false), + script_mode(MODE_SCRIPT_COMPILED) { } /////////////////////////////////// @@ -474,6 +497,18 @@ void EditorExportPlatform::_edit_filter_list(Set<String> &r_list, const String & memdelete(da); } +void EditorExportPlugin::set_export_preset(const Ref<EditorExportPreset> &p_preset) { + + if (p_preset.is_valid()) { + export_preset = p_preset; + } +} + +Ref<EditorExportPreset> EditorExportPlugin::get_export_preset() const { + + return export_preset; +} + void EditorExportPlugin::add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap) { ExtraFile ef; @@ -658,6 +693,9 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & Vector<Ref<EditorExportPlugin> > export_plugins = EditorExport::get_singleton()->get_export_plugins(); for (int i = 0; i < export_plugins.size(); i++) { + + export_plugins.write[i]->set_export_preset(p_preset); + if (p_so_func) { for (int j = 0; j < export_plugins[i]->shared_objects.size(); j++) { p_so_func(p_udata, export_plugins[i]->shared_objects[j]); @@ -1048,6 +1086,7 @@ void EditorExport::_save() { config->set_value(section, "platform", preset->get_platform()->get_name()); config->set_value(section, "runnable", preset->is_runnable()); config->set_value(section, "custom_features", preset->get_custom_features()); + bool save_files = false; switch (preset->get_export_filter()) { case EditorExportPreset::EXPORT_ALL_RESOURCES: { @@ -1071,6 +1110,8 @@ void EditorExport::_save() { config->set_value(section, "exclude_filter", preset->get_exclude_filter()); config->set_value(section, "export_path", preset->get_export_path()); config->set_value(section, "patch_list", preset->get_patches()); + config->set_value(section, "script_export_mode", preset->get_script_export_mode()); + config->set_value(section, "script_encryption_key", preset->get_script_encryption_key()); String option_section = "preset." + itos(i) + ".options"; @@ -1233,6 +1274,13 @@ void EditorExport::load_config() { preset->add_patch(patch_list[i]); } + if (config->has_section_key(section, "script_export_mode")) { + preset->set_script_export_mode(config->get_value(section, "script_export_mode")); + } + if (config->has_section_key(section, "script_encryption_key")) { + preset->set_script_encryption_key(config->get_value(section, "script_encryption_key")); + } + String option_section = "preset." + itos(index) + ".options"; List<String> options; diff --git a/editor/editor_export.h b/editor/editor_export.h index 4a675ab9c8..c7c2b76327 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -52,6 +52,12 @@ public: EXPORT_SELECTED_RESOURCES, }; + enum ScriptExportMode { + MODE_SCRIPT_TEXT, + MODE_SCRIPT_COMPILED, + MODE_SCRIPT_ENCRYPTED, + }; + private: Ref<EditorExportPlatform> platform; ExportFilter export_filter; @@ -75,6 +81,9 @@ private: String custom_features; + int script_mode; + String script_key; + protected: bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; @@ -118,6 +127,12 @@ public: void set_export_path(const String &p_path); String get_export_path() const; + void set_script_export_mode(int p_mode); + int get_script_export_mode() const; + + void set_script_encryption_key(const String &p_key); + String get_script_encryption_key() const; + const List<PropertyInfo> &get_properties() const { return properties; } EditorExportPreset(); @@ -260,6 +275,8 @@ class EditorExportPlugin : public Reference { friend class EditorExportPlatform; + Ref<EditorExportPreset> export_preset; + Vector<SharedObject> shared_objects; struct ExtraFile { String path; @@ -294,6 +311,9 @@ class EditorExportPlugin : public Reference { void _export_end_script(); protected: + void set_export_preset(const Ref<EditorExportPreset> &p_preset); + Ref<EditorExportPreset> get_export_preset() const; + void add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap); void add_shared_object(const String &p_path, const Vector<String> &tags); diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index ebab0a5687..654dfc62e0 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -999,6 +999,10 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { print_verbose("glTF: Mesh has targets"); Array targets = p["targets"]; + //ideally BLEND_SHAPE_MODE_RELATIVE since gltf2 stores in displacement + //but it could require a larger refactor? + mesh.mesh->set_blend_shape_mode(Mesh::BLEND_SHAPE_MODE_NORMALIZED); + if (j == 0) { Array target_names = extras.has("targetNames") ? (Array)extras["targetNames"] : Array(); for (int k = 0; k < targets.size(); k++) { @@ -1021,10 +1025,34 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array_copy[Mesh::ARRAY_INDEX] = Variant(); if (t.has("POSITION")) { - array_copy[Mesh::ARRAY_VERTEX] = _decode_accessor_as_vec3(state, t["POSITION"], true); + PoolVector<Vector3> varr = _decode_accessor_as_vec3(state, t["POSITION"], true); + PoolVector<Vector3> src_varr = array[Mesh::ARRAY_VERTEX]; + int size = src_varr.size(); + ERR_FAIL_COND_V(size == 0, ERR_PARSE_ERROR); + { + PoolVector<Vector3>::Write w_varr = varr.write(); + PoolVector<Vector3>::Read r_varr = varr.read(); + PoolVector<Vector3>::Read r_src_varr = src_varr.read(); + for (int l = 0; l < size; l++) { + w_varr[l] = r_varr[l] + r_src_varr[l]; + } + } + array_copy[Mesh::ARRAY_VERTEX] = varr; } if (t.has("NORMAL")) { - array_copy[Mesh::ARRAY_NORMAL] = _decode_accessor_as_vec3(state, t["NORMAL"], true); + PoolVector<Vector3> narr = _decode_accessor_as_vec3(state, t["NORMAL"], true); + PoolVector<Vector3> src_narr = array[Mesh::ARRAY_NORMAL]; + int size = src_narr.size(); + ERR_FAIL_COND_V(size == 0, ERR_PARSE_ERROR); + { + PoolVector<Vector3>::Write w_narr = narr.write(); + PoolVector<Vector3>::Read r_narr = narr.read(); + PoolVector<Vector3>::Read r_src_narr = src_narr.read(); + for (int l = 0; l < size; l++) { + w_narr[l] = r_narr[l] + r_src_narr[l]; + } + } + array_copy[Mesh::ARRAY_NORMAL] = narr; } if (t.has("TANGENT")) { PoolVector<Vector3> tangents_v3 = _decode_accessor_as_vec3(state, t["TANGENT"], true); @@ -1043,9 +1071,9 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { for (int l = 0; l < size4 / 4; l++) { - w4[l * 4 + 0] = r3[l].x; - w4[l * 4 + 1] = r3[l].y; - w4[l * 4 + 2] = r3[l].z; + w4[l * 4 + 0] = r3[l].x + r4[l * 4 + 0]; + w4[l * 4 + 1] = r3[l].y + r4[l * 4 + 1]; + w4[l * 4 + 2] = r3[l].z + r4[l * 4 + 2]; w4[l * 4 + 3] = r4[l * 4 + 3]; //copy flip value } } diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index ccaddbc0a8..8464dfd0aa 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -86,6 +86,7 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 Ref<Image> img; Ref<AtlasTexture> atex = p_from; + Ref<LargeTexture> ltex = p_from; if (atex.is_valid()) { Ref<Texture> tex = atex->get_atlas(); if (!tex.is_valid()) { @@ -93,6 +94,8 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 } Ref<Image> atlas = tex->get_data(); img = atlas->get_rect(atex->get_region()); + } else if (ltex.is_valid()) { + img = ltex->to_image(); } else { Ref<Texture> tex = p_from; img = tex->get_data(); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index 162953040b..c0e785d2a1 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -80,7 +80,7 @@ void ProjectExportDialog::popup_export() { _update_presets(); if (presets->get_current() >= 0) { - _edit_preset(presets->get_current()); // triggers rescan for templates if newly installed + _update_current_preset(); // triggers rescan for templates if newly installed } // Restore valid window bounds or pop up at default size. @@ -137,13 +137,18 @@ void ProjectExportDialog::_add_preset(int p_platform) { _edit_preset(EditorExport::get_singleton()->get_export_preset_count() - 1); } +void ProjectExportDialog::_update_current_preset() { + + _edit_preset(presets->get_current()); +} + void ProjectExportDialog::_update_presets() { updating = true; Ref<EditorExportPreset> current; if (presets->get_current() >= 0 && presets->get_current() < presets->get_item_count()) - current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + current = get_current_preset(); int current_idx = -1; presets->clear(); @@ -300,12 +305,33 @@ void ProjectExportDialog::_edit_preset(int p_index) { _update_export_all(); minimum_size_changed(); + int script_export_mode = current->get_script_export_mode(); + script_mode->select(script_export_mode); + + String key = current->get_script_encryption_key(); + if (!updating_script_key) { + script_key->set_text(key); + } + if (script_export_mode == EditorExportPreset::MODE_SCRIPT_ENCRYPTED) { + script_key->set_editable(true); + + bool key_valid = _validate_script_encryption_key(key); + if (key_valid) { + script_key_error->hide(); + } else { + script_key_error->show(); + } + } else { + script_key->set_editable(false); + script_key_error->hide(); + } + updating = false; } void ProjectExportDialog::_update_feature_list() { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Set<String> fset; @@ -342,7 +368,7 @@ void ProjectExportDialog::_custom_features_changed(const String &p_text) { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); current->set_custom_features(p_text); @@ -359,7 +385,7 @@ void ProjectExportDialog::_patch_button_pressed(Object *p_item, int p_column, in patch_index = ti->get_metadata(0); - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); if (p_id == 0) { @@ -379,7 +405,7 @@ void ProjectExportDialog::_patch_edited() { return; int index = item->get_metadata(0); - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Vector<String> patches = current->get_patches(); @@ -397,7 +423,7 @@ void ProjectExportDialog::_patch_edited() { void ProjectExportDialog::_patch_selected(const String &p_path) { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Vector<String> patches = current->get_patches(); @@ -410,25 +436,25 @@ void ProjectExportDialog::_patch_selected(const String &p_path) { current->set_patch(patch_index, ProjectSettings::get_singleton()->get_resource_path().path_to(p_path) + enabled); } - _edit_preset(presets->get_current()); + _update_current_preset(); } void ProjectExportDialog::_patch_deleted() { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Vector<String> patches = current->get_patches(); if (patch_index < patches.size()) { current->remove_patch(patch_index); - _edit_preset(presets->get_current()); + _update_current_preset(); } } void ProjectExportDialog::_update_parameters(const String &p_edited_property) { - _edit_preset(presets->get_current()); + _update_current_preset(); } void ProjectExportDialog::_runnable_pressed() { @@ -436,7 +462,7 @@ void ProjectExportDialog::_runnable_pressed() { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); if (runnable->is_pressed()) { @@ -460,7 +486,7 @@ void ProjectExportDialog::_name_changed(const String &p_string) { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); current->set_name(p_string); @@ -468,34 +494,77 @@ void ProjectExportDialog::_name_changed(const String &p_string) { } void ProjectExportDialog::set_export_path(const String &p_value) { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); current->set_export_path(p_value); } String ProjectExportDialog::get_export_path() { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND_V(current.is_null(), String("")); return current->get_export_path(); } +Ref<EditorExportPreset> ProjectExportDialog::get_current_preset() const { + + return EditorExport::get_singleton()->get_export_preset(presets->get_current()); +} + void ProjectExportDialog::_export_path_changed(const StringName &p_property, const Variant &p_value) { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); current->set_export_path(p_value); _update_presets(); } +void ProjectExportDialog::_script_export_mode_changed(int p_mode) { + + if (updating) + return; + + Ref<EditorExportPreset> current = get_current_preset(); + ERR_FAIL_COND(current.is_null()); + + current->set_script_export_mode(p_mode); + + _update_current_preset(); +} + +void ProjectExportDialog::_script_encryption_key_changed(const String &p_key) { + + if (updating) + return; + + Ref<EditorExportPreset> current = get_current_preset(); + ERR_FAIL_COND(current.is_null()); + + current->set_script_encryption_key(p_key); + + updating_script_key = true; + _update_current_preset(); + updating_script_key = false; +} + +bool ProjectExportDialog::_validate_script_encryption_key(const String &p_key) { + + bool is_valid = false; + + if (!p_key.empty() && p_key.is_valid_hex_number(false) && p_key.length() == 64) { + is_valid = true; + } + return is_valid; +} + void ProjectExportDialog::_duplicate_preset() { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); if (current.is_null()) return; @@ -550,7 +619,7 @@ void ProjectExportDialog::_duplicate_preset() { void ProjectExportDialog::_delete_preset() { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); if (current.is_null()) return; @@ -688,12 +757,12 @@ void ProjectExportDialog::drop_data_fw(const Point2 &p_point, const Variant &p_d to_pos--; } - Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> preset = get_current_preset(); String patch = preset->get_patch(from_pos); preset->remove_patch(from_pos); preset->add_patch(patch, to_pos); - _edit_preset(presets->get_current()); + _update_current_preset(); } } @@ -702,7 +771,7 @@ void ProjectExportDialog::_export_type_changed(int p_which) { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); if (current.is_null()) return; @@ -717,7 +786,7 @@ void ProjectExportDialog::_filter_changed(const String &p_filter) { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); if (current.is_null()) return; @@ -731,7 +800,7 @@ void ProjectExportDialog::_fill_resource_tree() { include_label->hide(); include_margin->hide(); - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); if (current.is_null()) return; @@ -793,7 +862,7 @@ void ProjectExportDialog::_tree_changed() { if (updating) return; - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); if (current.is_null()) return; @@ -818,7 +887,7 @@ void ProjectExportDialog::_export_pck_zip() { void ProjectExportDialog::_export_pck_zip_selected(const String &p_path) { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Ref<EditorExportPlatform> platform = current->get_platform(); ERR_FAIL_COND(platform.is_null()); @@ -857,7 +926,7 @@ void ProjectExportDialog::_validate_export_path(const String &p_path) { void ProjectExportDialog::_export_project() { - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Ref<EditorExportPlatform> platform = current->get_platform(); ERR_FAIL_COND(platform.is_null()); @@ -895,7 +964,7 @@ void ProjectExportDialog::_export_project_to_path(const String &p_path) { default_filename = p_path.get_file().get_basename(); EditorSettings::get_singleton()->set_project_metadata("export_options", "default_filename", default_filename); - Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + Ref<EditorExportPreset> current = get_current_preset(); ERR_FAIL_COND(current.is_null()); Ref<EditorExportPlatform> platform = current->get_platform(); ERR_FAIL_COND(platform.is_null()); @@ -971,6 +1040,8 @@ void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_open_export_template_manager", &ProjectExportDialog::_open_export_template_manager); ClassDB::bind_method("_validate_export_path", &ProjectExportDialog::_validate_export_path); ClassDB::bind_method("_export_path_changed", &ProjectExportDialog::_export_path_changed); + ClassDB::bind_method("_script_export_mode_changed", &ProjectExportDialog::_script_export_mode_changed); + ClassDB::bind_method("_script_encryption_key_changed", &ProjectExportDialog::_script_encryption_key_changed); ClassDB::bind_method("_export_project", &ProjectExportDialog::_export_project); ClassDB::bind_method("_export_project_to_path", &ProjectExportDialog::_export_project_to_path); ClassDB::bind_method("_export_all", &ProjectExportDialog::_export_all); @@ -980,6 +1051,7 @@ void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_tab_changed", &ProjectExportDialog::_tab_changed); ClassDB::bind_method("set_export_path", &ProjectExportDialog::set_export_path); ClassDB::bind_method("get_export_path", &ProjectExportDialog::get_export_path); + ClassDB::bind_method("get_current_preset", &ProjectExportDialog::get_current_preset); ADD_PROPERTY(PropertyInfo(Variant::STRING, "export_path"), "set_export_path", "get_export_path"); } @@ -1127,6 +1199,25 @@ ProjectExportDialog::ProjectExportDialog() { feature_vb->add_margin_child(TTR("Feature List:"), features_panel, true); sections->add_child(feature_vb); + updating_script_key = false; + + VBoxContainer *script_vb = memnew(VBoxContainer); + script_vb->set_name(TTR("Script")); + script_mode = memnew(OptionButton); + script_vb->add_margin_child(TTR("Script Export Mode:"), script_mode); + script_mode->add_item(TTR("Text"), (int)EditorExportPreset::MODE_SCRIPT_TEXT); + script_mode->add_item(TTR("Compiled"), (int)EditorExportPreset::MODE_SCRIPT_COMPILED); + script_mode->add_item(TTR("Encrypted (Provide Key Below)"), (int)EditorExportPreset::MODE_SCRIPT_ENCRYPTED); + script_mode->connect("item_selected", this, "_script_export_mode_changed"); + script_key = memnew(LineEdit); + script_key->connect("text_changed", this, "_script_encryption_key_changed"); + script_key_error = memnew(Label); + script_key_error->set_text("- " + TTR("Invalid Encryption Key (must be 64 characters long)")); + script_key_error->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("error_color", "Editor")); + script_vb->add_margin_child(TTR("Script Encryption Key (256-bits as hex):"), script_key); + script_vb->add_child(script_key_error); + sections->add_child(script_vb); + sections->connect("tab_changed", this, "_tab_changed"); //disable by default @@ -1135,6 +1226,7 @@ ProjectExportDialog::ProjectExportDialog() { runnable->set_disabled(true); duplicate_preset->set_disabled(true); delete_preset->set_disabled(true); + script_key_error->hide(); sections->hide(); parameters->edit(NULL); diff --git a/editor/project_export.h b/editor/project_export.h index 9d8fd78290..d24c51509a 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -100,6 +100,10 @@ private: LineEdit *custom_features; RichTextLabel *custom_feature_display; + OptionButton *script_mode; + LineEdit *script_key; + Label *script_key_error; + Label *export_error; HBoxContainer *export_templates_error; @@ -119,6 +123,7 @@ private: void _delete_preset_confirm(); void _update_export_all(); + void _update_current_preset(); void _update_presets(); void _export_type_changed(int p_which); @@ -154,6 +159,11 @@ private: void _update_feature_list(); void _custom_features_changed(const String &p_text); + bool updating_script_key; + void _script_export_mode_changed(int p_mode); + void _script_encryption_key_changed(const String &p_key); + bool _validate_script_encryption_key(const String &p_key); + void _tab_changed(int); protected: @@ -166,6 +176,8 @@ public: void set_export_path(const String &p_value); String get_export_path(); + Ref<EditorExportPreset> get_current_preset() const; + ProjectExportDialog(); ~ProjectExportDialog(); }; diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index a31fa9426a..6c79fad82c 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -1615,7 +1615,10 @@ void SceneTreeDock::_delete_confirm() { } void SceneTreeDock::_update_script_button() { - if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 1) { + if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 0) { + button_create_script->hide(); + button_clear_script->hide(); + } else if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 1) { Node *n = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list()[0]; if (n->get_script().is_null()) { button_create_script->show(); @@ -1626,6 +1629,14 @@ void SceneTreeDock::_update_script_button() { } } else { button_create_script->show(); + List<Node *> selection = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list(); + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { + Node *n = E->get(); + if (!n->get_script().is_null()) { + button_clear_script->show(); + return; + } + } button_clear_script->hide(); } } |