code improvmeents wip

This commit is contained in:
ad044 2021-01-17 19:32:55 +04:00
parent c6040ba5cb
commit 34ec928099
9 changed files with 183 additions and 122 deletions

View file

@ -13,6 +13,7 @@ import PolytanScene from "./scenes/PolytanScene";
import TaKScene from "./scenes/TaKScene"; import TaKScene from "./scenes/TaKScene";
import ChangeDiscScene from "./scenes/ChangeDiscScene"; import ChangeDiscScene from "./scenes/ChangeDiscScene";
import EndScene from "./scenes/EndScene"; import EndScene from "./scenes/EndScene";
import IdleMediaScene from "./scenes/IdleMediaScene";
const App = () => { const App = () => {
const currentScene = useSceneStore((state) => state.currentScene); const currentScene = useSceneStore((state) => state.currentScene);
@ -25,7 +26,7 @@ const App = () => {
return { return {
main: <MainScene />, main: <MainScene />,
media: <MediaScene />, media: <MediaScene />,
idle_media: <MediaScene />, idle_media: <IdleMediaScene />,
gate: <GateScene />, gate: <GateScene />,
boot: <BootScene />, boot: <BootScene />,
sskn: <SSknScene />, sskn: <SSknScene />,

View file

@ -6,6 +6,31 @@ import GrayPlane from "./GrayPlanes/GrayPlane";
const GrayPlanes = () => { const GrayPlanes = () => {
const grayPlaneGroupRef = useRef<THREE.Object3D>(); const grayPlaneGroupRef = useRef<THREE.Object3D>();
const grayPlanesGeom = useMemo(() => {
const singleGeom = new THREE.Geometry();
const grayPlanePoses = [
[1.2, 0, -1.2],
[1.2, 0, 1.2],
[1.2, 0, -0.5],
[-1.2, 0, -1.2],
[-1.2, 0, 1.2],
[-1.2, 0, 1],
[0.5, 0, 1],
];
for (let i = 0; i < grayPlanePoses.length; i++) {
const mesh = new THREE.Mesh(new THREE.PlaneBufferGeometry());
mesh.position.set(
grayPlanePoses[i][0],
grayPlanePoses[i][1],
grayPlanePoses[i][2]
);
}
return singleGeom;
}, []);
const grayPlanePoses = useMemo( const grayPlanePoses = useMemo(
() => [ () => [
[1.2, 0, -1.2], [1.2, 0, -1.2],
@ -28,6 +53,15 @@ const GrayPlanes = () => {
{grayPlanePoses.map((pos, idx: number) => ( {grayPlanePoses.map((pos, idx: number) => (
<GrayPlane position={pos as [number, number, number]} key={idx} /> <GrayPlane position={pos as [number, number, number]} key={idx} />
))} ))}
{/*<mesh geometry={grayPlanesGeom}>*/}
{/* <meshBasicMaterial*/}
{/* attach="material"*/}
{/* color={0xd3d3d3}*/}
{/* opacity={0.2}*/}
{/* transparent={true}*/}
{/* side={THREE.DoubleSide}*/}
{/* />*/}
{/*</mesh>*/}
</group> </group>
); );
}; };

View file

@ -67,6 +67,12 @@ const HUD = () => {
] ]
); );
const spriteTypeToSprite = useMemo(()=> {
}, [])
//todo
const spriteTypeToSprite = (spriteType: string, hudElement: string) => { const spriteTypeToSprite = (spriteType: string, hudElement: string) => {
switch (spriteType) { switch (spriteType) {
case "normal": case "normal":

View file

@ -1,4 +1,4 @@
import React, { useEffect, useMemo, useRef } from "react"; import React, { useEffect, useMemo, useRef, memo } from "react";
import { useFrame, useLoader } from "react-three-fiber"; import { useFrame, useLoader } from "react-three-fiber";
import { a, useSpring } from "@react-spring/three"; import { a, useSpring } from "@react-spring/three";
import * as THREE from "three"; import * as THREE from "three";
@ -34,7 +34,7 @@ type NodeContructorProps = {
level: string; level: string;
}; };
const Node = (props: NodeContructorProps) => { const Node = memo((props: NodeContructorProps) => {
// the game only has a couple of sprite that it displays in the hub // the game only has a couple of sprite that it displays in the hub
// dynamically importnig them would be worse for performance, // dynamically importnig them would be worse for performance,
// so we import all of them here and then use this function to // so we import all of them here and then use this function to
@ -139,9 +139,7 @@ const Node = (props: NodeContructorProps) => {
activeNodeRotZ: useNodeStore.getState().activeNodeState.interactedWith activeNodeRotZ: useNodeStore.getState().activeNodeState.interactedWith
? useNodeStore.getState().activeNodeState.rotZ ? useNodeStore.getState().activeNodeState.rotZ
: 0, : 0,
activeNodeScale: useNodeStore.getState().activeNodeState.shrinking activeNodeScale: useNodeStore.getState().activeNodeState.shrinking ? 0 : 1,
? 0
: 1,
activeNodeVisible: true, activeNodeVisible: true,
config: { duration: 800 }, config: { duration: 800 },
})); }));
@ -182,6 +180,8 @@ const Node = (props: NodeContructorProps) => {
} }
}); });
console.log("rendered");
return ( return (
<group <group
position={[ position={[
@ -239,6 +239,6 @@ const Node = (props: NodeContructorProps) => {
)} )}
</group> </group>
); );
}; });
export default Node; export default Node;

