fixed more typing.

This commit is contained in:
ad044 2020-09-09 15:49:33 +04:00
parent 42e73badde
commit 1fae1488b7
9 changed files with 86 additions and 49 deletions

View file

@ -25,27 +25,46 @@ import OrthoCamera from "./OrthoCamera";
import Preloader from "./Preloader"; import Preloader from "./Preloader";
import Starfield from "./Starfield"; import Starfield from "./Starfield";
import * as THREE from "three"; import * as THREE from "three";
import Orb from "./Orb";
type KeyCodeAssociations = { type KeyCodeAssociations = {
[keyCode: number]: string; [keyCode: number]: string;
}; };
type SpriteDirectionData = {
[direction: string]: string;
};
type SpriteDirections = { type SpriteDirections = {
[key: string]: Record<string, string>; [sprite_id: string]: SpriteDirectionData;
};
type HudShapeData = {
position: number[];
scale: number[];
type: string;
initial_position: number[];
};
type SpriteHudData = {
long: HudShapeData;
boring: HudShapeData;
big: HudShapeData;
}; };
// will fix the typing on this later
type SpriteHuds = { type SpriteHuds = {
[key: string]: Record<string, any> | any; [sprite_hud_id: string]: SpriteHudData;
}; };
type LainAnimationData = {
frame_count: number;
duration: number;
};
type LainAnimations = { type LainAnimations = {
[key: string]: Record<string, number>; [sprite: string]: LainAnimationData;
}; };
const Game = () => { const Game = () => {
const [isIntro, setIsIntro] = useState(true); const [isIntro, setIsIntro] = useState(false);
const [isLainMoving, setLainMoving] = useState(false); const [isLainMoving, setLainMoving] = useState(false);
const [lainMoveState, setLainMoveState] = useState(<LainStanding />); const [lainMoveState, setLainMoveState] = useState(<LainStanding />);
@ -53,7 +72,7 @@ const Game = () => {
const [orthoCameraPosY, setOrthoCameraPosY] = useState(0); const [orthoCameraPosY, setOrthoCameraPosY] = useState(0);
const [currentSprite, setCurrentSprite] = useState("0422"); const [currentSprite, setCurrentSprite] = useState("0422");
const [currentSpriteHUD, setCurrentSpriteHUD] = useState<SpriteHuds>( const [currentSpriteHUD, setCurrentSpriteHUD] = useState<SpriteHudData>(
(level_sprite_huds as SpriteHuds)[currentSprite.substr(2)] (level_sprite_huds as SpriteHuds)[currentSprite.substr(2)]
); );
const [spriteUpdateCooldown, setSpriteUpdateCooldown] = useState(false); const [spriteUpdateCooldown, setSpriteUpdateCooldown] = useState(false);
@ -313,19 +332,6 @@ const Game = () => {
[isLainMoving, currentSprite, moveDispatcher] [isLainMoving, currentSprite, moveDispatcher]
); );
const doIntro = useCallback(() => {
setLainMoving(true);
setLainMoveState(<LainIntro />);
updateHUD();
setTimeout(() => {
setLainMoving(false);
setLainMoveState(<LainStanding />);
setIsIntro(false);
updateHUD();
}, (lain_animations as LainAnimations)["intro"]["duration"]);
}, [updateHUD]);
useEffect(() => { useEffect(() => {
window.addEventListener("keydown", handleKeyPress); window.addEventListener("keydown", handleKeyPress);
@ -351,13 +357,30 @@ const Game = () => {
if (groupRef.current!.position.y > 0) { if (groupRef.current!.position.y > 0) {
groupRef.current!.position.y -= 0.015; groupRef.current!.position.y -= 0.015;
} }
if (groupRef.current!.position.z < 0) { if (groupRef.current!.position.z < 0) {
groupRef.current!.position.z += 0.04; groupRef.current!.position.z += 0.04;
} }
// if the rotation hits this value that means that the intro is finished.
// using a settimeout or something similar resulted in clunkiness, since it was dependant
// on load times.
if (parseFloat(groupRef.current!.rotation.x.toPrecision(2)) === -0.005) {
updateHUD();
setLainMoving(false);
setLainMoveState(<LainStanding />);
setIsIntro(false);
}
} }
}); });
useEffect(doIntro, []); // on load, move the hud to the right (out of vision), and set lain sprite to intro
useEffect(() => {
setIsIntro(true);
updateHUD();
setLainMoving(true);
setLainMoveState(<LainIntro />);
}, [updateHUD]);
// pos-z ? => 3 // pos-z ? => 3
// rot-x 1.5 => 0 // rot-x 1.5 => 0
@ -391,12 +414,19 @@ const Game = () => {
longHUDType={currentSpriteHUD!["long"]["type"]} longHUDType={currentSpriteHUD!["long"]["type"]}
boringHUDType={currentSpriteHUD!["boring"]["type"]} boringHUDType={currentSpriteHUD!["boring"]["type"]}
bigHUDType={currentSpriteHUD!["big"]["type"]} bigHUDType={currentSpriteHUD!["big"]["type"]}
longHUDScale={currentSpriteHUD!["long"]["scale"]} longHUDScale={
boringHUDScale={currentSpriteHUD!["boring"]["scale"]} currentSpriteHUD!["long"]["scale"] as [number, number, number]
bigHUDScale={currentSpriteHUD!["big"]["scale"]} }
boringHUDScale={
currentSpriteHUD!["boring"]["scale"] as [number, number, number]
}
bigHUDScale={
currentSpriteHUD!["big"]["scale"] as [number, number, number]
}
orthoCameraPosY={orthoCameraPosY} orthoCameraPosY={orthoCameraPosY}
id={currentSpriteHUD!["id"]} id={currentSprite}
orbVisibility={!isIntro} orbVisibility={!isIntro}
hudVisibility={!isIntro}
/> />
<Starfield starfieldPosY={starfieldPosY} /> <Starfield starfieldPosY={starfieldPosY} />
<Lights /> <Lights />

View file

@ -7,7 +7,6 @@ import longHud from "../static/sprites/long_hud.png";
import longHudMirrored from "../static/sprites/long_hud_mirrored.png"; import longHudMirrored from "../static/sprites/long_hud_mirrored.png";
import boringHud from "../static/sprites/long_hud_boring.png"; import boringHud from "../static/sprites/long_hud_boring.png";
import boringHudMirrored from "../static/sprites/long_hud_boring_mirrored.png"; import boringHudMirrored from "../static/sprites/long_hud_boring_mirrored.png";
import { PositionAndScaleProps } from "./Hub";
import { a, Interpolation } from "@react-spring/three"; import { a, Interpolation } from "@react-spring/three";
export type HUDElementProps = { export type HUDElementProps = {
@ -17,17 +16,19 @@ export type HUDElementProps = {
longHUDPosYZ: [number, number]; longHUDPosYZ: [number, number];
longHUDPosX: Interpolation<number, number>; longHUDPosX: Interpolation<number, number>;
longHUDScale: PositionAndScaleProps; longHUDScale: [number, number, number];
// boringHudPosition: PositionAndScaleProps; // boringHudPosition: [number, number, number];
boringHUDPosX: Interpolation<number, number>; boringHUDPosX: Interpolation<number, number>;
boringHUDPosYZ: [number, number]; boringHUDPosYZ: [number, number];
boringHUDScale: PositionAndScaleProps; boringHUDScale: [number, number, number];
// bigHudPosition: PositionAndScaleProps; // bigHudPosition: [number, number, number];
bigHUDPosX: Interpolation<number, number>; bigHUDPosX: Interpolation<number, number>;
bigHUDPosYZ: [number, number]; bigHUDPosYZ: [number, number];
bigHUDScale: PositionAndScaleProps; bigHUDScale: [number, number, number];
hudVisibility: boolean;
}; };
const HUDElement = memo((props: HUDElementProps) => { const HUDElement = memo((props: HUDElementProps) => {
@ -74,7 +75,7 @@ const HUDElement = memo((props: HUDElementProps) => {
); );
return ( return (
<> <group visible={props.hudVisibility}>
<a.sprite <a.sprite
position-y={props.longHUDPosYZ[0]} position-y={props.longHUDPosYZ[0]}
position-z={props.longHUDPosYZ[1]} position-z={props.longHUDPosYZ[1]}
@ -111,7 +112,7 @@ const HUDElement = memo((props: HUDElementProps) => {
transparent={true} transparent={true}
/> />
</a.sprite> </a.sprite>
</> </group>
); );
}); });

View file

@ -4,9 +4,6 @@ import GrayRing from "./GrayRing";
import LevelSprite from "./LevelSprite"; import LevelSprite from "./LevelSprite";
import PurpleRing from "./PurpleRing"; import PurpleRing from "./PurpleRing";
export type PositionAndScaleProps = [number, number, number];
export type RotationProps = [number, number, number, (string | undefined)?];
type HubProps = { type HubProps = {
currentSprite: string; currentSprite: string;
}; };
@ -23,9 +20,16 @@ const Hub = (props: HubProps) => {
{Object.values(level_sprites).map((sprite) => { {Object.values(level_sprites).map((sprite) => {
return ( return (
<LevelSprite <LevelSprite
position={sprite.position as PositionAndScaleProps} position={sprite.position as [number, number, number]}
scale={sprite.scale as PositionAndScaleProps} scale={sprite.scale as [number, number, number]}
rotation={sprite.rotation as RotationProps} rotation={
sprite.rotation as [
number,
number,
number,
(string | undefined)?
]
}
sprite={sprite.sprite} sprite={sprite.sprite}
key={sprite.id} key={sprite.id}
active={sprite.id === props.currentSprite} active={sprite.id === props.currentSprite}

View file

@ -23,6 +23,7 @@ type LainConstructorProps = {
framesHorizontal: number; framesHorizontal: number;
}; };
const LainConstructor = (props: LainConstructorProps) => { const LainConstructor = (props: LainConstructorProps) => {
// any here temporarily // any here temporarily
const lainSpriteTexture: any = useLoader(THREE.TextureLoader, props.sprite); const lainSpriteTexture: any = useLoader(THREE.TextureLoader, props.sprite);

View file

@ -40,8 +40,8 @@ const LevelSprite = memo((props: LevelSpriteConstructorProps) => {
const spriteSheet = spriteToPath(props.sprite); const spriteSheet = spriteToPath(props.sprite);
const nonActiveTexture: any = useLoader(THREE.TextureLoader, spriteSheet[0]); const nonActiveTexture = useLoader(THREE.TextureLoader, spriteSheet[0]);
const activeTexture: any = useLoader(THREE.TextureLoader, spriteSheet[1]); const activeTexture = useLoader(THREE.TextureLoader, spriteSheet[1]);
const uniforms = useMemo( const uniforms = useMemo(
() => ({ () => ({

View file

@ -16,7 +16,7 @@ const Orb = memo((props: OrbProps) => {
const [orbDirection, setOrbDirection] = useState("left"); const [orbDirection, setOrbDirection] = useState("left");
const [currentCurve, setCurrentCurve] = useState("first"); const [currentCurve, setCurrentCurve] = useState("first");
const orbSpriteTexture: any = useLoader(THREE.TextureLoader, orbSprite); const orbSpriteTexture = useLoader(THREE.TextureLoader, orbSprite);
// first one goes from up to down left to right // first one goes from up to down left to right
const firstCurve = new THREE.QuadraticBezierCurve3( const firstCurve = new THREE.QuadraticBezierCurve3(

View file

@ -7,7 +7,7 @@ import Orb from "./Orb";
interface OrthoCameraProps extends HUDElementProps { interface OrthoCameraProps extends HUDElementProps {
id: string; id: string;
orthoCameraPosY: number; orthoCameraPosY: number;
orbVisibility:boolean; orbVisibility: boolean;
} }
const OrthoCamera = (props: OrthoCameraProps) => { const OrthoCamera = (props: OrthoCameraProps) => {
@ -43,8 +43,9 @@ const OrthoCamera = (props: OrthoCameraProps) => {
bigHUDPosX={props.bigHUDPosX} bigHUDPosX={props.bigHUDPosX}
bigHUDScale={props.bigHUDScale} bigHUDScale={props.bigHUDScale}
key={props.id} key={props.id}
hudVisibility={props.hudVisibility}
/> />
<Orb orbVisibility={props.orbVisibility}/> <Orb orbVisibility={props.orbVisibility} />
</orthographicCamera> </orthographicCamera>
); );
}; };

View file

@ -1,3 +1,4 @@
import introSpriteSheet from "../static/sprites/intro.png";
import moveDownSpriteSheet from "../static/sprites/jump_down.png"; import moveDownSpriteSheet from "../static/sprites/jump_down.png";
import moveUpSpriteSheet from "../static/sprites/jump_up.png"; import moveUpSpriteSheet from "../static/sprites/jump_up.png";
import standingSpriteSheet from "../static/sprites/standing.png"; import standingSpriteSheet from "../static/sprites/standing.png";
@ -9,6 +10,7 @@ import longHudSpriteSheet from "../static/sprites/long_hud.png";
import longHudMirroredSpriteSheet from "../static/sprites/long_hud_mirrored.png"; import longHudMirroredSpriteSheet from "../static/sprites/long_hud_mirrored.png";
import boringHudSpriteSheet from "../static/sprites/long_hud_boring.png"; import boringHudSpriteSheet from "../static/sprites/long_hud_boring.png";
import boringHudMirroredSpriteSheet from "../static/sprites/long_hud_boring_mirrored.png"; import boringHudMirroredSpriteSheet from "../static/sprites/long_hud_boring_mirrored.png";
import * as THREE from "three"; import * as THREE from "three";
import { useLoader, useThree } from "react-three-fiber"; import { useLoader, useThree } from "react-three-fiber";
import { useLayoutEffect } from "react"; import { useLayoutEffect } from "react";
@ -16,6 +18,7 @@ import { useLayoutEffect } from "react";
// this function just preloads lain's spritesheets and other assets cuz they're big and lazy loading them // this function just preloads lain's spritesheets and other assets cuz they're big and lazy loading them
// used to make the suspense run for a couple milliseconds, resulting in flickering // used to make the suspense run for a couple milliseconds, resulting in flickering
const Preloader = () => { const Preloader = () => {
const intro = useLoader(THREE.TextureLoader, introSpriteSheet);
const moveDown = useLoader(THREE.TextureLoader, moveDownSpriteSheet); const moveDown = useLoader(THREE.TextureLoader, moveDownSpriteSheet);
const moveUp = useLoader(THREE.TextureLoader, moveUpSpriteSheet); const moveUp = useLoader(THREE.TextureLoader, moveUpSpriteSheet);
const moveLeft = useLoader(THREE.TextureLoader, moveLeftSpriteSheet); const moveLeft = useLoader(THREE.TextureLoader, moveLeftSpriteSheet);
@ -39,6 +42,7 @@ const Preloader = () => {
const { gl } = useThree(); const { gl } = useThree();
useLayoutEffect(() => { useLayoutEffect(() => {
gl.initTexture(intro);
gl.initTexture(moveDown); gl.initTexture(moveDown);
gl.initTexture(moveUp); gl.initTexture(moveUp);
gl.initTexture(moveLeft); gl.initTexture(moveLeft);
@ -63,6 +67,7 @@ const Preloader = () => {
boringHudMirrored, boringHudMirrored,
longHud, longHud,
longHudMirrored, longHudMirrored,
intro,
]); ]);
return null; return null;
}; };

View file

@ -1,6 +1,5 @@
{ {
"22": { "22": {
"id": "22hud",
"long": { "long": {
"position": [-0.45, 0.15, -8.6], "position": [-0.45, 0.15, -8.6],
"scale": [1, 0.03, 1], "scale": [1, 0.03, 1],
@ -21,7 +20,6 @@
} }
}, },
"14": { "14": {
"id": "14hud",
"long": { "long": {
"position": [-0.45, -0.09, -8.6], "position": [-0.45, -0.09, -8.6],
"scale": [1, 0.03, 1], "scale": [1, 0.03, 1],
@ -42,7 +40,6 @@
} }
}, },
"13": { "13": {
"id": "13hud",
"long": { "long": {
"position": [0.85, -0.09, -8.6], "position": [0.85, -0.09, -8.6],
"scale": [1, 0.03, 1], "scale": [1, 0.03, 1],
@ -63,7 +60,6 @@
} }
}, },
"05": { "05": {
"id": "05hud",
"long": { "long": {
"position": [0.85, -0.32, -8.6], "position": [0.85, -0.32, -8.6],
"scale": [1, 0.03, 1], "scale": [1, 0.03, 1],
@ -84,7 +80,6 @@
} }
}, },
"06": { "06": {
"id": "06hud",
"long": { "long": {
"position": [-0.43, -0.32, -8.6], "position": [-0.43, -0.32, -8.6],
"scale": [1, 0.03, 1], "scale": [1, 0.03, 1],