started game progression

This commit is contained in:
ad044 2021-02-04 23:01:50 +04:00
parent a80cf992bb
commit 65a1ebc6d4
9 changed files with 801 additions and 738 deletions

View file

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

View file

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

View file

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

View file

@ -82,7 +82,14 @@ const handleMediaKeyPress = (mediaSceneContext: any) => {
return; return;
} }
default: default:
return { event: `media_${activeMediaComponent}_select` }; if (activeMediaComponent === "play") {
return {
event: `media_${activeMediaComponent}_select`,
node: activeNode,
};
} else {
return { event: `media_${activeMediaComponent}_select` };
}
} }
} }
}; };

View file

@ -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,9 +8,16 @@ const handleSSknSceneEvent = (ssknSceneContext: any) => {
event: `${activeSSknComponent}_${keyPress.toLowerCase()}`, event: `${activeSSknComponent}_${keyPress.toLowerCase()}`,
}; };
case "CIRCLE": case "CIRCLE":
return { if (activeSSknComponent === "ok") {
event: `${activeSSknComponent}_select`, return {
}; event: `sskn_${activeSSknComponent}_select`,
nodeName: activeNode.node_name,
};
} else {
return {
event: `${activeSSknComponent}_select`,
};
}
} }
}; };

View 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

View file

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

View file

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