add walking

This commit is contained in:
Quaternions 2023-08-31 12:04:18 -07:00
parent 1e25f71618
commit 7a23ef2734

View File

@ -30,6 +30,7 @@ struct Camera {
controls: u32, controls: u32,
mv: f32, mv: f32,
grounded: bool, grounded: bool,
walkspeed: f32,
} }
const CONTROL_MOVEFORWARD:u32 = 0b00000001; const CONTROL_MOVEFORWARD:u32 = 0b00000001;
@ -221,6 +222,7 @@ impl strafe_client::framework::Example for Skybox {
mv: 2.7, mv: 2.7,
controls:0, controls:0,
grounded: true, grounded: true,
walkspeed: 18.0,
}; };
let raw_uniforms = camera.to_uniform_data(); let raw_uniforms = camera.to_uniform_data();
let uniform_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { let uniform_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
@ -533,10 +535,12 @@ impl strafe_client::framework::Example for Skybox {
} }
if self.camera.grounded { if self.camera.grounded {
let applied_friction=self.camera.friction*dt; let applied_friction=self.camera.friction*dt;
if applied_friction*applied_friction<self.camera.vel.length_squared() { let targetv=control_dir.normalize_or_zero()*self.camera.walkspeed;
self.camera.vel-=applied_friction*self.camera.vel.normalize(); let diffv=targetv-self.camera.vel;
if applied_friction*applied_friction<diffv.length_squared() {
self.camera.vel+=applied_friction*diffv.normalize();
} else { } else {
self.camera.vel=glam::Vec3::new(0.0,0.0,0.0); self.camera.vel=targetv;
} }
} }