From 006a70a18bd82db9500b361dd31e838c605dc1d8 Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Fri, 6 Mar 2026 09:25:33 -0800 Subject: [PATCH] lib: simplify Head internals with InterpolateOutput --- lib/src/head.rs | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/lib/src/head.rs b/lib/src/head.rs index 2d2c57b..e207313 100644 --- a/lib/src/head.rs +++ b/lib/src/head.rs @@ -113,29 +113,15 @@ impl PlaybackHead{ } pub fn get_position_angles(&self,bot:&CompleteBot,time:SessionTime)->(glam::Vec3,glam::Vec2){ let interp=self.interpolate_output(bot,time); - let p0=vector3_to_glam(&interp.event0.position)-bot.world_offset(); - let p1=vector3_to_glam(&interp.event1.position)-bot.world_offset(); - // let v0=vector3_to_glam(&event0.event.velocity); - // let v1=vector3_to_glam(&event1.event.velocity); - // let a0=vector3_to_glam(&event0.event.acceleration); - // let a1=vector3_to_glam(&event1.event.acceleration); - let p=p0.lerp(p1,interp.t); - // let v=v0.lerp(v1,t); - // let a=a0.lerp(a1,t); - //println!("position={:?}",p); + let p=interp.position(); + let a=interp.angles(); - let angles0=vector3_to_glam(&interp.event0.angles); - let angles1=vector3_to_glam(&interp.event1.angles); - let angles=angles0.lerp(angles1,interp.t); - - (p+CompleteBot::CAMERA_OFFSET,angles.yx()) + (p-bot.world_offset()+CompleteBot::CAMERA_OFFSET,a) } pub fn get_velocity(&self,bot:&CompleteBot,time:SessionTime)->glam::Vec3{ let interp=self.interpolate_output(bot,time); - let v0=vector3_to_glam(&interp.event0.velocity); - let v1=vector3_to_glam(&interp.event1.velocity); - v0.lerp(v1,interp.t) + interp.velocity() } } @@ -144,3 +130,20 @@ struct InterpolateOutput<'a>{ event1:&'a strafesnet_roblox_bot_file::v0::OutputEvent, t:f32, } +impl InterpolateOutput<'_>{ + fn position(&self)->glam::Vec3{ + let p0=vector3_to_glam(&self.event0.position); + let p1=vector3_to_glam(&self.event1.position); + p0.lerp(p1,self.t) + } + fn velocity(&self)->glam::Vec3{ + let v0=vector3_to_glam(&self.event0.velocity); + let v1=vector3_to_glam(&self.event1.velocity); + v0.lerp(v1,self.t) + } + fn angles(&self)->glam::Vec2{ + let a0=vector3_to_glam(&self.event0.angles); + let a1=vector3_to_glam(&self.event1.angles); + a0.lerp(a1,self.t).yx() + } +}