diff --git a/src/integer.rs b/src/integer.rs index fb973ab..c08508d 100644 --- a/src/integer.rs +++ b/src/integer.rs @@ -221,6 +221,11 @@ impl Planar64{ Self(Self::ONE.0*num/den.get() as i64) } } +impl Into for Planar64{ + fn into(self)->f32{ + self.0 as f32/(2<<32) as f32 + } +} impl std::ops::Add for Planar64{ type Output=Planar64; #[inline] @@ -279,6 +284,15 @@ impl Planar64Vec3{ Planar64(self.0.z) } } +impl Into for Planar64Vec3{ + fn into(self)->glam::Vec3{ + glam::vec3( + self.0.x as f32/(2<<32) as f32, + self.0.y as f32/(2<<32) as f32, + self.0.z as f32/(2<<32) as f32, + ) + } +} impl std::ops::Add for Planar64Vec3{ type Output=Planar64Vec3; #[inline] @@ -335,6 +349,15 @@ pub struct Planar64Mat3{ y_axis:Planar64Vec3, z_axis:Planar64Vec3, } +impl std::ops::Mul for Planar64Mat3{ + type Output=Planar64Vec3; + #[inline] + fn mul(self,rhs:Planar64Vec3) -> Self::Output { + self.x_axis*rhs.x() + +self.y_axis*rhs.y() + +self.z_axis*rhs.z() + } +} impl Planar64Mat3{ #[inline] diff --git a/src/physics.rs b/src/physics.rs index 5fd7b5f..34fc155 100644 --- a/src/physics.rs +++ b/src/physics.rs @@ -218,7 +218,7 @@ impl std::default::Default for StyleModifiers{ Self{ controls_mask: !0,//&!(Self::CONTROL_MOVEUP|Self::CONTROL_MOVEDOWN), controls_held: 0, - strafe_tick_rate:Ratio64::ONE.div_ratio(100), + strafe_tick_rate:Ratio64::ONE.rhs_div_ratio(100), gravity: Planar64Vec3::new(0,100,0), friction: Planar64::new(12)/10, walk_accel: Planar64::new(90), @@ -308,8 +308,8 @@ pub struct PhysicsOutputState{ body:Body, } impl PhysicsOutputState{ - pub fn adjust_mouse(&self,mouse:&MouseState)->(Planar64Vec3,Angle32Vec2){ - (self.body.extrapolated_position(mouse.time)+self.camera.offset,self.camera.simulate_move_angles(mouse.pos)) + pub fn adjust_mouse(&self,mouse:&MouseState)->(glam::Vec3,glam::Vec2){ + ((self.body.extrapolated_position(mouse.time)+self.camera.offset).into(),self.camera.simulate_move_angles(mouse.pos)) } } @@ -643,7 +643,7 @@ impl PhysicsState { } fn jump(&mut self){ self.grounded=false;//do I need this? - let mut v=self.body.velocity+Planar64Vec3::new(0.0,0.715588/2.0*100.0,0.0); + let mut v=self.body.velocity+Planar64Vec3::new(0,715588,0)/20000;//0.715588/2.0*100.0 self.contact_constrain_velocity(&mut v); self.body.velocity=v; } @@ -668,7 +668,7 @@ impl PhysicsState { } fn next_strafe_instruction(&self) -> Option> { return Some(TimedInstruction{ - time:self.style.strafe_tick_rate.div_int(self.style.strafe_tick_rate.mul_int(self.time)+1), + time:self.style.strafe_tick_rate.rhs_div_int(self.style.strafe_tick_rate.mul_int(self.time)+1), //only poll the physics if there is a before and after mouse event instruction:PhysicsInstruction::StrafeTick }); @@ -1200,7 +1200,7 @@ impl crate::instruction::InstructionConsumer for PhysicsStat let control_dir=camera_mat*self.style.get_control_dir(self.controls); let d=self.body.velocity.dot(control_dir); if d for PhysicsStat if refresh_walk_target_velocity{ let camera_mat=self.camera.simulate_move_rotation_y(self.camera.mouse.lerp(&self.next_mouse,self.time).x); let control_dir=camera_mat*self.style.get_control_dir(self.controls); - self.walk.target_velocity=self.style.walkspeed*control_dir; + self.walk.target_velocity=control_dir*self.style.walkspeed; } self.refresh_walk_target(); }