do not step physics on mouse input, only update pos (overwriting previous pos)

This commit is contained in:
Quaternions 2023-09-19 22:04:35 -07:00
parent a5152052a8
commit 34ca5c58be
2 changed files with 7 additions and 2 deletions

View File

@ -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<PhysicsInstruction> for PhysicsStat
}
//selectively update body
match &ins.instruction {
PhysicsInstruction::Input(InputInstruction::MoveMouse(_)) => (),//dodge time for mouse movement
PhysicsInstruction::Input(_)
|PhysicsInstruction::ReachWalkTargetVelocity
|PhysicsInstruction::CollisionStart(_)

View File

@ -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