Node create dialog filtering optimization
Avoid loading the same scripts again and parse them when updating the node type tree.
This commit is contained in:
@ -870,7 +870,7 @@ bool EditorData::script_class_is_parent(const String &p_class, const String &p_i
|
||||
if (!ScriptServer::is_global_class(p_class))
|
||||
return false;
|
||||
String base = script_class_get_base(p_class);
|
||||
Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class), "Script");
|
||||
Ref<Script> script = script_class_load_script(p_class);
|
||||
Ref<Script> base_script = script->get_base_script();
|
||||
|
||||
while (p_inherits != base) {
|
||||
@ -889,12 +889,7 @@ bool EditorData::script_class_is_parent(const String &p_class, const String &p_i
|
||||
|
||||
StringName EditorData::script_class_get_base(const String &p_class) const {
|
||||
|
||||
if (!ScriptServer::is_global_class(p_class))
|
||||
return StringName();
|
||||
|
||||
String path = ScriptServer::get_global_class_path(p_class);
|
||||
|
||||
Ref<Script> script = ResourceLoader::load(path, "Script");
|
||||
Ref<Script> script = script_class_load_script(p_class);
|
||||
if (script.is_null())
|
||||
return StringName();
|
||||
|
||||
@ -910,7 +905,7 @@ Object *EditorData::script_class_instance(const String &p_class) {
|
||||
if (ScriptServer::is_global_class(p_class)) {
|
||||
Object *obj = ClassDB::instance(ScriptServer::get_global_class_native_base(p_class));
|
||||
if (obj) {
|
||||
RES script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class));
|
||||
Ref<Script> script = script_class_load_script(p_class);
|
||||
if (script.is_valid())
|
||||
obj->set_script(script.get_ref_ptr());
|
||||
return obj;
|
||||
@ -919,6 +914,15 @@ Object *EditorData::script_class_instance(const String &p_class) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Ref<Script> EditorData::script_class_load_script(const String &p_class) const {
|
||||
|
||||
if (!ScriptServer::is_global_class(p_class))
|
||||
return Ref<Script>();
|
||||
|
||||
String path = ScriptServer::get_global_class_path(p_class);
|
||||
return ResourceLoader::load(path, "Script");
|
||||
}
|
||||
|
||||
void EditorData::script_class_set_icon_path(const String &p_class, const String &p_icon_path) {
|
||||
_script_class_icon_paths[p_class] = p_icon_path;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user