diff --git a/strafe-client/src/mouse_interpolator.rs b/strafe-client/src/mouse_interpolator.rs index d686309..07d2c4c 100644 --- a/strafe-client/src/mouse_interpolator.rs +++ b/strafe-client/src/mouse_interpolator.rs @@ -1,11 +1,15 @@ use strafesnet_common::mouse::MouseState; use strafesnet_common::physics::{Instruction as PhysicsInputInstruction,Time as PhysicsTime,TimeInner as PhysicsTimeInner}; use strafesnet_common::session::{Time as SessionTime,TimeInner as SessionTimeInner}; -use strafesnet_common::instruction::{self,TimedInstruction}; +use strafesnet_common::instruction::{self,InstructionConsumer,InstructionEmitter,TimedInstruction}; type TimedPhysicsInstruction=TimedInstruction<PhysicsInputInstruction,PhysicsTimeInner>; type TimedInterpolatorInstruction=TimedInstruction<Instruction,SessionTimeInner>; +pub struct DropInstruction<'a>{ + instruction:&'a TimedPhysicsInstruction, +} + #[derive(Debug)] pub enum InputInstruction{ MoveMouse(glam::IVec2), @@ -30,25 +34,41 @@ pub enum Instruction{ } pub struct MouseInterpolator{ - timeline:std::collections::VecDeque<>, + session_timeline:std::collections::VecDeque<TimedInterpolatorInstruction>, + physics_timeline:std::collections::VecDeque<TimedPhysicsInstruction>, } -impl instruction::InstructionConsumer for MouseInterpolator{ - type Instruction=Instruction; +impl InstructionConsumer<Instruction> for MouseInterpolator{ type TimeInner=SessionTimeInner; fn process_instruction(&mut self,ins:TimedInterpolatorInstruction){ - self.process_instruction(ins) + self.push_input(ins) + } +} +impl<'a> InstructionConsumer<DropInstruction<'a>> for MouseInterpolator{ + type TimeInner=SessionTimeInner; + fn process_instruction(&mut self,ins:TimedInstruction<DropInstruction<'a>,SessionTimeInner>){ + self.drop_output(ins) + } +} +impl<'a> InstructionEmitter<DropInstruction<'a>> for MouseInterpolator{ + type TimeInner=SessionTimeInner; + fn next_instruction(&'a self,time_limit:SessionTime)->Option<TimedInstruction<DropInstruction<'a>,Self::TimeInner>>{ + self.next_output(time_limit) } } impl MouseInterpolator{ pub fn new()->MouseInterpolator{ MouseInterpolator{ - timeline:std::collections::VecDeque::new(), + session_timeline:std::collections::VecDeque::new(), + physics_timeline:std::collections::VecDeque::new(), } } - pub fn process_instruction(&mut self,ins:TimedInterpolatorInstruction){ + pub fn push_input(&mut self,ins:TimedInterpolatorInstruction){ // new input } - pub fn pop_next_instruction(&mut self)->Option<TimedPhysicsInstruction>{ - // read state and potentially do work to determine the next instruction + pub fn drop_output<'a>(&mut self,ins:TimedInstruction<DropInstruction<'a>,SessionTimeInner>){ + // + } + pub fn next_output(&self,time_limit:SessionTime)->Option<TimedInstruction<DropInstruction<'_>,SessionTimeInner>>{ + None } }