not much today, cleaned a bit of stuff and added "back" button

This commit is contained in:
ad044 2020-11-11 22:40:50 +04:00
parent d260ad98a6
commit ca24f91ae1
8 changed files with 92 additions and 105 deletions

View file

@ -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}

View file

@ -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

View file

@ -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 (
<> <>

View file

@ -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(() => {

View file

@ -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,

View file

@ -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]);

View file

@ -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}` };
} }
}; };

View file

@ -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(