57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import pygame
|
|
|
|
from src.camera import Camera
|
|
from src.car import Car
|
|
from src.track import Road, Track
|
|
from src.vec import Vec
|
|
|
|
|
|
class Game:
|
|
DEFAULT_SIZE = (1280, 720)
|
|
BACKGROUND_COLOR = (80, 80, 80)
|
|
MAX_FPS = 60
|
|
|
|
def __init__(self) -> None:
|
|
pygame.init()
|
|
self.win: pygame.Surface = pygame.display.set_mode(
|
|
self.DEFAULT_SIZE, pygame.RESIZABLE
|
|
)
|
|
pygame.display.set_caption("Rally Racer")
|
|
self.running: bool = True
|
|
self.track: Track = Track.load("simple")
|
|
self.car: Car = Car(self.track.start_pos, self.track.start_dir)
|
|
self.camera: Camera = Camera()
|
|
|
|
self.clock: pygame.time.Clock = pygame.time.Clock()
|
|
|
|
def mainloop(self):
|
|
while self.running:
|
|
self.process_pygame_events()
|
|
self.render()
|
|
self.clock.tick(60)
|
|
|
|
def process_pygame_events(self):
|
|
self.camera.set_pos(self.car.pos)
|
|
self.camera.set_direction(self.car.direction)
|
|
self.camera.set_size(Vec(*self.win.get_size()))
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
self.quit()
|
|
elif event.type == pygame.VIDEORESIZE:
|
|
self.camera.set_size(Vec(event.w, event.h))
|
|
elif event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_ESCAPE:
|
|
self.quit()
|
|
|
|
def quit(self):
|
|
self.running = False
|
|
|
|
def render(self):
|
|
self.win.fill(self.BACKGROUND_COLOR)
|
|
road: Road = self.track.objects[0] # type: ignore
|
|
for i, pt in enumerate(road.pts):
|
|
pos: Vec = self.camera.world2screen(pt.pos)
|
|
col: float = i * 10 + 150
|
|
pygame.draw.circle(self.win, (col, 100, 100), pos, 5)
|
|
pygame.display.flip()
|