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);