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