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 gameLoader from "../core/setters/gameLoader";
|
||||
import gameSaver from "../core/setters/gameSaver";
|
||||
import progressManager from "../core/setters/progressManager";
|
||||
|
||||
const KeyPressHandler = () => {
|
||||
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(
|
||||
() => [
|
||||
levelSelectionManager,
|
||||
|
|
|
@ -2,11 +2,8 @@ import React, { memo, useEffect, useState } from "react";
|
|||
import Node from "./Node";
|
||||
import node_positions from "../../../../resources/node_positions.json";
|
||||
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 usePrevious from "../../../../hooks/usePrevious";
|
||||
import {isNodeVisible} from "../../../../utils/node-utils";
|
||||
|
||||
type ActiveLevelNodesProps = {
|
||||
visibleNodes: SiteType;
|
||||
|
|
|
@ -44,7 +44,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
|||
<spriteMaterial
|
||||
attach="material"
|
||||
map={
|
||||
props.activeSSknComponent === "sskn_ok"
|
||||
props.activeSSknComponent === "ok"
|
||||
? ssknOkTex
|
||||
: ssknOkInactiveTex
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
|||
<spriteMaterial
|
||||
attach="material"
|
||||
map={
|
||||
props.activeSSknComponent === "sskn_cancel"
|
||||
props.activeSSknComponent === "cancel"
|
||||
? ssknCancelTex
|
||||
: ssknCancelInactiveTex
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
|||
<spriteMaterial
|
||||
attach="material"
|
||||
map={
|
||||
props.activeSSknComponent === "sskn_ok"
|
||||
props.activeSSknComponent === "ok"
|
||||
? ssknTextWrapperTex
|
||||
: ssknTextWrapperInactiveTex
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ const SSknHUD = memo((props: SSknHUDProps) => {
|
|||
<spriteMaterial
|
||||
attach="material"
|
||||
map={
|
||||
props.activeSSknComponent === "sskn_cancel"
|
||||
props.activeSSknComponent === "cancel"
|
||||
? ssknTextWrapperTex
|
||||
: ssknTextWrapperInactiveTex
|
||||
}
|
||||
|
|
|
@ -82,7 +82,14 @@ const handleMediaKeyPress = (mediaSceneContext: any) => {
|
|||
return;
|
||||
}
|
||||
default:
|
||||
return { event: `media_${activeMediaComponent}_select` };
|
||||
if (activeMediaComponent === "play") {
|
||||
return {
|
||||
event: `media_${activeMediaComponent}_select`,
|
||||
node: activeNode,
|
||||
};
|
||||
} else {
|
||||
return { event: `media_${activeMediaComponent}_select` };
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const handleSSknSceneEvent = (ssknSceneContext: any) => {
|
||||
const { keyPress, activeSSknComponent } = ssknSceneContext;
|
||||
|
||||
const { keyPress, activeSSknComponent, activeNode } = ssknSceneContext;
|
||||
|
||||
switch (keyPress) {
|
||||
case "UP":
|
||||
case "DOWN":
|
||||
|
@ -8,9 +8,16 @@ const handleSSknSceneEvent = (ssknSceneContext: any) => {
|
|||
event: `${activeSSknComponent}_${keyPress.toLowerCase()}`,
|
||||
};
|
||||
case "CIRCLE":
|
||||
return {
|
||||
event: `${activeSSknComponent}_select`,
|
||||
};
|
||||
if (activeSSknComponent === "ok") {
|
||||
return {
|
||||
event: `sskn_${activeSSknComponent}_select`,
|
||||
nodeName: activeNode.node_name,
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
event: `${activeSSknComponent}_select`,
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
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;
|
||||
|
||||
// sskn scene
|
||||
ssknComponentMatrix: ["sskn_ok", "sskn_cancel"];
|
||||
ssknComponentMatrix: ["ok", "cancel"];
|
||||
ssknComponentMatrixIdx: 0 | 1;
|
||||
ssknLoading: boolean;
|
||||
|
||||
|
@ -212,7 +212,7 @@ export const useStore = create(
|
|||
idleImages: undefined,
|
||||
|
||||
// sskn scene
|
||||
ssknComponentMatrix: ["sskn_ok", "sskn_cancel"],
|
||||
ssknComponentMatrix: ["ok", "cancel"],
|
||||
ssknComponentMatrixIdx: 0,
|
||||
ssknLoading: false,
|
||||
|
||||
|
@ -416,7 +416,6 @@ export const useStore = create(
|
|||
set((state) => ({
|
||||
siteSaveState: { ...state.siteSaveState, [site]: to },
|
||||
})),
|
||||
|
||||
loadSiteSaveState: (site: "a" | "b") =>
|
||||
set((state) => {
|
||||
const stateToLoad = state.siteSaveState[site];
|
||||
|
@ -427,6 +426,18 @@ export const useStore = create(
|
|||
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 {
|
||||
activeSSknComponent:
|
||||
state.ssknComponentMatrix[state.ssknComponentMatrixIdx],
|
||||
activeNode: state.activeNode,
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -65,14 +65,20 @@ export const getNodeHud = (nodeMatrixIndices: {
|
|||
export const isNodeVisible = (
|
||||
node: NodeDataType,
|
||||
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 === "" ||
|
||||
gameProgress[node.unlocked_by as keyof typeof gameProgress]
|
||||
.is_viewed) &&
|
||||
gameProgress[node.node_name as keyof typeof gameProgress].is_visible &&
|
||||
node.required_final_video_viewcount < 1
|
||||
gameProgress[node.node_name as keyof typeof gameProgress].is_visible &&
|
||||
node.required_final_video_viewcount < 1
|
||||
: false;
|
||||
};
|
||||
|
||||
export const getVisibleNodesMatrix = (
|
||||
matrixIdx: number,
|
||||
|
|
Loading…
Reference in a new issue