Browse Source

Add is_built_in() method to Resource

kobewi 4 years ago
parent
commit
e393c2a734

+ 1 - 0
core/io/resource.h

@@ -103,6 +103,7 @@ public:
 
 	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);

+ 4 - 4
core/io/resource_format_binary.cpp

@@ -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 {
@@ -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;
@@ -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("");
@@ -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;
 

+ 1 - 1
core/object/object.cpp

@@ -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
 			}
 

+ 1 - 1
editor/editor_inspector.cpp

@@ -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");

+ 9 - 15
editor/plugins/script_editor_plugin.cpp

@@ -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;
@@ -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();
 			}
 		}
@@ -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
 		}
 
@@ -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
 		}
 
@@ -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
 		}
 
@@ -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
 			}
 
@@ -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--;
 			}
@@ -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;
 
@@ -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();
 		}
 
@@ -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);

+ 2 - 2
editor/plugins/script_text_editor.cpp

@@ -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()) {
@@ -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
 		}
 

+ 2 - 3
editor/plugins/shader_editor_plugin.cpp

@@ -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;
 	}
 
@@ -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);
 	}

+ 1 - 1
editor/plugins/text_editor.cpp

@@ -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()) {

+ 2 - 2
editor/scene_tree_dock.cpp

@@ -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);
 				}
 			}
@@ -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);
 				}
 			}

+ 1 - 1
modules/visual_script/visual_script_editor.cpp

@@ -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()) {

+ 1 - 1
scene/resources/packed_scene.cpp

@@ -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());
 	}
 

+ 3 - 3
scene/resources/resource_format_text.cpp

@@ -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";
 			}
@@ -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;
@@ -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.