diff --git a/packages/frontend/src/game/hooks/useRespawn.tsx b/packages/frontend/src/game/hooks/useRespawn.tsx index 002d717..5c570a5 100644 --- a/packages/frontend/src/game/hooks/useRespawn.tsx +++ b/packages/frontend/src/game/hooks/useRespawn.tsx @@ -4,17 +4,19 @@ import { dispatch, GamePlayerState, getPlayerId } from "../utils/geckos/geckos"; import { PlayerActions, WeaponActions } from "@fps/lib"; import type { Camera, Vector3 } from "three"; import type { Capsule } from "three-stdlib"; +import type { GameStateRef } from "../World"; interface RespawnProps { camera: Camera; capsule: React.MutableRefObject; + gameStateRef: GameStateRef; playerStateRef: React.MutableRefObject; playerVelocity: React.MutableRefObject; wasAliveRef: React.MutableRefObject; } export const useRespawn = (props: RespawnProps) => { - const { camera, capsule, playerStateRef, playerVelocity, wasAliveRef } = props; + const { camera, capsule, gameStateRef, playerStateRef, playerVelocity, wasAliveRef } = props; useFrame(() => { const isAlive = playerStateRef.current.isAlive; @@ -34,6 +36,7 @@ export const useRespawn = (props: RespawnProps) => { if (!playerStateRef.current.isAlive && gamepad.buttons[2]?.pressed) { dispatch( PlayerActions.respawn({ + currentMap: gameStateRef.current.game.game?.map, playerId: getPlayerId(), }), ); diff --git a/packages/frontend/src/game/player/Player.tsx b/packages/frontend/src/game/player/Player.tsx index 6484add..a750fd2 100644 --- a/packages/frontend/src/game/player/Player.tsx +++ b/packages/frontend/src/game/player/Player.tsx @@ -55,6 +55,7 @@ export const Player: React.FC = (props) => { useRespawn({ camera, capsule, + gameStateRef, playerStateRef, playerVelocity, wasAliveRef, diff --git a/packages/lib/src/engine/slices/playerSlice.ts b/packages/lib/src/engine/slices/playerSlice.ts index e69ce56..0c7d672 100644 --- a/packages/lib/src/engine/slices/playerSlice.ts +++ b/packages/lib/src/engine/slices/playerSlice.ts @@ -93,9 +93,14 @@ export const playerSlice = createSlice({ }, respawn: ( state: WritableDraft, - action: PayloadAction<{ playerId: string; isInitialSpawn?: boolean }>, + action: PayloadAction<{ + currentMap: keyof typeof MAP_CONFIGS | undefined; + playerId: string; + isInitialSpawn?: boolean; + }>, ) => { - const { playerId, isInitialSpawn } = action.payload; + const { currentMap, playerId, isInitialSpawn } = action.payload; + if (currentMap == null) return; const player = state.players[playerId]; // Reset player state on respawn @@ -103,10 +108,8 @@ export const playerSlice = createSlice({ player.isAlive = true; player.stance = "standing"; - // TODO: Set up actual spawns https://app.clickup.com/t/86b5v1qrj - // ! - Assume testMap1 for now if (isInitialSpawn) { - const initialSpawns = MAP_CONFIGS.testMap1.initialSpawns; + const initialSpawns = MAP_CONFIGS[currentMap].initialSpawns; const randomSpawnIndex = Math.floor(Math.random() * initialSpawns.length); const randomSpawn = initialSpawns[randomSpawnIndex]; @@ -124,7 +127,7 @@ export const playerSlice = createSlice({ return; } - const respawnPoints = MAP_CONFIGS.testMap1.respawnPoints; + const respawnPoints = MAP_CONFIGS[currentMap].respawnPoints; const randomRespawnIndex = Math.floor(Math.random() * respawnPoints.length); const randomRespawn = respawnPoints[randomRespawnIndex];