Ensure main scene is set when running on device

This commit is contained in:
Tomasz Chabora 2019-03-22 02:08:28 +01:00
parent 9c3ddf05cb
commit 9e18e94dc1
4 changed files with 57 additions and 23 deletions

View File

@ -1265,7 +1265,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:
@ -1737,28 +1742,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;
} }
} }
@ -4001,6 +3985,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();

View File

@ -804,6 +804,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 {

View File

@ -97,6 +97,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());
/*if (p_idx == -1) { /*if (p_idx == -1) {
@ -139,6 +145,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);
@ -193,4 +203,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;
} }

View File

@ -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();
}; };