diff --git a/dash/src/app/(nav)/settings/page.tsx b/dash/src/app/(nav)/settings/page.tsx index bfde0429..4a43d2a1 100644 --- a/dash/src/app/(nav)/settings/page.tsx +++ b/dash/src/app/(nav)/settings/page.tsx @@ -56,6 +56,16 @@ export default function SettingsPage() {

Show Drivers Mini Sectors

+
+ settings.setShowCompass(v)} /> +

Show Compass on Track Map

+
+ +
+ settings.setRotateTrackNorth(v)} /> +

Rotate the Track Map to Face North

+
+
settings.setRaceControlChime(v)} />

Play Race Control Chime

diff --git a/dash/src/components/Map.tsx b/dash/src/components/Map.tsx index 46a20a42..cef3d358 100644 --- a/dash/src/components/Map.tsx +++ b/dash/src/components/Map.tsx @@ -33,6 +33,8 @@ type Corner = { export default function Map() { const showCornerNumbers = useSettingsStore((state) => state.showCornerNumbers); + const showCompass = useSettingsStore((state) => state.showCompass); + const rotateTrackNorth = useSettingsStore((state) => state.rotateTrackNorth); const favoriteDrivers = useSettingsStore((state) => state.favoriteDrivers); const positions = usePositionStore((state) => state.positions); @@ -49,6 +51,7 @@ export default function Map() { const [sectors, setSectors] = useState([]); const [corners, setCorners] = useState([]); const [rotation, setRotation] = useState(0); + const [compass, setCompass] = useState(null); useEffect(() => { (async () => { @@ -58,7 +61,7 @@ export default function Map() { const centerX = (Math.max(...mapJson.x) - Math.min(...mapJson.x)) / 2; const centerY = (Math.max(...mapJson.y) - Math.min(...mapJson.y)) / 2; - const fixedRotation = mapJson.rotation + ROTATION_FIX; + const fixedRotation = rotateTrackNorth ? 90 : mapJson.rotation + ROTATION_FIX; const sectors = createSectors(mapJson).map((s) => ({ ...s, @@ -86,9 +89,13 @@ export default function Map() { const cMinX = Math.min(...pointsX) - SPACE; const cMinY = Math.min(...pointsY) - SPACE; - const cWidthX = Math.max(...pointsX) - cMinX + SPACE * 2; + const cWidthX = Math.max(...pointsX) - cMinX + SPACE * 2 + 1000; const cWidthY = Math.max(...pointsY) - cMinY + SPACE * 2; + const compassX = cMinX + cWidthX - 1500; + const compassY = cMinY + 1500; + + setCompass({ x: compassX, y: compassY, angle: fixedRotation }); setCenter([centerX, centerY]); setBounds([cMinX, cMinY, cWidthX, cWidthY]); setSectors(sectors); @@ -96,7 +103,7 @@ export default function Map() { setRotation(fixedRotation); setCorners(cornerPositions); })(); - }, [circuitKey]); + }, [circuitKey, rotateTrackNorth]); const yellowSectors = useMemo(() => findYellowSectors(raceControlMessages), [raceControlMessages]); @@ -159,6 +166,8 @@ export default function Map() { ); })} + {showCompass && compass && } + {showCornerNumbers && corners.map((corner) => ( ); }; + +type CompassProps = { + x: number; + y: number; + angle: number; +}; + +const Compass = ({ x, y, angle }: CompassProps) => { + let northPos = rotate(0, 400, angle, 0, 0); + let sideDif = rotate(100, 0, angle, 0, 0); + return ( + <> + + N + + + + + + ); +}; diff --git a/dash/src/stores/useSettingsStore.ts b/dash/src/stores/useSettingsStore.ts index b0902181..e2c14b6a 100644 --- a/dash/src/stores/useSettingsStore.ts +++ b/dash/src/stores/useSettingsStore.ts @@ -25,6 +25,12 @@ type SettingsStore = { showMiniSectors: boolean; setShowMiniSectors: (showMiniSectors: boolean) => void; + showCompass: boolean; + setShowCompass: (showCompass: boolean) => void; + + rotateTrackNorth: boolean; + setRotateTrackNorth: (rotateTrackNorth: boolean) => void; + favoriteDrivers: string[]; setFavoriteDrivers: (favoriteDrivers: string[]) => void; removeFavoriteDriver: (driver: string) => void; @@ -61,6 +67,12 @@ export const useSettingsStore = create( showMiniSectors: true, setShowMiniSectors: (showMiniSectors: boolean) => set({ showMiniSectors }), + showCompass: false, + setShowCompass: (showCompass: boolean) => set({ showCompass }), + + rotateTrackNorth: false, + setRotateTrackNorth: (rotateTrackNorth: boolean) => set({ rotateTrackNorth }), + favoriteDrivers: [], setFavoriteDrivers: (favoriteDrivers: string[]) => set({ favoriteDrivers }), removeFavoriteDriver: (driver: string) =>