only walk if grounded

This commit is contained in:
Quaternions 2023-09-18 21:28:09 -07:00
parent 0632e322cf
commit fd38502e07

View File

@ -400,7 +400,7 @@ impl PhysicsState {
fn next_walk_instruction(&self) -> Option<TimedInstruction<PhysicsInstruction>> { fn next_walk_instruction(&self) -> Option<TimedInstruction<PhysicsInstruction>> {
//check if you have a valid walk state and create an instruction //check if you have a valid walk state and create an instruction
if self.walk.body_hash==self.body.hash(){ if self.grounded&&self.walk.body_hash==self.body.hash(){
Some(TimedInstruction{ Some(TimedInstruction{
time:self.walk.target_time, time:self.walk.target_time,
instruction:PhysicsInstruction::ReachWalkTargetVelocity instruction:PhysicsInstruction::ReachWalkTargetVelocity
@ -754,16 +754,18 @@ impl crate::instruction::InstructionConsumer<PhysicsInstruction> for PhysicsStat
} }
PhysicsInstruction::SetWalkTargetVelocity(v) => { PhysicsInstruction::SetWalkTargetVelocity(v) => {
//calculate acceleration yada yada //calculate acceleration yada yada
let target_diff=v-self.body.velocity; if self.grounded{
if target_diff==glam::Vec3::ZERO{ let target_diff=v-self.body.velocity;
self.body.acceleration=glam::Vec3::ZERO; if target_diff==glam::Vec3::ZERO{
}else{ self.body.acceleration=glam::Vec3::ZERO;
let accel=self.walk_accel.min(self.gravity.length()*self.friction); }else{
let time_delta=target_diff.length()/accel; let accel=self.walk_accel.min(self.gravity.length()*self.friction);
self.body.acceleration=target_diff/time_delta; let time_delta=target_diff.length()/accel;
self.walk.target_velocity=v; self.body.acceleration=target_diff/time_delta;
self.walk.target_time=self.body.time+((time_delta as f64)*1_000_000_000f64) as TIME; self.walk.target_velocity=v;
self.walk.body_hash=self.body.hash();//hash check to see if walk target is valid self.walk.target_time=self.body.time+((time_delta as f64)*1_000_000_000f64) as TIME;
self.walk.body_hash=self.body.hash();//hash check to see if walk target is valid
}
} }
}, },
} }