acceleration to the player
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 1 Mar 2022 03:56:54 +0000 (21:56 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 1 Mar 2022 03:56:54 +0000 (21:56 -0600)
src/entity/components/movement.onyx

index a1585a393504d883b5621f3ee850bf2c1282680d..264ee516436cd0c06dedeabfbe263cc7a17ca1f8 100644 (file)
@@ -24,15 +24,19 @@ MovementComponent :: struct {
     use component: Component;
     controls : Player_Controls;
     facing   := Facing.Up;
+    velocity: Vector2;
 
     update :: (movement: ^MovementComponent, use this: ^Entity, dt: f32) {
-        speed :: 128.0f;
-
-        delta: Vector2;
-        if is_key_down(movement.controls.left)  { delta.x -= speed * dt; movement.facing = .Left;  }
-        if is_key_down(movement.controls.right) { delta.x += speed * dt; movement.facing = .Right; }
-        if is_key_down(movement.controls.up)    { delta.y -= speed * dt; movement.facing = .Up;    }
-        if is_key_down(movement.controls.down)  { delta.y += speed * dt; movement.facing = .Down;  }
+        acc: Vector2;
+        if is_key_down(movement.controls.left)  { acc.x -= 1; movement.facing = .Left;  }
+        if is_key_down(movement.controls.right) { acc.x += 1; movement.facing = .Right; }
+        if is_key_down(movement.controls.up)    { acc.y -= 1; movement.facing = .Up;    }
+        if is_key_down(movement.controls.down)  { acc.y += 1; movement.facing = .Down;  }
+
+        speed :: 800.0f;
+        movement.velocity += acc * speed * dt;
+        delta := movement.velocity * dt + acc * 0.5 * dt * dt;
+        movement.velocity *= 0.9;
 
         dist := math.max(size.x, size.y) * 2;
         walls := scene->query_by_flags(.{pos.x - dist, pos.y - dist, dist * 2, dist * 2}, .Solid);