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
|
from src.vec import Vec
|
||||||
|
|
||||||
|
|
||||||
|
sign = lambda x: 0 if x == 0 else (-1 if x < 0 else 1)
|
||||||
|
|
||||||
|
|
||||||
class Car:
|
class Car:
|
||||||
MAX_SPEED = 0.05
|
MAX_SPEED = 5
|
||||||
MAX_BACK_SPEED = -0.025
|
MAX_BACK_SPEED = -2
|
||||||
ROTATE_SPEED = radians(1)
|
ROTATE_SPEED = 1
|
||||||
COLOR = (230, 150, 80)
|
COLOR = (230, 150, 80)
|
||||||
WIDTH = 0.4
|
WIDTH = 0.4
|
||||||
LENGTH = 0.6
|
LENGTH = 0.6
|
||||||
COLLISION_MARGIN = 0.4
|
COLLISION_MARGIN = 0.4
|
||||||
|
ACCELERATION = 2
|
||||||
|
FRICTION = 3
|
||||||
|
|
||||||
def __init__(self, pos: Vec, direction: Vec) -> None:
|
def __init__(self, pos: Vec, direction: Vec) -> None:
|
||||||
self.pos: Vec = pos
|
self.pos: Vec = pos
|
||||||
@@ -26,20 +31,20 @@ class Car:
|
|||||||
self.right: bool = False
|
self.right: bool = False
|
||||||
self.colliding: bool = False
|
self.colliding: bool = False
|
||||||
|
|
||||||
def update(self):
|
def update(self, dt: float):
|
||||||
if self.forward:
|
if self.forward:
|
||||||
self.speed += 0.001
|
self.speed += self.ACCELERATION * dt
|
||||||
self.speed = min(self.MAX_SPEED, self.speed)
|
self.speed = min(self.MAX_SPEED, self.speed)
|
||||||
|
|
||||||
if self.backward:
|
if self.backward:
|
||||||
self.speed -= 0.002
|
self.speed -= self.ACCELERATION * 2 * dt
|
||||||
self.speed = max(self.MAX_BACK_SPEED, self.speed)
|
self.speed = max(self.MAX_BACK_SPEED, self.speed)
|
||||||
|
|
||||||
rotate_angle: float = 0
|
rotate_angle: float = 0
|
||||||
if self.left:
|
if self.left:
|
||||||
rotate_angle -= self.ROTATE_SPEED
|
rotate_angle -= self.ROTATE_SPEED * dt
|
||||||
if self.right:
|
if self.right:
|
||||||
rotate_angle += self.ROTATE_SPEED
|
rotate_angle += self.ROTATE_SPEED * dt
|
||||||
|
|
||||||
# if self.backward:
|
# if self.backward:
|
||||||
# rotate_angle *= -1
|
# rotate_angle *= -1
|
||||||
@@ -47,11 +52,13 @@ class Car:
|
|||||||
if rotate_angle != 0:
|
if rotate_angle != 0:
|
||||||
self.direction = self.direction.rotate(rotate_angle)
|
self.direction = self.direction.rotate(rotate_angle)
|
||||||
|
|
||||||
self.speed *= 0.98
|
if not self.forward and not self.backward:
|
||||||
if abs(self.speed) < 1e-8:
|
self.speed -= sign(self.speed) * self.FRICTION * dt
|
||||||
|
|
||||||
|
if abs(self.speed) < 1e-4:
|
||||||
self.speed = 0
|
self.speed = 0
|
||||||
|
|
||||||
self.pos += self.direction * self.speed
|
self.pos += self.direction * self.speed * dt
|
||||||
|
|
||||||
def render(self, surf: pygame.Surface, camera: Camera):
|
def render(self, surf: pygame.Surface, camera: Camera):
|
||||||
pts: list[Vec] = self.get_corners()
|
pts: list[Vec] = self.get_corners()
|
||||||
|
|||||||
@@ -34,8 +34,9 @@ class Game:
|
|||||||
|
|
||||||
def mainloop(self):
|
def mainloop(self):
|
||||||
while self.running:
|
while self.running:
|
||||||
|
dt: float = self.clock.get_time() / 1000
|
||||||
self.process_pygame_events()
|
self.process_pygame_events()
|
||||||
self.car.update()
|
self.car.update(dt)
|
||||||
self.car.check_collisions(self.track.get_collision_polygons())
|
self.car.check_collisions(self.track.get_collision_polygons())
|
||||||
self.render()
|
self.render()
|
||||||
self.clock.tick(60)
|
self.clock.tick(60)
|
||||||
|
|||||||
Reference in New Issue
Block a user