feat: add delta time
This commit is contained in:
29
src/car.py
29
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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user