feat: add track classes
This commit is contained in:
61
src/track.py
Normal file
61
src/track.py
Normal file
@@ -0,0 +1,61 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
from src.track_object import TrackObject, TrackObjectType
|
||||
from src.utils import ROOT
|
||||
from src.vec import Vec
|
||||
|
||||
|
||||
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:
|
||||
if obj_data["type"] == "road":
|
||||
self.objects.append(Road.load(obj_data))
|
||||
|
||||
|
||||
class RoadPoint:
|
||||
def __init__(self, pos: Vec, direction: Vec, width: float) -> None:
|
||||
self.pos: Vec = pos
|
||||
self.direction: Vec = direction
|
||||
self.width: float = width
|
||||
|
||||
@staticmethod
|
||||
def load(data: list[float]) -> RoadPoint:
|
||||
return RoadPoint(Vec(data[0], data[1]), Vec(data[2], data[3]), data[4])
|
||||
|
||||
|
||||
class Road(TrackObject):
|
||||
def __init__(self, pts: list[RoadPoint]) -> None:
|
||||
super().__init__(TrackObjectType.Road)
|
||||
self.pts: list[RoadPoint] = pts
|
||||
|
||||
@staticmethod
|
||||
def load(data: dict) -> Road:
|
||||
return Road([RoadPoint.load(pt) for pt in data["pts"]])
|
||||
13
src/track_object.py
Normal file
13
src/track_object.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from enum import StrEnum
|
||||
|
||||
|
||||
class TrackObjectType(StrEnum):
|
||||
Road = "road"
|
||||
|
||||
|
||||
class TrackObject:
|
||||
def __init__(
|
||||
self,
|
||||
type: TrackObjectType,
|
||||
) -> None:
|
||||
self.type: TrackObjectType = type
|
||||
5
src/utils.py
Normal file
5
src/utils.py
Normal file
@@ -0,0 +1,5 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)))
|
||||
Reference in New Issue
Block a user