mirror of
https://github.com/godotengine/godot
synced 2024-11-02 12:55:22 +00:00
Merge pull request #27309 from KoBeWi/main_scene_on_android
Ensure main scene is set when running on device
This commit is contained in:
commit
a69436aa4e
4 changed files with 57 additions and 23 deletions
|
@ -1296,7 +1296,12 @@ void EditorNode::_dialog_action(String p_file) {
|
||||||
ProjectSettings::get_singleton()->set("application/run/main_scene", p_file);
|
ProjectSettings::get_singleton()->set("application/run/main_scene", p_file);
|
||||||
ProjectSettings::get_singleton()->save();
|
ProjectSettings::get_singleton()->save();
|
||||||
//would be nice to show the project manager opened with the highlighted field..
|
//would be nice to show the project manager opened with the highlighted field..
|
||||||
_run(false, ""); // automatically run the project
|
|
||||||
|
if (pick_main_scene->has_meta("from_native") && (bool)pick_main_scene->get_meta("from_native")) {
|
||||||
|
run_native->resume_run_native();
|
||||||
|
} else {
|
||||||
|
_run(false, ""); // automatically run the project
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
case FILE_CLOSE:
|
case FILE_CLOSE:
|
||||||
case FILE_CLOSE_ALL_AND_QUIT:
|
case FILE_CLOSE_ALL_AND_QUIT:
|
||||||
|
@ -1809,28 +1814,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) {
|
||||||
if (run_filename == "") {
|
if (run_filename == "") {
|
||||||
|
|
||||||
//evidently, run the scene
|
//evidently, run the scene
|
||||||
main_scene = GLOBAL_DEF("application/run/main_scene", "");
|
if (!ensure_main_scene(false)) {
|
||||||
if (main_scene == "") {
|
|
||||||
|
|
||||||
current_option = -1;
|
|
||||||
pick_main_scene->set_text(TTR("No main scene has ever been defined, select one?\nYou can change it later in \"Project Settings\" under the 'application' category."));
|
|
||||||
pick_main_scene->popup_centered_minsize();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!FileAccess::exists(main_scene)) {
|
|
||||||
|
|
||||||
current_option = -1;
|
|
||||||
pick_main_scene->set_text(vformat(TTR("Selected scene '%s' does not exist, select a valid one?\nYou can change it later in \"Project Settings\" under the 'application' category."), main_scene));
|
|
||||||
pick_main_scene->popup_centered_minsize();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ResourceLoader::get_resource_type(main_scene) != "PackedScene") {
|
|
||||||
|
|
||||||
current_option = -1;
|
|
||||||
pick_main_scene->set_text(vformat(TTR("Selected scene '%s' is not a scene file, select a valid one?\nYou can change it later in \"Project Settings\" under the 'application' category."), main_scene));
|
|
||||||
pick_main_scene->popup_centered_minsize();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4167,6 +4151,37 @@ bool EditorNode::has_scenes_in_session() {
|
||||||
return !scenes.empty();
|
return !scenes.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool EditorNode::ensure_main_scene(bool p_from_native) {
|
||||||
|
pick_main_scene->set_meta("from_native", p_from_native); //whether from play button or native run
|
||||||
|
String main_scene = GLOBAL_DEF("application/run/main_scene", "");
|
||||||
|
|
||||||
|
if (main_scene == "") {
|
||||||
|
|
||||||
|
current_option = -1;
|
||||||
|
pick_main_scene->set_text(TTR("No main scene has ever been defined, select one?\nYou can change it later in \"Project Settings\" under the 'application' category."));
|
||||||
|
pick_main_scene->popup_centered_minsize();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!FileAccess::exists(main_scene)) {
|
||||||
|
|
||||||
|
current_option = -1;
|
||||||
|
pick_main_scene->set_text(vformat(TTR("Selected scene '%s' does not exist, select a valid one?\nYou can change it later in \"Project Settings\" under the 'application' category."), main_scene));
|
||||||
|
pick_main_scene->popup_centered_minsize();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ResourceLoader::get_resource_type(main_scene) != "PackedScene") {
|
||||||
|
|
||||||
|
current_option = -1;
|
||||||
|
pick_main_scene->set_text(vformat(TTR("Selected scene '%s' is not a scene file, select a valid one?\nYou can change it later in \"Project Settings\" under the 'application' category."), main_scene));
|
||||||
|
pick_main_scene->popup_centered_minsize();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void EditorNode::_update_layouts_menu() {
|
void EditorNode::_update_layouts_menu() {
|
||||||
|
|
||||||
editor_layouts->clear();
|
editor_layouts->clear();
|
||||||
|
|
|
@ -836,6 +836,8 @@ public:
|
||||||
|
|
||||||
static void add_init_callback(EditorNodeInitCallback p_callback) { _init_callbacks.push_back(p_callback); }
|
static void add_init_callback(EditorNodeInitCallback p_callback) { _init_callbacks.push_back(p_callback); }
|
||||||
static void add_build_callback(EditorBuildCallback p_callback);
|
static void add_build_callback(EditorBuildCallback p_callback);
|
||||||
|
|
||||||
|
bool ensure_main_scene(bool p_from_native);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EditorProgress {
|
struct EditorProgress {
|
||||||
|
|
|
@ -101,6 +101,12 @@ void EditorRunNative::_notification(int p_what) {
|
||||||
|
|
||||||
void EditorRunNative::_run_native(int p_idx, int p_platform) {
|
void EditorRunNative::_run_native(int p_idx, int p_platform) {
|
||||||
|
|
||||||
|
if (!EditorNode::get_singleton()->ensure_main_scene(true)) {
|
||||||
|
resume_idx = p_idx;
|
||||||
|
resume_platform = p_platform;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(p_platform);
|
Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(p_platform);
|
||||||
ERR_FAIL_COND(eep.is_null());
|
ERR_FAIL_COND(eep.is_null());
|
||||||
|
|
||||||
|
@ -144,6 +150,10 @@ void EditorRunNative::_run_native(int p_idx, int p_platform) {
|
||||||
eep->run(preset, p_idx, flags);
|
eep->run(preset, p_idx, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorRunNative::resume_run_native() {
|
||||||
|
_run_native(resume_idx, resume_platform);
|
||||||
|
}
|
||||||
|
|
||||||
void EditorRunNative::_bind_methods() {
|
void EditorRunNative::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method("_run_native", &EditorRunNative::_run_native);
|
ClassDB::bind_method("_run_native", &EditorRunNative::_run_native);
|
||||||
|
@ -198,4 +208,6 @@ EditorRunNative::EditorRunNative() {
|
||||||
deploy_debug_remote = false;
|
deploy_debug_remote = false;
|
||||||
debug_collisions = false;
|
debug_collisions = false;
|
||||||
debug_navigation = false;
|
debug_navigation = false;
|
||||||
|
resume_idx = 0;
|
||||||
|
resume_platform = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,9 @@ class EditorRunNative : public HBoxContainer {
|
||||||
bool debug_collisions;
|
bool debug_collisions;
|
||||||
bool debug_navigation;
|
bool debug_navigation;
|
||||||
|
|
||||||
|
int resume_idx;
|
||||||
|
int resume_platform;
|
||||||
|
|
||||||
void _run_native(int p_idx, int p_platform);
|
void _run_native(int p_idx, int p_platform);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -64,6 +67,8 @@ public:
|
||||||
void set_debug_navigation(bool p_debug);
|
void set_debug_navigation(bool p_debug);
|
||||||
bool get_debug_navigation() const;
|
bool get_debug_navigation() const;
|
||||||
|
|
||||||
|
void resume_run_native();
|
||||||
|
|
||||||
EditorRunNative();
|
EditorRunNative();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue