aether-shards/test/core/GameLoop/combat-movement-test1.test.js
Matthew Mone 2c86d674f4 Add mission debrief and procedural mission generation features
- Introduce the MissionDebrief component to display after-action reports, including XP, rewards, and squad status.
- Implement the MissionGenerator class to create procedural side missions, enhancing replayability and resource management.
- Update mission schema to include mission objects for INTERACT objectives, improving mission complexity.
- Enhance GameLoop and MissionManager to support new mission features and interactions.
- Add tests for MissionDebrief and MissionGenerator to ensure functionality and integration within the game architecture.
2026-01-01 16:08:54 -08:00

79 lines
2.2 KiB
JavaScript

import { expect } from "@esm-bundle/chai";
import * as THREE from "three";
import { GameLoop } from "../../../src/core/GameLoop.js";
import {
createGameLoopSetup,
cleanupGameLoop,
createRunData,
createMockGameStateManagerForCombat,
setupCombatUnits,
cleanupTurnSystem,
} from "./helpers.js";
describe("Core: GameLoop - Combat Movement Test 1", function () {
this.timeout(30000);
let gameLoop;
let container;
let mockGameStateManager;
let playerUnit;
let enemyUnit;
beforeEach(async () => {
const setup = createGameLoopSetup();
gameLoop = setup.gameLoop;
container = setup.container;
if (gameLoop.turnSystemAbortController) {
gameLoop.turnSystemAbortController.abort();
}
gameLoop.stop();
if (
gameLoop.turnSystem &&
typeof gameLoop.turnSystem.reset === "function"
) {
gameLoop.turnSystem.reset();
}
gameLoop.init(container);
mockGameStateManager = createMockGameStateManagerForCombat();
gameLoop.gameStateManager = mockGameStateManager;
const runData = createRunData({
squad: [{ id: "u1", classId: "CLASS_VANGUARD" }],
});
await gameLoop.startLevel(runData, { startAnimation: false });
gameLoop.updateCombatState = async () => Promise.resolve();
const units = setupCombatUnits(gameLoop);
playerUnit = units.playerUnit;
enemyUnit = units.enemyUnit;
});
afterEach(async () => {
gameLoop.clearMovementHighlights();
gameLoop.clearSpawnZoneHighlights();
cleanupTurnSystem(gameLoop);
cleanupGameLoop(gameLoop, container);
await new Promise((resolve) => setTimeout(resolve, 10));
});
it("CoA 5: should show movement highlights for player units in combat", () => {
mockGameStateManager.getCombatState.returns({
activeUnit: {
id: playerUnit.id,
name: playerUnit.name,
},
turnQueue: [],
});
gameLoop.updateMovementHighlights(playerUnit);
expect(gameLoop.movementHighlights.size).to.be.greaterThan(0);
const highlightArray = Array.from(gameLoop.movementHighlights);
expect(highlightArray.length).to.be.greaterThan(0);
expect(highlightArray[0]).to.be.instanceOf(THREE.Mesh);
});
});