mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
not much today, cleaned a bit of stuff and added "back" button
This commit is contained in:
parent
d260ad98a6
commit
ca24f91ae1
8 changed files with 92 additions and 105 deletions
|
@ -1,4 +1,4 @@
|
||||||
import React from "react";
|
import React, { useEffect, useMemo, useState } from "react";
|
||||||
import authorizeHeaderUnderline from "../../static/sprite/authorize_header_underline.png";
|
import authorizeHeaderUnderline from "../../static/sprite/authorize_header_underline.png";
|
||||||
import authorizeGlass from "../../static/sprite/authorize_glass.png";
|
import authorizeGlass from "../../static/sprite/authorize_glass.png";
|
||||||
import authorizeGlassUnderline from "../../static/sprite/authorize_glass_underline.png";
|
import authorizeGlassUnderline from "../../static/sprite/authorize_glass_underline.png";
|
||||||
|
@ -98,7 +98,7 @@ const BootAuthorizeUser = (props: BootAuthorizeUserProps) => {
|
||||||
</sprite>
|
</sprite>
|
||||||
|
|
||||||
<mesh
|
<mesh
|
||||||
scale={[5*1.5, 1.28*1.5, 0]}
|
scale={[5 * 1.5, 1.28 * 1.5, 0]}
|
||||||
position={[-1.06, -0.42, 0]}
|
position={[-1.06, -0.42, 0]}
|
||||||
rotation={[-0.8, 0, -0.3]}
|
rotation={[-0.8, 0, -0.3]}
|
||||||
renderOrder={-1}
|
renderOrder={-1}
|
||||||
|
|
|
@ -30,9 +30,7 @@ const BootLoadData = (props: BootLoadDataProps) => {
|
||||||
const yesTex = useLoader(THREE.TextureLoader, yes);
|
const yesTex = useLoader(THREE.TextureLoader, yes);
|
||||||
const noTex = useLoader(THREE.TextureLoader, no);
|
const noTex = useLoader(THREE.TextureLoader, no);
|
||||||
|
|
||||||
const activeLoadDataElement = useBootStore(
|
const activeBootElement = useBootStore((state) => state.activeBootElement);
|
||||||
(state) => state.activeLoadDataElement
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
@ -67,7 +65,9 @@ const BootLoadData = (props: BootLoadDataProps) => {
|
||||||
scale={[0.7, 0.3, 0]}
|
scale={[0.7, 0.3, 0]}
|
||||||
renderOrder={2}
|
renderOrder={2}
|
||||||
position={
|
position={
|
||||||
activeLoadDataElement === "yes" ? [-1.2, -0.2, 0] : [1.2, -0.2, 0]
|
activeBootElement === "load_data_yes"
|
||||||
|
? [-1.2, -0.2, 0]
|
||||||
|
: [1.2, -0.2, 0]
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<spriteMaterial
|
<spriteMaterial
|
||||||
|
|
|
@ -16,12 +16,7 @@ type BootMainMenuProps = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const BootMainMenuComponents = (props: BootMainMenuProps) => {
|
const BootMainMenuComponents = (props: BootMainMenuProps) => {
|
||||||
const activeMainMenuElement = useBootStore(
|
const activeBootElement = useBootStore((state) => state.activeBootElement);
|
||||||
(state) => state.activeMainMenuElement
|
|
||||||
);
|
|
||||||
const authorizeUserPos = useBootStore(
|
|
||||||
(state) => state.authorizeUserPos
|
|
||||||
);
|
|
||||||
|
|
||||||
const authorizeActiveTex = useLoader(THREE.TextureLoader, authorizeActive);
|
const authorizeActiveTex = useLoader(THREE.TextureLoader, authorizeActive);
|
||||||
const authorizeInactiveTex = useLoader(
|
const authorizeInactiveTex = useLoader(
|
||||||
|
@ -37,57 +32,65 @@ const BootMainMenuComponents = (props: BootMainMenuProps) => {
|
||||||
const loadDataInactiveTex = useLoader(THREE.TextureLoader, loadDataInactive);
|
const loadDataInactiveTex = useLoader(THREE.TextureLoader, loadDataInactive);
|
||||||
const loadDataHeaderTex = useLoader(THREE.TextureLoader, loadDataHeader);
|
const loadDataHeaderTex = useLoader(THREE.TextureLoader, loadDataHeader);
|
||||||
|
|
||||||
const loadDataPos = useBootStore((state) => state.loadDataPos);
|
const loadDataTextState = useMemo(() => {
|
||||||
|
if (props.activeSubScene === "load_data") {
|
||||||
const mainMenuAnimationState = useSpring({
|
return {
|
||||||
authorizeUserPosX: authorizeUserPos.x,
|
scale: [1.4, 0.16, 0],
|
||||||
authorizeUserPosY: authorizeUserPos.y,
|
texture: loadDataHeaderTex,
|
||||||
authorizeUserOpacity: props.activeSubScene !== "load_data" ? 1 : 0,
|
position: { x: -1.13, y: -1 },
|
||||||
loadDataOpacity: props.activeSubScene !== "authorize_user" ? 1 : 0,
|
};
|
||||||
loadDataPosX: loadDataPos.x,
|
} else {
|
||||||
loadDataPosY: loadDataPos.y,
|
return {
|
||||||
config: { duration: 500 },
|
scale: [1.4, 0.3, 0],
|
||||||
});
|
texture:
|
||||||
|
activeBootElement === "load_data"
|
||||||
|
? loadDataActiveTex
|
||||||
|
: loadDataInactiveTex,
|
||||||
|
position: { x: 0, y: -0.5 },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
activeBootElement,
|
||||||
|
loadDataActiveTex,
|
||||||
|
loadDataHeaderTex,
|
||||||
|
loadDataInactiveTex,
|
||||||
|
props.activeSubScene,
|
||||||
|
]);
|
||||||
|
|
||||||
const authorizeUserTextState = useMemo(() => {
|
const authorizeUserTextState = useMemo(() => {
|
||||||
if (props.activeSubScene === "authorize_user") {
|
if (props.activeSubScene === "authorize_user") {
|
||||||
return { scale: [1.8, 0.16, 0], texture: authorizeUserHeaderTex };
|
return {
|
||||||
|
scale: [1.8, 0.16, 0],
|
||||||
|
texture: authorizeUserHeaderTex,
|
||||||
|
position: { x: 1.13, y: 1.2 },
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
scale: [1.8, 0.3, 0],
|
scale: [1.8, 0.3, 0],
|
||||||
texture:
|
texture:
|
||||||
activeMainMenuElement === "authorize_user"
|
activeBootElement === "authorize_user"
|
||||||
? authorizeActiveTex
|
? authorizeActiveTex
|
||||||
: authorizeInactiveTex,
|
: authorizeInactiveTex,
|
||||||
|
position: { x: 0, y: 0.5 },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}, [
|
}, [
|
||||||
activeMainMenuElement,
|
activeBootElement,
|
||||||
authorizeActiveTex,
|
authorizeActiveTex,
|
||||||
authorizeInactiveTex,
|
authorizeInactiveTex,
|
||||||
authorizeUserHeaderTex,
|
authorizeUserHeaderTex,
|
||||||
props.activeSubScene,
|
props.activeSubScene,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const loadDataTextState = useMemo(() => {
|
const mainMenuAnimationState = useSpring({
|
||||||
if (props.activeSubScene === "load_data") {
|
authorizeUserOpacity: props.activeSubScene !== "load_data" ? 1 : 0,
|
||||||
return { scale: [1.4, 0.16, 0], texture: loadDataHeaderTex };
|
authorizeUserPosX: authorizeUserTextState.position.x,
|
||||||
} else {
|
authorizeUserPosY: authorizeUserTextState.position.y,
|
||||||
return {
|
loadDataOpacity: props.activeSubScene !== "authorize_user" ? 1 : 0,
|
||||||
scale: [1.4, 0.3, 0],
|
loadDataPosX: loadDataTextState.position.x,
|
||||||
texture:
|
loadDataPosY: loadDataTextState.position.y,
|
||||||
activeMainMenuElement === "load_data"
|
config: { duration: 500 },
|
||||||
? loadDataActiveTex
|
});
|
||||||
: loadDataInactiveTex,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}, [
|
|
||||||
activeMainMenuElement,
|
|
||||||
loadDataActiveTex,
|
|
||||||
loadDataHeaderTex,
|
|
||||||
loadDataInactiveTex,
|
|
||||||
props.activeSubScene,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|
|
@ -3,54 +3,50 @@ import { StateManagerProps } from "./EventManager";
|
||||||
import { useBootStore } from "../../store";
|
import { useBootStore } from "../../store";
|
||||||
|
|
||||||
const BootManager = (props: StateManagerProps) => {
|
const BootManager = (props: StateManagerProps) => {
|
||||||
const setActiveMainMenuElement = useBootStore(
|
const setActiveBootElement = useBootStore(
|
||||||
(state) => state.setActiveMainMenuElement
|
(state) => state.setActiveBootElement
|
||||||
);
|
);
|
||||||
const setActiveLoadDataElement = useBootStore(
|
|
||||||
(state) => state.setActiveLoadDataElement
|
|
||||||
);
|
|
||||||
const setAuthorizeUserPos = useBootStore(
|
|
||||||
(state) => state.setAuthorizeUserPos
|
|
||||||
);
|
|
||||||
const setLoadDataPos = useBootStore((state) => state.setLoadDataPos);
|
|
||||||
|
|
||||||
const dispatchObject = useCallback(
|
const dispatchObject = useCallback(
|
||||||
(event: string) => {
|
(event: string) => {
|
||||||
const dispatcherObjects = {
|
const dispatcherObjects = {
|
||||||
main_menu_down: {
|
main_menu_down: {
|
||||||
action: setActiveMainMenuElement,
|
action: setActiveBootElement,
|
||||||
value: "load_data",
|
value: "load_data",
|
||||||
},
|
},
|
||||||
main_menu_up: {
|
main_menu_up: {
|
||||||
action: setActiveMainMenuElement,
|
action: setActiveBootElement,
|
||||||
value: "authorize_user",
|
value: "authorize_user",
|
||||||
},
|
},
|
||||||
load_data_left: {
|
load_data_left: {
|
||||||
action: setActiveLoadDataElement,
|
action: setActiveBootElement,
|
||||||
value: "yes",
|
value: "load_data_yes",
|
||||||
},
|
},
|
||||||
load_data_right: {
|
load_data_right: {
|
||||||
action: setActiveLoadDataElement,
|
action: setActiveBootElement,
|
||||||
value: "no",
|
value: "load_data_no",
|
||||||
|
},
|
||||||
|
authorize_user_back: {
|
||||||
|
action: setActiveBootElement,
|
||||||
|
value: "authorize_user",
|
||||||
},
|
},
|
||||||
select_authorize_user: {
|
select_authorize_user: {
|
||||||
action: setAuthorizeUserPos,
|
action: setActiveBootElement,
|
||||||
value: { x: 1.13, y: 1.2 },
|
value: "authorize_user",
|
||||||
|
},
|
||||||
|
select_load_data_no: {
|
||||||
|
action: setActiveBootElement,
|
||||||
|
value: "load_data",
|
||||||
},
|
},
|
||||||
select_load_data: {
|
select_load_data: {
|
||||||
action: setLoadDataPos,
|
action: setActiveBootElement,
|
||||||
value: { x: -1.13, y: -1 },
|
value: "load_data_yes"
|
||||||
},
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return dispatcherObjects[event as keyof typeof dispatcherObjects];
|
return dispatcherObjects[event as keyof typeof dispatcherObjects];
|
||||||
},
|
},
|
||||||
[
|
[setActiveBootElement]
|
||||||
setActiveLoadDataElement,
|
|
||||||
setActiveMainMenuElement,
|
|
||||||
setAuthorizeUserPos,
|
|
||||||
setLoadDataPos,
|
|
||||||
]
|
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
@ -32,6 +32,7 @@ const getKeyCodeAssociation = (keyCode: number): string => {
|
||||||
38: "up", // up arrow
|
38: "up", // up arrow
|
||||||
39: "right", // right arrow
|
39: "right", // right arrow
|
||||||
88: "select", // x key
|
88: "select", // x key
|
||||||
|
90: "back", // z key
|
||||||
};
|
};
|
||||||
return keyCodeAssocs[keyCode as keyof typeof keyCodeAssocs];
|
return keyCodeAssocs[keyCode as keyof typeof keyCodeAssocs];
|
||||||
};
|
};
|
||||||
|
@ -44,6 +45,7 @@ type EventState = {
|
||||||
newActiveBlueOrbId: string;
|
newActiveBlueOrbId: string;
|
||||||
newSiteRotIdx: string;
|
newSiteRotIdx: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type StateManagerProps = {
|
export type StateManagerProps = {
|
||||||
eventState: any;
|
eventState: any;
|
||||||
};
|
};
|
||||||
|
@ -56,7 +58,7 @@ export type GameContext = {
|
||||||
currentLevel: string;
|
currentLevel: string;
|
||||||
siteRotIdx: string;
|
siteRotIdx: string;
|
||||||
activeMediaComponent: string;
|
activeMediaComponent: string;
|
||||||
activeMainMenuElement: string;
|
activeBootElement: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const EventManager = () => {
|
const EventManager = () => {
|
||||||
|
@ -76,9 +78,7 @@ const EventManager = () => {
|
||||||
);
|
);
|
||||||
|
|
||||||
// boot scene
|
// boot scene
|
||||||
const activeMainMenuElement = useBootStore(
|
const activeBootElement = useBootStore((state) => state.activeBootElement);
|
||||||
(state) => state.activeMainMenuElement
|
|
||||||
);
|
|
||||||
|
|
||||||
const [eventState, setEventState] = useState<any>();
|
const [eventState, setEventState] = useState<any>();
|
||||||
|
|
||||||
|
@ -92,10 +92,10 @@ const EventManager = () => {
|
||||||
blueOrbMatrixIndices: blueOrbMatrixIndices,
|
blueOrbMatrixIndices: blueOrbMatrixIndices,
|
||||||
currentLevel: currentLevel,
|
currentLevel: currentLevel,
|
||||||
activeMediaComponent: activeMediaComponent,
|
activeMediaComponent: activeMediaComponent,
|
||||||
activeMainMenuElement: activeMainMenuElement,
|
activeBootElement: activeBootElement,
|
||||||
}),
|
}),
|
||||||
[
|
[
|
||||||
activeMainMenuElement,
|
activeBootElement,
|
||||||
activeMediaComponent,
|
activeMediaComponent,
|
||||||
blueOrbMatrixIndices,
|
blueOrbMatrixIndices,
|
||||||
currentLevel,
|
currentLevel,
|
||||||
|
|
|
@ -10,15 +10,21 @@ const SubSceneManager = (props: StateManagerProps) => {
|
||||||
const dispatchObject = useCallback(
|
const dispatchObject = useCallback(
|
||||||
(event: string) => {
|
(event: string) => {
|
||||||
const dispatcherObjects = {
|
const dispatcherObjects = {
|
||||||
|
authorize_user_back: {
|
||||||
|
action: setActiveSubscene,
|
||||||
|
value: "main_menu",
|
||||||
|
},
|
||||||
select_authorize_user: {
|
select_authorize_user: {
|
||||||
action: setActiveSubscene,
|
action: setActiveSubscene,
|
||||||
value: "authorize_user",
|
value: "authorize_user",
|
||||||
delay: 0,
|
|
||||||
},
|
},
|
||||||
select_load_data: {
|
select_load_data: {
|
||||||
action: setActiveSubscene,
|
action: setActiveSubscene,
|
||||||
value: "load_data",
|
value: "load_data",
|
||||||
delay: 0,
|
},
|
||||||
|
select_load_data_no: {
|
||||||
|
action: setActiveSubscene,
|
||||||
|
value: "main_menu",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
return dispatcherObjects[event as keyof typeof dispatcherObjects];
|
return dispatcherObjects[event as keyof typeof dispatcherObjects];
|
||||||
|
@ -33,9 +39,7 @@ const SubSceneManager = (props: StateManagerProps) => {
|
||||||
const dispatchedObject = dispatchObject(eventAction);
|
const dispatchedObject = dispatchObject(eventAction);
|
||||||
|
|
||||||
if (dispatchedObject) {
|
if (dispatchedObject) {
|
||||||
setTimeout(() => {
|
|
||||||
dispatchedObject.action(dispatchedObject.value);
|
dispatchedObject.action(dispatchedObject.value);
|
||||||
}, dispatchedObject.delay);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [props.eventState, dispatchObject]);
|
}, [props.eventState, dispatchObject]);
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { GameContext } from "./StateManagers/EventManager";
|
||||||
const handleBootEvent = (gameContext: GameContext) => {
|
const handleBootEvent = (gameContext: GameContext) => {
|
||||||
const keyPress = gameContext.keyPress;
|
const keyPress = gameContext.keyPress;
|
||||||
|
|
||||||
const activeMainMenuElement = gameContext.activeMainMenuElement;
|
const activeBootElement = gameContext.activeBootElement;
|
||||||
const currentSubscene = gameContext.subscene;
|
const currentSubscene = gameContext.subscene;
|
||||||
|
|
||||||
switch (keyPress) {
|
switch (keyPress) {
|
||||||
|
@ -11,9 +11,10 @@ const handleBootEvent = (gameContext: GameContext) => {
|
||||||
case "up":
|
case "up":
|
||||||
case "left":
|
case "left":
|
||||||
case "right":
|
case "right":
|
||||||
|
case "back":
|
||||||
return { event: `${currentSubscene}_${keyPress}` };
|
return { event: `${currentSubscene}_${keyPress}` };
|
||||||
case "select":
|
case "select":
|
||||||
return { event: `select_${activeMainMenuElement}` };
|
return { event: `select_${activeBootElement}` };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
25
src/store.ts
25
src/store.ts
|
@ -164,14 +164,8 @@ type SubsceneState = {
|
||||||
};
|
};
|
||||||
|
|
||||||
type MainMenuState = {
|
type MainMenuState = {
|
||||||
activeMainMenuElement: string;
|
activeBootElement: string;
|
||||||
authorizeUserPos: { x: number; y: number };
|
setActiveBootElement: (to: string) => void;
|
||||||
loadDataPos: { x: number; y: number };
|
|
||||||
setAuthorizeUserPos: (to: { x: number; y: number }) => void;
|
|
||||||
setActiveMainMenuElement: (to: string) => void;
|
|
||||||
setLoadDataPos: (to: { x: number; y: number }) => void;
|
|
||||||
activeLoadDataElement: string;
|
|
||||||
setActiveLoadDataElement: (to: string) => void;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useTextRendererStore = create<TextRendererState>((set) => ({
|
export const useTextRendererStore = create<TextRendererState>((set) => ({
|
||||||
|
@ -405,19 +399,8 @@ export const useSubsceneStore = create<SubsceneState>((set) => ({
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export const useBootStore = create<MainMenuState>((set) => ({
|
export const useBootStore = create<MainMenuState>((set) => ({
|
||||||
activeMainMenuElement: "authorize_user",
|
activeBootElement: "load_data_yes",
|
||||||
authorizeUserPos: { x: 0, y: 0.5 },
|
setActiveBootElement: (to: string) => set(() => ({ activeBootElement: to })),
|
||||||
loadDataPos: { x: 0, y: -0.5 },
|
|
||||||
setActiveMainMenuElement: (to: string) =>
|
|
||||||
set(() => ({ activeMainMenuElement: to })),
|
|
||||||
setAuthorizeUserPos: (to) =>
|
|
||||||
set(() => ({
|
|
||||||
authorizeUserPos: to,
|
|
||||||
})),
|
|
||||||
setLoadDataPos: (to) => set(() => ({ loadDataPos: to })),
|
|
||||||
activeLoadDataElement: "yes",
|
|
||||||
setActiveLoadDataElement: (to: string) =>
|
|
||||||
set(() => ({ activeLoadDataElement: to })),
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export const useImageStore = create(
|
export const useImageStore = create(
|
||||||
|
|
Loading…
Reference in a new issue