diff --git a/src/physics_worker.rs b/src/physics_worker.rs index 67d956c..193fe61 100644 --- a/src/physics_worker.rs +++ b/src/physics_worker.rs @@ -29,7 +29,7 @@ pub enum Instruction{ } pub struct MouseInterpolator{ timeline:std::collections::VecDeque>, - last_mouse_time:Time, + last_mouse_time:Time,//this value is pre-transformed to simulation time mouse_blocking:bool, timer:Timer, } @@ -38,23 +38,23 @@ impl MouseInterpolator{ if self.mouse_blocking{ //tell the game state which is living in the past about its future self.timeline.push_front(TimedInstruction{ - time:self.timer.time(self.last_mouse_time), + time:self.last_mouse_time, instruction:PhysicsInputInstruction::SetNextMouse(MouseState{time:self.timer.time(ins.time),pos:m}), }); }else{ //mouse has just started moving again after being still for longer than 10ms. //replace the entire mouse interpolation state to avoid an intermediate state with identical m0.t m1.t timestamps which will divide by zero self.timeline.push_front(TimedInstruction{ - time:self.timer.time(self.last_mouse_time), + time:self.last_mouse_time, instruction:PhysicsInputInstruction::ReplaceMouse( - MouseState{time:self.timer.time(self.last_mouse_time),pos:physics.get_next_mouse().pos}, + MouseState{time:self.last_mouse_time,pos:physics.get_next_mouse().pos}, MouseState{time:self.timer.time(ins.time),pos:m} ), }); //delay physics execution until we have an interpolation target self.mouse_blocking=true; } - self.last_mouse_time=ins.time; + self.last_mouse_time=self.timer.time(ins.time); } /// returns the mapped physics input instruction /// may or may not mutate internal state XD! @@ -102,10 +102,10 @@ impl MouseInterpolator{ if Time::from_millis(10)not moving when the mouse starts moving again - self.last_mouse_time=ins.time; + self.last_mouse_time=self.timer.time(ins.time); true } }