PR: refactor state game
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user