diff options
Diffstat (limited to 'main')
| -rw-r--r-- | main/SCsub | 8 | ||||
| -rw-r--r-- | main/main.cpp | 22 |
2 files changed, 24 insertions, 6 deletions
diff --git a/main/SCsub b/main/SCsub index ebadefd450..87d64e48f9 100644 --- a/main/SCsub +++ b/main/SCsub @@ -15,7 +15,9 @@ if env["tests"]: env_main.Depends("#main/splash.gen.h", "#main/splash.png") env_main.CommandNoCache( - "#main/splash.gen.h", "#main/splash.png", env.Run(main_builders.make_splash, "Building splash screen header."), + "#main/splash.gen.h", + "#main/splash.png", + env.Run(main_builders.make_splash, "Building splash screen header."), ) env_main.Depends("#main/splash_editor.gen.h", "#main/splash_editor.png") @@ -27,7 +29,9 @@ env_main.CommandNoCache( env_main.Depends("#main/app_icon.gen.h", "#main/app_icon.png") env_main.CommandNoCache( - "#main/app_icon.gen.h", "#main/app_icon.png", env.Run(main_builders.make_app_icon, "Building application icon."), + "#main/app_icon.gen.h", + "#main/app_icon.png", + env.Run(main_builders.make_app_icon, "Building application icon."), ) lib = env_main.add_library("main", env.main_sources) diff --git a/main/main.cpp b/main/main.cpp index 413af9017b..ced8d7227a 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1805,7 +1805,6 @@ bool Main::start() { } } - String main_loop_type; #ifdef TOOLS_ENABLED if (doc_tool != "") { Engine::get_singleton()->set_editor_hint( @@ -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); @@ -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 == "") { |
