PR: refactor state game

This commit is contained in:
math-pixel
2026-05-12 13:47:05 +02:00
parent eab552a09b
commit 8d197ba26b
6 changed files with 17 additions and 17 deletions
+2 -2
View File
@@ -4,8 +4,8 @@ import { useGameStore } from "@/managers/stores/useGameStore";
import { AUDIO_PATHS } from "@/data/audioConfig"; import { AUDIO_PATHS } from "@/data/audioConfig";
export function GameFlow(): null { export function GameFlow(): null {
const step = useGameStore((state) => state.missionFlow.step); const step = useGameStore((state) => state.intro.currentStep);
const setStep = useGameStore((state) => state.setFlowStep); const setStep = useGameStore((state) => state.setIntroStep);
const setActivityCity = useGameStore((state) => state.setActivityCity); const setActivityCity = useGameStore((state) => state.setActivityCity);
const setCanMove = useGameStore((state) => state.setCanMove); const setCanMove = useGameStore((state) => state.setCanMove);
const hasInitialized = useRef(false); const hasInitialized = useRef(false);
@@ -8,8 +8,8 @@ interface NPCHelperProps {
} }
export function NPCHelper({ position }: NPCHelperProps): React.JSX.Element { export function NPCHelper({ position }: NPCHelperProps): React.JSX.Element {
const step = useGameStore((state) => state.missionFlow.step); const step = useGameStore((state) => state.intro.currentStep);
const setStep = useGameStore((state) => state.setFlowStep); const setStep = useGameStore((state) => state.setIntroStep);
const debug = Debug.getInstance(); const debug = Debug.getInstance();
const handlePress = (): void => { const handlePress = (): void => {
@@ -10,8 +10,8 @@ interface PyloneDestroyedProps {
export function PyloneDestroyed({ export function PyloneDestroyed({
position, position,
}: PyloneDestroyedProps): React.JSX.Element { }: PyloneDestroyedProps): React.JSX.Element {
const step = useGameStore((state) => state.missionFlow.step); const step = useGameStore((state) => state.intro.currentStep);
const setStep = useGameStore((state) => state.setFlowStep); const setStep = useGameStore((state) => state.setIntroStep);
const setCanMove = useGameStore((state) => state.setCanMove); const setCanMove = useGameStore((state) => state.setCanMove);
const showDialog = useGameStore((state) => state.showDialog); const showDialog = useGameStore((state) => state.showDialog);
const debug = Debug.getInstance(); const debug = Debug.getInstance();
+3 -3
View File
@@ -2,9 +2,9 @@ import { useState } from "react";
import { useGameStore } from "@/managers/stores/useGameStore"; import { useGameStore } from "@/managers/stores/useGameStore";
export function IntroUI(): React.JSX.Element | null { export function IntroUI(): React.JSX.Element | null {
const step = useGameStore((state) => state.missionFlow.step); const step = useGameStore((state) => state.intro.currentStep);
const setPlayerName = useGameStore((state) => state.setPlayerName); const setPlayerName = useGameStore((state) => state.setPlayerName);
const setStep = useGameStore((state) => state.setFlowStep); const setStep = useGameStore((state) => state.setIntroStep);
const [inputValue, setInputValue] = useState(""); const [inputValue, setInputValue] = useState("");
if (step !== "naming") return null; if (step !== "naming") return null;
@@ -100,7 +100,7 @@ export function IntroUI(): React.JSX.Element | null {
} }
export function BienvenueDisplay(): React.JSX.Element | null { export function BienvenueDisplay(): React.JSX.Element | null {
const step = useGameStore((state) => state.missionFlow.step); const step = useGameStore((state) => state.intro.currentStep);
const playerName = useGameStore((state) => state.missionFlow.playerName); const playerName = useGameStore((state) => state.missionFlow.playerName);
if (step !== "bienvenue") return null; if (step !== "bienvenue") return null;
+3 -3
View File
@@ -26,8 +26,8 @@ export function ZoneDetection(): null {
const camera = useThree((state) => state.camera); const camera = useThree((state) => state.camera);
const triggeredZones = useRef<Set<string>>(new Set()); const triggeredZones = useRef<Set<string>>(new Set());
const debug = Debug.getInstance(); const debug = Debug.getInstance();
const step = useGameStore((state) => state.missionFlow.step); const step = useGameStore((state) => state.intro.currentStep);
const setStep = useGameStore((state) => state.setFlowStep); const setStep = useGameStore((state) => state.setIntroStep);
useEffect(() => { useEffect(() => {
if (!debug.active) return; if (!debug.active) return;
@@ -45,7 +45,7 @@ export function ZoneDetection(): null {
folder.add(playerPos, "z").name("Player Z").listen().disable(); folder.add(playerPos, "z").name("Player Z").listen().disable();
const unsubStore = useGameStore.subscribe((state) => { const unsubStore = useGameStore.subscribe((state) => {
gameState.step = state.missionFlow.step; gameState.step = state.intro.currentStep;
folder.controllersRecursive().forEach((c) => c.updateDisplay()); folder.controllersRecursive().forEach((c) => c.updateDisplay());
}); });
+5 -5
View File
@@ -10,6 +10,7 @@ export type MainGameState = "intro" | "bike" | "pylone" | "ferme" | "outro";
export type { MissionStep, RepairMissionId }; export type { MissionStep, RepairMissionId };
interface IntroState { interface IntroState {
currentStep: GameStep;
dialogueAudio: string | null; dialogueAudio: string | null;
hasCompleted: boolean; hasCompleted: boolean;
isBikeUnlocked: boolean; isBikeUnlocked: boolean;
@@ -25,7 +26,6 @@ interface MissionFlowState {
canMove: boolean; canMove: boolean;
dialogMessage: string | null; dialogMessage: string | null;
playerName: string; playerName: string;
step: GameStep;
} }
interface GameState { interface GameState {
@@ -54,7 +54,7 @@ interface GameActions {
hideDialog: () => void; hideDialog: () => void;
setActivityCity: (activityCity: boolean) => void; setActivityCity: (activityCity: boolean) => void;
setCanMove: (canMove: boolean) => void; setCanMove: (canMove: boolean) => void;
setFlowStep: (step: GameStep) => void; setIntroStep: (step: GameStep) => void;
setIntroState: (intro: Partial<IntroState>) => void; setIntroState: (intro: Partial<IntroState>) => void;
setPlayerName: (playerName: string) => void; setPlayerName: (playerName: string) => void;
setBikeState: (bike: Partial<GameState["bike"]>) => void; setBikeState: (bike: Partial<GameState["bike"]>) => void;
@@ -246,9 +246,9 @@ function createInitialGameState(): GameState {
canMove: false, canMove: false,
dialogMessage: null, dialogMessage: null,
playerName: "", playerName: "",
step: "intro",
}, },
intro: { intro: {
currentStep: "intro",
dialogueAudio: null, dialogueAudio: null,
hasCompleted: false, hasCompleted: false,
isBikeUnlocked: false, isBikeUnlocked: false,
@@ -291,8 +291,8 @@ export const useGameStore = create<GameStore>()((set) => ({
set((state) => ({ set((state) => ({
missionFlow: { ...state.missionFlow, canMove }, missionFlow: { ...state.missionFlow, canMove },
})), })),
setFlowStep: (step) => setIntroStep: (step: GameStep) =>
set((state) => ({ missionFlow: { ...state.missionFlow, step } })), set((state) => ({ intro: { ...state.intro, currentStep: step } })),
setIntroState: (intro) => setIntroState: (intro) =>
set((state) => ({ intro: { ...state.intro, ...intro } })), set((state) => ({ intro: { ...state.intro, ...intro } })),
setPlayerName: (playerName) => setPlayerName: (playerName) =>