Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion sable_rapier/src/main/rust/rapier/src/boxes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,10 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_rem
let sim_data = &mut *sim_data;
let mut sable_data = scene.sable_data.write().unwrap();

let handle = sable_data.rigid_bodies[&(id as LevelColliderID)];
let Some(handle) = sable_data.rigid_bodies.get(&(id as LevelColliderID)) else {
return;
};
let handle = *handle;
sim_data.rigid_body_set.remove(
handle,
&mut sim_data.island_manager,
Expand Down
37 changes: 19 additions & 18 deletions sable_rapier/src/main/rust/rapier/src/contraptions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,8 @@ macro_rules! extract_jint_array {
fn get_kinematic_collider_info(
sable: &mut SableSceneData,
id: jint,
) -> &mut ActiveLevelColliderInfo {
sable
.level_colliders
.get_mut(&(id as LevelColliderID))
.expect("No kinematic contraption with given ID!")
) -> Option<&mut ActiveLevelColliderInfo> {
sable.level_colliders.get_mut(&(id as LevelColliderID))
}

#[unsafe(no_mangle)]
Expand All @@ -61,17 +58,16 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_cre

let should_be_static = mount_id == -1;
let mount_rigid_body = if should_be_static {
let new_body = sim_data
.rigid_body_set
.insert(RigidBodyBuilder::kinematic_position_based());
Some(new_body)
} else {
Some(
*sable_data
.rigid_bodies
.get(&(mount_id as LevelColliderID))
.unwrap(),
sim_data
.rigid_body_set
.insert(RigidBodyBuilder::kinematic_position_based()),
)
} else {
sable_data
.rigid_bodies
.get(&(mount_id as LevelColliderID))
.copied()
};

let mount_rigid_body: RigidBodyHandle = if let Some(body) = mount_rigid_body {
Expand Down Expand Up @@ -140,7 +136,9 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_set
let mut sim_data = scene.sim_data.write().unwrap();
let mut sable_data = scene.sable_data.write().unwrap();

let info = get_kinematic_collider_info(&mut sable_data, id);
let Some(info) = get_kinematic_collider_info(&mut sable_data, id) else {
return;
};
let collider_handle = info.collider;

let collider = sim_data.collider_set.get_mut(collider_handle);
Expand Down Expand Up @@ -218,7 +216,9 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_add

with_handle(handle, |scene| {
let mut sable_data = scene.sable_data.write().unwrap();
let info = get_kinematic_collider_info(&mut sable_data, id);
let Some(info) = get_kinematic_collider_info(&mut sable_data, id) else {
return;
};
if let Some(chunk_map) = &mut info.chunk_map {
chunk_map.insert(crate::scene::pack_section_pos(x, y, z), chunk);
}
Expand All @@ -240,8 +240,9 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_rem
let sim_data = &mut *sim_data;
let mut sable_data = scene.sable_data.write().unwrap();

let info = sable_data.level_colliders.remove(&(id as LevelColliderID));
let info = info.unwrap();
let Some(info) = sable_data.level_colliders.remove(&(id as LevelColliderID)) else {
return;
};

sim_data.collider_set.remove(
info.collider,
Expand Down
40 changes: 32 additions & 8 deletions sable_rapier/src/main/rust/rapier/src/joints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -329,13 +329,19 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_add
let rb_a = if id_a == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_a as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_a as LevelColliderID)) else {
return -1;
};
*rb
};

let rb_b = if id_b == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_b as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_b as LevelColliderID)) else {
return -1;
};
*rb
};

let revolute = RevoluteJointBuilder::new(
Expand Down Expand Up @@ -416,13 +422,19 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_add
let rb_a = if id_a == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_a as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_a as LevelColliderID)) else {
return -1;
};
*rb
};

let rb_b = if id_b == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_b as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_b as LevelColliderID)) else {
return -1;
};
*rb
};

let quat = Quat::from_xyzw(
Expand Down Expand Up @@ -508,13 +520,19 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_add
let rb_a = if id_a == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_a as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_a as LevelColliderID)) else {
return -1;
};
*rb
};

let rb_b = if id_b == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_b as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_b as LevelColliderID)) else {
return -1;
};
*rb
};

let mut joint = GenericJointBuilder::new(JointAxesMask::empty()).softness(
Expand Down Expand Up @@ -602,13 +620,19 @@ pub extern "system" fn Java_dev_ryanhcode_sable_physics_impl_rapier_Rapier3D_add
let rb_a = if id_a == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_a as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_a as LevelColliderID)) else {
return -1;
};
*rb
};

let rb_b = if id_b == -1 {
scene.ground_handle.unwrap()
} else {
sable_data.rigid_bodies[&(id_b as LevelColliderID)]
let Some(rb) = sable_data.rigid_bodies.get(&(id_b as LevelColliderID)) else {
return -1;
};
*rb
};

let locked_axes = JointAxesMask::from_bits_truncate(locked_axes_mask as u8);
Expand Down
Loading