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

View file

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

View file

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

View file

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

View file

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

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

View file

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