diff --git a/src/game/kinematic.rs b/src/game/kinematic.rs index aba03f7..ddb2fc6 100644 --- a/src/game/kinematic.rs +++ b/src/game/kinematic.rs @@ -18,31 +18,23 @@ impl Plugin for KinematicPlugin { #[derive(Bundle)] pub struct KinematicBundle { - pub kinematic: KinematicState, + pub state: KinematicState, + pub properties: KinematicProperties, pub rigidbody: RigidBody, - pub velocity: Velocity, - pub gravity_scale: GravityScale, - pub collider: Collider, - pub locked_axes: LockedAxes, pub events: ActiveEvents, pub collisions: ActiveCollisionTypes, - pub properties: KinematicProperties, pub transform: TransformBundle, } impl Default for KinematicBundle { fn default() -> Self { KinematicBundle { - kinematic: KinematicState::default(), - rigidbody: RigidBody::Dynamic, - gravity_scale: GravityScale(3.0), - locked_axes: LockedAxes::ROTATION_LOCKED, + state: KinematicState::default(), + properties: KinematicProperties::default(), + rigidbody: RigidBody::KinematicPositionBased, events: ActiveEvents::COLLISION_EVENTS, collisions: ActiveCollisionTypes::all(), - collider: Collider::default(), - properties: KinematicProperties::default(), transform: TransformBundle::default(), - velocity: Velocity::default(), } } } @@ -50,27 +42,15 @@ impl Default for KinematicBundle { #[derive(Component, Reflect, Default)] #[reflect(Component)] pub struct KinematicState { - on_ground: bool, - did_jump: bool, - air_jump_counter: u8, + // TODO: fork rapier2d and make it reflect? + #[reflect(ignore)] + pub last_move: Option, + pub did_jump: bool, } impl KinematicState { - #[inline] - pub fn on_ground(&self) -> bool { - self.on_ground - } - #[inline] - pub fn did_jump(&self) -> bool { - self.did_jump - } - #[inline] - pub fn air_jump_counter(&self) -> u8 { - self.air_jump_counter - } - pub fn can_jump(&self) -> bool { - self.on_ground && !self.did_jump + self.last_move.as_ref().map_or(false, |last| last.grounded) && !self.did_jump } } @@ -84,7 +64,7 @@ pub struct KinematicProperties { pub air_acceleration: f32, pub air_friction: f32, pub jump_height: f32, - pub air_jumps: u8, + pub gravity: Option, } impl Default for KinematicProperties { @@ -97,7 +77,7 @@ impl Default for KinematicProperties { air_acceleration: 10.0, air_friction: 10.0, jump_height: 150.0, - air_jumps: 1, + gravity: Some(1.0), } } } @@ -113,37 +93,27 @@ fn kinematic_movement( time: Res