From 8989341714c1cdf4baceb22a10574016d29599d4 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Sat, 18 Oct 2025 22:06:19 +0200 Subject: [PATCH] feat: add delta time --- src/car.py | 29 ++++++++++++++++++----------- src/game.py | 3 ++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/car.py b/src/car.py index 79e8a67..21f664f 100644 --- a/src/car.py +++ b/src/car.py @@ -7,14 +7,19 @@ from src.utils import segments_intersect from src.vec import Vec +sign = lambda x: 0 if x == 0 else (-1 if x < 0 else 1) + + class Car: - MAX_SPEED = 0.05 - MAX_BACK_SPEED = -0.025 - ROTATE_SPEED = radians(1) + MAX_SPEED = 5 + MAX_BACK_SPEED = -2 + ROTATE_SPEED = 1 COLOR = (230, 150, 80) WIDTH = 0.4 LENGTH = 0.6 COLLISION_MARGIN = 0.4 + ACCELERATION = 2 + FRICTION = 3 def __init__(self, pos: Vec, direction: Vec) -> None: self.pos: Vec = pos @@ -26,20 +31,20 @@ class Car: self.right: bool = False self.colliding: bool = False - def update(self): + def update(self, dt: float): if self.forward: - self.speed += 0.001 + self.speed += self.ACCELERATION * dt self.speed = min(self.MAX_SPEED, self.speed) if self.backward: - self.speed -= 0.002 + self.speed -= self.ACCELERATION * 2 * dt self.speed = max(self.MAX_BACK_SPEED, self.speed) rotate_angle: float = 0 if self.left: - rotate_angle -= self.ROTATE_SPEED + rotate_angle -= self.ROTATE_SPEED * dt if self.right: - rotate_angle += self.ROTATE_SPEED + rotate_angle += self.ROTATE_SPEED * dt # if self.backward: # rotate_angle *= -1 @@ -47,11 +52,13 @@ class Car: if rotate_angle != 0: self.direction = self.direction.rotate(rotate_angle) - self.speed *= 0.98 - if abs(self.speed) < 1e-8: + if not self.forward and not self.backward: + self.speed -= sign(self.speed) * self.FRICTION * dt + + if abs(self.speed) < 1e-4: self.speed = 0 - self.pos += self.direction * self.speed + self.pos += self.direction * self.speed * dt def render(self, surf: pygame.Surface, camera: Camera): pts: list[Vec] = self.get_corners() diff --git a/src/game.py b/src/game.py index 6cc4a1e..2d3c910 100644 --- a/src/game.py +++ b/src/game.py @@ -34,8 +34,9 @@ class Game: def mainloop(self): while self.running: + dt: float = self.clock.get_time() / 1000 self.process_pygame_events() - self.car.update() + self.car.update(dt) self.car.check_collisions(self.track.get_collision_polygons()) self.render() self.clock.tick(60)