mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
started game progression
This commit is contained in:
parent
a80cf992bb
commit
65a1ebc6d4
9 changed files with 801 additions and 738 deletions
|
@ -21,13 +21,24 @@ import handleSSknSceneEvent from "../core/scene-keypress-handlers/handleSSknKeyP
|
||||||
import handleMainSceneEvent from "../core/scene-keypress-handlers/handleMainKeyPress";
|
import handleMainSceneEvent from "../core/scene-keypress-handlers/handleMainKeyPress";
|
||||||
import gameLoader from "../core/setters/gameLoader";
|
import gameLoader from "../core/setters/gameLoader";
|
||||||
import gameSaver from "../core/setters/gameSaver";
|
import gameSaver from "../core/setters/gameSaver";
|
||||||
|
import progressManager from "../core/setters/progressManager";
|
||||||
|
|
||||||
const KeyPressHandler = () => {
|
const KeyPressHandler = () => {
|
||||||
const mediaSceneSetters = useMemo(
|
const mediaSceneSetters = useMemo(
|
||||||
() => [mediaManager, sceneManager, nodeManager, levelManager, siteManager],
|
() => [
|
||||||
|
mediaManager,
|
||||||
|
sceneManager,
|
||||||
|
nodeManager,
|
||||||
|
levelManager,
|
||||||
|
siteManager,
|
||||||
|
progressManager,
|
||||||
|
],
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
const ssknSceneSetters = useMemo(
|
||||||
|
() => [ssknManager, sceneManager, progressManager],
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
const ssknSceneSetters = useMemo(() => [ssknManager, sceneManager], []);
|
|
||||||
const mainSceneSetters = useMemo(
|
const mainSceneSetters = useMemo(
|
||||||
() => [
|
() => [
|
||||||
levelSelectionManager,
|
levelSelectionManager,
|
||||||
|
|
|
@ -2,11 +2,8 @@ import React, { memo, useEffect, useState } from "react";
|
||||||
import Node from "./Node";
|
import Node from "./Node";
|
||||||
import node_positions from "../../../../resources/node_positions.json";
|
import node_positions from "../../../../resources/node_positions.json";
|
||||||
import { useStore } from "../../../../store";
|
import { useStore } from "../../../../store";
|
||||||
import site_a from "../../../../resources/site_a.json";
|
|
||||||
import site_b from "../../../../resources/site_b.json";
|
|
||||||
import { NodeDataType, SiteType } from "../Site";
|
import { NodeDataType, SiteType } from "../Site";
|
||||||
import usePrevious from "../../../../hooks/usePrevious";
|
import usePrevious from "../../../../hooks/usePrevious";
|
||||||
import {isNodeVisible} from "../../../../utils/node-utils";
|
|
||||||
|
|
||||||
type ActiveLevelNodesProps = {
|
type ActiveLevelNodesProps = {
|
||||||
visibleNodes: SiteType;
|
visibleNodes: SiteType;
|
||||||
|
|
|
@ -44,7 +44,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
||||||
<spriteMaterial
|
<spriteMaterial
|
||||||
attach="material"
|
attach="material"
|
||||||
map={
|
map={
|
||||||
props.activeSSknComponent === "sskn_ok"
|
props.activeSSknComponent === "ok"
|
||||||
? ssknOkTex
|
? ssknOkTex
|
||||||
: ssknOkInactiveTex
|
: ssknOkInactiveTex
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
||||||
<spriteMaterial
|
<spriteMaterial
|
||||||
attach="material"
|
attach="material"
|
||||||
map={
|
map={
|
||||||
props.activeSSknComponent === "sskn_cancel"
|
props.activeSSknComponent === "cancel"
|
||||||
? ssknCancelTex
|
? ssknCancelTex
|
||||||
: ssknCancelInactiveTex
|
: ssknCancelInactiveTex
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
||||||
<spriteMaterial
|
<spriteMaterial
|
||||||
attach="material"
|
attach="material"
|
||||||
map={
|
map={
|
||||||
props.activeSSknComponent === "sskn_ok"
|
props.activeSSknComponent === "ok"
|
||||||
? ssknTextWrapperTex
|
? ssknTextWrapperTex
|
||||||
: ssknTextWrapperInactiveTex
|
: ssknTextWrapperInactiveTex
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
||||||
<spriteMaterial
|
<spriteMaterial
|
||||||
attach="material"
|
attach="material"
|
||||||
map={
|
map={
|
||||||
props.activeSSknComponent === "sskn_cancel"
|
props.activeSSknComponent === "cancel"
|
||||||
? ssknTextWrapperTex
|
? ssknTextWrapperTex
|
||||||
: ssknTextWrapperInactiveTex
|
: ssknTextWrapperInactiveTex
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,9 +82,16 @@ const handleMediaKeyPress = (mediaSceneContext: any) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
if (activeMediaComponent === "play") {
|
||||||
|
return {
|
||||||
|
event: `media_${activeMediaComponent}_select`,
|
||||||
|
node: activeNode,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
return { event: `media_${activeMediaComponent}_select` };
|
return { event: `media_${activeMediaComponent}_select` };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default handleMediaKeyPress;
|
export default handleMediaKeyPress;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const handleSSknSceneEvent = (ssknSceneContext: any) => {
|
const handleSSknSceneEvent = (ssknSceneContext: any) => {
|
||||||
const { keyPress, activeSSknComponent } = ssknSceneContext;
|
const { keyPress, activeSSknComponent, activeNode } = ssknSceneContext;
|
||||||
|
|
||||||
switch (keyPress) {
|
switch (keyPress) {
|
||||||
case "UP":
|
case "UP":
|
||||||
|
@ -8,10 +8,17 @@ const handleSSknSceneEvent = (ssknSceneContext: any) => {
|
||||||
event: `${activeSSknComponent}_${keyPress.toLowerCase()}`,
|
event: `${activeSSknComponent}_${keyPress.toLowerCase()}`,
|
||||||
};
|
};
|
||||||
case "CIRCLE":
|
case "CIRCLE":
|
||||||
|
if (activeSSknComponent === "ok") {
|
||||||
|
return {
|
||||||
|
event: `sskn_${activeSSknComponent}_select`,
|
||||||
|
nodeName: activeNode.node_name,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
return {
|
return {
|
||||||
event: `${activeSSknComponent}_select`,
|
event: `${activeSSknComponent}_select`,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default handleSSknSceneEvent;
|
export default handleSSknSceneEvent;
|
||||||
|
|
23
src/core/setters/progressManager.ts
Normal file
23
src/core/setters/progressManager.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import { useStore } from "../../store";
|
||||||
|
|
||||||
|
const progressManager = (eventState: any) => {
|
||||||
|
const updateNodeViewed = useStore.getState().setNodeViewed;
|
||||||
|
|
||||||
|
const dispatchAction = (eventState: { event: string; nodeName: string }) => {
|
||||||
|
switch (eventState.event) {
|
||||||
|
case "media_exit_select":
|
||||||
|
case "sskn_ok_select":
|
||||||
|
return {
|
||||||
|
action: () => updateNodeViewed(eventState.nodeName),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const { action } = { ...dispatchAction(eventState) };
|
||||||
|
|
||||||
|
if (action) {
|
||||||
|
action();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default progressManager;
|
File diff suppressed because it is too large
Load diff
18
src/store.ts
18
src/store.ts
|
@ -62,7 +62,7 @@ type State = {
|
||||||
idleImages: any;
|
idleImages: any;
|
||||||
|
|
||||||
// sskn scene
|
// sskn scene
|
||||||
ssknComponentMatrix: ["sskn_ok", "sskn_cancel"];
|
ssknComponentMatrix: ["ok", "cancel"];
|
||||||
ssknComponentMatrixIdx: 0 | 1;
|
ssknComponentMatrixIdx: 0 | 1;
|
||||||
ssknLoading: boolean;
|
ssknLoading: boolean;
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ export const useStore = create(
|
||||||
idleImages: undefined,
|
idleImages: undefined,
|
||||||
|
|
||||||
// sskn scene
|
// sskn scene
|
||||||
ssknComponentMatrix: ["sskn_ok", "sskn_cancel"],
|
ssknComponentMatrix: ["ok", "cancel"],
|
||||||
ssknComponentMatrixIdx: 0,
|
ssknComponentMatrixIdx: 0,
|
||||||
ssknLoading: false,
|
ssknLoading: false,
|
||||||
|
|
||||||
|
@ -416,7 +416,6 @@ export const useStore = create(
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
siteSaveState: { ...state.siteSaveState, [site]: to },
|
siteSaveState: { ...state.siteSaveState, [site]: to },
|
||||||
})),
|
})),
|
||||||
|
|
||||||
loadSiteSaveState: (site: "a" | "b") =>
|
loadSiteSaveState: (site: "a" | "b") =>
|
||||||
set((state) => {
|
set((state) => {
|
||||||
const stateToLoad = state.siteSaveState[site];
|
const stateToLoad = state.siteSaveState[site];
|
||||||
|
@ -427,6 +426,18 @@ export const useStore = create(
|
||||||
activeLevel: stateToLoad.activeLevel,
|
activeLevel: stateToLoad.activeLevel,
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
// progress setters
|
||||||
|
setNodeViewed: (nodeName: string) =>
|
||||||
|
set((state) => ({
|
||||||
|
gameProgress: {
|
||||||
|
...state.gameProgress,
|
||||||
|
[nodeName]: {
|
||||||
|
is_viewed: 1,
|
||||||
|
is_visible: nodeName.includes("SSkn") ? 0 : 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})),
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -463,6 +474,7 @@ export const getSSknSceneContext = () => {
|
||||||
return {
|
return {
|
||||||
activeSSknComponent:
|
activeSSknComponent:
|
||||||
state.ssknComponentMatrix[state.ssknComponentMatrixIdx],
|
state.ssknComponentMatrix[state.ssknComponentMatrixIdx],
|
||||||
|
activeNode: state.activeNode,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -65,14 +65,20 @@ export const getNodeHud = (nodeMatrixIndices: {
|
||||||
export const isNodeVisible = (
|
export const isNodeVisible = (
|
||||||
node: NodeDataType,
|
node: NodeDataType,
|
||||||
gameProgress: typeof unlocked_nodes
|
gameProgress: typeof unlocked_nodes
|
||||||
) =>
|
) => {
|
||||||
node
|
// if (node && node.node_name === "SSkn01") {
|
||||||
|
// console.log(
|
||||||
|
// gameProgress[node.node_name as keyof typeof gameProgress].is_visible
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
return node
|
||||||
? (node.unlocked_by === "" ||
|
? (node.unlocked_by === "" ||
|
||||||
gameProgress[node.unlocked_by as keyof typeof gameProgress]
|
gameProgress[node.unlocked_by as keyof typeof gameProgress]
|
||||||
.is_viewed) &&
|
.is_viewed) &&
|
||||||
gameProgress[node.node_name as keyof typeof gameProgress].is_visible &&
|
gameProgress[node.node_name as keyof typeof gameProgress].is_visible &&
|
||||||
node.required_final_video_viewcount < 1
|
node.required_final_video_viewcount < 1
|
||||||
: false;
|
: false;
|
||||||
|
};
|
||||||
|
|
||||||
export const getVisibleNodesMatrix = (
|
export const getVisibleNodesMatrix = (
|
||||||
matrixIdx: number,
|
matrixIdx: number,
|
||||||
|
|
Loading…
Reference in a new issue