Fix ship explosion rendering by passing state through game loop

- Ship explosion now renders correctly when text reaches spaceship
- Pass shipState and shipExplosionTime through game loop callback for immediate updates
- Use refs for ship state to ensure real-time updates in rendering pipeline
- Remove debug console logging
- Ship explosion effect now displays all particles, fragments, and flash animations
This commit is contained in:
2025-11-04 18:51:52 +00:00
parent 3e985efb37
commit 2944d43c4a
2 changed files with 23 additions and 17 deletions
+5 -5
View File
@@ -1,5 +1,5 @@
import { useState, useEffect, useRef } from "react";
import type { GameManager, GameOptions, KeyLogEntry, FallingLetter, GameMode, Laser } from "../types";
import type { GameManager, GameOptions, KeyLogEntry, FallingLetter, GameMode, Laser, ShipState } from "../types";
import { useBoard } from "../useBoard";
import { useCursor } from "../useCursor";
import { useGameStatus } from "../useGameStatus";
@@ -18,12 +18,12 @@ export function useGame(
const gameStatusManager = useGameStatus(undefined, gameMode);
// Wrap renderBoard to include player position and lasers
const renderBoardWrapped = (letters: any = [], lasers: Laser[] = []) => {
boardManager.renderBoard(cursorManager.position(), letters, gameStatusManager.shipState, gameStatusManager.shipExplosionTime, gameModeRef.current, lasers);
const renderBoardWrapped = (letters: any = [], lasers: Laser[] = [], shipState: ShipState = 'normal', shipExplosionTime: number = 0) => {
boardManager.renderBoard(cursorManager.position(), letters, shipState, shipExplosionTime, gameModeRef.current, lasers);
};
// Game loop tick handler
const handleGameLoopTick = (deltaTime: number, letters: FallingLetter[], lasers: Laser[] = []) => {
const handleGameLoopTick = (deltaTime: number, letters: FallingLetter[], lasers: Laser[] = [], shipState: ShipState = 'normal', shipExplosionTime: number = 0) => {
const playerPos = cursorManager.position();
gameStatusManager.updatePlayerX(playerPos.x);
@@ -59,7 +59,7 @@ export function useGame(
cursorManager.moveTowardTarget(deltaTime);
}
renderBoardWrapped(letters, lasers);
renderBoardWrapped(letters, lasers, shipState, shipExplosionTime);
};
// Update gameMode when it changes (without recreating gameStatus state)