import { RotateCcw, StepBack, StepForward } from "lucide-react"; import { type MainGameState, useGameStore, } from "@/managers/stores/useGameStore"; import { isMissionStep, MISSION_STEPS } from "@/types/gameplay/repairMission"; import { GAME_STEPS, type GameStep } from "@/types/game"; const MAIN_STATES: MainGameState[] = [ "intro", "bike", "pylone", "ferme", "outro", ]; function toPascalCase(value: string): string { return value .split(/[-_\s]+/) .filter(Boolean) .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) .join(""); } export function GameStateDebugPanel(): React.JSX.Element { const mainState = useGameStore((state) => state.mainState); const bikeStep = useGameStore((state) => state.bike.currentStep); const pyloneStep = useGameStore((state) => state.pylone.currentStep); const fermeStep = useGameStore((state) => state.ferme.currentStep); const detail = useGameStore((state) => { switch (state.mainState) { case "intro": return state.intro.currentStep; case "bike": return state.bike.currentStep; case "pylone": return state.pylone.currentStep; case "ferme": return state.ferme.currentStep; case "outro": return state.outro.hasStarted ? "started" : "waiting"; } }); const setMainState = useGameStore((state) => state.setMainState); const setIntroStep = useGameStore((state) => state.setIntroStep); const setBikeState = useGameStore((state) => state.setBikeState); const setPyloneState = useGameStore((state) => state.setPyloneState); const setFermeState = useGameStore((state) => state.setFermeState); const setOutroState = useGameStore((state) => state.setOutroState); const advanceGameState = useGameStore((state) => state.advanceGameState); const rewindGameState = useGameStore((state) => state.rewindGameState); const resetGame = useGameStore((state) => state.resetGame); const subStateOptions = mainState === "intro" ? GAME_STEPS : mainState === "outro" ? ["waiting", "started"] : MISSION_STEPS; function setSubState(nextSubState: string): void { if (mainState === "intro") { setIntroStep(nextSubState as GameStep); return; } if (mainState === "outro") { setOutroState({ hasStarted: nextSubState === "started" }); return; } if (!isMissionStep(nextSubState)) return; if (mainState === "bike") { setBikeState({ currentStep: nextSubState }); return; } if (mainState === "pylone") { setPyloneState({ currentStep: nextSubState }); return; } if (mainState === "ferme") { setFermeState({ currentStep: nextSubState }); return; } } function setDebugMainState(nextMainState: MainGameState): void { setMainState(nextMainState); if (nextMainState === "bike" && bikeStep === "locked") { setBikeState({ currentStep: "waiting" }); return; } if (nextMainState === "pylone" && pyloneStep === "locked") { setPyloneState({ currentStep: "waiting" }); return; } if (nextMainState === "ferme" && fermeStep === "locked") { setFermeState({ currentStep: "waiting" }); } } return (

Game State

Main state {toPascalCase(mainState)}
{MAIN_STATES.map((state) => ( ))}
Sub state {toPascalCase(detail)}
{subStateOptions.map((subState) => ( ))}
); }