pub struct Body { pub position: glam::Vec3,//I64 where 2^32 = 1 u pub velocity: glam::Vec3,//I64 where 2^32 = 1 u/s pub time: TIME,//nanoseconds x xxxxD! } pub struct PhysicsState { pub body: Body, pub time: TIME, pub strafe_tick_period: TIME, pub tick: u32, pub gravity: glam::Vec3, pub friction: f32, pub mv: f32, pub grounded: bool, pub walkspeed: f32, } pub type TIME = i64; const CONTROL_JUMP:u32 = 0b01000000;//temp impl PhysicsState { //delete this, we are tickless gamers pub fn run(&mut self, time: TIME, control_dir: glam::Vec3, controls: u32){ let target_tick = (time/self.strafe_tick_period) as u32;//100t //the game code can run for 1 month before running out of ticks while self.tick glam::Vec3 { let dt=(time-self.body.time) as f64/1_000_000_000f64; self.body.position+self.body.velocity*(dt as f32)+self.gravity*((0.5*dt*dt) as f32) } }