feat: add speedometer
This commit is contained in:
32
src/game.py
32
src/game.py
@@ -1,3 +1,4 @@
|
||||
from math import cos, radians, sin
|
||||
import pygame
|
||||
|
||||
from src.camera import Camera
|
||||
@@ -29,6 +30,7 @@ class Game:
|
||||
str(ROOT / "assets" / "fonts" / "Ubuntu-M.ttf"), 20
|
||||
)
|
||||
self.show_fps: bool = True
|
||||
self.show_speed: bool = True
|
||||
|
||||
def mainloop(self):
|
||||
while self.running:
|
||||
@@ -64,6 +66,8 @@ class Game:
|
||||
self.car.render(self.win, self.camera)
|
||||
if self.show_fps:
|
||||
self.render_fps()
|
||||
if self.show_speed:
|
||||
self.render_speedometer()
|
||||
|
||||
pygame.display.flip()
|
||||
|
||||
@@ -76,6 +80,10 @@ class Game:
|
||||
self.car.left = True
|
||||
elif event.key == pygame.K_d:
|
||||
self.car.right = True
|
||||
elif event.key == pygame.K_f:
|
||||
self.show_fps = not self.show_fps
|
||||
elif event.key == pygame.K_v:
|
||||
self.show_speed = not self.show_speed
|
||||
|
||||
def on_key_up(self, event: pygame.event.Event):
|
||||
if event.key == pygame.K_w:
|
||||
@@ -92,3 +100,27 @@ class Game:
|
||||
f"{self.clock.get_fps():.1f}", True, self.FPS_COLOR
|
||||
)
|
||||
self.win.blit(txt, (self.win.get_width() - txt.get_width(), 0))
|
||||
|
||||
def render_speedometer(self):
|
||||
if self.car.speed == 0:
|
||||
return
|
||||
angle: float = self.car.speed / self.car.MAX_SPEED * 180
|
||||
|
||||
pts1: list[tuple[float, float]] = []
|
||||
pts2: list[tuple[float, float]] = []
|
||||
|
||||
n: int = 30
|
||||
r: float = 50
|
||||
ox: float = r + 10
|
||||
oy: float = r + 10
|
||||
thickness: float = 5
|
||||
r2: float = r - thickness
|
||||
|
||||
for i in range(n):
|
||||
a: float = radians(angle * i / (n - 1))
|
||||
dx: float = -cos(a)
|
||||
dy: float = -sin(a)
|
||||
pts1.append((ox + r * dx, oy + r * dy))
|
||||
pts2.append((ox + r2 * dx, oy + r2 * dy))
|
||||
|
||||
pygame.draw.polygon(self.win, (200, 200, 200), pts1 + pts2[::-1])
|
||||
|
||||
@@ -28,8 +28,6 @@ class Road(TrackObject):
|
||||
p3: Vec = p1 - pt.normal * pt.width
|
||||
side1.append(camera.world2screen(p2))
|
||||
side2.append(camera.world2screen(p3))
|
||||
col: tuple[float, float, float] = (i * 10 + 150, 100, 100)
|
||||
pygame.draw.circle(surf, col, camera.world2screen(p1), 5)
|
||||
|
||||
n: int = len(self.pts)
|
||||
for i in range(n):
|
||||
|
||||
Reference in New Issue
Block a user