refactor done i think, gotta fix some bugs

This commit is contained in:
ad044 2021-02-02 00:59:06 +04:00
parent cd584dd33b
commit f3dfff3c26
46 changed files with 196 additions and 485 deletions

View file

@ -13,6 +13,8 @@ import TaKScene from "./scenes/TaKScene";
import ChangeDiscScene from "./scenes/ChangeDiscScene";
import EndScene from "./scenes/EndScene";
import IdleMediaScene from "./scenes/IdleMediaScene";
import KeyPressHandler from "./core/state-management/KeyPressHandler";
import Preloader from "./core/Preloader";
const App = () => {
const currentScene = useStore((state) => state.currentScene);
@ -41,7 +43,9 @@ const App = () => {
<div id="game-root" className="game">
<span className="canvas">
<Canvas concurrent>
<KeyPressHandler />
<Suspense fallback={null}>
<Preloader />
{dispatchScene[currentScene as keyof typeof dispatchScene]}
</Suspense>
</Canvas>

View file

@ -6,9 +6,6 @@ import GrayPlanes from "./SyncedComponents/GrayPlanes";
import Starfield from "./SyncedComponents/Starfield";
import Site from "./SyncedComponents/Site";
import MiddleRing from "./SyncedComponents/MiddleRing";
import MainSceneEventManager from "../../core/StateManagers/MainSceneEventManager";
import Pause from "./PauseSubscene/Pause";
import { a } from "@react-spring/three";
import Lain from "./Lain";
import { useStore } from "../../store";
@ -64,9 +61,6 @@ const SyncedComponentLoader = (props: SyncedComponentLoaderProps) => {
introFinished={introFinished}
/>
<Site shouldIntro={props.shouldIntro} introFinished={introFinished} />
<MainSceneEventManager
loaded={props.shouldIntro ? introFinished : true}
/>
<Lain shouldIntro={props.shouldIntro} />
</>
);

View file

@ -8,7 +8,7 @@ import { useStore } from "../../../store";
import lerp from "../../../utils/lerp";
import GreenTextRenderer from "../../TextRenderer/GreenTextRenderer";
import usePrevious from "../../../hooks/usePrevious";
import {getNodeHud} from "../../../utils/nodeUtils";
import {getNodeHud} from "../../../utils/node-utils";
export type HUDType = {
mirrored: number;

View file

@ -32,24 +32,24 @@ const MiddleRingPart = (props: MiddleRingPartProps) => {
const posZ = props.position[2];
setTimeout(() => {
setPos({ posX: posX / 0.9, posZ: posZ / 0.9 });
}, 500);
}, 300);
setTimeout(() => {
setPos({ posX: posX, posZ: posZ });
}, 900);
}, 700);
setTimeout(() => {
setPos({ posX: posX / 0.9, posZ: posZ / 0.9 });
}, 1300);
}, 1100);
setTimeout(() => {
setPos({ posX: posX, posZ: posZ });
}, 1700);
}, 1500);
setTimeout(() => {
setPos({ posX: posX / 0.2, posZ: posZ / 0.2 });
}, 2500);
}, 2300);
setTimeout(() => {
setPos({ posX: posX, posZ: posZ });
}, 3200);
}, 3000);
}
}, [props.position, setPos, subscene]);

View file

