47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
# app/simulation/simulator_main.py
|
|
from __future__ import annotations
|
|
from typing import Dict, Any
|
|
from .vehicle import Vehicle, Orchestrator
|
|
from .modules.engine import EngineModule
|
|
from .modules.gearbox import GearboxModule
|
|
from .modules.abs import AbsModule
|
|
from .modules.basic import BasicModule
|
|
|
|
class VehicleSimulator:
|
|
def __init__(self):
|
|
self.v = Vehicle()
|
|
self.orch = Orchestrator(self.v)
|
|
# order matters: base → engine → gearbox → abs
|
|
self.orch.add(BasicModule())
|
|
self.orch.add(EngineModule())
|
|
self.orch.add(GearboxModule())
|
|
self.orch.add(AbsModule())
|
|
|
|
# control from GUI
|
|
def set_gear(self, g: int) -> None:
|
|
self.v.set("gear", max(0, min(10, int(g))))
|
|
def set_throttle(self, t: int) -> None:
|
|
self.v.set("throttle_pct", max(0, min(100, int(t))))
|
|
|
|
def update(self, dt: float) -> None:
|
|
self.orch.update(dt)
|
|
|
|
def snapshot(self) -> Dict[str, Any]:
|
|
return self.v.snapshot()
|
|
|
|
# config I/O (compat with old layout)
|
|
def load_config(self, cfg: Dict[str, Any]) -> None:
|
|
for k in ("engine","gearbox","vehicle"):
|
|
if k in cfg:
|
|
self.v.config.setdefault(k, {}).update(cfg[k])
|
|
if "dtc" in cfg:
|
|
self.v.dtc.update(cfg["dtc"])
|
|
|
|
def export_config(self) -> Dict[str, Any]:
|
|
return {
|
|
"engine": dict(self.v.config.get("engine", {})),
|
|
"gearbox": dict(self.v.config.get("gearbox", {})),
|
|
"vehicle": dict(self.v.config.get("vehicle", {})),
|
|
"dtc": dict(self.v.dtc),
|
|
}
|