use crate::integer::Time;

#[derive(Clone,Debug)]
pub struct MouseState<T>{
	pub pos:glam::IVec2,
	pub time:Time<T>,
}
impl<T> Default for MouseState<T>{
	fn default()->Self{
		Self{
			time:Time::ZERO,
			pos:glam::IVec2::ZERO,
		}
	}
}
impl<T> MouseState<T>
	where Time<T>:Copy,
{
	pub fn lerp(&self,target:&MouseState<T>,time:Time<T>)->glam::IVec2{
		let m0=self.pos.as_i64vec2();
		let m1=target.pos.as_i64vec2();
		//these are deltas
		let t1t=(target.time-time).nanos();
		let tt0=(time-self.time).nanos();
		let dt=(target.time-self.time).nanos();
		((m0*t1t+m1*tt0)/dt).as_ivec2()
	}
}