Skip to content

Commit

Permalink
Add is_built_in() method to Resource
Browse files Browse the repository at this point in the history
  • Loading branch information
KoBeWi committed Nov 4, 2021
1 parent 78931aa commit e393c2a
Show file tree
Hide file tree
Showing 12 changed files with 28 additions and 34 deletions.
1 change: 1 addition & 0 deletions core/io/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class Resource : public RefCounted {

virtual void set_path(const String &p_path, bool p_take_over = false);
String get_path() const;
_FORCE_INLINE_ bool is_built_in() const { return path_cache.is_empty() || path_cache.find("::") != -1 || path_cache.begins_with("local://"); }

static String generate_scene_unique_id();
void set_scene_unique_id(const String &p_id);
Expand Down
8 changes: 4 additions & 4 deletions core/io/resource_format_binary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1572,7 +1572,7 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
return; // don't save it
}

if (res->get_path().length() && res->get_path().find("::") == -1) {
if (!res->is_built_in()) {
f->store_32(OBJECT_EXTERNAL_RESOURCE_INDEX);
f->store_32(external_resources[res]);
} else {
Expand Down Expand Up @@ -1743,7 +1743,7 @@ void ResourceFormatSaverBinaryInstance::_find_resources(const Variant &p_variant
return;
}

if (!p_main && (!bundle_resources) && res->get_path().length() && res->get_path().find("::") == -1) {
if (!p_main && (!bundle_resources) && !res->is_built_in()) {
if (res->get_path() == path) {
ERR_PRINT("Circular reference to resource being saved found: '" + local_path + "' will be null next time it's loaded.");
return;
Expand Down Expand Up @@ -1978,7 +1978,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
Set<String> used_unique_ids;

for (RES &r : saved_resources) {
if (r->get_path() == "" || r->get_path().find("::") != -1) {
if (r->is_built_in()) {
if (r->get_scene_unique_id() != "") {
if (used_unique_ids.has(r->get_scene_unique_id())) {
r->set_scene_unique_id("");
Expand All @@ -1992,7 +1992,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
Map<RES, int> resource_map;
int res_index = 0;
for (RES &r : saved_resources) {
if (r->get_path() == "" || r->get_path().find("::") != -1) {
if (r->is_built_in()) {
if (r->get_scene_unique_id() == "") {
String new_id;

Expand Down
2 changes: 1 addition & 1 deletion core/object/object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1475,7 +1475,7 @@ void Object::_clear_internal_resource_paths(const Variant &p_var) {
return;
}

if (!r->get_path().begins_with("res://") || r->get_path().find("::") == -1) {
if (!r->is_built_in()) {
return; //not an internal resource
}

Expand Down
2 changes: 1 addition & 1 deletion editor/editor_inspector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3490,7 +3490,7 @@ void EditorInspector::_update_script_class_properties(const Object &p_object, Li
String path = s->get_path();
String name = EditorNode::get_editor_data().script_class_get_name(path);
if (name.is_empty()) {
if (!path.is_empty() && path.find("::") == -1) {
if (!s->is_built_in()) {
name = path.get_file();
} else {
name = TTR("Built-in script");
Expand Down
24 changes: 9 additions & 15 deletions editor/plugins/script_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,12 +227,6 @@ void ScriptEditorBase::_bind_methods() {
ADD_SIGNAL(MethodInfo("replace_in_files_requested", PropertyInfo(Variant::STRING, "text")));
}

static bool _is_built_in_script(Script *p_script) {
String path = p_script->get_path();

return path.find("::") != -1;
}

class EditorScriptCodeCompletionCache : public ScriptCodeCompletionCache {
struct Cache {
uint64_t time_loaded = 0;
Expand Down Expand Up @@ -764,7 +758,7 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) {
if (p_save && file.is_valid()) {
// Do not try to save internal scripts, but prompt to save in-memory
// scripts which are not saved to disk yet (have empty path).
if (file->get_path().find("local://") == -1 && file->get_path().find("::") == -1) {
if (file->is_built_in()) {
save_current_script();
}
}
Expand Down Expand Up @@ -910,7 +904,7 @@ void ScriptEditor::_resave_scripts(const String &p_str) {

RES script = se->get_edited_resource();

if (script->get_path() == "" || script->get_path().find("local://") != -1 || script->get_path().find("::") != -1) {
if (script->is_built_in()) {
continue; //internal script, who cares
}

Expand Down Expand Up @@ -951,7 +945,7 @@ void ScriptEditor::_reload_scripts() {

RES edited_res = se->get_edited_resource();

if (edited_res->get_path() == "" || edited_res->get_path().find("local://") != -1 || edited_res->get_path().find("::") != -1) {
if (edited_res->is_built_in()) {
continue; //internal script, who cares
}

Expand Down Expand Up @@ -995,7 +989,7 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource> &p_res) {

RES script = se->get_edited_resource();

if (script->get_path() == "" || script->get_path().find("local://") != -1 || script->get_path().find("::") != -1) {
if (script->is_built_in()) {
continue; //internal script, who cares
}

Expand Down Expand Up @@ -1037,7 +1031,7 @@ bool ScriptEditor::_test_script_times_on_disk(RES p_for_script) {
continue;
}

if (edited_res->get_path() == "" || edited_res->get_path().find("local://") != -1 || edited_res->get_path().find("::") != -1) {
if (edited_res->is_built_in()) {
continue; //internal script, who cares
}

Expand Down Expand Up @@ -1624,7 +1618,7 @@ void ScriptEditor::close_builtin_scripts_from_scene(const String &p_scene) {
continue;
}

if (script->get_path().find("::") != -1 && script->get_path().begins_with(p_scene)) { //is an internal script and belongs to scene being closed
if (script->is_built_in() && script->get_path().begins_with(p_scene)) { //is an internal script and belongs to scene being closed
_close_tab(i);
i--;
}
Expand Down Expand Up @@ -2450,7 +2444,7 @@ void ScriptEditor::save_all_scripts() {
se->apply_code();
}

if (edited_res->get_path() != "" && edited_res->get_path().find("local://") == -1 && edited_res->get_path().find("::") == -1) {
if (!edited_res->is_built_in()) {
Ref<TextFile> text_file = edited_res;
Ref<Script> script = edited_res;

Expand Down Expand Up @@ -2570,7 +2564,7 @@ void ScriptEditor::_add_callback(Object *p_obj, const String &p_function, const
script_list->select(script_list->find_metadata(i));

// Save the current script so the changes can be picked up by an external editor.
if (!_is_built_in_script(script.ptr())) { // But only if it's not built-in script.
if (!script.ptr()->is_built_in()) { // But only if it's not built-in script.
save_current_script();
}

Expand Down Expand Up @@ -3858,7 +3852,7 @@ void ScriptEditorPlugin::edit(Object *p_object) {
Script *p_script = Object::cast_to<Script>(p_object);
String res_path = p_script->get_path().get_slice("::", 0);

if (_is_built_in_script(p_script)) {
if (p_script->is_built_in()) {
if (ResourceLoader::get_resource_type(res_path) == "PackedScene") {
if (!EditorNode::get_singleton()->is_scene_open(res_path)) {
EditorNode::get_singleton()->load_scene(res_path);
Expand Down
4 changes: 2 additions & 2 deletions editor/plugins/script_text_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ void ScriptTextEditor::ensure_focus() {
String ScriptTextEditor::get_name() {
String name;

if (script->get_path().find("local://") == -1 && script->get_path().find("::") == -1) {
if (!script->is_built_in()) {
name = script->get_path().get_file();
if (is_unsaved()) {
if (script->get_path().is_empty()) {
Expand Down Expand Up @@ -658,7 +658,7 @@ void ScriptEditor::_update_modified_scripts_for_external_editor(Ref<Script> p_fo
continue;
}

if (script->get_path() == "" || script->get_path().find("local://") != -1 || script->get_path().find("::") != -1) {
if (script->is_built_in()) {
continue; //internal script, who cares, though weird
}

Expand Down
5 changes: 2 additions & 3 deletions editor/plugins/shader_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -482,8 +482,7 @@ void ShaderEditor::_check_for_external_edit() {
return;
}

// internal shader.
if (shader->get_path() == "" || shader->get_path().find("local://") != -1 || shader->get_path().find("::") != -1) {
if (shader->is_built_in()) {
return;
}

Expand Down Expand Up @@ -530,7 +529,7 @@ void ShaderEditor::save_external_data(const String &p_str) {
}

apply_shaders();
if (shader->get_path() != "" && shader->get_path().find("local://") == -1 && shader->get_path().find("::") == -1) {
if (!shader->is_built_in()) {
//external shader, save it
ResourceSaver::save(shader->get_path(), shader);
}
Expand Down
2 changes: 1 addition & 1 deletion editor/plugins/text_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ void TextEditor::_load_theme_settings() {
String TextEditor::get_name() {
String name;

if (text_file->get_path().find("local://") == -1 && text_file->get_path().find("::") == -1) {
if (!text_file->is_built_in()) {
name = text_file->get_path().get_file();
if (is_unsaved()) {
if (text_file->get_path().is_empty()) {
Expand Down
4 changes: 2 additions & 2 deletions editor/scene_tree_dock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3152,7 +3152,7 @@ void SceneTreeDock::_create_remap_for_node(Node *p_node, Map<RES, RES> &r_remap)
}
}

if ((res->get_path() == "" || res->get_path().find("::") > -1) && !r_remap.has(res)) {
if (res->is_built_in() && !r_remap.has(res)) {
_create_remap_for_resource(res, r_remap);
}
}
Expand All @@ -3179,7 +3179,7 @@ void SceneTreeDock::_create_remap_for_resource(RES p_resource, Map<RES, RES> &r_
if (v.is_ref()) {
RES res = v;
if (res.is_valid()) {
if ((res->get_path() == "" || res->get_path().find("::") > -1) && !r_remap.has(res)) {
if (res->is_built_in() && !r_remap.has(res)) {
_create_remap_for_resource(res, r_remap);
}
}
Expand Down
2 changes: 1 addition & 1 deletion modules/visual_script/visual_script_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2582,7 +2582,7 @@ void VisualScriptEditor::reload_text() {
String VisualScriptEditor::get_name() {
String name;

if (script->get_path().find("local://") == -1 && script->get_path().find("::") == -1) {
if (!script->is_built_in()) {
name = script->get_path().get_file();
if (is_unsaved()) {
if (script->get_path().is_empty()) {
Expand Down
2 changes: 1 addition & 1 deletion scene/resources/packed_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1651,7 +1651,7 @@ Node *PackedScene::instantiate(GenEditState p_edit_state) const {
s->set_scene_instance_state(state);
}

if (get_path() != "" && get_path().find("::") == -1) {
if (!is_built_in()) {
s->set_scene_file_path(get_path());
}

Expand Down
6 changes: 3 additions & 3 deletions scene/resources/resource_format_text.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1492,7 +1492,7 @@ String ResourceFormatSaverTextInstance::_write_resource(const RES &res) {
} else {
if (internal_resources.has(res)) {
return "SubResource( \"" + internal_resources[res] + "\" )";
} else if (res->get_path().length() && res->get_path().find("::") == -1) {
} else if (!res->is_built_in()) {
if (res->get_path() == local_path) { //circular reference attempt
return "null";
}
Expand All @@ -1515,7 +1515,7 @@ void ResourceFormatSaverTextInstance::_find_resources(const Variant &p_variant,
return;
}

if (!p_main && (!bundle_resources) && res->get_path().length() && res->get_path().find("::") == -1) {
if (!p_main && (!bundle_resources) && !res->is_built_in()) {
if (res->get_path() == local_path) {
ERR_PRINT("Circular reference to resource being saved found: '" + local_path + "' will be null next time it's loaded.");
return;
Expand Down Expand Up @@ -1728,7 +1728,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const RES &p_r

for (List<RES>::Element *E = saved_resources.front(); E; E = E->next()) {
RES res = E->get();
if (E->next() && (res->get_path() == "" || res->get_path().find("::") != -1)) {
if (E->next() && res->is_built_in()) {
if (res->get_scene_unique_id() != "") {
if (used_unique_ids.has(res->get_scene_unique_id())) {
res->set_scene_unique_id(""); // Repeated.
Expand Down

0 comments on commit e393c2a

Please sign in to comment.