from __future__ import annotations import json import pygame from src.camera import Camera from src.track_object import TrackObject from src.utils import ROOT from src.vec import Vec TrackObject.init() class Track: TRACKS_DIRECTORY = ROOT / "assets" / "tracks" def __init__(self, id: str, name: str, start_pos: Vec, start_dir: Vec) -> None: self.id: str = id self.name: str = name self.start_pos: Vec = start_pos self.start_dir: Vec = start_dir self.objects: list[TrackObject] = [] self.load_objects() @staticmethod def load(name: str) -> Track: with open(Track.TRACKS_DIRECTORY / name / "meta.json", "r") as f: meta: dict = json.load(f) return Track( name, meta["name"], Vec(*meta["start"]["pos"]), Vec(*meta["start"]["direction"]), ) def load_objects(self): with open(Track.TRACKS_DIRECTORY / self.id / "track.json", "r") as f: data: list = json.load(f) self.objects = [] for obj_data in data: self.objects.append(TrackObject.load(obj_data)) def render(self, surf: pygame.Surface, camera: Camera): for object in self.objects: object.render(surf, camera) def get_collision_polygons(self) -> list[list[Vec]]: polygons: list[list[Vec]] = [] for obj in self.objects: polygons.extend(obj.get_collision_polygons()) return polygons