From bef0be7caea6028da9b2b6c1149476b2bdb05828 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 30 Dec 2021 20:15:21 -0600 Subject: [PATCH] better feeling movement --- src/chunk.onyx | 2 +- src/player.onyx | 38 +++++++++++++++++--------------------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/chunk.onyx b/src/chunk.onyx index 6afef32..d915d8c 100644 --- a/src/chunk.onyx +++ b/src/chunk.onyx @@ -154,7 +154,7 @@ chunk_foreach :: macro (chunk: ^Chunk, body: Code) { } } -block_highlight: ^Mesh(Chunk_Vertex); +#local block_highlight: ^Mesh(Chunk_Vertex); chunk_highlight_block :: (x, y, z: f32) { data := 0xf000; diff --git a/src/player.onyx b/src/player.onyx index 49c8cc8..e9d6ecb 100644 --- a/src/player.onyx +++ b/src/player.onyx @@ -37,24 +37,20 @@ player_update :: (use player: ^Player, dt: f32) { while camera.y_rot < 0 do camera.y_rot += 2 * math.PI; camera.x_rot = math.clamp(camera.x_rot, -math.PI / 2 + 0.01, math.PI / 2 - 0.01); - body.vel = .{0,body.vel.y,0}; - forward := camera_get_forward(camera); facing := forward; facing.y = 0; facing = Vector3.norm(facing); - if is_key_down(GLFW_KEY_W) { - body.vel += facing * speed; - } - if is_key_down(GLFW_KEY_S) { - body.vel -= facing * speed; - } - if is_key_down(GLFW_KEY_D) { - body.vel += Vector3.norm(Vector3.cross(facing, .{0,1,0})) * speed; - } - if is_key_down(GLFW_KEY_A) { - body.vel -= Vector3.norm(Vector3.cross(facing, .{0,1,0})) * speed; - } + + xz_vel := Vector3.{0,0,0}; + if is_key_down(GLFW_KEY_W) do xz_vel += facing; + if is_key_down(GLFW_KEY_S) do xz_vel -= facing; + if is_key_down(GLFW_KEY_D) do xz_vel += Vector3.norm(Vector3.cross(facing, .{0,1,0})); + if is_key_down(GLFW_KEY_A) do xz_vel -= Vector3.norm(Vector3.cross(facing, .{0,1,0})); + + if Vector3.mag(xz_vel) > 0 do xz_vel = Vector3.norm(xz_vel) * speed; + body.vel.x = xz_vel.x; + body.vel.z = xz_vel.z; physics_apply_gravity(^body); @@ -69,10 +65,10 @@ player_update :: (use player: ^Player, dt: f32) { camera.position = body.pos; + ray_cast_to_block :: (_, p) => world_get_block(world, p.x, p.y, p.z) != Block_Empty; + dir: Vector3i; - if !ray_cast(.{ camera.position, forward }, 10, null, (_, p) => { - return world_get_block(world, p.x, p.y, p.z) != Block_Empty; - }, ^selected_block, ^dir) { + if !ray_cast(.{ camera.position, forward }, 10, null, ray_cast_to_block, ^selected_block, ^dir) { selected_block = .{0,0,0}; } @@ -87,11 +83,11 @@ player_update :: (use player: ^Player, dt: f32) { player_get_aabb :: (pos: Vector3) -> AABB { return .{ - x0 = pos.x - 0.25f, + x0 = pos.x - 0.3f, y0 = pos.y - 1.8f, - z0 = pos.z - 0.25f, - x1 = pos.x + 0.25f, + z0 = pos.z - 0.3f, + x1 = pos.x + 0.3f, y1 = pos.y + 0.1f, - z1 = pos.z + 0.25f, + z1 = pos.z + 0.3f, }; } -- 2.25.1