From 6406fd8786fcafe66b8b2ed9f298ec6c038a84e8 Mon Sep 17 00:00:00 2001 From: Mark Date: Sat, 13 Jan 2024 21:55:23 -0800 Subject: [PATCH] Fixed landing collisions --- TODO.md | 1 - crates/galactica/src/game.rs | 4 ++-- crates/system/src/phys/systemsim/mod.rs | 9 +++++++-- crates/system/src/phys/systemsim/step.rs | 10 ++++++++-- crates/system/src/phys/systemsim/steputil.rs | 13 +++++++++++-- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/TODO.md b/TODO.md index 5709b30..c06a776 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,6 @@ ## Specific Jobs - Fix angles (point, land) - Land from farther away - - Land collider - Take off - UI: text arranger - Start documenting diff --git a/crates/galactica/src/game.rs b/crates/galactica/src/game.rs index f367455..f43086e 100644 --- a/crates/galactica/src/game.rs +++ b/crates/galactica/src/game.rs @@ -66,7 +66,7 @@ impl<'a> Game { ShipHandle { index: 0 }, FactionHandle { index: 1 }, ShipPersonality::Point, - Point2::new(100.0, 0.0), + Point2::new(400.0, 0.0), ); let s = systemsim.get_ship_mut(&a).unwrap(); @@ -79,7 +79,7 @@ impl<'a> Game { ShipHandle { index: 0 }, FactionHandle { index: 0 }, ShipPersonality::Dummy, - Point2::new(0.0, 120.0), + Point2::new(0.0, 4000.0), ); let s = systemsim.get_ship_mut(&a).unwrap(); diff --git a/crates/system/src/phys/systemsim/mod.rs b/crates/system/src/phys/systemsim/mod.rs index 55fa8d9..136fbf2 100644 --- a/crates/system/src/phys/systemsim/mod.rs +++ b/crates/system/src/phys/systemsim/mod.rs @@ -4,7 +4,7 @@ use nalgebra::{Point2, Vector2}; use rapier2d::{ dynamics::{RigidBody, RigidBodyBuilder, RigidBodyHandle, RigidBodySet}, - geometry::{ColliderHandle, ColliderSet}, + geometry::{ColliderHandle, ColliderSet, Group, InteractionGroups}, }; use std::collections::HashMap; @@ -62,7 +62,7 @@ impl PhysSim { position: Point2, ) -> PhysSimShipHandle { let ship_content = ct.get_ship(handle); - let cl = ship_content.collider.0.clone(); + let mut cl = ship_content.collider.0.clone(); // TODO: additonal ship mass from outfits and cargo let rb = RigidBodyBuilder::dynamic() @@ -71,6 +71,11 @@ impl PhysSim { .translation(Vector2::new(position.x, position.y)) .can_sleep(false); + cl.set_collision_groups(InteractionGroups::new( + Group::GROUP_1, + Group::GROUP_1 | Group::GROUP_2, + )); + let ridid_body = self.rigid_body_set.insert(rb.build()); let collider = self.collider_set diff --git a/crates/system/src/phys/systemsim/step.rs b/crates/system/src/phys/systemsim/step.rs index 37e4992..e6ab620 100644 --- a/crates/system/src/phys/systemsim/step.rs +++ b/crates/system/src/phys/systemsim/step.rs @@ -1,7 +1,11 @@ use galactica_content::{GunPoint, OutfitHandle, ProjectileCollider}; use nalgebra::{Rotation2, Vector2}; use rand::Rng; -use rapier2d::{dynamics::RigidBodyBuilder, geometry::ColliderBuilder, pipeline::ActiveEvents}; +use rapier2d::{ + dynamics::RigidBodyBuilder, + geometry::{ColliderBuilder, Group, InteractionGroups}, + pipeline::ActiveEvents, +}; use crate::{ data::{ShipAutoPilot, ShipState}, @@ -176,13 +180,15 @@ impl PhysSim { .linvel(vel) .build(); - let collider = match &outfit.projectile.collider { + let mut collider = match &outfit.projectile.collider { ProjectileCollider::Ball(b) => ColliderBuilder::ball(b.radius) .sensor(true) .active_events(ActiveEvents::COLLISION_EVENTS) .build(), }; + collider.set_collision_groups(InteractionGroups::new(Group::GROUP_2, Group::GROUP_1)); + let rigid_body = self.rigid_body_set.insert(rigid_body); let collider = self.collider_set.insert_with_parent( collider, diff --git a/crates/system/src/phys/systemsim/steputil.rs b/crates/system/src/phys/systemsim/steputil.rs index c22bc56..193012e 100644 --- a/crates/system/src/phys/systemsim/steputil.rs +++ b/crates/system/src/phys/systemsim/steputil.rs @@ -1,6 +1,9 @@ use galactica_content::{Content, Relationship, SystemObjectHandle}; use nalgebra::{Isometry2, Point2, Vector2}; -use rapier2d::{dynamics::RigidBody, geometry::ColliderHandle}; +use rapier2d::{ + dynamics::RigidBody, + geometry::{ColliderHandle, Group, InteractionGroups}, +}; use crate::{ data::ShipState, @@ -66,6 +69,9 @@ impl PhysSim { return false; } + let collider = self.collider_set.get_mut(collider).unwrap(); + println!("{:?}", collider.collision_groups()); + collider.set_collision_groups(InteractionGroups::new(Group::GROUP_1, Group::empty())); ship.data.start_land_on(target_handle); return true; } @@ -102,7 +108,10 @@ impl PhysSim { self.collider_set .get_mut(ship.collider) .unwrap() - .set_enabled(true); + .set_collision_groups(InteractionGroups::new( + Group::GROUP_1, + Group::GROUP_1 | Group::GROUP_2, + )); } pub(super) fn remove_ship(