bug fixes in the physics system
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 30 Dec 2021 22:03:05 +0000 (16:03 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 30 Dec 2021 22:03:05 +0000 (16:03 -0600)
src/physics.onyx
src/player.onyx

index c9eedb4d19fe89d70a405815b64015e8ac115c16..834ed17f44b456134e63c91ba40856251d70204c 100644 (file)
@@ -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;
 }
 
 
index e22ce4a84181c946d16b61a5276f1a0fd022982a..49c8cc82969c3f816caadf67cdc167176a2b5560 100644 (file)
@@ -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,
     };
 }