@ -11,7 +11,7 @@ import site_a from "../../../resources/site_a.json";
import site_b from "../../../resources/site_b.json";
import level_y_values from "../../../resources/level_y_values.json";
import usePrevious from "../../../hooks/usePrevious";
import { filterInvisibleNodes } from "../../../utils/nodeUtils";
import { filterInvisibleNodes } from "../../../utils/node-utils";
export type NodeDataType = {
id: string;

View file

@ -6,7 +6,7 @@ import site_a from "../../../../resources/site_a.json";
import site_b from "../../../../resources/site_b.json";
import { NodeDataType, SiteType } from "../Site";
import usePrevious from "../../../../hooks/usePrevious";
import {isNodeVisible} from "../../../../utils/nodeUtils";
import {isNodeVisible} from "../../../../utils/node-utils";
type ActiveLevelNodesProps = {
visibleNodes: SiteType;

View file

@ -4,7 +4,7 @@ import { useStore } from "../../../../store";
import { SiteType } from "../Site";
import InactiveLevelNode from "./InactiveLevelNode";
import usePrevious from "../../../../hooks/usePrevious";
import { generateInactiveNodes } from "../../../../utils/nodeUtils";
import { generateInactiveNodes } from "../../../../utils/node-utils";
type ActiveLevelNodesProps = {
visibleNodes: SiteType;

View file

@ -3,7 +3,7 @@ import { useStore } from "../../store";
import { a, useTrail } from "@react-spring/three";
import BigLetter from "./BigLetter";
import usePrevious from "../../hooks/usePrevious";
import {getNodeHud} from "../../utils/nodeUtils";
import {getNodeHud} from "../../utils/node-utils";
const YellowTextRenderer = (props: { visible?: boolean }) => {
const activeNode = useStore((state) => state.activeNode);

View file

@ -1,26 +0,0 @@
import React from "react";
const getKeyCodeAssociation = (keyCode: number): string => {
const keyCodeAssocs = {
40: "DOWN", // down arrow
37: "LEFT", // left arrow
38: "UP", // up arrow
39: "RIGHT", // right arrow
88: "CIRCLE", // x key
90: "X", // z key
68: "TRIANGLE", // d key
69: "L2", // e key
32: "SPACE",
};
return keyCodeAssocs[keyCode as keyof typeof keyCodeAssocs];
};
export type StateManagerProps = {
eventState: any;
};
const EventManager = () => {
return <></>;
};
export default EventManager;

View file

@ -1,41 +0,0 @@
import React, { useCallback, useEffect, useState } from "react";
import { getKeyCodeAssociation } from "../../utils/keyPressUtils";
const GateSceneManager = () => {
const [eventState, setEventState] = useState<any>();
const [loaded, setLoaded] = useState(false);
useEffect(() => {
setTimeout(() => {
setLoaded(true);
return () => {
setLoaded(false);
};
}, 3500);
}, []);
const handleKeyPress = useCallback((event) => {
const { keyCode } = event;
const keyPress = getKeyCodeAssociation(keyCode);
if (keyPress && loaded) {
const event = { event: "exit_gate" };
setEventState(event);
}
}, [loaded]);
useEffect(() => {
window.addEventListener("keydown", handleKeyPress);
return () => {
window.removeEventListener("keydown", handleKeyPress);
};
}, [handleKeyPress]);
return <SceneManager eventState={eventState!} />;
};
export default GateSceneManager;

View file

@ -1,108 +0,0 @@
import React, { useCallback, useEffect, useMemo, useRef } from "react";
import { getMainSceneContext, useStore } from "../../store";
import handleMainSceneEvent from "../mainSceneEventHandler";
import { getKeyCodeAssociation } from "../../utils/keyPressUtils";
import { useFrame } from "react-three-fiber";
import levelSelectionManager from "../setters/main/level_selection/levelSelectionManager";
import lainManager from "../setters/main/site/lainManager";
import levelManager from "../setters/main/site/levelManager";
import nodeManager from "../setters/main/site/nodeManager";
import pauseManager from "../setters/main/pause/pauseManager";
import siteManager from "../setters/main/site/siteManager";
import mainSubsceneManager from "../setters/main/mainSubsceneManager";
import sceneManager from "../setters/sceneManager";
type MainSceneEventManagerProps = {
loaded: boolean;
};
const MainSceneEventManager = (props: MainSceneEventManagerProps) => {
const mainSubscene = useStore((state) => state.mainSubscene);
const timePassedSinceLastKeyPress = useRef(-1);
const mainSceneSetters = useMemo(
() => [
levelSelectionManager,
nodeManager,
levelManager,
lainManager,
siteManager,
pauseManager,
mainSubsceneManager,
sceneManager,
],
[]
);
useFrame(() => {
const now = Date.now();
if (
timePassedSinceLastKeyPress.current > -1 &&
mainSubscene !== "pause" &&
mainSubscene !== "level_selection"
) {
if (now > timePassedSinceLastKeyPress.current + 5000) {
// setEventState({
// event: "play_idle_media",
// scene: "idle_media",
// site: currentSite,
// });
timePassedSinceLastKeyPress.current = -1;
} else if (now > timePassedSinceLastKeyPress.current + 10000) {
const moves = [
"prayer",
"touch_sleeve",
"thinking",
"stretch_2",
"stretch",
"spin",
"scratch_head",
"blush",
"hands_behind_head",
"hands_on_hips",
"hands_on_hips_2",
"hands_together",
"lean_forward",
"lean_left",
"lean_right",
"look_around",
"play_with_hair",
];
const event = moves[Math.floor(Math.random() * moves.length)];
// setEventState({ event: event });
timePassedSinceLastKeyPress.current = now - 2500;
}
}
});
const handleKeyPress = useCallback(
(event) => {
const { keyCode } = event;
const keyPress = getKeyCodeAssociation(keyCode);
if (keyPress && props.loaded) {
timePassedSinceLastKeyPress.current = Date.now() + 2500;
const ctx = { ...getMainSceneContext(), keyPress: keyPress };
const event = handleMainSceneEvent(ctx);
mainSceneSetters.forEach((fn) => fn(event));
}
},
[mainSceneSetters, props.loaded]
);
useEffect(() => {
window.addEventListener("keydown", handleKeyPress);
return () => {
window.removeEventListener("keydown", handleKeyPress);
};
}, [handleKeyPress]);
return null;
};
export default MainSceneEventManager;

View file

@ -1,39 +0,0 @@
import React, { useCallback, useEffect, useMemo } from "react";
import { getMediaSceneContext } from "../../store";
import { getKeyCodeAssociation } from "../../utils/keyPressUtils";
import mediaManager from "../setters/media/mediaManager";
import handleMediaSceneEvent from "../mediaSceneEventHandler";
import sceneManager from "../setters/sceneManager";
const MediaSceneEventManager = () => {
const mediaSceneSetters = useMemo(() => [mediaManager, sceneManager], []);
const handleKeyPress = useCallback(
(event) => {
const { keyCode } = event;
const keyPress = getKeyCodeAssociation(keyCode);
if (keyPress) {
const ctx = { ...getMediaSceneContext(), keyPress: keyPress };
const event = handleMediaSceneEvent(ctx);
mediaSceneSetters.forEach((fn) => fn(event));
}
},
[mediaSceneSetters]
);
useEffect(() => {
window.addEventListener("keydown", handleKeyPress);
return () => {
window.removeEventListener("keydown", handleKeyPress);
};
}, [handleKeyPress]);
return null;
};
export default MediaSceneEventManager;

View file

@ -1,39 +0,0 @@
import React, { useCallback, useEffect, useMemo } from "react";
import { getKeyCodeAssociation } from "../../utils/keyPressUtils";
import handleSSknSceneEvent from "../ssknSceneEventHandler";
import { getSSknSceneContext } from "../../store";
import ssknManager from "../setters/sskn/ssknManager";
import sceneManager from "../setters/sceneManager";
const SSknSceneManager = () => {
const ssknSceneSetters = useMemo(() => [ssknManager, sceneManager], []);
const handleKeyPress = useCallback(
(event) => {
const { keyCode } = event;
const keyPress = getKeyCodeAssociation(keyCode);
if (keyPress) {
const ctx = { ...getSSknSceneContext(), keyPress: keyPress };
const event = handleSSknSceneEvent(ctx);
ssknSceneSetters.forEach((fn) => fn(event));
}
},
[ssknSceneSetters]
);
useEffect(() => {
window.addEventListener("keydown", handleKeyPress);
return () => {
window.removeEventListener("keydown", handleKeyPress);
};
}, [handleKeyPress]);
return null;
};
export default SSknSceneManager;

View file

@ -1,77 +0,0 @@
const handleAuthorizeUserEvent = (gameContext: any) => {
const keyPress = gameContext.keyPress;
const bgLettersPos = gameContext.bgLettersPos;
const activeLetterTexOffset = gameContext.activeLetterTexOffset;
const matrixIdx = gameContext.matrixIdx;
const currentSubscene = "authorize_user";
switch (keyPress) {
case "LEFT":
const utmostLeftIndices = [0, 13, 26, 39, 52];
if (utmostLeftIndices.includes(matrixIdx)) {
break;
} else {
return {
event: `${currentSubscene}_left`,
newBgLettersPos: { x: bgLettersPos.x + 0.3, y: bgLettersPos.y },
newActiveLetterTexOffset: {
x: activeLetterTexOffset.x - 0.0775,
y: activeLetterTexOffset.y,
},
newAuthorizeUserMatrixIdx: matrixIdx - 1,
};
}
case "RIGHT":
const utmostRightIndices = [12, 25, 38, 51, 64];
if (utmostRightIndices.includes(matrixIdx)) {
break;
} else {
return {
event: `${currentSubscene}_right`,
newBgLettersPos: { x: bgLettersPos.x - 0.3, y: bgLettersPos.y },
newActiveLetterTexOffset: {
x: activeLetterTexOffset.x + 0.0775,
y: activeLetterTexOffset.y,
},
newAuthorizeUserMatrixIdx: matrixIdx + 1,
};
}
case "DOWN":
const utmostLowIndices = Array.from(new Array(13), (x, i) => i + 52);
if (utmostLowIndices.includes(matrixIdx)) {
break;
} else {
return {
event: `${currentSubscene}_down`,
newBgLettersPos: { x: bgLettersPos.x, y: bgLettersPos.y + 0.25 },
newActiveLetterTexOffset: {
x: activeLetterTexOffset.x,
y: activeLetterTexOffset.y - 0.2,
},
newAuthorizeUserMatrixIdx: matrixIdx + 13,
};
}
case "UP":
const utmostHighIndices = Array.from(new Array(13), (x, i) => i);
if (utmostHighIndices.includes(matrixIdx)) {
break;
} else {
return {
event: `${currentSubscene}_up`,
newBgLettersPos: { x: bgLettersPos.x, y: bgLettersPos.y - 0.25 },
newActiveLetterTexOffset: {
x: activeLetterTexOffset.x,
y: activeLetterTexOffset.y + 0.2,
},
newAuthorizeUserMatrixIdx: matrixIdx - 13,
};
}
case "X": {
return { event: "authorize_user_back" };
}
}
};
export default handleAuthorizeUserEvent;

View file

@ -1,44 +0,0 @@
import handleAuthorizeUserEvent from "./authorizeUserEventHandler";
const handleBootEvent = (gameContext: any) => {
const keyPress = gameContext.keyPress;
const activeBootElement = gameContext.activeBootElement;
const currentSubscene = gameContext.bootSubscene;
const authorizeUserBgLettersPos = gameContext.authorizeUserBgLettersPos;
const authorizeUserActiveLetterTexOffset =
gameContext.authorizeUserActiveLetterTexOffset;
const authorizeUserMatrixIdx = gameContext.authorizeUserMatrixIdx;
if (currentSubscene === "authorize_user") {
return handleAuthorizeUserEvent({
keyPress: keyPress,
bgLettersPos: authorizeUserBgLettersPos,
activeLetterTexOffset: authorizeUserActiveLetterTexOffset,
matrixIdx: authorizeUserMatrixIdx,
});
} else {
switch (keyPress) {
case "DOWN":
case "UP":
case "LEFT":
case "RIGHT":
return {
event: `${currentSubscene}_${keyPress.toLowerCase()}`,
subscene: currentSubscene,
};
case "X":
return {
event: `${currentSubscene}_back`,
subscene: currentSubscene,
};
case "CIRCLE":
return {
event: `${activeBootElement}_select`,
subscene: currentSubscene,
};
}
}
};
export default handleBootEvent;

View file

@ -0,0 +1,100 @@
import { useCallback, useEffect, useMemo, useRef } from "react";
import {
getMainSceneContext,
getMediaSceneContext,
getSSknSceneContext,
useStore,
} from "../../store";
import { getKeyCodeAssociation } from "../../utils/keyPressUtils";
import mediaManager from "../state-management/setters/media/mediaManager";
import handleMediaSceneEvent from "./scene-keypress-handlers/handleMediaKeyPress";
import sceneManager from "../state-management/setters/sceneManager";
import levelSelectionManager from "./setters/main/level_selection/levelSelectionManager";
import nodeManager from "./setters/main/site/nodeManager";
import levelManager from "./setters/main/site/levelManager";
import lainManager from "./setters/main/site/lainManager";
import siteManager from "./setters/main/site/siteManager";
import pauseManager from "./setters/main/pause/pauseManager";
import mainSubsceneManager from "./setters/main/mainSubsceneManager";
import ssknManager from "./setters/sskn/ssknManager";
import handleSSknSceneEvent from "./scene-keypress-handlers/handleSSknKeyPress";
import handleMainSceneEvent from "./scene-keypress-handlers/handleMainKeyPress";
const KeyPressHandler = () => {
const mediaSceneSetters = useMemo(() => [mediaManager, sceneManager], []);
const ssknSceneSetters = useMemo(() => [ssknManager, sceneManager], []);
const mainSceneSetters = useMemo(
() => [
levelSelectionManager,
nodeManager,
levelManager,
lainManager,
siteManager,
pauseManager,
mainSubsceneManager,
sceneManager,
],
[]
);
const scene = useStore((state) => state.currentScene);
const timePassedSinceLastKeyPress = useRef(-1);
const handleKeyPress = useCallback(
(event) => {
const { keyCode } = event;
const keyPress = getKeyCodeAssociation(keyCode);
const now = Date.now();
if (keyPress && now > timePassedSinceLastKeyPress.current + 1500) {
timePassedSinceLastKeyPress.current = Date.now();
const sceneFns = (() => {
switch (scene) {
case "main":
return {
contextProvider: getMainSceneContext,
handler: handleMainSceneEvent,
setters: mainSceneSetters,
};
case "media":
return {
contextProvider: getMediaSceneContext,
handler: handleMediaSceneEvent,
setters: mediaSceneSetters,
};
case "sskn":
return {
contextProvider: getSSknSceneContext,
handler: handleSSknSceneEvent,
setters: ssknSceneSetters,
};
}
})();
if (sceneFns) {
const { contextProvider, handler, setters } = { ...sceneFns };
const ctx = { ...contextProvider(), keyPress: keyPress };
const event = handler(ctx);
setters.forEach((fn) => fn(event));
}
}
},
[mainSceneSetters, mediaSceneSetters, scene, ssknSceneSetters]
);
useEffect(() => {
window.addEventListener("keydown", handleKeyPress);
return () => {
window.removeEventListener("keydown", handleKeyPress);
};
}, [handleKeyPress]);
return null;
};
export default KeyPressHandler;

View file

@ -0,0 +1,33 @@
const handleBootKeyPress = (gameContext: any) => {
const keyPress = gameContext.keyPress;
const activeBootElement = gameContext.activeBootElement;
const currentSubscene = gameContext.bootSubscene;
const authorizeUserBgLettersPos = gameContext.authorizeUserBgLettersPos;
const authorizeUserActiveLetterTexOffset =
gameContext.authorizeUserActiveLetterTexOffset;
const authorizeUserMatrixIdx = gameContext.authorizeUserMatrixIdx;
switch (keyPress) {
case "DOWN":
case "UP":
case "LEFT":
case "RIGHT":
return {
event: `${currentSubscene}_${keyPress.toLowerCase()}`,
subscene: currentSubscene,
};
case "X":
return {
event: `${currentSubscene}_back`,
subscene: currentSubscene,
};
case "CIRCLE":
return {
event: `${activeBootElement}_select`,
subscene: currentSubscene,
};
}
};
export default handleBootKeyPress;

View file

@ -1,4 +1,4 @@
import {findNode, getNodeById} from "../utils/nodeUtils";
import {findNode, getNodeById} from "../../../utils/node-utils";
const handleMainSceneEvent = (mainSceneContext: any) => {
const {

View file

@ -1,4 +1,4 @@
const handleMediaSceneEvent = (mediaSceneContext: any) => {
const handleMediaKeyPress = (mediaSceneContext: any) => {
const {
keyPress,
activeMediaComponent,
@ -65,4 +65,4 @@ const handleMediaSceneEvent = (mediaSceneContext: any) => {
}
};
export default handleMediaSceneEvent;
export default handleMediaKeyPress;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../store";
import { useStore } from "../../../../store";
const bootSubsceneManager = (eventState: any) => {
const setBootSubscene = useStore.getState().setBootSubscene;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../store";
import { useStore } from "../../../../store";
const idleManager = (eventState: any) => {
const dispatchAction = (eventState: {

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../../store";
import { useStore } from "../../../../../store";
const levelSelectionManager = (eventState: any) => {
const setSelectedLevel = useStore.getState().setSelectedLevel;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../store";
import { useStore } from "../../../../store";
const mainSubsceneManager = (eventState: any) => {
const setMainSubscene = useStore.getState().setMainSubscene;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../../store";
import { useStore } from "../../../../../store";
type PauseManagerProps = { event: string; pauseMatrixIdx: number };

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../../store";
import { useStore } from "../../../../../store";
const lainManager = (eventState: any) => {
const setLainMoveState = useStore.getState().setLainMoveState;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../../store";
import { useStore } from "../../../../../store";
const levelManager = (eventState: any) => {
const setActiveLevel = useStore.getState().setActiveLevel;

View file

@ -1,5 +1,5 @@
import { useStore } from "../../../../store";
import { NodeDataType } from "../../../../components/MainScene/SyncedComponents/Site";
import { useStore } from "../../../../../store";
import { NodeDataType } from "../../../../../components/MainScene/SyncedComponents/Site";
const nodeManager = (eventState: any) => {
const setActiveNode = useStore.getState().setNode;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../../store";
import { useStore } from "../../../../../store";
const siteManager = (eventState: any) => {
const setRotY = useStore.getState().setSiteRotY;

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../store";
import { useStore } from "../../../../store";
import { useCallback } from "react";
import * as THREE from "three";

View file

@ -1,4 +1,4 @@
import { useStore } from "../../store";
import { useStore } from "../../../store";
const sceneManager = (eventState: any) => {
const dispatchAction = (eventState: { event: string; scene: string }) => {
@ -38,7 +38,7 @@ const sceneManager = (eventState: any) => {
case "pause_change_select":
return {
action: () =>
useStore.setState({ currentScene: "change_dic", intro: true }),
useStore.setState({ currentScene: "change_disc", intro: true }),
delay: 0,
};
case "play_idle_media":

View file

@ -1,4 +1,4 @@
import { useStore } from "../../../store";
import { useStore } from "../../../../store";
const ssknManager = (eventState: any) => {
const toggleComponentMatrixIdx = useStore.getState()

View file

@ -1,10 +1,10 @@
import React, { useCallback, useEffect, useState } from "react";
import BootAccela from "../components/Boot/BootAccela";
import BootAnimation from "../components/Boot/BootAnimation";
import BootMainMenuComponents from "../components/Boot/BootMainMenuComponents";
import BootAccela from "../components/BootScene/BootAccela";
import BootAnimation from "../components/BootScene/BootAnimation";
import BootMainMenuComponents from "../components/BootScene/BootMainMenuComponents";
import { useStore } from "../store";
import BootAuthorizeUser from "../components/Boot/BootAuthorizeUser";
import BootLoadData from "../components/Boot/BootLoadData";
import BootAuthorizeUser from "../components/BootScene/BootAuthorizeUser";
import BootLoadData from "../components/BootScene/BootLoadData";
const BootScene = () => {
const activeSubscene = useStore((state) => state.bootSubscene);

View file

@ -4,7 +4,6 @@ import { OrbitControls } from "@react-three/drei";
import GateHUD from "../components/GateScene/GateHUD";
import GateMiddleObject from "../components/GateScene/GateMiddleObject";
import { useStore } from "../store";
import GateSceneManager from "../core/StateManagers/GateSceneManager";
const GateScene = () => {
const gateLvl = useStore((state) => state.gateLvl);
@ -23,7 +22,6 @@ const GateScene = () => {
<GateSide />
<GateHUD intro={introAnim} gateLvl={gateLvl} />
<GateMiddleObject intro={introAnim} gateLvl={gateLvl} />
<GateSceneManager />
</perspectiveCamera>
);
};

View file

@ -1,6 +1,6 @@
import { OrbitControls } from "@react-three/drei";
import React, { Suspense, useEffect, useMemo } from "react";
import Preloader from "../components/Preloader";
import Preloader from "../core/Preloader";
import { useStore } from "../store";
import Pause from "../components/MainScene/PauseSubscene/Pause";
import SyncedComponentLoader from "../components/MainScene/SyncedComponentLoader";
@ -22,7 +22,6 @@ const MainScene = () => {
return (
<perspectiveCamera position-z={3}>
<Suspense fallback={null}>
<Preloader />
<LevelSelection />
<Pause />
<SyncedComponentLoader paused={isPaused} shouldIntro={shouldIntro} />

View file

@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useMemo } from "react";
import React, { useEffect } from "react";
import { useStore } from "../store";
import LeftSide from "../components/MediaScene/Selectables/LeftSide";
import RightSide from "../components/MediaScene/Selectables/RightSide";
@ -8,7 +8,6 @@ import NodeNameContainer from "../components/MediaScene/NodeNameContainer";
import Images from "../components/MediaScene/Images";
import GreenTextRenderer from "../components/TextRenderer/GreenTextRenderer";
import MediaYellowTextAnimator from "../components/TextRenderer/MediaYellowTextAnimator";
import MediaSceneEventManager from "../core/StateManagers/MediaSceneEventManager";
const MediaScene = () => {
const activeNodeMedia = useStore((state) => state.activeNode.media_file);
@ -42,7 +41,6 @@ const MediaScene = () => {
<Images />
</group>
</group>
<MediaSceneEventManager />
</perspectiveCamera>
);
};

View file

@ -3,7 +3,6 @@ import SSknIcon from "../components/SSknScene/SSknIcon";
import SSknBackground from "../components/SSknScene/SSknBackground";
import SSknHUD from "../components/SSknScene/SSknHUD";
import { useStore } from "../store";
import SSknSceneManager from "../core/StateManagers/SSknSceneManager";
const SSknScene = () => {
const activeSSknComponent = useStore(
@ -20,7 +19,6 @@ const SSknScene = () => {
<SSknBackground />
<SSknIcon />
<SSknHUD activeSSknComponent={activeSSknComponent} loading={loading} />
<SSknSceneManager />
</>
);
};

View file

@ -3,28 +3,7 @@ import { combine } from "zustand/middleware";
import * as THREE from "three";
import authorize_user_letters from "./resources/authorize_user_letters.json";
import game_progress from "./resources/initial_progress.json";
import { HUDType } from "./components/MainScene/SyncedComponents/HUD";
import { NodeDataType } from "./components/MainScene/SyncedComponents/Site";
import { useCallback } from "react";
type SiteSaveState = {
a: {
activeNodeId: string;
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number };
nodeHudId: string;
siteRotY: number;
sitePosY: number;
level: string;
};
b: {
activeNodeId: string;
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number };
nodeHudId: string;
siteRotY: number;
sitePosY: number;
level: string;
};
};
type State = {
currentScene: string;
@ -379,46 +358,6 @@ export const useStore = create(
)
);
export const useSiteSaveStore = create(
combine(
{
a: {
activeNodeId: "0422",
nodeMatrixIndices: { matrixIdx: 7, rowIdx: 0, colIdx: 0 },
nodeHudId: "fg_hud_1",
siteRotY: 0,
sitePosY: 0,
level: "04",
},
b: {
activeNodeId: "0414",
nodeMatrixIndices: { matrixIdx: 7, rowIdx: 1, colIdx: 0 },
nodeHudId: "fg_hud_2",
siteRotY: 0,
sitePosY: 0,
level: "04",
},
} as SiteSaveState,
(set) => ({
setSiteSaveState: (
site: string,
to: {
activeNodeId: string;
nodeMatrixIndices: {
matrixIdx: number;
rowIdx: number;
colIdx: number;
};
nodeHudId: string;
siteRotY: number;
sitePosY: number;
level: string;
}
) => set(() => ({ [site]: to })),
})
)
);
export const getMainSceneContext = () => {
const state = useStore.getState();

View file

@ -3,7 +3,7 @@ import site_b from "../resources/site_b.json";
import { SiteType } from "../components/MainScene/SyncedComponents/Site";
import { useStore } from "../store";
const getIdleMedia = (site: string) => {
export const getRandomIdleMedia = (site: string) => {
const siteAIdleNodes = {
audio: [
"0000",
@ -81,4 +81,26 @@ const getIdleMedia = (site: string) => {
}
};
export default getIdleMedia;
export const getRandomIdleLainAnim = () => {
const moves = [
"prayer",
"touch_sleeve",
"thinking",
"stretch_2",
"stretch",
"spin",
"scratch_head",
"blush",
"hands_behind_head",
"hands_on_hips",
"hands_on_hips_2",
"hands_together",
"lean_forward",
"lean_left",
"lean_right",
"look_around",
"play_with_hair",
];
return moves[Math.floor(Math.random() * moves.length)];
};