From ba11e97dc1f64a6bfbe40953f1d01b5dae60f867 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 30 Dec 2021 16:03:05 -0600 Subject: [PATCH] bug fixes in the physics system --- src/physics.onyx | 24 ++++++++++++------------ src/player.onyx | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/physics.onyx b/src/physics.onyx index c9eedb4..834ed17 100644 --- a/src/physics.onyx +++ b/src/physics.onyx @@ -17,9 +17,9 @@ AABB :: struct { } PhysicsBody :: struct { - pos: Vector3; - vel: Vector3; - acc: Vector3; + pos: Vector3; + vel: Vector3; + acc: Vector3; on_ground := false; @@ -31,23 +31,23 @@ physics_apply_gravity :: (use body: ^PhysicsBody) { } physics_simulate :: (use body: ^PhysicsBody, dt: f32, world: ^World) { - aabb_buffer := (cast(^AABB) alloc.from_stack(sizeof [64] AABB))[0..64]; + aabb_buffer := (cast(^AABB) alloc.from_stack(sizeof [128] AABB))[0..128]; - aabbs := world_get_aabbs(world, pos, 3, aabb_buffer); + aabbs := world_get_aabbs(world, pos, 3, aabb_buffer); vel += acc * dt; - try_move :: macro (delta: Vector3) -> bool { + try_move :: macro (delta: Vector3) -> f32 { new_pos := body.pos + delta; body_aabb := get_collision_object(new_pos); for^ aabbs { if AABB.intersects(body_aabb, *it) { if delta.y < 0 do on_ground = true; - return false; + return 0; } } - return true; + return 1; } on_ground = false; @@ -55,11 +55,11 @@ physics_simulate :: (use body: ^PhysicsBody, dt: f32, world: ^World) { move_y := try_move(.{0, vel.y * dt, 0}); move_z := try_move(.{0, 0, vel.z * dt}); - if on_ground do vel.y = 0; + pos.x += vel.x * dt * move_x; + pos.y += vel.y * dt * move_y; + pos.z += vel.z * dt * move_z; - if move_x do pos.x += vel.x * dt; - if move_y do pos.y += vel.y * dt; - if move_z do pos.z += vel.z * dt; + if on_ground do vel.y = 0; } diff --git a/src/player.onyx b/src/player.onyx index e22ce4a..49c8cc8 100644 --- a/src/player.onyx +++ b/src/player.onyx @@ -91,7 +91,7 @@ player_get_aabb :: (pos: Vector3) -> AABB { y0 = pos.y - 1.8f, z0 = pos.z - 0.25f, x1 = pos.x + 0.25f, - y1 = pos.y + 0.2f, + y1 = pos.y + 0.1f, z1 = pos.z + 0.25f, }; } -- 2.25.1