Merge pull request #69272 from rune-scape/rune-avoid-global-base
Avoid using `get_global_class_native_base`
This commit is contained in:
commit
c392093668
@ -945,11 +945,11 @@ StringName EditorData::script_class_get_base(const String &p_class) const {
|
|||||||
|
|
||||||
Variant EditorData::script_class_instance(const String &p_class) {
|
Variant EditorData::script_class_instance(const String &p_class) {
|
||||||
if (ScriptServer::is_global_class(p_class)) {
|
if (ScriptServer::is_global_class(p_class)) {
|
||||||
Variant obj = ClassDB::instantiate(ScriptServer::get_global_class_native_base(p_class));
|
|
||||||
if (obj) {
|
|
||||||
Ref<Script> script = script_class_load_script(p_class);
|
Ref<Script> script = script_class_load_script(p_class);
|
||||||
if (script.is_valid()) {
|
if (script.is_valid()) {
|
||||||
((Object *)obj)->set_script(script);
|
Object *obj = ClassDB::instantiate(script->get_instance_base_type());
|
||||||
|
if (obj) {
|
||||||
|
obj->set_script(script);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
@ -1153,12 +1153,14 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
|
|||||||
if (TOOL_CREATE_FAVORITE == p_tool) {
|
if (TOOL_CREATE_FAVORITE == p_tool) {
|
||||||
String name = selected_favorite_root.get_slicec(' ', 0);
|
String name = selected_favorite_root.get_slicec(' ', 0);
|
||||||
if (ScriptServer::is_global_class(name)) {
|
if (ScriptServer::is_global_class(name)) {
|
||||||
new_node = Object::cast_to<Node>(ClassDB::instantiate(ScriptServer::get_global_class_native_base(name)));
|
|
||||||
Ref<Script> scr = ResourceLoader::load(ScriptServer::get_global_class_path(name), "Script");
|
Ref<Script> scr = ResourceLoader::load(ScriptServer::get_global_class_path(name), "Script");
|
||||||
if (new_node && scr.is_valid()) {
|
if (scr.is_valid()) {
|
||||||
|
new_node = Object::cast_to<Node>(ClassDB::instantiate(scr->get_instance_base_type()));
|
||||||
|
if (new_node) {
|
||||||
new_node->set_script(scr);
|
new_node->set_script(scr);
|
||||||
new_node->set_name(name);
|
new_node->set_name(name);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
new_node = Object::cast_to<Node>(ClassDB::instantiate(selected_favorite_root));
|
new_node = Object::cast_to<Node>(ClassDB::instantiate(selected_favorite_root));
|
||||||
}
|
}
|
||||||
|
@ -2660,7 +2660,11 @@ bool Main::start() {
|
|||||||
if (!editor && !ClassDB::class_exists(main_loop_type) && ScriptServer::is_global_class(main_loop_type)) {
|
if (!editor && !ClassDB::class_exists(main_loop_type) && ScriptServer::is_global_class(main_loop_type)) {
|
||||||
String script_path = ScriptServer::get_global_class_path(main_loop_type);
|
String script_path = ScriptServer::get_global_class_path(main_loop_type);
|
||||||
Ref<Script> script_res = ResourceLoader::load(script_path);
|
Ref<Script> script_res = ResourceLoader::load(script_path);
|
||||||
StringName script_base = ScriptServer::get_global_class_native_base(main_loop_type);
|
if (script_res.is_null()) {
|
||||||
|
OS::get_singleton()->alert("Error: Could not load MainLoop script type: " + main_loop_type);
|
||||||
|
ERR_FAIL_V_MSG(false, vformat("Could not load global class %s.", main_loop_type));
|
||||||
|
}
|
||||||
|
StringName script_base = script_res->get_instance_base_type();
|
||||||
Object *obj = ClassDB::instantiate(script_base);
|
Object *obj = ClassDB::instantiate(script_base);
|
||||||
MainLoop *script_loop = Object::cast_to<MainLoop>(obj);
|
MainLoop *script_loop = Object::cast_to<MainLoop>(obj);
|
||||||
if (!script_loop) {
|
if (!script_loop) {
|
||||||
|
@ -494,8 +494,8 @@ GDScriptParser::DataType GDScriptAnalyzer::resolve_datatype(GDScriptParser::Type
|
|||||||
result = ref->get_parser()->head->get_datatype();
|
result = ref->get_parser()->head->get_datatype();
|
||||||
} else {
|
} else {
|
||||||
result.kind = GDScriptParser::DataType::SCRIPT;
|
result.kind = GDScriptParser::DataType::SCRIPT;
|
||||||
result.native_type = ScriptServer::get_global_class_native_base(first);
|
|
||||||
result.script_type = ResourceLoader::load(path, "Script");
|
result.script_type = ResourceLoader::load(path, "Script");
|
||||||
|
result.native_type = result.script_type->get_instance_base_type();
|
||||||
result.script_path = path;
|
result.script_path = path;
|
||||||
result.is_constant = true;
|
result.is_constant = true;
|
||||||
result.is_meta_type = false;
|
result.is_meta_type = false;
|
||||||
@ -2733,21 +2733,13 @@ GDScriptParser::DataType GDScriptAnalyzer::make_global_class_meta_type(const Str
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
|
return ref->get_parser()->head->get_datatype();
|
||||||
type.kind = GDScriptParser::DataType::CLASS;
|
|
||||||
type.builtin_type = Variant::OBJECT;
|
|
||||||
type.native_type = ScriptServer::get_global_class_native_base(p_class_name);
|
|
||||||
type.class_type = ref->get_parser()->head;
|
|
||||||
type.script_path = ref->get_parser()->script_path;
|
|
||||||
type.is_constant = true;
|
|
||||||
type.is_meta_type = true;
|
|
||||||
return type;
|
|
||||||
} else {
|
} else {
|
||||||
type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
|
type.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
|
||||||
type.kind = GDScriptParser::DataType::SCRIPT;
|
type.kind = GDScriptParser::DataType::SCRIPT;
|
||||||
type.builtin_type = Variant::OBJECT;
|
type.builtin_type = Variant::OBJECT;
|
||||||
type.native_type = ScriptServer::get_global_class_native_base(p_class_name);
|
|
||||||
type.script_type = ResourceLoader::load(path, "Script");
|
type.script_type = ResourceLoader::load(path, "Script");
|
||||||
|
type.native_type = type.script_type->get_instance_base_type();
|
||||||
type.script_path = path;
|
type.script_path = path;
|
||||||
type.is_constant = true;
|
type.is_constant = true;
|
||||||
type.is_meta_type = true;
|
type.is_meta_type = true;
|
||||||
|
@ -3802,16 +3802,19 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node
|
|||||||
break;
|
break;
|
||||||
case GDScriptParser::DataType::SCRIPT: {
|
case GDScriptParser::DataType::SCRIPT: {
|
||||||
StringName class_name;
|
StringName class_name;
|
||||||
if (export_type.script_type != nullptr && export_type.script_type.is_valid()) {
|
StringName native_base;
|
||||||
|
if (export_type.script_type.is_valid()) {
|
||||||
class_name = export_type.script_type->get_language()->get_global_class_name(export_type.script_type->get_path());
|
class_name = export_type.script_type->get_language()->get_global_class_name(export_type.script_type->get_path());
|
||||||
|
native_base = export_type.script_type->get_instance_base_type();
|
||||||
}
|
}
|
||||||
if (class_name == StringName()) {
|
if (class_name == StringName()) {
|
||||||
Ref<Script> script = ResourceLoader::load(export_type.script_path, SNAME("Script"));
|
Ref<Script> script = ResourceLoader::load(export_type.script_path, SNAME("Script"));
|
||||||
if (script.is_valid()) {
|
if (script.is_valid()) {
|
||||||
class_name = script->get_language()->get_global_class_name(export_type.script_path);
|
class_name = script->get_language()->get_global_class_name(export_type.script_path);
|
||||||
|
native_base = script->get_instance_base_type();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (class_name != StringName() && ClassDB::is_parent_class(ScriptServer::get_global_class_native_base(class_name), SNAME("Resource"))) {
|
if (class_name != StringName() && native_base != StringName() && ClassDB::is_parent_class(native_base, SNAME("Resource"))) {
|
||||||
variable->export_info.type = Variant::OBJECT;
|
variable->export_info.type = Variant::OBJECT;
|
||||||
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
|
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
|
||||||
variable->export_info.hint_string = class_name;
|
variable->export_info.hint_string = class_name;
|
||||||
|
Loading…
Reference in New Issue
Block a user