tirbofish/dropbear · diff
feature: JVM now working after testing has been complete. HOORAY!!!. Happy new year to everyone. final commit for the year because i gotta spend time with family now :D
looks like its ready to merge into main!
Signature present but could not be verified.
Unverified
@@ -42,7 +42,7 @@ val libPathProvider = provider { } kotlin { - jvm {} + jvm { } val nativeTarget = when { isMacOs && isArm64 -> macosArm64("nativeLib") @@ -145,7 +145,7 @@ tasks.register<JavaCompile>("generateJniHeaders") { tasks.named("compileKotlinJvm"), ) - source = fileTree("src/jvmMain/kotlin") { + source = fileTree("src/jvmMain/java") { include("**/*.java") } @@ -33,7 +33,7 @@ pub mod jni { use crate::convert_ptr; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_asset_AssetHandleNative_isModelHandle( + pub fn Java_com_dropbear_asset_AssetHandleNative_isModelHandle( _env: JNIEnv, _class: JClass, asset_registry_ptr: jlong, @@ -50,7 +50,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_asset_AssetHandleNative_isTextureHandle( + pub fn Java_com_dropbear_asset_AssetHandleNative_isTextureHandle( _env: JNIEnv, _class: JClass, asset_registry_ptr: jlong, @@ -25,7 +25,7 @@ pub mod jni { use crate::scripting::native::DropbearNativeError; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_asset_TextureHandleNative_getTextureName( + pub fn Java_com_dropbear_asset_TextureHandleNative_getTextureName( env: JNIEnv, _class: JClass, asset_registry_ptr: jlong, @@ -135,9 +135,10 @@ pub mod jni { use dropbear_engine::camera::Camera; use crate::convert_jlong_to_entity; use crate::scripting::jni::utils::{FromJObject, ToJObject}; + use crate::types::Vector3; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_cameraExistsForEntity( + pub fn Java_com_dropbear_components_CameraNative_cameraExistsForEntity( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -153,7 +154,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraEye( + pub fn Java_com_dropbear_components_CameraNative_getCameraEye( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -162,7 +163,7 @@ pub mod jni { let world = crate::convert_ptr!(world_ptr => hecs::World); let entity = convert_jlong_to_entity!(entity_id); if let Ok(camera) = world.get::<&Camera>(entity) { - let eye: DVec3 = camera.eye; + let eye: Vector3 = Vector3::from(camera.eye); return match eye.to_jobject(&mut env) { Ok(val) => val.into_raw(), Err(_) => std::ptr::null_mut() @@ -174,7 +175,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraEye( + pub fn Java_com_dropbear_components_CameraNative_setCameraEye( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -183,7 +184,7 @@ pub mod jni { ) { let world = crate::convert_ptr!(world_ptr => hecs::World); let entity = convert_jlong_to_entity!(entity_id); - let new_eye = match DVec3::from_jobject(&mut env, &eye_obj) { + let new_eye = match Vector3::from_jobject(&mut env, &eye_obj) { Ok(v) => v, Err(e) => { let _ = env.throw_new("java/lang/IllegalArgumentException", format!("Invalid Vector3d: {:?}", e)); @@ -191,7 +192,7 @@ pub mod jni { } }; if let Ok(mut camera) = world.get::<&mut Camera>(entity) { - camera.eye = new_eye; + camera.eye = DVec3::from(new_eye); } else { let _ = env.throw_new("java/lang/IllegalArgumentException", "Entity missing Camera component"); } @@ -199,7 +200,7 @@ pub mod jni { // TARGET #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraTarget( + pub fn Java_com_dropbear_components_CameraNative_getCameraTarget( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -208,7 +209,7 @@ pub mod jni { let world = crate::convert_ptr!(world_ptr => hecs::World); let entity = convert_jlong_to_entity!(entity_id); if let Ok(camera) = world.get::<&Camera>(entity) { - let target: DVec3 = camera.target; + let target: Vector3 = Vector3::from(camera.target); return match target.to_jobject(&mut env) { Ok(val) => val.into_raw(), Err(_) => std::ptr::null_mut() @@ -220,7 +221,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraTarget( + pub fn Java_com_dropbear_components_CameraNative_setCameraTarget( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -229,17 +230,17 @@ pub mod jni { ) { let world = crate::convert_ptr!(world_ptr => hecs::World); let entity = convert_jlong_to_entity!(entity_id); - let new_target = match DVec3::from_jobject(&mut env, &target_obj) { + let new_target = match Vector3::from_jobject(&mut env, &target_obj) { Ok(v) => v, Err(_) => return, }; if let Ok(mut camera) = world.get::<&mut Camera>(entity) { - camera.target = new_target; + camera.target = DVec3::from(new_target); } } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraUp( + pub fn Java_com_dropbear_components_CameraNative_getCameraUp( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -248,7 +249,7 @@ pub mod jni { let world = crate::convert_ptr!(world_ptr => hecs::World); let entity = convert_jlong_to_entity!(entity_id); if let Ok(camera) = world.get::<&Camera>(entity) { - let up: DVec3 = camera.up; + let up = Vector3::from(camera.up); return match up.to_jobject(&mut env) { Ok(val) => val.into_raw(), Err(_) => std::ptr::null_mut() @@ -260,7 +261,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraUp( + pub fn Java_com_dropbear_components_CameraNative_setCameraUp( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -269,17 +270,17 @@ pub mod jni { ) { let world = crate::convert_ptr!(world_ptr => hecs::World); let entity = convert_jlong_to_entity!(entity_id); - let new_up = match DVec3::from_jobject(&mut env, &up_obj) { + let new_up = match Vector3::from_jobject(&mut env, &up_obj) { Ok(v) => v, Err(_) => return, }; if let Ok(mut camera) = world.get::<&mut Camera>(entity) { - camera.up = new_up; + camera.up = DVec3::from(new_up); } } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraAspect( + pub fn Java_com_dropbear_components_CameraNative_getCameraAspect( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -295,7 +296,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraFovY( + pub fn Java_com_dropbear_components_CameraNative_getCameraFovY( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -311,7 +312,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraFovY( + pub fn Java_com_dropbear_components_CameraNative_setCameraFovY( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -326,7 +327,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraZNear( + pub fn Java_com_dropbear_components_CameraNative_getCameraZNear( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -342,7 +343,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraZNear( + pub fn Java_com_dropbear_components_CameraNative_setCameraZNear( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -357,7 +358,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraZFar( + pub fn Java_com_dropbear_components_CameraNative_getCameraZFar( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -373,7 +374,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraZFar( + pub fn Java_com_dropbear_components_CameraNative_setCameraZFar( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -388,7 +389,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraYaw( + pub fn Java_com_dropbear_components_CameraNative_getCameraYaw( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -404,7 +405,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraYaw( + pub fn Java_com_dropbear_components_CameraNative_setCameraYaw( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -419,7 +420,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraPitch( + pub fn Java_com_dropbear_components_CameraNative_getCameraPitch( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -435,7 +436,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraPitch( + pub fn Java_com_dropbear_components_CameraNative_setCameraPitch( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -450,7 +451,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraSpeed( + pub fn Java_com_dropbear_components_CameraNative_getCameraSpeed( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -466,7 +467,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraSpeed( + pub fn Java_com_dropbear_components_CameraNative_setCameraSpeed( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -481,7 +482,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_getCameraSensitivity( + pub fn Java_com_dropbear_components_CameraNative_getCameraSensitivity( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -497,7 +498,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CameraNative_setCameraSensitivity( + pub fn Java_com_dropbear_components_CameraNative_setCameraSensitivity( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -66,7 +66,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_DropbearEngineNative_getEntity( + pub fn Java_com_dropbear_DropbearEngineNative_getEntity( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -88,7 +88,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_DropbearEngineNative_getAsset( + pub fn Java_com_dropbear_DropbearEngineNative_getAsset( mut env: JNIEnv, _class: JClass, asset_handle: jlong, @@ -110,7 +110,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_DropbearEngineNative_quit( + pub fn Java_com_dropbear_DropbearEngineNative_quit( mut env: JNIEnv, _class: JClass, command_buffer_ptr: jlong, @@ -9,7 +9,7 @@ pub mod jni { use jni::JNIEnv; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_EntityRefNative_getEntityLabel( + pub fn Java_com_dropbear_EntityRefNative_getEntityLabel( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -33,7 +33,7 @@ pub mod jni { string.into_raw() } - pub extern "system" fn Java_com_com_dropbear_EntityRefNative_getChildren( + pub fn Java_com_dropbear_EntityRefNative_getChildren( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -64,7 +64,7 @@ pub mod jni { } } - pub extern "system" fn Java_com_com_dropbear_EntityRefNative_getChildByLabel( + pub fn Java_com_dropbear_EntityRefNative_getChildByLabel( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -98,7 +98,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_EntityRefNative_getParent( + pub fn Java_com_dropbear_EntityRefNative_getParent( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -200,7 +200,7 @@ pub mod jni { use crate::scripting::jni::utils::ToJObject; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_printInputState( + pub fn Java_com_dropbear_input_InputStateNative_printInputState( _env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -210,7 +210,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_isKeyPressed( + pub fn Java_com_dropbear_input_InputStateNative_isKeyPressed( _env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -221,7 +221,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_getMousePosition( + pub fn Java_com_dropbear_input_InputStateNative_getMousePosition( mut env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -235,7 +235,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_isMouseButtonPressed( + pub fn Java_com_dropbear_input_InputStateNative_isMouseButtonPressed( mut env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -257,7 +257,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_getMouseDelta( + pub fn Java_com_dropbear_input_InputStateNative_getMouseDelta( mut env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -271,7 +271,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_isCursorLocked( + pub fn Java_com_dropbear_input_InputStateNative_isCursorLocked( _env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -281,7 +281,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_setCursorLocked( + pub fn Java_com_dropbear_input_InputStateNative_setCursorLocked( mut env: JNIEnv, _class: JClass, cmd_ptr: jlong, @@ -297,7 +297,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_getLastMousePos( + pub fn Java_com_dropbear_input_InputStateNative_getLastMousePos( mut env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -311,7 +311,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_isCursorHidden( + pub fn Java_com_dropbear_input_InputStateNative_isCursorHidden( _env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -321,7 +321,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_setCursorHidden( + pub fn Java_com_dropbear_input_InputStateNative_setCursorHidden( mut env: JNIEnv, _class: JClass, cmd_ptr: jlong, @@ -337,7 +337,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_input_InputStateNative_getConnectedGamepads( + pub fn Java_com_dropbear_input_InputStateNative_getConnectedGamepads( env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -132,7 +132,7 @@ pub mod jni { use crate::scripting::jni::utils::ToJObject; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_input_GamepadNative_isGamepadButtonPressed( + pub fn Java_com_dropbear_input_GamepadNative_isGamepadButtonPressed( _env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -148,7 +148,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_input_GamepadNative_getLeftStickPosition( + pub fn Java_com_dropbear_input_GamepadNative_getLeftStickPosition( mut env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -164,7 +164,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_input_GamepadNative_getRightStickPosition( + pub fn Java_com_dropbear_input_GamepadNative_getRightStickPosition( mut env: JNIEnv, _class: JClass, input_ptr: jlong, @@ -41,7 +41,7 @@ pub mod jni { use std::sync::Arc; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_MeshRendererNative_meshRendererExistsForEntity( + pub fn Java_com_dropbear_components_MeshRendererNative_meshRendererExistsForEntity( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -53,7 +53,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_MeshRendererNative_getModel( + pub fn Java_com_dropbear_components_MeshRendererNative_getModel( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -71,7 +71,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_MeshRendererNative_setModel( + pub fn Java_com_dropbear_components_MeshRendererNative_setModel( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -96,7 +96,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_MeshRendererNative_getAllTextureIds( + pub fn Java_com_dropbear_components_MeshRendererNative_getAllTextureIds( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -130,7 +130,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_MeshRendererNative_getTexture( + pub fn Java_com_dropbear_components_MeshRendererNative_getTexture( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -154,7 +154,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_MeshRendererNative_setTextureOverride( + pub fn Java_com_dropbear_components_MeshRendererNative_setTextureOverride( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -94,10 +94,9 @@ impl PhysicsState { let pos = transform.position.as_vec3().to_array(); let rot = transform.rotation.as_quat().to_array(); - let scale = transform.scale; - + let body = RigidBodyBuilder::new(mode) - .translation(vector![pos[0] * scale.x as f32, pos[1] * scale.y as f32, pos[2] * scale.z as f32]) + .translation(vector![pos[0], pos[1], pos[2]]) .rotation(UnitQuaternion::from_quaternion(Quaternion::new( rot[3] as f32, rot[0] as f32, rot[1] as f32, rot[2] as f32 )).scaled_axis()) @@ -216,4 +215,70 @@ impl Default for PhysicsState { fn default() -> Self { Self::new() } +} + +pub mod shared { + use crate::physics::PhysicsState; + use crate::types::Vector3; + + pub fn get_gravity(physics: &PhysicsState) -> Vector3 { + Vector3::from(physics.gravity) + } + + pub fn set_gravity(physics: &mut PhysicsState, new: Vector3) { + physics.gravity = new.to_float_array(); + } +} + +pub mod jni { + #![allow(non_snake_case)] + + use jni::JNIEnv; + use jni::sys::{jlong, jobject}; + use jni::objects::{JClass, JObject}; + use crate::physics::PhysicsState; + use crate::scripting::jni::utils::{FromJObject, ToJObject}; + use crate::scripting::result::DropbearNativeResult; + use crate::types::Vector3; + + #[unsafe(no_mangle)] + pub fn Java_com_dropbear_physics_PhysicsNative_getGravity( + mut env: JNIEnv, + _: JClass, + physics_handle: jlong, + ) -> jobject { + let physics = crate::convert_ptr!(physics_handle => PhysicsState); + + match super::shared::get_gravity(&physics).to_jobject(&mut env) { + Ok(v) => v.into_raw(), + Err(e) => { + let _ = env.throw_new("java/lang/RuntimeException", format!("Unable to create new Vector3d object for gravity: {}", e)); + std::ptr::null_mut() + } + } + + } + + #[unsafe(no_mangle)] + pub fn Java_com_dropbear_physics_PhysicsNative_setGravity( + mut env: JNIEnv, + _: JClass, + physics_handle: jlong, + new_gravity: JObject, + ) { + let mut physics = crate::convert_ptr!(mut physics_handle => PhysicsState); + let vec3 = match Vector3::from_jobject(&mut env, &new_gravity) { + Ok(v) => v, + Err(e) => { + let _ = env.throw_new("java/lang/RuntimeException", format!("Unable to create new Vector3d object for gravity: {}", e)); + return; + } + }; + + super::shared::set_gravity(&mut physics, vec3); + } +} + +pub mod native { + } @@ -615,7 +615,7 @@ pub mod jni { use crate::physics::collider::ColliderShape; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderShape( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderShape( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -680,7 +680,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderShape( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderShape( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -728,7 +728,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderDensity( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderDensity( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -745,7 +745,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderDensity( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderDensity( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -761,7 +761,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderFriction( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderFriction( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -775,7 +775,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderFriction( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderFriction( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -791,7 +791,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderRestitution( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderRestitution( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -805,7 +805,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderRestitution( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderRestitution( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -821,7 +821,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderMass( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderMass( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -835,7 +835,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderMass( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderMass( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -851,7 +851,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderIsSensor( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderIsSensor( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -865,7 +865,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderIsSensor( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderIsSensor( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -881,7 +881,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderTranslation( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderTranslation( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -895,7 +895,7 @@ pub mod jni { if let Some(col) = get_collider(&physics, &ffi) { let t: &Vector3<f32> = col.translation(); - let vec = DVec3::new(t.x as f64, t.y as f64, t.z as f64); + let vec = crate::types::Vector3::new(t.x as f64, t.y as f64, t.z as f64); match vec.to_jobject(&mut env) { Ok(o) => o.into_raw(), Err(_) => std::ptr::null_mut(), @@ -906,7 +906,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderTranslation( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderTranslation( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -915,7 +915,7 @@ pub mod jni { ) { let physics = crate::convert_ptr!(mut physics_ptr => PhysicsState); if let Ok(ffi) = ColliderFFI::from_jobject(&mut env, &collider_obj) { - if let Ok(vec) = DVec3::from_jobject(&mut env, &vec_obj) { + if let Ok(vec) = crate::types::Vector3::from_jobject(&mut env, &vec_obj) { if let Some(col) = get_collider_mut(physics, &ffi) { let t = Vector3::new(vec.x as f32, vec.y as f32, vec.z as f32); col.set_translation(t); @@ -925,7 +925,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_getColliderRotation( + pub fn Java_com_dropbear_physics_ColliderNative_getColliderRotation( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -941,7 +941,7 @@ pub mod jni { let r: &UnitQuaternion<f32> = col.rotation(); let q = DQuat::from_xyzw(r.i as f64, r.j as f64, r.k as f64, r.w as f64); let euler = q.to_euler(glam::EulerRot::XYZ); - let vec = DVec3::new(euler.0, euler.1, euler.2); + let vec = crate::types::Vector3::new(euler.0, euler.1, euler.2); match vec.to_jobject(&mut env) { Ok(o) => o.into_raw(), @@ -953,7 +953,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderNative_setColliderRotation( + pub fn Java_com_dropbear_physics_ColliderNative_setColliderRotation( mut env: JNIEnv, _class: JClass, physics_ptr: jlong, @@ -962,7 +962,7 @@ pub mod jni { ) { let physics = crate::convert_ptr!(mut physics_ptr => PhysicsState); if let Ok(ffi) = ColliderFFI::from_jobject(&mut env, &collider_obj) { - if let Ok(vec) = DVec3::from_jobject(&mut env, &vec_obj) { + if let Ok(vec) = crate::types::Vector3::from_jobject(&mut env, &vec_obj) { if let Some(col) = get_collider_mut(physics, &ffi) { let q = DQuat::from_euler(glam::EulerRot::XYZ, vec.x, vec.y, vec.z); let r = rapier3d::na::UnitQuaternion::new_normalize( @@ -72,7 +72,7 @@ pub mod jni { use jni::JNIEnv; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderGroupNative_colliderGroupExistsForEntity( + pub fn Java_com_dropbear_physics_ColliderGroupNative_colliderGroupExistsForEntity( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -89,7 +89,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_ColliderGroupNative_getColliderGroupColliders( + pub fn Java_com_dropbear_physics_ColliderGroupNative_getColliderGroupColliders( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -129,8 +129,9 @@ pub struct RigidBody { /// Scaling factor applied to gravity for this body. #[serde(default = "RigidBody::default_gravity_scale")] pub gravity_scale: f32, - - /// If the rigidbody is currently sleeping or not. + + #[serde(default)] + /// If the rigidbody is currently sleeping or not. pub sleeping: bool, /// Whether this body is allowed to sleep. @@ -591,7 +592,7 @@ pub mod jni { use rapier3d::dynamics::RigidBodyType; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_rigidBodyExistsForEntity( + pub fn Java_com_dropbear_physics_RigidBodyNative_rigidBodyExistsForEntity( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -618,7 +619,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyMode( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyMode( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -649,7 +650,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyMode( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyMode( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -673,7 +674,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyGravityScale( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyGravityScale( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -698,7 +699,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyGravityScale( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyGravityScale( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -722,7 +723,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLinearDamping( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLinearDamping( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -747,7 +748,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLinearDamping( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLinearDamping( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -771,7 +772,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyAngularDamping( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyAngularDamping( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -796,7 +797,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyAngularDamping( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyAngularDamping( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -820,7 +821,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodySleep( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodySleep( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -845,7 +846,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodySleep( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodySleep( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -869,7 +870,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyCcdEnabled( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyCcdEnabled( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -894,7 +895,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyCcdEnabled( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyCcdEnabled( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -918,7 +919,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLinearVelocity( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLinearVelocity( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -952,7 +953,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLinearVelocity( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLinearVelocity( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -982,7 +983,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyAngularVelocity( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyAngularVelocity( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -1016,7 +1017,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyAngularVelocity( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyAngularVelocity( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -1046,7 +1047,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLockTranslation( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLockTranslation( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -1080,7 +1081,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLockTranslation( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLockTranslation( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -1110,7 +1111,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLockRotation( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyLockRotation( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -1144,7 +1145,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLockRotation( + pub fn Java_com_dropbear_physics_RigidBodyNative_setRigidBodyLockRotation( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -1174,7 +1175,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyChildren( + pub fn Java_com_dropbear_physics_RigidBodyNative_getRigidBodyChildren( mut env: JNIEnv, _: JClass, _world_ptr: jlong, @@ -1226,7 +1227,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_applyImpulse( + pub fn Java_com_dropbear_physics_RigidBodyNative_applyImpulse( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -1253,7 +1254,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_physics_RigidBodyNative_applyTorqueImpulse( + pub fn Java_com_dropbear_physics_RigidBodyNative_applyTorqueImpulse( mut env: JNIEnv, _: JClass, world_ptr: jlong, @@ -184,6 +184,7 @@ pub mod jni { use crate::properties::{CustomProperties, Value}; use crate::scripting::jni::utils::{FromJObject, ToJObject}; + use crate::types::Vector3; /// Returns a primitive that is boxed (long => java.lang.Long) /// @@ -221,7 +222,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_customPropertiesExistsForEntity( + pub fn Java_com_dropbear_components_CustomPropertiesNative_customPropertiesExistsForEntity( _env: JNIEnv, _class: JClass, world_handle: jlong, @@ -238,7 +239,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getStringProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getStringProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -258,7 +259,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getIntProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getIntProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -279,7 +280,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getLongProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getLongProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -300,7 +301,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getDoubleProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getDoubleProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -321,7 +322,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getFloatProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getFloatProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -342,7 +343,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getBoolProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getBoolProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -363,7 +364,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_getVec3Property( + pub fn Java_com_dropbear_components_CustomPropertiesNative_getVec3Property( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -376,7 +377,7 @@ pub mod jni { if let Ok(props) = world.get::<&CustomProperties>(entity) { if let Some(Value::Vec3(v)) = props.get_property(&key_str) { - return match DVec3::from_array(*v).to_jobject(&mut env) { + return match Vector3::from(*v).to_jobject(&mut env) { Ok(obj) => obj.into_raw(), Err(_) => std::ptr::null_mut() }; @@ -386,7 +387,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setStringProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setStringProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -405,7 +406,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setIntProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setIntProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -423,7 +424,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setLongProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setLongProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -441,7 +442,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setFloatProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setFloatProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -459,7 +460,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setDoubleProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setDoubleProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -477,7 +478,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setBoolProperty( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setBoolProperty( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -495,7 +496,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_com_dropbear_components_CustomPropertiesNative_setVec3Property( + pub fn Java_com_dropbear_components_CustomPropertiesNative_setVec3Property( mut env: JNIEnv, _class: JClass, world_handle: jlong, @@ -507,7 +508,7 @@ pub mod jni { let entity = crate::convert_jlong_to_entity!(entity_id); let key_str = crate::convert_jstring!(env, key); - let vec_val = match DVec3::from_jobject(&mut env, &value) { + let vec_val = match Vector3::from_jobject(&mut env, &value) { Ok(v) => v, Err(_) => return, }; @@ -146,7 +146,7 @@ pub mod jni { use jni::JNIEnv; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneManagerNative_loadSceneAsyncNative__JJLjava_lang_String_2( + pub fn Java_com_dropbear_scene_SceneManagerNative_loadSceneAsyncNative__JJLjava_lang_String_2( mut env: JNIEnv, _: JClass, command_buffer_ptr: jlong, @@ -190,7 +190,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneManagerNative_loadSceneAsyncNative__JJLjava_lang_String_2Ljava_lang_String_2( + pub fn Java_com_dropbear_scene_SceneManagerNative_loadSceneAsyncNative__JJLjava_lang_String_2Ljava_lang_String_2( mut env: JNIEnv, _: JClass, command_buffer_ptr: jlong, @@ -236,7 +236,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneManagerNative_switchToSceneImmediateNative( + pub fn Java_com_dropbear_scene_SceneManagerNative_switchToSceneImmediateNative( mut env: JNIEnv, _: JClass, command_buffer_ptr: jlong, @@ -254,7 +254,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadHandleSceneName( + pub fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadHandleSceneName( mut env: JNIEnv, _: JClass, scene_loader_handle: jlong, @@ -284,7 +284,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_switchToSceneAsync( + pub fn Java_com_dropbear_scene_SceneLoadHandleNative_switchToSceneAsync( mut env: JNIEnv, _: JClass, command_buffer_ptr: jlong, @@ -308,7 +308,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadProgress( + pub fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadProgress( mut env: JNIEnv, _: JClass, scene_loader_handle: jlong, @@ -338,7 +338,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadStatus( + pub fn Java_com_dropbear_scene_SceneLoadHandleNative_getSceneLoadStatus( mut env: JNIEnv, _: JClass, scene_loader_handle: jlong, @@ -234,6 +234,13 @@ impl ScriptManager { physics_state, }; + if world.is_null() { log::error!("World pointer is null"); } + if input.is_null() { log::error!("InputState pointer is null"); } + if graphics.is_null() { log::error!("CommandBuffer pointer is null"); } + if assets.is_null() { log::error!("AssetRegistry pointer is null"); } + if scene_loader.is_null() { log::error!("SceneLoader pointer is null"); } + if physics_state.is_null() { log::error!("PhysicsState pointer is null"); } + match &self.script_target { ScriptTarget::JVM { .. } => { if let Some(jvm) = &mut self.jvm { @@ -303,18 +303,27 @@ impl JavaContext { let scene_loader_handle = context.scene_loader as jlong; let physics_handle = context.physics_state as jlong; + let args = [ + JValue::Long(world_handle), + JValue::Long(input_handle), + JValue::Long(graphics_handle), + JValue::Long(asset_handle), + JValue::Long(scene_loader_handle), + JValue::Long(physics_handle) + ]; + + let mut sig = String::from("("); + for _ in 0..args.len() { + sig.push('J'); + } + sig.push(')'); + sig.push('V'); + let dropbear_context_class: JClass = env.find_class("com/dropbear/ffi/DropbearContext")?; let dropbear_context_obj = env.new_object( dropbear_context_class, - "(JJJJJ)V", - &[ - JValue::Long(world_handle), - JValue::Long(input_handle), - JValue::Long(graphics_handle), - JValue::Long(asset_handle), - JValue::Long(scene_loader_handle), - JValue::Long(physics_handle) - ] + sig, + &args )?; log::trace!("Locating \"com/dropbear/ffi/NativeEngine\" class"); @@ -411,6 +420,10 @@ impl JavaContext { pub fn get_exception(env: &mut JNIEnv) -> anyhow::Result<()> { if let Ok(ex) = env.exception_occurred() { + if ex.is_null() { + return Ok(()); + } + env.exception_clear()?; let message_result = env.call_method( @@ -33,49 +33,7 @@ pub trait FromJObject { Self: Sized; } -impl FromJObject for DVec3 { - fn from_jobject(env: &mut JNIEnv, obj: &JObject) -> DropbearNativeResult<Self> - where - Self: Sized - { - let x_obj = env - .get_field(obj, "x", "Ljava/lang/Number;").map_err(|_| DropbearNativeError::JNIFailedToGetField)?.l().map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - let y_obj = env - .get_field(obj, "y", "Ljava/lang/Number;").map_err(|_| DropbearNativeError::JNIFailedToGetField)?.l().map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - let z_obj = env - .get_field(obj, "z", "Ljava/lang/Number;").map_err(|_| DropbearNativeError::JNIFailedToGetField)?.l().map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - - let x = env - .call_method(&x_obj, "doubleValue", "()D", &[]).map_err(|_| DropbearNativeError::JNIMethodNotFound)?.d().map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - let y = env - .call_method(&y_obj, "doubleValue", "()D", &[]).map_err(|_| DropbearNativeError::JNIMethodNotFound)?.d().map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - let z = env - .call_method(&z_obj, "doubleValue", "()D", &[]).map_err(|_| DropbearNativeError::JNIMethodNotFound)?.d().map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - - Ok(DVec3::new(x, y, z)) - } -} - /// Converts a Rust object (struct or enum) into a java [JObject] pub trait ToJObject { fn to_jobject<'a>(&self, env: &mut JNIEnv<'a>) -> DropbearNativeResult<JObject<'a>>; -} - -impl ToJObject for DVec3 { - fn to_jobject<'a>(&self, env: &mut JNIEnv<'a>) -> DropbearNativeResult<JObject<'a>> { - let cls = env.find_class("com/dropbear/math/Vector3d") - .map_err(|_| DropbearNativeError::JNIClassNotFound)?; - - let obj = env.new_object( - cls, - "(DDD)V", - &[ - JValue::Double(self.x), - JValue::Double(self.y), - JValue::Double(self.z) - ] - ).map_err(|_| DropbearNativeError::JNIFailedToCreateObject)?; - - Ok(obj) - } } @@ -5,6 +5,7 @@ use dropbear_engine::entity::{EntityTransform, Transform}; use glam::{DQuat, DVec3}; use ::jni::objects::{JObject, JValue}; use ::jni::JNIEnv; +use crate::types::Vector3; impl FromJObject for Transform { fn from_jobject(env: &mut JNIEnv, obj: &JObject) -> DropbearNativeResult<Self> { @@ -26,8 +27,8 @@ impl FromJObject for Transform { let scale_obj = scale_val.l() .map_err(|_| DropbearNativeError::JNIUnwrapFailed)?; - let position = DVec3::from_jobject(env, &pos_obj)?; - let scale = DVec3::from_jobject(env, &scale_obj)?; + let position: DVec3 = Vector3::from_jobject(env, &pos_obj)?.into(); + let scale: DVec3 = Vector3::from_jobject(env, &scale_obj)?.into(); let mut get_double = |field: &str| -> DropbearNativeResult<f64> { env.get_field(&rot_obj, field, "D") @@ -151,7 +152,7 @@ pub mod jni { use jni::JNIEnv; #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_components_EntityTransformNative_entityTransformExistsForEntity( + pub fn Java_com_dropbear_components_EntityTransformNative_entityTransformExistsForEntity( _env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -164,7 +165,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_components_EntityTransformNative_getLocalTransform( + pub fn Java_com_dropbear_components_EntityTransformNative_getLocalTransform( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -185,7 +186,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_components_EntityTransformNative_setLocalTransform( + pub fn Java_com_dropbear_components_EntityTransformNative_setLocalTransform( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -211,7 +212,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_components_EntityTransformNative_getWorldTransform( + pub fn Java_com_dropbear_components_EntityTransformNative_getWorldTransform( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -232,7 +233,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_components_EntityTransformNative_setWorldTransform( + pub fn Java_com_dropbear_components_EntityTransformNative_setWorldTransform( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -255,7 +256,7 @@ pub mod jni { } #[unsafe(no_mangle)] - pub extern "system" fn Java_com_dropbear_components_EntityTransformNative_propagateTransform( + pub fn Java_com_dropbear_components_EntityTransformNative_propagateTransform( mut env: JNIEnv, _class: JClass, world_ptr: jlong, @@ -27,6 +27,9 @@ impl Vector3 { pub fn to_array(&self) -> [f64; 3] { [self.x, self.y, self.z] } + pub fn to_float_array(&self) -> [f32; 3] { + [self.x as f32, self.y as f32, self.z as f32] + } } impl From<glam::DVec3> for Vector3 { @@ -45,6 +48,16 @@ impl From<[f64; 3]> for Vector3 { } } +impl From<[f32; 3]> for Vector3 { + fn from(value: [f32; 3]) -> Self { + Vector3 { + x: value[0] as f64, + y: value[1] as f64, + z: value[2] as f64, + } + } +} + impl From<Vector3> for glam::DVec3 { fn from(v: Vector3) -> Self { Self::new(v.x, v.y, v.z) @@ -1,4 +1,5 @@ use crossbeam_channel::unbounded; +use glam::DMat4; use super::*; use crate::signal::SignalController; use crate::spawn::PendingSpawnController; @@ -473,18 +474,23 @@ impl Scene for Editor { for (_entity, (entity_transform, group)) in q.iter() { for collider in &group.colliders { - let entity_matrix = entity_transform.sync().matrix().as_mat4(); + let world_tf = entity_transform.sync(); + + let entity_matrix = DMat4::from_rotation_translation( + world_tf.rotation, + world_tf.position + ).as_mat4(); let offset_transform = Transform::new() .with_offset(collider.translation, collider.rotation); + let offset_matrix = offset_transform.matrix().as_mat4(); let final_matrix = entity_matrix * offset_matrix; let color = [0.0, 1.0, 0.0, 1.0]; - let collider_uniform = ColliderUniform::from_matrix(final_matrix, color); - + let collider_buffer = graphics.shared.device.create_buffer_init( &wgpu::util::BufferInitDescriptor { label: Some("Collider Uniform Buffer"), @@ -219,8 +219,9 @@ impl PlayMode { .script_manager .init_script(None, entity_tag_map.clone(), target.clone()) { - log::error!("Failed to initialise scripts: {}", e); - return; + panic!("Failed to initialise scripts: {}", e); + } else { + log::debug!("Initialised scripts successfully!"); } let world_ptr = self.world.as_mut() as WorldPtr; @@ -232,12 +233,13 @@ impl PlayMode { .script_manager .load_script(world_ptr, input_ptr, graphics_ptr, physics_ptr) { - log::error!("Failed to load scripts: {}", e); - return; + panic!("Failed to load scripts: {}", e); + } else { + log::debug!("Loaded scripts successfully!"); } self.scripts_ready = true; - log::debug!("Scripts initialised successfully"); + log::debug!("Scripts reloaded successfully!"); } /// Requests an asynchronous scene load, returning immediately and loading the scene in the background. @@ -2,7 +2,7 @@ use std::collections::HashMap; use egui::{CentralPanel, MenuBar, TopBottomPanel}; use eucalyptus_core::physics::collider::ColliderGroup; use eucalyptus_core::physics::collider::shader::ColliderUniform; -use glam::{DQuat, DVec3}; +use glam::{DMat4, DQuat, DVec3}; use hecs::Entity; use wgpu::Color; use wgpu::util::DeviceExt; @@ -93,11 +93,11 @@ impl Scene for PlayMode { let new_local_pos = (inv_p_rot * relative_pos) / p_scale; let new_local_rot = inv_p_rot * new_world_rot; - let local = transform.local_mut(); + let local = transform.world_mut(); local.position = new_local_pos; local.rotation = new_local_rot; } else { - let local = transform.local_mut(); + let local = transform.world_mut(); local.position = new_world_pos; local.rotation = new_world_rot; } @@ -472,16 +472,21 @@ impl Scene for PlayMode { for (_entity, (entity_transform, group)) in q.iter() { for collider in &group.colliders { - let entity_matrix = entity_transform.sync().matrix().as_mat4(); + let world_tf = entity_transform.sync(); + + let entity_matrix = DMat4::from_rotation_translation( + world_tf.rotation, + world_tf.position + ).as_mat4(); let offset_transform = Transform::new() .with_offset(collider.translation, collider.rotation); + let offset_matrix = offset_transform.matrix().as_mat4(); let final_matrix = entity_matrix * offset_matrix; let color = [0.0, 1.0, 0.0, 1.0]; - let collider_uniform = ColliderUniform::from_matrix(final_matrix, color); let collider_buffer = graphics.shared.device.create_buffer_init( @@ -0,0 +1,10 @@ +package com.dropbear.physics + +import com.dropbear.math.Vector3d + +var gravity: Vector3d + get() = getGravity() + set(value) = setGravity(value) + +internal expect fun getGravity(): Vector3d +internal expect fun setGravity(gravity: Vector3d) @@ -0,0 +1,11 @@ +package com.dropbear; + +public class DropbearEngineNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native Long getEntity(long worldPtr, String label); + public static native Long getAsset(long assetHandle, String label); + public static native void quit(long commandBufferPtr); +} @@ -0,0 +1,12 @@ +package com.dropbear; + +public class EntityRefNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native String getEntityLabel(long worldPtr, long entityId); + public static native long[] getChildren(long worldPtr, long entityId); + public static native Long getChildByLabel(long worldPtr, long entityId, String label); + public static native Long getParent(long worldPtr, long entityId); +} @@ -0,0 +1,22 @@ +package com.dropbear; + +import com.dropbear.ffi.DynamicLibraryLoader; + +import java.lang.System; + +public class EucalyptusCoreLoader implements DynamicLibraryLoader { + private static boolean loaded = false; + + @Override + public void ensureLoaded() { + if (!loaded) { + System.loadLibrary("eucalyptus_core"); + loaded = true; + } + } + + @Override + public boolean isLoaded() { + return loaded; + } +} @@ -0,0 +1,12 @@ +package com.dropbear.asset; + +import com.dropbear.EucalyptusCoreLoader; + +public class AssetHandleNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native boolean isModelHandle(long assetRegistryHandle, long handle); + public static native boolean isTextureHandle(long assetRegistryHandle, long handle); +} @@ -0,0 +1,11 @@ +package com.dropbear.asset; + +import com.dropbear.EucalyptusCoreLoader; + +public class TextureHandleNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native String getTextureName(long assetRegistryHandle, long handle); +} @@ -0,0 +1,44 @@ +package com.dropbear.components; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector3d; + +public class CameraNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native boolean cameraExistsForEntity(long worldHandle, long entityId); + + public static native Vector3d getCameraEye(long worldHandle, long entityId); + public static native void setCameraEye(long worldHandle, long entityId, Vector3d value); + + public static native Vector3d getCameraTarget(long worldHandle, long entityId); + public static native void setCameraTarget(long worldHandle, long entityId, Vector3d value); + + public static native Vector3d getCameraUp(long worldHandle, long entityId); + public static native void setCameraUp(long worldHandle, long entityId, Vector3d value); + + public static native double getCameraAspect(long worldHandle, long entityId); + + public static native double getCameraFovY(long worldHandle, long entityId); + public static native void setCameraFovY(long worldHandle, long entityId, double value); + + public static native double getCameraZNear(long worldHandle, long entityId); + public static native void setCameraZNear(long worldHandle, long entityId, double value); + + public static native double getCameraZFar(long worldHandle, long entityId); + public static native void setCameraZFar(long worldHandle, long entityId, double value); + + public static native double getCameraYaw(long worldHandle, long entityId); + public static native void setCameraYaw(long worldHandle, long entityId, double value); + + public static native double getCameraPitch(long worldHandle, long entityId); + public static native void setCameraPitch(long worldHandle, long entityId, double value); + + public static native double getCameraSpeed(long worldHandle, long entityId); + public static native void setCameraSpeed(long worldHandle, long entityId, double value); + + public static native double getCameraSensitivity(long worldHandle, long entityId); + public static native void setCameraSensitivity(long worldHandle, long entityId, double value); +} @@ -0,0 +1,27 @@ +package com.dropbear.components; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector3d; + +public class CustomPropertiesNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native boolean customPropertiesExistsForEntity(long worldHandle, long entityId); + + public static native String getStringProperty(long worldHandle, long entityId, String label); + public static native Integer getIntProperty(long worldHandle, long entityId, String label); + public static native Long getLongProperty(long worldHandle, long entityId, String label); + public static native Double getDoubleProperty(long worldHandle, long entityId, String label); + public static native Float getFloatProperty(long worldHandle, long entityId, String label); + public static native Boolean getBoolProperty(long worldHandle, long entityId, String label); + public static native Vector3d getVec3Property(long worldHandle, long entityId, String label); + + public static native void setStringProperty(long worldHandle, long entityId, String label, String value); + public static native void setIntProperty(long worldHandle, long entityId, String label, int value); + public static native void setLongProperty(long worldHandle, long entityId, String label, long value); + public static native void setFloatProperty(long worldHandle, long entityId, String label, double value); + public static native void setBoolProperty(long worldHandle, long entityId, String label, boolean value); + public static native void setVec3Property(long worldHandle, long entityId, String label, Vector3d value); +} @@ -0,0 +1,18 @@ +package com.dropbear.components; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Transform; + +public class EntityTransformNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native boolean entityTransformExistsForEntity(long worldPtr, long entityId); + + public static native Transform getLocalTransform(long worldPtr, long entityId); + public static native void setLocalTransform(long worldPtr, long entityId, Transform transform); + public static native Transform getWorldTransform(long worldPtr, long entityId); + public static native void setWorldTransform(long worldPtr, long entityId, Transform transform); + public static native Transform propagateTransform(long worldPtr, long entityId); +} @@ -0,0 +1,17 @@ +package com.dropbear.components; + +import com.dropbear.EucalyptusCoreLoader; + +public class MeshRendererNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native boolean meshRendererExistsForEntity(long worldHandle, long entityId); + + public static native long getModel(long worldHandle, long entityId); + public static native void setModel(long worldHandle, long assetRegistryHandle, long entityId, long modelHandle); + public static native long[] getAllTextureIds(long worldHandle, long assetRegistryHandle, long entityId); + public static native Long getTexture(long worldHandle, long assetRegistryHandle, long entityId, String materialName); + public static native void setTextureOverride(long worldHandle, long assetRegistryHandle, long entityId, String meshName, long textureHandle); +} @@ -0,0 +1,12 @@ +package com.dropbear.ffi; + +/// Interface for dynamic library loading, allowing for custom components not within the dropbear component +/// library. +public interface DynamicLibraryLoader { + /// Ensures that the library is loaded before accessing + /// any of the JNI static functions. + void ensureLoaded(); + + /// Forces the library to have a loaded boolean variable. + boolean isLoaded(); +} @@ -0,0 +1,14 @@ +package com.dropbear.input; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector2d; + +public class GamepadNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native boolean isGamepadButtonPressed(long inputStateHandle, long gamepad, int gamepadButton); + public static native Vector2d getLeftStickPosition(long inputStateHandle, long gamepad); + public static native Vector2d getRightStickPosition(long inputStateHandle, long gamepad); +} @@ -0,0 +1,22 @@ +package com.dropbear.input; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector2d; + +public class InputStateNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native void printInputState(long inputStateHandle); + public static native boolean isKeyPressed(long inputStateHandle, int keyCode); + public static native Vector2d getMousePosition(long inputStateHandle); + public static native boolean isMouseButtonPressed(long inputStateHandle, MouseButton mouseButton); + public static native Vector2d getMouseDelta(long inputStateHandle); + public static native boolean isCursorLocked(long inputStateHandle); + public static native void setCursorLocked(long commandBufferPtr, long inputStateHandle, boolean locked); + public static native Vector2d getLastMousePos(long inputStateHandle); + public static native boolean isCursorHidden(long inputStateHandle); + public static native void setCursorHidden(long commandBufferPtr, long inputStateHandle, boolean hidden); + public static native long[] getConnectedGamepads(long inputStateHandle); +} @@ -0,0 +1,12 @@ +package com.dropbear.physics; + +import com.dropbear.EucalyptusCoreLoader; + +public class ColliderGroupNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native Collider[] getColliderGroupColliders(long worldPtr, long physicsPtr, long entityId); + public static native boolean colliderGroupExistsForEntity(long worldPtr, long entityId); +} @@ -0,0 +1,34 @@ +package com.dropbear.physics; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector3d; + +public class ColliderNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native ColliderShape getColliderShape(long physicsPtr, Collider collider); + public static native void setColliderShape(long physicsPtr, Collider collider, ColliderShape shape); + + public static native double getColliderDensity(long physicsPtr, Collider collider); + public static native void setColliderDensity(long physicsPtr, Collider collider, double density); + + public static native double getColliderFriction(long physicsPtr, Collider collider); + public static native void setColliderFriction(long physicsPtr, Collider collider, double friction); + + public static native double getColliderRestitution(long physicsPtr, Collider collider); + public static native void setColliderRestitution(long physicsPtr, Collider collider, double restitution); + + public static native double getColliderMass(long physicsPtr, Collider collider); + public static native void setColliderMass(long physicsPtr, Collider collider, double mass); + + public static native boolean getColliderIsSensor(long physicsPtr, Collider collider); + public static native void setColliderIsSensor(long physicsPtr, Collider collider, boolean isSensor); + + public static native Vector3d getColliderTranslation(long physicsPtr, Collider collider); + public static native void setColliderTranslation(long physicsPtr, Collider collider, Vector3d translation); + + public static native Vector3d getColliderRotation(long physicsPtr, Collider collider); + public static native void setColliderRotation(long physicsPtr, Collider collider, Vector3d rotation); +} @@ -0,0 +1,13 @@ +package com.dropbear.physics; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector3d; + +public class PhysicsNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native Vector3d getGravity(long physicsHandle); + public static native void setGravity(long physicsHandle, Vector3d gravity); +} @@ -0,0 +1,47 @@ +package com.dropbear.physics; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.math.Vector3d; + +public class RigidBodyNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native Index rigidBodyExistsForEntity(long worldPtr, long physicsPtr, long entityId); + + public static native int getRigidBodyMode(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyMode(long worldPtr, long physicsPtr, RigidBody rigidBody, int mode); + + public static native double getRigidBodyGravityScale(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyGravityScale(long worldPtr, long physicsPtr, RigidBody rigidBody, double gravityScale); + + public static native double getRigidBodyLinearDamping(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyLinearDamping(long worldPtr, long physicsPtr, RigidBody rigidBody, double linearDamping); + + public static native double getRigidBodyAngularDamping(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyAngularDamping(long worldPtr, long physicsPtr, RigidBody rigidBody, double angularDamping); + + public static native boolean getRigidBodySleep(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodySleep(long worldPtr, long physicsPtr, RigidBody rigidBody, boolean canSleep); + + public static native boolean getRigidBodyCcdEnabled(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyCcdEnabled(long worldPtr, long physicsPtr, RigidBody rigidBody, boolean ccdEnabled); + + public static native Vector3d getRigidBodyLinearVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyLinearVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody, Vector3d linearVelocity); + + public static native Vector3d getRigidBodyAngularVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyAngularVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody, Vector3d angularVelocity); + + public static native AxisLock getRigidBodyLockTranslation(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyLockTranslation(long worldPtr, long physicsPtr, RigidBody rigidBody, AxisLock lockTranslation); + + public static native AxisLock getRigidBodyLockRotation(long worldPtr, long physicsPtr, RigidBody rigidBody); + public static native void setRigidBodyLockRotation(long worldPtr, long physicsPtr, RigidBody rigidBody, AxisLock lockRotation); + + public static native Collider[] getRigidBodyChildren(long worldPtr, long physicsPtr, RigidBody rigidBody); + + public static native void applyImpulse(long worldPtr, long physicsPtr, RigidBody rigidBody, double x, double y, double z); + public static native void applyTorqueImpulse(long worldPtr, long physicsPtr, RigidBody rigidBody, double x, double y, double z); +} @@ -0,0 +1,15 @@ +package com.dropbear.scene; + +import com.dropbear.EucalyptusCoreLoader; +import com.dropbear.utils.Progress; + +public class SceneLoadHandleNative { + static { + new EucalyptusCoreLoader().ensureLoaded(); + } + + public static native String getSceneLoadHandleSceneName(long sceneLoaderHandle, long sceneId); + public static native void switchToSceneAsync(long commandBufferPtr, long sceneId); + public static native Progress getSceneLoadProgress(long sceneLoaderHandle, long sceneId); + public static native int getSceneLoadStatus(long sceneLoaderHandle, long sceneId); +} @@ -0,0 +1,13 @@ +package com.dropbear.scene; + +import com.dropbear.EucalyptusCoreLoader; + +public class SceneManagerNative { + static { + 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); +} @@ -1,11 +0,0 @@ -package com.dropbear; - -public class DropbearEngineNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native Long getEntity(long worldPtr, String label); - public static native Long getAsset(long assetHandle, String label); - public static native void quit(long commandBufferPtr); -} @@ -1,12 +0,0 @@ -package com.dropbear; - -public class EntityRefNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native String getEntityLabel(long worldPtr, long entityId); - public static native long[] getChildren(long worldPtr, long entityId); - public static native Long getChildByLabel(long worldPtr, long entityId, String label); - public static native Long getParent(long worldPtr, long entityId); -} @@ -1,22 +0,0 @@ -package com.dropbear; - -import com.dropbear.ffi.DynamicLibraryLoader; - -import java.lang.System; - -public class EucalyptusCoreLoader implements DynamicLibraryLoader { - private static boolean loaded = false; - - @Override - public void ensureLoaded() { - if (!loaded) { - System.loadLibrary("eucalyptus_core"); - loaded = true; - } - } - - @Override - public boolean isLoaded() { - return loaded; - } -} @@ -1,12 +0,0 @@ -package com.dropbear.asset; - -import com.dropbear.EucalyptusCoreLoader; - -public class AssetHandleNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native boolean isModelHandle(long assetRegistryHandle, long handle); - public static native boolean isTextureHandle(long assetRegistryHandle, long handle); -} @@ -1,11 +0,0 @@ -package com.dropbear.asset; - -import com.dropbear.EucalyptusCoreLoader; - -public class TextureHandleNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native String getTextureName(long assetRegistryHandle, long handle); -} @@ -1,44 +0,0 @@ -package com.dropbear.components; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Vector3d; - -public class CameraNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native boolean cameraExistsForEntity(long worldHandle, long entityId); - - public static native Vector3d getCameraEye(long worldHandle, long entityId); - public static native void setCameraEye(long worldHandle, long entityId, Vector3d value); - - public static native Vector3d getCameraTarget(long worldHandle, long entityId); - public static native void setCameraTarget(long worldHandle, long entityId, Vector3d value); - - public static native Vector3d getCameraUp(long worldHandle, long entityId); - public static native void setCameraUp(long worldHandle, long entityId, Vector3d value); - - public static native double getCameraAspect(long worldHandle, long entityId); - - public static native double getCameraFovY(long worldHandle, long entityId); - public static native void setCameraFovY(long worldHandle, long entityId, double value); - - public static native double getCameraZNear(long worldHandle, long entityId); - public static native void setCameraZNear(long worldHandle, long entityId, double value); - - public static native double getCameraZFar(long worldHandle, long entityId); - public static native void setCameraZFar(long worldHandle, long entityId, double value); - - public static native double getCameraYaw(long worldHandle, long entityId); - public static native void setCameraYaw(long worldHandle, long entityId, double value); - - public static native double getCameraPitch(long worldHandle, long entityId); - public static native void setCameraPitch(long worldHandle, long entityId, double value); - - public static native double getCameraSpeed(long worldHandle, long entityId); - public static native void setCameraSpeed(long worldHandle, long entityId, double value); - - public static native double getCameraSensitivity(long worldHandle, long entityId); - public static native void setCameraSensitivity(long worldHandle, long entityId, double value); -} @@ -1,27 +0,0 @@ -package com.dropbear.components; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Vector3d; - -public class CustomPropertiesNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native boolean customPropertiesExistsForEntity(long worldHandle, long entityId); - - public static native String getStringProperty(long worldHandle, long entityId, String label); - public static native Integer getIntProperty(long worldHandle, long entityId, String label); - public static native Long getLongProperty(long worldHandle, long entityId, String label); - public static native Double getDoubleProperty(long worldHandle, long entityId, String label); - public static native Float getFloatProperty(long worldHandle, long entityId, String label); - public static native Boolean getBoolProperty(long worldHandle, long entityId, String label); - public static native Vector3d getVec3Property(long worldHandle, long entityId, String label); - - public static native void setStringProperty(long worldHandle, long entityId, String label, String value); - public static native void setIntProperty(long worldHandle, long entityId, String label, int value); - public static native void setLongProperty(long worldHandle, long entityId, String label, long value); - public static native void setFloatProperty(long worldHandle, long entityId, String label, double value); - public static native void setBoolProperty(long worldHandle, long entityId, String label, boolean value); - public static native void setVec3Property(long worldHandle, long entityId, String label, Vector3d value); -} @@ -1,18 +0,0 @@ -package com.dropbear.components; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Transform; - -public class EntityTransformNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native boolean entityTransformExistsForEntity(long worldPtr, long entityId); - - public static native Transform getLocalTransform(long worldPtr, long entityId); - public static native void setLocalTransform(long worldPtr, long entityId, Transform transform); - public static native Transform getWorldTransform(long worldPtr, long entityId); - public static native void setWorldTransform(long worldPtr, long entityId, Transform transform); - public static native Transform propagateTransform(long worldPtr, long entityId); -} @@ -1,17 +0,0 @@ -package com.dropbear.components; - -import com.dropbear.EucalyptusCoreLoader; - -public class MeshRendererNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native boolean meshRendererExistsForEntity(long worldHandle, long entityId); - - public static native long getModel(long worldHandle, long entityId); - public static native void setModel(long worldHandle, long assetRegistryHandle, long entityId, long modelHandle); - public static native long[] getAllTextureIds(long worldHandle, long assetRegistryHandle, long entityId); - public static native Long getTexture(long worldHandle, long assetRegistryHandle, long entityId, String materialName); - public static native void setTextureOverride(long worldHandle, long assetRegistryHandle, long entityId, String meshName, long textureHandle); -} @@ -1,12 +0,0 @@ -package com.dropbear.ffi; - -/// Interface for dynamic library loading, allowing for custom components not within the dropbear component -/// library. -public interface DynamicLibraryLoader { - /// Ensures that the library is loaded before accessing - /// any of the JNI static functions. - void ensureLoaded(); - - /// Forces the library to have a loaded boolean variable. - boolean isLoaded(); -} @@ -1,15 +0,0 @@ -package com.dropbear.input; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Vector2; -import com.dropbear.math.Vector2d; - -public class GamepadNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native boolean isGamepadButtonPressed(long inputStateHandle, long gamepad, int gamepadButton); - public static native Vector2d getLeftStickPosition(long inputStateHandle, long gamepad); - public static native Vector2d getRightStickPosition(long inputStateHandle, long gamepad); -} @@ -1,22 +0,0 @@ -package com.dropbear.input; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Vector2d; - -public class InputStateNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native void printInputState(long inputStateHandle); - public static native boolean isKeyPressed(long inputStateHandle, int keyCode); - public static native Vector2d getMousePosition(long inputStateHandle); - public static native boolean isMouseButtonPressed(long inputStateHandle, MouseButton mouseButton); - public static native Vector2d getMouseDelta(long inputStateHandle); - public static native boolean isCursorLocked(long inputStateHandle); - public static native void setCursorLocked(long commandBufferPtr, long inputStateHandle, boolean locked); - public static native Vector2d getLastMousePos(long inputStateHandle); - public static native boolean isCursorHidden(long inputStateHandle); - public static native void setCursorHidden(long commandBufferPtr, long inputStateHandle, boolean hidden); - public static native long[] getConnectedGamepads(long inputStateHandle); -} @@ -1,12 +0,0 @@ -package com.dropbear.physics; - -import com.dropbear.EucalyptusCoreLoader; - -public class ColliderGroupNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native Collider[] getColliderGroupColliders(long worldPtr, long physicsPtr, long entityId); - public static native boolean colliderGroupExistsForEntity(long worldPtr, long entityId); -} @@ -1,34 +0,0 @@ -package com.dropbear.physics; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Vector3d; - -public class ColliderNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native ColliderShape getColliderShape(long physicsPtr, Collider collider); - public static native void setColliderShape(long physicsPtr, Collider collider, ColliderShape shape); - - public static native double getColliderDensity(long physicsPtr, Collider collider); - public static native void setColliderDensity(long physicsPtr, Collider collider, double density); - - public static native double getColliderFriction(long physicsPtr, Collider collider); - public static native void setColliderFriction(long physicsPtr, Collider collider, double friction); - - public static native double getColliderRestitution(long physicsPtr, Collider collider); - public static native void setColliderRestitution(long physicsPtr, Collider collider, double restitution); - - public static native double getColliderMass(long physicsPtr, Collider collider); - public static native void setColliderMass(long physicsPtr, Collider collider, double mass); - - public static native boolean getColliderIsSensor(long physicsPtr, Collider collider); - public static native void setColliderIsSensor(long physicsPtr, Collider collider, boolean isSensor); - - public static native Vector3d getColliderTranslation(long physicsPtr, Collider collider); - public static native void setColliderTranslation(long physicsPtr, Collider collider, Vector3d translation); - - public static native Vector3d getColliderRotation(long physicsPtr, Collider collider); - public static native void setColliderRotation(long physicsPtr, Collider collider, Vector3d rotation); -} @@ -0,0 +1,12 @@ +package com.dropbear.physics + +import com.dropbear.DropbearEngine +import com.dropbear.math.Vector3d + +internal actual fun getGravity(): Vector3d { + return PhysicsNative.getGravity(DropbearEngine.native.physicsEngineHandle) ?: Vector3d(0.0, -9.81, 0.0) +} + +internal actual fun setGravity(gravity: Vector3d) { + return PhysicsNative.setGravity(DropbearEngine.native.physicsEngineHandle, gravity) +} @@ -1,47 +0,0 @@ -package com.dropbear.physics; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.math.Vector3d; - -public class RigidBodyNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native Index rigidBodyExistsForEntity(long worldPtr, long physicsPtr, long entityId); - - public static native int getRigidBodyMode(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyMode(long worldPtr, long physicsPtr, RigidBody rigidBody, int mode); - - public static native double getRigidBodyGravityScale(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyGravityScale(long worldPtr, long physicsPtr, RigidBody rigidBody, double gravityScale); - - public static native double getRigidBodyLinearDamping(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyLinearDamping(long worldPtr, long physicsPtr, RigidBody rigidBody, double linearDamping); - - public static native double getRigidBodyAngularDamping(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyAngularDamping(long worldPtr, long physicsPtr, RigidBody rigidBody, double angularDamping); - - public static native boolean getRigidBodySleep(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodySleep(long worldPtr, long physicsPtr, RigidBody rigidBody, boolean canSleep); - - public static native boolean getRigidBodyCcdEnabled(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyCcdEnabled(long worldPtr, long physicsPtr, RigidBody rigidBody, boolean ccdEnabled); - - public static native Vector3d getRigidBodyLinearVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyLinearVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody, Vector3d linearVelocity); - - public static native Vector3d getRigidBodyAngularVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyAngularVelocity(long worldPtr, long physicsPtr, RigidBody rigidBody, Vector3d angularVelocity); - - public static native AxisLock getRigidBodyLockTranslation(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyLockTranslation(long worldPtr, long physicsPtr, RigidBody rigidBody, AxisLock lockTranslation); - - public static native AxisLock getRigidBodyLockRotation(long worldPtr, long physicsPtr, RigidBody rigidBody); - public static native void setRigidBodyLockRotation(long worldPtr, long physicsPtr, RigidBody rigidBody, AxisLock lockRotation); - - public static native Collider[] getRigidBodyChildren(long worldPtr, long physicsPtr, RigidBody rigidBody); - - public static native void applyImpulse(long worldPtr, long physicsPtr, RigidBody rigidBody, double x, double y, double z); - public static native void applyTorqueImpulse(long worldPtr, long physicsPtr, RigidBody rigidBody, double x, double y, double z); -} @@ -1,15 +0,0 @@ -package com.dropbear.scene; - -import com.dropbear.EucalyptusCoreLoader; -import com.dropbear.utils.Progress; - -public class SceneLoadHandleNative { - static { - new EucalyptusCoreLoader().ensureLoaded(); - } - - public static native String getSceneLoadHandleSceneName(long sceneLoaderHandle, long sceneId); - public static native void switchToSceneAsync(long commandBufferPtr, long sceneId); - public static native Progress getSceneLoadProgress(long sceneLoaderHandle, long sceneId); - public static native int getSceneLoadStatus(long sceneLoaderHandle, long sceneId); -} @@ -1,13 +0,0 @@ -package com.dropbear.scene; - -import com.dropbear.EucalyptusCoreLoader; - -public class SceneManagerNative { - static { - 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); -} @@ -0,0 +1,10 @@ +package com.dropbear.physics + +import com.dropbear.math.Vector3d + +internal actual fun getGravity(): Vector3d { + TODO("Not yet implemented") +} + +internal actual fun setGravity(gravity: Vector3d) { +}