kitgit

tirbofish/dropbear · diff

bba1ced · Thribhu K

wip: final change before going to sleep and dealing with this shit tomorrow.

Unverified

diff --git a/crates/eucalyptus-core/Cargo.toml b/crates/eucalyptus-core/Cargo.toml
index c16be97..611bfb8 100644
--- a/crates/eucalyptus-core/Cargo.toml
+++ b/crates/eucalyptus-core/Cargo.toml
@@ -7,7 +7,7 @@ repository.workspace = true
 readme = "README.md"
 
 [lib]
-crate-type = ["rlib", "dylib"]
+crate-type = ["rlib", "cdylib"]
 
 [dependencies]
 dropbear-traits = { path = "../dropbear-traits" }
diff --git a/crates/eucalyptus-core/src/physics/rigidbody.rs b/crates/eucalyptus-core/src/physics/rigidbody.rs
index 6744ae2..fbc5e3e 100644
--- a/crates/eucalyptus-core/src/physics/rigidbody.rs
+++ b/crates/eucalyptus-core/src/physics/rigidbody.rs
@@ -108,14 +108,6 @@ impl ToJObject for AxisLock {
 	}
 }
 
-/// A serializable physics rigid-body component.
-///
-/// Notes:
-/// - This component should NOT store Rapier handles (`RigidBodyHandle`, `ColliderHandle`, ...).
-///   Those are runtime-only and belong in a physics-world resource/system.
-/// - The body's initial pose should typically come from your `EntityTransform`/`Transform`.
-/// - Colliders/material (shape, friction, restitution, sensor, etc.) should usually be a separate
-///   component (e.g. `Collider`).
 #[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct RigidBody {
 	/// The entity this component is attached to.
@@ -604,7 +596,7 @@ pub mod shared {
     kotlin(class = "com.dropbear.physics.RigidBodyNative", func = "rigidBodyExistsForEntity"),
 	c
 )]
-fn rigid_body_exists_for_entity(
+fn exists_for_entity(
     #[dropbear_macro::define(WorldPtr)]
     world: &hecs::World,
     #[dropbear_macro::define(PhysicsStatePtr)]
diff --git a/crates/eucalyptus-core/src/scene/scripting.rs b/crates/eucalyptus-core/src/scene/scripting.rs
index f8ecec5..bb3a822 100644
--- a/crates/eucalyptus-core/src/scene/scripting.rs
+++ b/crates/eucalyptus-core/src/scene/scripting.rs
@@ -1,8 +1,6 @@
-use crate::ptr::{SceneLoaderPtr, SceneLoaderUnwrapped};
-use crate::scripting::jni::utils::ToJObject;
+use crate::ptr::{CommandBufferPtr, CommandBufferUnwrapped, SceneLoaderPtr, SceneLoaderUnwrapped};
 use crate::scripting::result::DropbearNativeResult;
 use crate::utils::Progress;
-use ::jni as jni_ext;
 
 pub mod shared {
     use crate::command::CommandBuffer;
@@ -126,9 +124,9 @@ pub mod shared {
 
         if let Some(entry) = loader.get_entry(scene_id) {
             let status = match entry.result {
-                SceneLoadResult::Pending => 0,  // PENDING
-                SceneLoadResult::Success => 1,  // READY
-                SceneLoadResult::Error(_) => 2, // FAILED
+                SceneLoadResult::Pending => 0,
+                SceneLoadResult::Success => 1,
+                SceneLoadResult::Error(_) => 2,
             };
             Ok(status)
         } else {
@@ -137,247 +135,93 @@ pub mod shared {
     }
 }
 
-// input:
 #[dropbear_macro::export(
-    kotlin(
-        class = "com.dropbear.scene.SceneLoadHandleNative",
-        func = "getSceneLoadProgress",
-        jni = "jni_ext",
-    ),
-    c(
-        name = "dropbear_scene_get_scene_load_progress",
-    )
+    kotlin(class = "com.dropbear.scene.SceneManagerNative", func = "loadSceneAsync"),
+    c
 )]
-fn get_scene_load_progress(
+fn load_scene_async(
+    #[dropbear_macro::define(CommandBufferPtr)]
+    command_buffer: &CommandBufferUnwrapped,
     #[dropbear_macro::define(SceneLoaderPtr)]
-    scene_loader: &mut SceneLoaderUnwrapped,
-    scene_id: u64,
-) -> DropbearNativeResult<Progress> {
-    // in this case, a Progress is returned. Progress must use the
-    // `ToJObject` trait to be valid, and must be representable by the C ABI (through #[repr(C)],
-    // or a derive trait if you wish).
-    shared::get_scene_load_progress(&scene_loader, scene_id)
+    scene_loader: &SceneLoaderUnwrapped,
+    scene_name: String,
+) -> DropbearNativeResult<u64> {
+    Ok(shared::load_scene_async(command_buffer, scene_loader, scene_name, None)?)
 }
 
-pub mod jni {
-    #![allow(non_snake_case)]
-    use crate::command::CommandBuffer;
-    use crate::ptr::{CommandBufferPtr, SceneLoaderPtr};
-    use crate::scripting::jni::utils::ToJObject;
-    use crate::{convert_jstring, convert_ptr};
-    use jni::objects::{JClass, JString, JValue};
-    use jni::sys::{jint, jlong, jobject};
-    use jni::JNIEnv;
-
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneManagerNative_loadSceneAsyncNative__JJLjava_lang_String_2(
-        mut env: JNIEnv,
-        _: JClass,
-        command_buffer_ptr: jlong,
-        scene_manager_handle: jlong,
-        scene_name: JString,
-    ) -> jobject {
-        let command_buffer = convert_ptr!(command_buffer_ptr, CommandBufferPtr => crossbeam_channel::Sender<CommandBuffer>);
-        let scene_loader = convert_ptr!(scene_manager_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
-
-        let scene_name_str = convert_jstring!(env, scene_name);
-
-        match super::shared::load_scene_async(command_buffer, scene_loader, scene_name_str, None) {
-            Ok(scene_id) => {
-                match env.find_class("java/lang/Long") {
-                    Ok(long_class) => {
-                        match env.new_object(long_class, "(J)V", &[JValue::Long(scene_id as i64)]) {
-                            Ok(obj) => obj.into_raw(),
-                            Err(e) => {
-                                eprintln!("Failed to create Long object: {}", e);
-                                let _ = env.throw_new("java/lang/RuntimeException",
-                                                      format!("Failed to create Long object: {}", e));
-                                std::ptr::null_mut()
-                            }
-                        }
-                    }
-                    Err(e) => {
-                        eprintln!("Failed to find Long class: {}", e);
-                        let _ = env.throw_new("java/lang/RuntimeException",
-                                              format!("Failed to find Long class: {}", e));
-                        std::ptr::null_mut()
-                    }
-                }
-            }
-            Err(e) => {
-                eprintln!("Failed to load scene async: {}", e);
-                let _ = env.throw_new("java/lang/RuntimeException",
-                                      format!("Failed to load scene async: {:?}", e));
-                std::ptr::null_mut()
-            }
-        }
-    }
-
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneManagerNative_loadSceneAsyncNative__JJLjava_lang_String_2Ljava_lang_String_2(
-        mut env: JNIEnv,
-        _: JClass,
-        command_buffer_ptr: jlong,
-        scene_manager_handle: jlong,
-        scene_name: JString,
-        loading_scene: JString,
-    ) -> jobject {
-        let command_buffer = convert_ptr!(command_buffer_ptr, CommandBufferPtr => crossbeam_channel::Sender<CommandBuffer>);
-        let scene_loader = convert_ptr!(scene_manager_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
-
-        let scene_name_str = convert_jstring!(env, scene_name);
-        let loading_scene_str = convert_jstring!(env, loading_scene);
-
-        match super::shared::load_scene_async(command_buffer, scene_loader, scene_name_str, Some(loading_scene_str)) {
-            Ok(scene_id) => {
-                match env.find_class("java/lang/Long") {
-                    Ok(long_class) => {
-                        match env.new_object(long_class, "(J)V", &[JValue::Long(scene_id as i64)]) {
-                            Ok(obj) => obj.into_raw(),
-                            Err(e) => {
-                                eprintln!("Failed to create Long object: {}", e);
-                                let _ = env.throw_new("java/lang/RuntimeException",
-                                                      format!("Failed to create Long object: {}", e));
-                                std::ptr::null_mut()
-                            }
-                        }
-                    }
-                    Err(e) => {
-                        eprintln!("Failed to find Long class: {}", e);
-                        let _ = env.throw_new("java/lang/RuntimeException",
-                                              format!("Failed to find Long class: {}", e));
-                        std::ptr::null_mut()
-                    }
-                }
-            }
-            Err(e) => {
-                eprintln!("Failed to load scene async with loading scene: {}", e);
-                let _ = env.throw_new("java/lang/RuntimeException",
-                                      format!("Failed to load scene async: {:?}", e));
-                std::ptr::null_mut()
-            }
-        }
-    }
-
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneManagerNative_switchToSceneImmediateNative(
-        mut env: JNIEnv,
-        _: JClass,
-        command_buffer_ptr: jlong,
-        scene_name: JString,
-    ) {
-        let command_buffer = convert_ptr!(command_buffer_ptr, CommandBufferPtr => crossbeam_channel::Sender<CommandBuffer>);
-
-        let scene_name_str = convert_jstring!(env, scene_name);
-
-        if let Err(e) = super::shared::switch_to_scene_immediate(command_buffer, scene_name_str) {
-            eprintln!("Failed to switch scene immediate: {}", e);
-            let _ = env.throw_new("java/lang/RuntimeException",
-                                  format!("Failed to switch scene immediate: {:?}", e));
-        }
-    }
-
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadHandleSceneName(
-        mut env: JNIEnv,
-        _: JClass,
-        scene_loader_handle: jlong,
-        scene_id: jlong,
-    ) -> jobject {
-        let scene_loader = convert_ptr!(scene_loader_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
-
-        match super::shared::get_scene_load_handle_scene_name(scene_loader, scene_id as u64) {
-            Ok(scene_name) => {
-                match env.new_string(scene_name) {
-                    Ok(jstring) => jstring.into_raw(),
-                    Err(e) => {
-                        eprintln!("Failed to create Java string: {}", e);
-                        let _ = env.throw_new("java/lang/RuntimeException",
-                                              format!("Failed to create Java string: {}", e));
-                        std::ptr::null_mut()
-                    }
-                }
-            }
-            Err(e) => {
-                eprintln!("Failed to get scene name: {}", e);
-                let _ = env.throw_new("java/lang/RuntimeException",
-                                      format!("Failed to get scene name: {:?}", e));
-                std::ptr::null_mut()
-            }
-        }
-    }
-
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_switchToSceneAsync(
-        mut env: JNIEnv,
-        _: JClass,
-        command_buffer_ptr: jlong,
-        scene_loader_handle: jlong,
-        scene_id: jlong,
-    ) {
-        let command_buffer = convert_ptr!(command_buffer_ptr, CommandBufferPtr => crossbeam_channel::Sender<CommandBuffer>);
-        let scene_loader = convert_ptr!(scene_loader_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
-
-        if let Err(e) = super::shared::switch_to_scene_async(command_buffer, scene_loader, scene_id as u64) {
-            eprintln!("Failed to switch scene async: {}", e);
+#[dropbear_macro::export(
+    kotlin(class = "com.dropbear.scene.SceneManagerNative", func = "loadSceneAsyncWithLoading"),
+    c
+)]
+fn load_scene_async_with_loading(
+    #[dropbear_macro::define(CommandBufferPtr)]
+    command_buffer: &CommandBufferUnwrapped,
+    #[dropbear_macro::define(SceneLoaderPtr)]
+    scene_loader: &SceneLoaderUnwrapped,
+    scene_name: String,
+    loading_scene: String,
+) -> DropbearNativeResult<u64> {
+    Ok(shared::load_scene_async(command_buffer, scene_loader, scene_name, Some(loading_scene))?)
+}
 
-            if let crate::scripting::native::DropbearNativeError::PrematureSceneSwitch = e {
-                let _ = env.throw_new("com/dropbear/exception/PrematureSceneSwitchException",
-                                    "Cannot switch to scene before it has finished loading");
-            } else {
-                let _ = env.throw_new("java/lang/RuntimeException",
-                                    format!("Failed to switch scene async: {:?}", e));
-            }
-        }
-    }
+#[dropbear_macro::export(
+    kotlin(class = "com.dropbear.scene.SceneManagerNative", func = "switchToSceneImmediate"),
+    c
+)]
+fn switch_to_scene_immediate(
+    #[dropbear_macro::define(CommandBufferPtr)]
+    command_buffer: &CommandBufferUnwrapped,
+    scene_name: String,
+) -> DropbearNativeResult<()> {
+    Ok(shared::switch_to_scene_immediate(command_buffer, scene_name)?)
+}
 
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadProgress(
-        mut env: JNIEnv,
-        _: JClass,
-        scene_loader_handle: jlong,
-        scene_id: jlong,
-    ) -> jobject {
-        let scene_loader = convert_ptr!(scene_loader_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
+#[dropbear_macro::export(
+    kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "getSceneLoadHandleSceneName"),
+    c
+)]
+fn get_scene_load_handle_scene_name(
+    #[dropbear_macro::define(SceneLoaderPtr)]
+    scene_loader: &SceneLoaderUnwrapped,
+    scene_id: u64,
+) -> DropbearNativeResult<String> {
+    Ok(shared::get_scene_load_handle_scene_name(scene_loader, scene_id)?)
+}
 
-        match super::shared::get_scene_load_progress(scene_loader, scene_id as u64) {
-            Ok(progress) => {
-                match progress.to_jobject(&mut env) {
-                    Ok(obj) => obj.into_raw(),
-                    Err(e) => {
-                        eprintln!("Failed to create Progress object: {:?}", e);
-                        let _ = env.throw_new("java/lang/RuntimeException",
-                                            format!("Failed to create Progress object: {:?}", e));
-                        std::ptr::null_mut()
-                    }
-                }
-            }
-            Err(e) => {
-                eprintln!("Failed to get scene load progress: {}", e);
-                let _ = env.throw_new("java/lang/RuntimeException",
-                                    format!("Failed to get scene load progress: {:?}", e));
-                std::ptr::null_mut()
-            }
-        }
-    }
+#[dropbear_macro::export(
+    kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "switchToSceneAsync"),
+    c
+)]
+fn switch_to_scene_async(
+    #[dropbear_macro::define(CommandBufferPtr)]
+    command_buffer: &CommandBufferUnwrapped,
+    #[dropbear_macro::define(SceneLoaderPtr)]
+    scene_loader: &SceneLoaderUnwrapped,
+    scene_id: u64,
+) -> DropbearNativeResult<()> {
+    Ok(shared::switch_to_scene_async(command_buffer, scene_loader, scene_id)?)
+}
 
-    #[unsafe(no_mangle)]
-    pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadStatus(
-        mut env: JNIEnv,
-        _: JClass,
-        scene_loader_handle: jlong,
-        scene_id: jlong,
-    ) -> jint {
-        let scene_loader = convert_ptr!(scene_loader_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
+#[dropbear_macro::export(
+    kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "getSceneLoadProgress"),
+    c
+)]
+fn get_scene_load_progress(
+    #[dropbear_macro::define(SceneLoaderPtr)]
+    scene_loader: &SceneLoaderUnwrapped,
+    scene_id: u64,
+) -> DropbearNativeResult<Progress> {
+    Ok(shared::get_scene_load_progress(scene_loader, scene_id)?)
+}
 
-        match super::shared::get_scene_load_status(scene_loader, scene_id as u64) {
-            Ok(status) => status as jint,
-            Err(e) => {
-                eprintln!("Failed to get scene load status: {}", e);
-                let _ = env.throw_new("java/lang/RuntimeException",
-                                    format!("Failed to get scene load status: {:?}", e));
-                -1 as jint
-            }
-        }
-    }
+#[dropbear_macro::export(
+    kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "getSceneLoadStatus"),
+    c
+)]
+fn get_scene_load_status(
+    #[dropbear_macro::define(SceneLoaderPtr)]
+    scene_loader: &SceneLoaderUnwrapped,
+    scene_id: u64,
+) -> DropbearNativeResult<u32> {
+    Ok(shared::get_scene_load_status(scene_loader, scene_id)?)
 }
\ No newline at end of file
diff --git a/include/dropbear.h b/include/dropbear.h
index 24890be..56e165e 100644
--- a/include/dropbear.h
+++ b/include/dropbear.h
@@ -179,7 +179,32 @@ typedef struct NChannelValuesFfi {
 
 typedef NChannelValuesFfi NChannelValues;
 
-typedef void* WorldPtr;
+typedef struct IndexNative {
+    uint32_t index;
+    uint32_t generation;
+} IndexNative;
+
+typedef struct NCollider {
+    IndexNative index;
+    uint64_t entity_id;
+    uint32_t id;
+} NCollider;
+
+typedef struct NShapeCastHit {
+    NCollider collider;
+    double distance;
+    NVector3 witness1;
+    NVector3 witness2;
+    NVector3 normal1;
+    NVector3 normal2;
+    NShapeCastStatus status;
+} NShapeCastHit;
+
+typedef struct Progress {
+    size_t current;
+    size_t total;
+    const char* message;
+} Progress;
 
 typedef struct i32Array {
     int32_t* values;
@@ -206,66 +231,51 @@ typedef struct NSkinArray {
     size_t capacity;
 } NSkinArray;
 
+typedef struct NColliderArray {
+    NCollider* values;
+    size_t length;
+    size_t capacity;
+} NColliderArray;
+
+typedef struct RigidBodyContext {
+    IndexNative index;
+    uint64_t entity_id;
+} RigidBodyContext;
+
+typedef void* InputStatePtr;
+
+typedef void* AssetRegistryPtr;
+
 typedef struct NTransform {
     NVector3 position;
     NQuaternion rotation;
     NVector3 scale;
 } NTransform;
 
-typedef struct NColour {
-    uint8_t r;
-    uint8_t g;
-    uint8_t b;
-    uint8_t a;
-} NColour;
-
-typedef struct NRange {
-    float start;
-    float end;
-} NRange;
-
-typedef void* SceneLoaderPtr;
-
-typedef struct IndexNative {
-    uint32_t index;
-    uint32_t generation;
-} IndexNative;
-
-typedef struct NCollider {
-    IndexNative index;
-    uint64_t entity_id;
-    uint32_t id;
-} NCollider;
-
-typedef struct NShapeCastHit {
-    NCollider collider;
-    double distance;
-    NVector3 witness1;
-    NVector3 witness2;
-    NVector3 normal1;
-    NVector3 normal2;
-    NShapeCastStatus status;
-} NShapeCastHit;
-
-typedef struct u64Array {
-    uint64_t* values;
-    size_t length;
-    size_t capacity;
-} u64Array;
+typedef struct NAttenuation {
+    float constant;
+    float linear;
+    float quadratic;
+} NAttenuation;
 
-typedef void* CommandBufferPtr;
+typedef struct NNodeTransform {
+    NVector3 translation;
+    NQuaternion rotation;
+    NVector3 scale;
+} NNodeTransform;
 
-typedef struct Progress {
-    size_t current;
-    size_t total;
-    const char* message;
-} Progress;
+typedef struct NNode {
+    const char* name;
+    const int32_t* parent;
+    i32Array children;
+    NNodeTransform transform;
+} NNode;
 
-typedef struct NColliderArray {
-    NCollider* values;
+typedef struct NNodeArray {
+    NNode* values;
     size_t length;
     size_t capacity;
-} NColliderArray;
+} NNodeArray;
 
 typedef struct NVector4 {
     double x;
@@ -309,24 +319,36 @@ typedef struct NMeshArray {
     size_t capacity;
 } NMeshArray;
 
-typedef struct NNodeTransform {
-    NVector3 translation;
-    NQuaternion rotation;
-    NVector3 scale;
-} NNodeTransform;
+typedef struct f64Array {
+    double* values;
+    size_t length;
+    size_t capacity;
+} f64Array;
 
-typedef struct NNode {
+typedef struct NAnimationChannel {
+    int32_t target_node;
+    f64Array times;
+    NChannelValues values;
+    NAnimationInterpolation interpolation;
+} NAnimationChannel;
+
+typedef struct NAnimationChannelArray {
+    NAnimationChannel* values;
+    size_t length;
+    size_t capacity;
+} NAnimationChannelArray;
+
+typedef struct NAnimation {
     const char* name;
-    const int32_t* parent;
-    i32Array children;
-    NNodeTransform transform;
-} NNode;
+    NAnimationChannelArray channels;
+    float duration;
+} NAnimation;
 
-typedef struct NNodeArray {
-    NNode* values;
+typedef struct NAnimationArray {
+    NAnimation* values;
     size_t length;
     size_t capacity;
-} NNodeArray;
+} NAnimationArray;
 
 typedef struct IndexNativeArray {
     IndexNative* values;
@@ -339,15 +361,46 @@ typedef struct CharacterCollisionArray {
     IndexNativeArray collisions;
 } CharacterCollisionArray;
 
-typedef void* InputStatePtr;
-
-typedef void* PhysicsStatePtr;
+typedef struct u64Array {
+    uint64_t* values;
+    size_t length;
+    size_t capacity;
+} u64Array;
 
 typedef struct ConnectedGamepadIds {
     u64Array ids;
 } ConnectedGamepadIds;
 
-typedef void* AssetRegistryPtr;
+typedef struct RayHit {
+    NCollider collider;
+    double distance;
+} RayHit;
+
+typedef void* GraphicsContextPtr;
+
+typedef void* CommandBufferPtr;
+
+typedef struct NRange {
+    float start;
+    float end;
+} NRange;
+
+typedef struct AxisLock {
+    bool x;
+    bool y;
+    bool z;
+} AxisLock;
+
+typedef void* SceneLoaderPtr;
+
+typedef void* WorldPtr;
+
+typedef struct NColour {
+    uint8_t r;
+    uint8_t g;
+    uint8_t b;
+    uint8_t a;
+} NColour;
 
 typedef struct NMaterial {
     const char* name;
@@ -373,60 +426,7 @@ typedef struct NMaterialArray {
     size_t capacity;
 } NMaterialArray;
 
-typedef struct NAttenuation {
-    float constant;
-    float linear;
-    float quadratic;
-} NAttenuation;
-
-typedef struct RayHit {
-    NCollider collider;
-    double distance;
-} RayHit;
-
-typedef struct f64Array {
-    double* values;
-    size_t length;
-    size_t capacity;
-} f64Array;
-
-typedef struct NAnimationChannel {
-    int32_t target_node;
-    f64Array times;
-    NChannelValues values;
-    NAnimationInterpolation interpolation;
-} NAnimationChannel;
-
-typedef struct NAnimationChannelArray {
-    NAnimationChannel* values;
-    size_t length;
-    size_t capacity;
-} NAnimationChannelArray;
-
-typedef struct NAnimation {
-    const char* name;
-    NAnimationChannelArray channels;
-    float duration;
-} NAnimation;
-
-typedef struct NAnimationArray {
-    NAnimation* values;
-    size_t length;
-    size_t capacity;
-} NAnimationArray;
-
-typedef struct AxisLock {
-    bool x;
-    bool y;
-    bool z;
-} AxisLock;
-
-typedef struct RigidBodyContext {
-    IndexNative index;
-    uint64_t entity_id;
-} RigidBodyContext;
-
-typedef void* GraphicsContextPtr;
+typedef void* PhysicsStatePtr;
 
 int32_t dropbear_gamepad_is_button_pressed(InputStatePtr input, uint64_t gamepad_id, int32_t button_ordinal, bool* out0);
 int32_t dropbear_gamepad_get_left_stick_position(InputStatePtr input, uint64_t gamepad_id, NVector2* out0);
@@ -459,7 +459,7 @@ int32_t dropbear_collider_get_collider_translation(PhysicsStatePtr physics, cons
 int32_t dropbear_collider_set_collider_translation(PhysicsStatePtr physics, const NCollider* collider, const NVector3* translation);
 int32_t dropbear_collider_get_collider_rotation(PhysicsStatePtr physics, const NCollider* collider, NVector3* out0);
 int32_t dropbear_collider_set_collider_rotation(PhysicsStatePtr physics, const NCollider* collider, const NVector3* rotation);
-int32_t dropbear_rigidbody_rigid_body_exists_for_entity(WorldPtr world, PhysicsStatePtr physics, uint64_t entity, IndexNative* out0, bool* out0_present);
+int32_t dropbear_rigidbody_exists_for_entity(WorldPtr world, PhysicsStatePtr physics, uint64_t entity, IndexNative* out0, bool* out0_present);
 int32_t dropbear_rigidbody_get_rigidbody_mode(WorldPtr _world, PhysicsStatePtr physics, const RigidBodyContext* rigidbody, int32_t* out0);
 int32_t dropbear_rigidbody_set_rigidbody_mode(WorldPtr world, PhysicsStatePtr physics, const RigidBodyContext* rigidbody, int32_t mode);
 int32_t dropbear_rigidbody_get_rigidbody_gravity_scale(WorldPtr _world, PhysicsStatePtr physics, const RigidBodyContext* rigidbody, double* out0);
@@ -487,7 +487,13 @@ int32_t dropbear_kcc_kcc_exists_for_entity(WorldPtr world, uint64_t entity, bool
 int32_t dropbear_kcc_move_character(WorldPtr world, PhysicsStatePtr physics_state, uint64_t entity, const NVector3* translation, double delta_time);
 int32_t dropbear_kcc_set_rotation(WorldPtr world, PhysicsStatePtr physics_state, uint64_t entity, const NQuaternion* rotation);
 int32_t dropbear_kcc_get_hit(WorldPtr world, uint64_t entity, CharacterCollisionArray* out0);
-int32_t dropbear_scene_get_scene_load_progress(SceneLoaderPtr scene_loader, uint64_t scene_id, Progress* out0);
+int32_t dropbear_scripting_load_scene_async(CommandBufferPtr command_buffer, SceneLoaderPtr scene_loader, const char* scene_name, uint64_t* out0);
+int32_t dropbear_scripting_load_scene_async_with_loading(CommandBufferPtr command_buffer, SceneLoaderPtr scene_loader, const char* scene_name, const char* loading_scene, uint64_t* out0);
+int32_t dropbear_scripting_switch_to_scene_immediate(CommandBufferPtr command_buffer, const char* scene_name);
+int32_t dropbear_scripting_get_scene_load_handle_scene_name(SceneLoaderPtr scene_loader, uint64_t scene_id, char** out0);
+int32_t dropbear_scripting_switch_to_scene_async(CommandBufferPtr command_buffer, SceneLoaderPtr scene_loader, uint64_t scene_id);
+int32_t dropbear_scripting_get_scene_load_progress(SceneLoaderPtr scene_loader, uint64_t scene_id, Progress* out0);
+int32_t dropbear_scripting_get_scene_load_status(SceneLoaderPtr scene_loader, uint64_t scene_id, uint32_t* out0);
 int32_t dropbear_camera_exists_for_entity(WorldPtr world, uint64_t entity, bool* out0);
 int32_t dropbear_camera_get_eye(WorldPtr world, uint64_t entity, NVector3* out0);
 int32_t dropbear_camera_set_eye(WorldPtr world, uint64_t entity, const NVector3* eye);
diff --git a/scripting/jvmMain/java/com/dropbear/scene/SceneManagerNative.java b/scripting/jvmMain/java/com/dropbear/scene/SceneManagerNative.java
index 7788660..1b1a9f9 100644
--- a/scripting/jvmMain/java/com/dropbear/scene/SceneManagerNative.java
+++ b/scripting/jvmMain/java/com/dropbear/scene/SceneManagerNative.java
@@ -7,7 +7,7 @@ public class SceneManagerNative {
         new EucalyptusCoreLoader().ensureLoaded();
     }
 
-    public static native Long loadSceneAsyncNative(long commandBufferPtr, long sceneManagerHandle, String sceneName);
-    public static native Long loadSceneAsyncNative(long commandBufferPtr, long sceneManagerHandle, String sceneName, String loadingScene);
-    public static native void switchToSceneImmediateNative(long commandBufferPtr, String sceneName);
+    public static native long loadSceneAsync(long commandBufferPtr, long sceneManagerHandle, String sceneName);
+    public static native long loadSceneAsyncWithLoading(long commandBufferPtr, long sceneManagerHandle, String sceneName, String loadingScene);
+    public static native void switchToSceneImmediate(long commandBufferPtr, String sceneName);
 }
\ No newline at end of file