mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 13:33:42 +08:00
aaac7a6733
Present saved configuration and live driving state through native Small and Big UI layouts. Support per-field tune resets, movable widgets, camera availability, and a unified speed card while preserving decision-bound actions.
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
"""Immutable, explicitly synthetic onroad visuals for private host replay."""
|
|
|
|
from dataclasses import dataclass
|
|
import math
|
|
|
|
|
|
FLAGS = frozenset(("cem", "csc"))
|
|
ORDER = ("cem", "csc")
|
|
CEM_REASONS = ("CURVE", "LEAD", "STOP LIGHT", "SPEED")
|
|
CSC_CURVATURE = (0.0, 0.008, 0.0115, 0.0200)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class OnroadVisualPreview:
|
|
cem_reason: str | None = None
|
|
curve_curvature: float | None = None
|
|
label: str = "SYNTHETIC REPLAY PREVIEW"
|
|
|
|
|
|
def parse_flags(raw: str) -> frozenset[str]:
|
|
if raw == "":
|
|
return frozenset()
|
|
parts = raw.split(",")
|
|
if any(part not in FLAGS for part in parts) or len(parts) != len(set(parts)):
|
|
raise ValueError("Unknown or duplicate private onroad visual preview")
|
|
return frozenset(parts)
|
|
|
|
|
|
def encode_flags(flags: frozenset[str]) -> str:
|
|
if not flags <= FLAGS:
|
|
raise ValueError("Unknown private onroad visual preview")
|
|
return ",".join(flag for flag in ORDER if flag in flags)
|
|
|
|
|
|
def preview_at(flags: frozenset[str], elapsed_s: float) -> OnroadVisualPreview | None:
|
|
if not flags <= FLAGS or not math.isfinite(elapsed_s) or elapsed_s < 0:
|
|
raise ValueError("Invalid private onroad visual preview")
|
|
if not flags:
|
|
return None
|
|
phase = int(elapsed_s // 2) % 4
|
|
return OnroadVisualPreview(CEM_REASONS[phase] if "cem" in flags else None,
|
|
CSC_CURVATURE[phase] if "csc" in flags else None)
|