mirror of
https://github.com/Such-Software/wownerogue.git
synced 2026-10-19 23:28:32 +02:00
refactor frontend and fix debug mode
This commit is contained in:
+18
-5
@@ -1,5 +1,8 @@
|
||||
const ROT = require('./rot.js');
|
||||
|
||||
// Environment-based console logging control
|
||||
const CONSOLE_LOGGING = process.env.NODE_ENV === 'debug' || process.env.NODE_ENV === 'development';
|
||||
|
||||
// ========================================
|
||||
// DUNGEON CONFIGURATION SECTION
|
||||
// ========================================
|
||||
@@ -51,7 +54,9 @@ class DungeonGenerator {
|
||||
};
|
||||
|
||||
const config = { ...defaultOptions, ...options };
|
||||
console.log(`[DungeonGenerator] Generating dungeon with effective torchDensity: ${config.torchDensity}`); // Log effective torchDensity
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[DungeonGenerator] Generating dungeon with effective torchDensity: ${config.torchDensity}`);
|
||||
}
|
||||
|
||||
// Create dungeon using ROT.js Map.Digger
|
||||
const digger = new ROT.Map.Digger(width, height, {
|
||||
@@ -132,7 +137,9 @@ class DungeonGenerator {
|
||||
let placedTorchesCount = 0; // Counter for torches placed in this function
|
||||
|
||||
// Log the torchDensity being used for this map generation pass
|
||||
console.log(`[DungeonGenerator.enhanceMapWithVariations] Starting enhancement with torchDensity: ${config.torchDensity}`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[DungeonGenerator.enhanceMapWithVariations] Starting enhancement with torchDensity: ${config.torchDensity}`);
|
||||
}
|
||||
|
||||
const height = basicMap.length; // Use basicMap's dimensions
|
||||
const width = basicMap[0].length; // Use basicMap's dimensions
|
||||
@@ -159,7 +166,9 @@ class DungeonGenerator {
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(`[DungeonGenerator.enhanceMapWithVariations] Placed ${placedTorchesCount} torches during map enhancement.`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[DungeonGenerator.enhanceMapWithVariations] Placed ${placedTorchesCount} torches during map enhancement.`);
|
||||
}
|
||||
return enhancedMap;
|
||||
}
|
||||
|
||||
@@ -196,7 +205,9 @@ class DungeonGenerator {
|
||||
|
||||
const height = enhancedMap.length;
|
||||
const width = enhancedMap[0].length;
|
||||
console.log(`[DungeonGenerator.getTorchPositions] Searching for torch tile '${config.torchTile}' in a ${width}x${height} map.`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[DungeonGenerator.getTorchPositions] Searching for torch tile '${config.torchTile}' in a ${width}x${height} map.`);
|
||||
}
|
||||
|
||||
for (let y = 0; y < height; y++) {
|
||||
for (let x = 0; x < width; x++) {
|
||||
@@ -205,7 +216,9 @@ class DungeonGenerator {
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(`[DungeonGenerator.getTorchPositions] Found ${torches.length} torches. Positions: ${JSON.stringify(torches)}`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[DungeonGenerator.getTorchPositions] Found ${torches.length} torches. Positions: ${JSON.stringify(torches)}`);
|
||||
}
|
||||
return torches;
|
||||
}
|
||||
|
||||
|
||||
+32
-13
@@ -5,6 +5,9 @@ const Monster = require('./monster.js');
|
||||
const DungeonGenerator = require('./dungeon.js');
|
||||
const LightingAndFov = require('./lightingAndFov.js');
|
||||
|
||||
// Environment-based console logging control
|
||||
const CONSOLE_LOGGING = process.env.NODE_ENV === 'debug' || process.env.NODE_ENV === 'development';
|
||||
|
||||
class Game {
|
||||
/**
|
||||
* Create a new game instance
|
||||
@@ -42,9 +45,11 @@ class Game {
|
||||
...gameOptions
|
||||
};
|
||||
|
||||
console.log(`[Game Constructor] Creating game for user ${user.id} (socket: ${socketId})`);
|
||||
console.log(`[Game Constructor] Dimensions: ${width}x${height}`);
|
||||
console.log(`[Game Constructor] Game config:`, JSON.stringify(this.gameConfig, null, 2));
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[Game Constructor] Creating game for user ${user.id} (socket: ${socketId})`);
|
||||
console.log(`[Game Constructor] Dimensions: ${width}x${height}`);
|
||||
console.log(`[Game Constructor] Game config:`, JSON.stringify(this.gameConfig, null, 2));
|
||||
}
|
||||
|
||||
this.initializeGame();
|
||||
}
|
||||
@@ -70,7 +75,9 @@ class Game {
|
||||
}
|
||||
|
||||
initializeGame() {
|
||||
console.log(`[Game.initializeGame] Initializing game with config:`, JSON.stringify(this.gameConfig, null, 2));
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`[Game.initializeGame] Initializing game with config:`, JSON.stringify(this.gameConfig, null, 2));
|
||||
}
|
||||
if (typeof this.gameConfig.width === 'undefined' || typeof this.gameConfig.height === 'undefined') {
|
||||
console.error("[Game.initializeGame] CRITICAL: Width or Height is undefined in gameConfig!", this.gameConfig);
|
||||
throw new Error(`Invalid game dimensions: width=${this.gameConfig.width}, height=${this.gameConfig.height}`);
|
||||
@@ -120,7 +127,9 @@ class Game {
|
||||
const newX = this.player.x + dx;
|
||||
const newY = this.player.y + dy;
|
||||
|
||||
console.log(`Move: (${this.player.x},${this.player.y}) -> (${newX},${newY})`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`Move: (${this.player.x},${this.player.y}) -> (${newX},${newY})`);
|
||||
}
|
||||
|
||||
// Check if the move is valid (not into a wall and within map bounds)
|
||||
const primaryFloor = this.gameConfig.primaryFloor || "'1";
|
||||
@@ -132,7 +141,9 @@ class Game {
|
||||
(this.dungeon.map[newY][newX] === primaryFloor || this.dungeon.map[newY][newX] === secondaryFloor)) {
|
||||
|
||||
this.player.moveTo(newX, newY);
|
||||
console.log(`Player moved to ${newX},${newY} in game for socket ${this.socketId}`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`Player moved to ${newX},${newY} in game for socket ${this.socketId}`);
|
||||
}
|
||||
|
||||
// Update FOV after moving
|
||||
this.updateFOV();
|
||||
@@ -144,17 +155,23 @@ class Game {
|
||||
}
|
||||
if (this.dungeon.treasure && this.player.isAt(this.dungeon.treasure[0], this.dungeon.treasure[1]) && !this.player.hasTreasure) {
|
||||
this.player.hasTreasure = true;
|
||||
console.log(`🏆 TREASURE PICKUP: Player ${this.socketId} collected treasure at (${this.dungeon.treasure[0]}, ${this.dungeon.treasure[1]})`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`🏆 TREASURE PICKUP: Player ${this.socketId} collected treasure at (${this.dungeon.treasure[0]}, ${this.dungeon.treasure[1]})`);
|
||||
}
|
||||
this.dungeon.treasure = null;
|
||||
console.log(`🗑️ TREASURE REMOVED: dungeon.treasure is now null for player ${this.socketId}`);
|
||||
console.log(`Player ${this.socketId} collected treasure! hasTreasure: ${this.player.hasTreasure}`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`🗑️ TREASURE REMOVED: dungeon.treasure is now null for player ${this.socketId}`);
|
||||
console.log(`Player ${this.socketId} collected treasure! hasTreasure: ${this.player.hasTreasure}`);
|
||||
}
|
||||
return { status: 'moved', event: 'treasure_found', player: this.player.getState(), visibleTiles: this.visibleTiles };
|
||||
}
|
||||
|
||||
return { status: 'moved', player: this.player.getState(), visibleTiles: this.visibleTiles };
|
||||
}
|
||||
|
||||
console.log(`Move BLOCKED: ${newX},${newY} - cell value: ${this.dungeon && this.dungeon.map[newY] ? this.dungeon.map[newY][newX] : 'undefined'}`);
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log(`Move BLOCKED: ${newX},${newY} - cell value: ${this.dungeon && this.dungeon.map[newY] ? this.dungeon.map[newY][newX] : 'undefined'}`);
|
||||
}
|
||||
return { status: 'invalid' };
|
||||
}
|
||||
|
||||
@@ -174,9 +191,11 @@ class Game {
|
||||
treasure: this.dungeon ? this.dungeon.treasure : null,
|
||||
};
|
||||
|
||||
console.log("🎮 getState() sending entities - Monster:", state.monster, "Entrance:", state.entrance, "Exit:", state.exit, "Treasure:", state.treasure);
|
||||
if (state.treasure === null) {
|
||||
console.log("✅ TREASURE NULL: Confirmed treasure is null in getState() - treasure was picked up!");
|
||||
if (CONSOLE_LOGGING) {
|
||||
console.log("🎮 getState() sending entities - Monster:", state.monster, "Entrance:", state.entrance, "Exit:", state.exit, "Treasure:", state.treasure);
|
||||
if (state.treasure === null) {
|
||||
console.log("✅ TREASURE NULL: Confirmed treasure is null in getState() - treasure was picked up!");
|
||||
}
|
||||
}
|
||||
|
||||
return state;
|
||||
|
||||
+1
-14
@@ -70,20 +70,7 @@ class Monster {
|
||||
if (!player) return false;
|
||||
|
||||
// Check for direct overlap - monster on same tile as player
|
||||
if (this.x === player.x && this.y === player.y) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check for adjacent tiles (optional - if you want 1-tile proximity kills)
|
||||
const dx = Math.abs(this.x - player.x);
|
||||
const dy = Math.abs(this.y - player.y);
|
||||
|
||||
// If monster is adjacent (one tile away in any direction)
|
||||
if ((dx <= 1 && dy === 0) || (dx === 0 && dy <= 1)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return this.x === player.x && this.y === player.y;
|
||||
}
|
||||
|
||||
// Get monster state as object
|
||||
|
||||
Reference in New Issue
Block a user