Skip to content

Commit

Permalink
Merge pull request #41190 from Xrayez/main-loop-type-class
Browse files Browse the repository at this point in the history
Accept global classes  for `MainLoop` type in project settings
  • Loading branch information
akien-mga authored Sep 2, 2020
2 parents 3922883 + 871b1d7 commit 358e209
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1805,7 +1805,6 @@ bool Main::start() {
}
}

String main_loop_type;
#ifdef TOOLS_ENABLED
if (doc_tool != "") {
Engine::get_singleton()->set_editor_hint(
Expand Down Expand Up @@ -1900,6 +1899,7 @@ bool Main::start() {
if (editor) {
main_loop = memnew(SceneTree);
};
String main_loop_type = GLOBAL_DEF("application/run/main_loop_type", "SceneTree");

if (script != "") {
Ref<Script> script_res = ResourceLoader::load(script);
Expand Down Expand Up @@ -1930,9 +1930,23 @@ bool Main::start() {
} else {
return false;
}

} else {
main_loop_type = GLOBAL_DEF("application/run/main_loop_type", "");
} else { // Not based on script path.
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);
Ref<Script> script_res = ResourceLoader::load(script_path);
StringName script_base = ScriptServer::get_global_class_native_base(main_loop_type);
Object *obj = ClassDB::instance(script_base);
MainLoop *script_loop = Object::cast_to<MainLoop>(obj);
if (!script_loop) {
if (obj) {
memdelete(obj);
}
DisplayServer::get_singleton()->alert("Error: Invalid MainLoop script base type: " + script_base);
ERR_FAIL_V_MSG(false, vformat("The global class %s does not inherit from SceneTree or MainLoop.", main_loop_type));
}
script_loop->set_init_script(script_res);
main_loop = script_loop;
}
}

if (!main_loop && main_loop_type == "") {
Expand Down

0 comments on commit 358e209

Please sign in to comment.