View file

@ -69,6 +69,10 @@ const MediaPlayer = () => {
setPercentageElapsed(percentageElapsed); setPercentageElapsed(percentageElapsed);
if (percentageElapsed === 100) { if (percentageElapsed === 100) {
videoRef.current.currentTime = 0; videoRef.current.currentTime = 0;
if (currentScene === "idle_media") {
videoRef.current.pause();
setScene("main");
} else {
if (currentScene === "end") { if (currentScene === "end") {
incrementEndMediaPlayedCount(); incrementEndMediaPlayedCount();
} else { } else {
@ -85,6 +89,7 @@ const MediaPlayer = () => {
} }
} }
} }
}
}, [ }, [
activeLevel, activeLevel,
activeNodeId, activeNodeId,
@ -165,6 +170,7 @@ const MediaPlayer = () => {
setMediaSource(media.default); setMediaSource(media.default);
if (videoRef.current) { if (videoRef.current) {
videoRef.current.load(); videoRef.current.load();
videoRef.current.play();
} }
}); });
} else { } else {
@ -173,6 +179,7 @@ const MediaPlayer = () => {
setMediaSource(media.default); setMediaSource(media.default);
if (videoRef.current) { if (videoRef.current) {
videoRef.current.load(); videoRef.current.load();
videoRef.current.play();
} }
} }
); );

View file

@ -5,9 +5,10 @@ import * as THREE from "three";
import { useLoader } from "react-three-fiber"; import { useLoader } from "react-three-fiber";
import orange_font_json from "../../resources/font_data/big_font.json"; import orange_font_json from "../../resources/font_data/big_font.json";
import { a, useSpring } from "@react-spring/three"; import { a, useSpring } from "@react-spring/three";
import React, { useMemo } from "react"; import React, { useMemo, memo } from "react";
const BigLetter = (props: { const BigLetter = memo(
(props: {
color: string; color: string;
letter: string; letter: string;
letterIdx: number; letterIdx: number;
@ -110,6 +111,7 @@ const BigLetter = (props: {
/> />
</a.mesh> </a.mesh>
); );
}; }
);
export default BigLetter; export default BigLetter;

View file

@ -3,12 +3,9 @@ import * as THREE from "three";
import greenFont from "../../static/sprite/white_and_green_texture.png"; import greenFont from "../../static/sprite/white_and_green_texture.png";
import medium_font_json from "../../resources/font_data/medium_font.json"; import medium_font_json from "../../resources/font_data/medium_font.json";
import { a } from "@react-spring/three"; import { a } from "@react-spring/three";
import React, { useMemo } from "react"; import React, { useMemo, memo } from "react";
const MediumLetter = (props: { const MediumLetter = memo((props: { letter: string; letterIdx: number }) => {
letter: string;
letterIdx: number;
}) => {
const colorTexture = useLoader(THREE.TextureLoader, greenFont); const colorTexture = useLoader(THREE.TextureLoader, greenFont);
// i have yet to figure out a genrealizable way of // i have yet to figure out a genrealizable way of
// calculating the y offset, this shit will do for now // calculating the y offset, this shit will do for now
@ -88,6 +85,6 @@ const MediumLetter = (props: {
/> />
</a.mesh> </a.mesh>
); );
}; });
export default MediumLetter; export default MediumLetter;

View file

@ -0,0 +1,24 @@
import React, { useEffect } from "react";
import { useIdleStore } from "../store";
import Images from "../components/MediaScene/Images";
const IdleMediaScene = () => {
const idleMedia = useIdleStore((state) => state.media);
useEffect(() => {
document.getElementsByTagName("canvas")[0].className =
"media-scene-background";
return () => {
document.getElementsByTagName("canvas")[0].className = "";
};
}, []);
return (
<group visible={idleMedia.includes("XA")}>
<Images />
</group>
);
};
export default IdleMediaScene;

View file

@ -76,22 +76,12 @@ const MediaScene = () => {
</group> </group>
<MediaYellowTextAnimator /> <MediaYellowTextAnimator />
<group <group visible={activeNodeMedia.includes("XA")}>
visible={
currentScene !== "idle_media" && activeNodeMedia.includes("XA")
}
>
<RightSide activeMediaComponent={activeMediaComponent} /> <RightSide activeMediaComponent={activeMediaComponent} />
<Lof /> <Lof />
<AudioVisualizer /> <AudioVisualizer />
<Images /> <Images />
</group> </group>
<group
visible={currentScene === "idle_media" && idleMedia.includes("XA")}
>
<Images />
</group>
</group> </group>
<MediaSceneEventManager /> <MediaSceneEventManager />
</perspectiveCamera> </perspectiveCamera>