diff --git a/Cargo.toml b/Cargo.toml index cf795c1..73e49ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,11 +22,15 @@ features = [ "serialize", ] +[dependencies.bevy_rapier2d] +git = "https://github.com/dimforge/bevy_rapier" +branch = "rapier-master" +features = ["simd-stable"] + [dependencies] backtrace = "0.3" bevy_input_actionmap = { git = "https://github.com/lightsoutgames/bevy_input_actionmap" } bevy_openal = { git = "https://github.com/lightsoutgames/bevy_openal" } -bevy_rapier2d = { version = "0.12", features = ["serde-serialize", "simd-stable"] } bevy_tts = { git = "https://github.com/lightsoutgames/bevy_tts", default-features = false, features = ["tolk"] } coord_2d = "0.3" derive_more = "0.99" @@ -40,3 +44,6 @@ rand = "0.8" sentry = "0.25" serde = "1" shadowcast = "0.8" + +[patch.crates-io] +rapier2d = { git = "https://github.com/dimforge/rapier", rev = "7efcff615e821" } \ No newline at end of file diff --git a/src/map.rs b/src/map.rs index aeaa0bb..c862f21 100644 --- a/src/map.rs +++ b/src/map.rs @@ -239,7 +239,7 @@ fn spawn_colliders( .remove::() .remove::() .insert_bundle(RigidBodyBundle { - body_type: RigidBodyTypeComponent(RigidBodyType::Static), + body_type: RigidBodyTypeComponent(RigidBodyType::Fixed), ..Default::default() }); if **spawn_collider_per_tile { @@ -361,7 +361,7 @@ fn spawn_colliders( .spawn_bundle(ColliderBundle { collider_type: ColliderType::Sensor.into(), shape: shape.clone().into(), - flags: ActiveEvents::INTERSECTION_EVENTS.into(), + flags: ActiveEvents::COLLISION_EVENTS.into(), position, ..Default::default() }) @@ -443,7 +443,7 @@ fn spawn_portal_colliders( collider_type: ColliderTypeComponent(ColliderType::Sensor), shape: ColliderShape::cuboid(0.5, 0.5).into(), position, - flags: ActiveEvents::INTERSECTION_EVENTS.into(), + flags: ActiveEvents::COLLISION_EVENTS.into(), ..Default::default() }) .insert(ColliderPositionSync::Discrete); @@ -454,18 +454,22 @@ fn spawn_portal_colliders( } fn area_description( - mut events: EventReader, + mut events: EventReader, areas: Query<(&Area, Option<&Name>)>, players: Query<&Player>, config: Res, mut log: Query<&mut Log>, ) { for event in events.iter() { - if let Some((area, other)) = - target_and_other(event.collider1.entity(), event.collider2.entity(), &|v| { - areas.get(v).is_ok() - }) - { + let (entity1, entity2, started) = match event { + CollisionEvent::Started(collider1, collider2) => { + (collider1.entity(), collider2.entity(), true) + } + CollisionEvent::Stopped(collider1, collider2, _) => { + (collider1.entity(), collider2.entity(), false) + } + }; + if let Some((area, other)) = target_and_other(entity1, entity2, &|v| areas.get(v).is_ok()) { if players.get(other).is_ok() { if let Ok((aabb, area_name)) = areas.get(area) { let name = if let Some(name) = area_name { @@ -477,7 +481,7 @@ fn area_description( }; if let Some(name) = name { if let Ok(mut log) = log.get_single_mut() { - if event.intersecting { + if started { log.push(format!("Entering {name}.")); } else { log.push(format!("Leaving {name}."));