diff --git a/src/body.rs b/src/body.rs index 9c1cc3a..9ba3b10 100644 --- a/src/body.rs +++ b/src/body.rs @@ -102,7 +102,7 @@ pub struct MouseInterpolationState { impl MouseInterpolationState { pub fn new() -> Self { Self { - interpolation:MouseInterpolation::Lerp, + interpolation:MouseInterpolation::First, time0:0, time1:1,//ONE NANOSECOND!!!! avoid divide by zero mouse0:glam::IVec2::ZERO, @@ -902,6 +902,7 @@ impl crate::instruction::InstructionConsumer for PhysicsStat } //selectively update body match &ins.instruction { + PhysicsInstruction::Input(InputInstruction::MoveMouse(_)) => (),//dodge time for mouse movement PhysicsInstruction::Input(_) |PhysicsInstruction::ReachWalkTargetVelocity |PhysicsInstruction::CollisionStart(_) diff --git a/src/main.rs b/src/main.rs index e3bc0be..286bb18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -600,7 +600,6 @@ impl strafe_client::framework::Example for GraphicsData { fn device_event(&mut self, event: winit::event::DeviceEvent) { //there's no way this is the best way get a timestamp. let time=self.start_time.elapsed().as_nanos() as i64; - self.physics.run(time);//call it a day match event { winit::event::DeviceEvent::Key(winit::event::KeyboardInput { state, @@ -624,6 +623,7 @@ impl strafe_client::framework::Example for GraphicsData { _ => None, } { + self.physics.run(time); self.physics.process_instruction(TimedInstruction{ time, instruction:PhysicsInstruction::Input(input_instruction), @@ -633,6 +633,9 @@ impl strafe_client::framework::Example for GraphicsData { winit::event::DeviceEvent::MouseMotion { delta,//these (f64,f64) are integers on my machine } => { + //do not step the physics because the mouse polling rate is higher than the physics can run. + //essentially the previous input will be overwritten until a true step runs + //which is fine because they run all the time. self.physics.process_instruction(TimedInstruction{ time, instruction:PhysicsInstruction::Input(InputInstruction::MoveMouse(glam::ivec2(delta.0 as i32,delta.1 as i32))), @@ -643,6 +646,7 @@ impl strafe_client::framework::Example for GraphicsData { } => { println!("mousewheel{:?}",delta); if true{//self.physics.use_scroll + self.physics.run(time); self.physics.process_instruction(TimedInstruction{ time, instruction:PhysicsInstruction::Input(InputInstruction::Jump(true)),//activates the immediate jump path, but the style modifier prevents controls&CONTROL_JUMP bit from being set to auto jump