versión inicial del juego

This commit is contained in:
2025-12-30 23:24:58 +01:00
commit 7dbc77e75a
34 changed files with 1589 additions and 0 deletions

59
src/main.js Normal file
View File

@@ -0,0 +1,59 @@
import { DungeonGenerator } from './engine/dungeon/DungeonGenerator.js';
import { MissionConfig, MISSION_TYPES } from './engine/dungeon/MissionConfig.js';
console.log("Initializing Warhammer Quest Engine... VERSION: TEXTURE_DEBUG_V1");
window.TEXTURE_DEBUG = true; // Global flag we can check
// 1. Setup Mission
const mission = new MissionConfig({
id: 'mission_1',
name: 'The First Dive',
type: MISSION_TYPES.ESCAPE,
minTiles: 6
});
// 2. Init Engine
import { GameRenderer } from './view/GameRenderer.js';
import { CameraManager } from './view/CameraManager.js';
import { UIManager } from './view/UIManager.js';
import { DIRECTIONS } from './engine/dungeon/Constants.js';
const renderer = new GameRenderer('app'); // Assuming <div id="app"> or body
const cameraManager = new CameraManager(renderer);
const generator = new DungeonGenerator();
const ui = new UIManager(cameraManager, generator);
// Hook generator to renderer (Primitive Event system)
// We simply check placedTiles changes or adding methods
const originalPlaceTile = generator.grid.placeTile.bind(generator.grid);
generator.grid.placeTile = (instance, def) => {
originalPlaceTile(instance, def);
// Visual Spawn
// We need to spawn the actual shape. For now `addTile` does a bug cube.
// Ideally we iterate the cells of the tile and spawn cubes.
// Quick Hack: Spawn a cube for every occupied cell of this tile
const cells = generator.grid.getGlobalCells(def, instance.x, instance.y, instance.rotation);
renderer.addTile(cells, def.type, def, instance);
};
// 3. Start
console.log("Starting Dungeon Generation...");
generator.startDungeon(mission);
// 4. Render Loop
const animate = () => {
requestAnimationFrame(animate);
// Logic Step
if (!generator.isComplete) {
generator.step();
}
// Render
renderer.render(cameraManager.getCamera());
};
animate();