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()