forked from StrafesNET/roblox-bot-player
lib: add helper for interpolating output events
This commit is contained in:
@@ -97,30 +97,44 @@ impl PlaybackHead{
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn get_position_angles(&self,bot:&CompleteBot,time:SessionTime)->(glam::Vec3,glam::Vec2){
|
||||
fn interpolate_output<'a>(&self,bot:&'a CompleteBot,time:SessionTime)->InterpolateOutput<'a>{
|
||||
let time=bot.time(self.time(time));
|
||||
let event0=&bot.timelines().output_events[self.head.get_event_index(EventType::Output)-1];
|
||||
let event1=&bot.timelines().output_events[self.head.get_event_index(EventType::Output)];
|
||||
let p0=vector3_to_glam(&event0.event.position)-bot.world_offset();
|
||||
let p1=vector3_to_glam(&event1.event.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 t0=event0.time;
|
||||
let t1=event1.time;
|
||||
let time_float:f64=time.into();
|
||||
let t=((time_float-t0)/(t1-t0)) as f32;
|
||||
let p=p0.lerp(p1,t);
|
||||
InterpolateOutput{
|
||||
event0:&event0.event,
|
||||
event1:&event1.event,
|
||||
t:t,
|
||||
}
|
||||
}
|
||||
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 angles0=vector3_to_glam(&event0.event.angles);
|
||||
let angles1=vector3_to_glam(&event1.event.angles);
|
||||
let angles=angles0.lerp(angles1,t);
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
||||
struct InterpolateOutput<'a>{
|
||||
event0:&'a strafesnet_roblox_bot_file::v0::OutputEvent,
|
||||
event1:&'a strafesnet_roblox_bot_file::v0::OutputEvent,
|
||||
t:f32,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user