Files
rally-racer/src/track.py
2025-10-18 21:02:24 +02:00

55 lines
1.5 KiB
Python

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