mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Fix 'save & restart' logic for the Android Editor
This commit is contained in:
parent
89a33d28f0
commit
5212d37040
2 changed files with 52 additions and 24 deletions
|
@ -71,6 +71,39 @@ static Vector3 gravity;
|
|||
static Vector3 magnetometer;
|
||||
static Vector3 gyroscope;
|
||||
|
||||
static void _terminate(JNIEnv *env, bool p_restart = false) {
|
||||
step.set(-1); // Ensure no further steps are attempted and no further events are sent
|
||||
|
||||
// lets cleanup
|
||||
if (java_class_wrapper) {
|
||||
memdelete(java_class_wrapper);
|
||||
}
|
||||
if (input_handler) {
|
||||
delete input_handler;
|
||||
}
|
||||
// Whether restarting is handled by 'Main::cleanup()'
|
||||
bool restart_on_cleanup = false;
|
||||
if (os_android) {
|
||||
restart_on_cleanup = os_android->is_restart_on_exit_set();
|
||||
os_android->main_loop_end();
|
||||
Main::cleanup();
|
||||
delete os_android;
|
||||
}
|
||||
if (godot_io_java) {
|
||||
delete godot_io_java;
|
||||
}
|
||||
if (godot_java) {
|
||||
if (!restart_on_cleanup) {
|
||||
if (p_restart) {
|
||||
godot_java->restart(env);
|
||||
} else {
|
||||
godot_java->force_quit(env);
|
||||
}
|
||||
}
|
||||
delete godot_java;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jclass clazz, jint p_height) {
|
||||
|
@ -104,23 +137,7 @@ JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_ondestroy(JNIEnv *env, jclass clazz) {
|
||||
// lets cleanup
|
||||
if (java_class_wrapper) {
|
||||
memdelete(java_class_wrapper);
|
||||
}
|
||||
if (godot_io_java) {
|
||||
delete godot_io_java;
|
||||
}
|
||||
if (godot_java) {
|
||||
delete godot_java;
|
||||
}
|
||||
if (input_handler) {
|
||||
delete input_handler;
|
||||
}
|
||||
if (os_android) {
|
||||
os_android->main_loop_end();
|
||||
delete os_android;
|
||||
}
|
||||
_terminate(env, false);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_setup(JNIEnv *env, jclass clazz, jobjectArray p_cmdline) {
|
||||
|
@ -196,9 +213,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *en
|
|||
}
|
||||
} else {
|
||||
// Rendering context recreated because it was lost; restart app to let it reload everything
|
||||
step.set(-1); // Ensure no further steps are attempted and no further events are sent
|
||||
os_android->main_loop_end();
|
||||
godot_java->restart(env);
|
||||
_terminate(env, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -249,7 +264,7 @@ JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env,
|
|||
|
||||
bool should_swap_buffers = false;
|
||||
if (os_android->main_loop_iterate(&should_swap_buffers)) {
|
||||
godot_java->force_quit(env);
|
||||
_terminate(env, false);
|
||||
}
|
||||
|
||||
return should_swap_buffers;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue