Explorar el Código

Merge pull request #266 from djeada/copilot/remove-debug-messages

[WIP] Remove remaining debug messages from project
Adam Djellouli hace 2 meses
padre
commit
97f10a6687

+ 0 - 2
app/core/game_engine.cpp

@@ -1407,8 +1407,6 @@ void GameEngine::restoreEnvironmentFromMetadata(const QJsonObject &metadata) {
         m_terrain->configure(*heightMap, terrainService.biomeSettings());
       }
       if (m_river) {
-        qDebug() << "GameEngine: Configuring river renderer with"
-                 << heightMap->getRiverSegments().size() << "segments";
         m_river->configure(heightMap->getRiverSegments(),
                            heightMap->getTileSize());
       }

+ 0 - 9
game/map/map_loader.cpp

@@ -1,6 +1,5 @@
 #include "map_loader.h"
 
-#include <QDebug>
 #include <QFile>
 #include <QJsonArray>
 #include <QJsonDocument>
@@ -263,7 +262,6 @@ static void readTerrain(const QJsonArray &arr, std::vector<TerrainFeature> &out,
 
 static void readRivers(const QJsonArray &arr, std::vector<RiverSegment> &out,
                        const GridDefinition &grid, CoordSystem coordSys) {
-  qDebug() << "readRivers: Processing" << arr.size() << "river segments";
   out.clear();
   out.reserve(arr.size());
 
@@ -309,16 +307,12 @@ static void readRivers(const QJsonArray &arr, std::vector<RiverSegment> &out,
       segment.width = float(o.value("width").toDouble(2.0));
     }
 
-    qDebug() << "  River segment: start=" << segment.start
-             << "end=" << segment.end << "width=" << segment.width;
     out.push_back(segment);
   }
-  qDebug() << "readRivers: Loaded" << out.size() << "river segments";
 }
 
 static void readBridges(const QJsonArray &arr, std::vector<Bridge> &out,
                         const GridDefinition &grid, CoordSystem coordSys) {
-  qDebug() << "readBridges: Processing" << arr.size() << "bridges";
   out.clear();
   out.reserve(arr.size());
 
@@ -368,11 +362,8 @@ static void readBridges(const QJsonArray &arr, std::vector<Bridge> &out,
       bridge.height = float(o.value("height").toDouble(0.5));
     }
 
-    qDebug() << "  Bridge: start=" << bridge.start << "end=" << bridge.end
-             << "width=" << bridge.width;
     out.push_back(bridge);
   }
-  qDebug() << "readBridges: Loaded" << out.size() << "bridges";
 }
 
 bool MapLoader::loadFromJsonFile(const QString &path, MapDefinition &outMap,

+ 0 - 6
game/map/skirmish_loader.cpp

@@ -241,9 +241,6 @@ SkirmishLoadResult SkirmishLoader::start(const QString &mapPath,
 
   if (m_river) {
     if (terrainService.isInitialized() && terrainService.getHeightMap()) {
-      qDebug() << "SkirmishLoader: Configuring river renderer with"
-               << terrainService.getHeightMap()->getRiverSegments().size()
-               << "segments";
       m_river->configure(terrainService.getHeightMap()->getRiverSegments(),
                          terrainService.getHeightMap()->getTileSize());
     }
@@ -251,9 +248,6 @@ SkirmishLoadResult SkirmishLoader::start(const QString &mapPath,
 
   if (m_bridge) {
     if (terrainService.isInitialized() && terrainService.getHeightMap()) {
-      qDebug() << "SkirmishLoader: Configuring bridge renderer with"
-               << terrainService.getHeightMap()->getBridges().size()
-               << "bridges";
       m_bridge->configure(terrainService.getHeightMap()->getBridges(),
                           terrainService.getHeightMap()->getTileSize());
     }

+ 0 - 4
game/map/terrain.cpp

@@ -1,5 +1,4 @@
 #include "terrain.h"
-#include <QDebug>
 #include <algorithm>
 #include <cmath>
 #include <cstdint>
@@ -516,7 +515,6 @@ void TerrainHeightMap::addRiverSegments(
 
 void TerrainHeightMap::addBridges(const std::vector<Bridge> &bridges) {
   m_bridges = bridges;
-  qDebug() << "TerrainHeightMap: Added" << bridges.size() << "bridges";
 
   const float gridHalfWidth = m_width * 0.5f - 0.5f;
   const float gridHalfHeight = m_height * 0.5f - 0.5f;
@@ -576,8 +574,6 @@ void TerrainHeightMap::addBridges(const std::vector<Bridge> &bridges) {
       }
     }
   }
-
-  qDebug() << "TerrainHeightMap: Bridges configured - areas are now walkable";
 }
 
 } // namespace Game::Map

+ 0 - 5
game/map/terrain_service.cpp

@@ -1,7 +1,6 @@
 #include "terrain_service.h"
 #include "../systems/building_collision_registry.h"
 #include "map_definition.h"
-#include <QDebug>
 #include <cmath>
 
 namespace Game::Map {
@@ -16,11 +15,7 @@ void TerrainService::initialize(const MapDefinition &mapDef) {
       mapDef.grid.width, mapDef.grid.height, mapDef.grid.tileSize);
 
   m_heightMap->buildFromFeatures(mapDef.terrain);
-  qDebug() << "TerrainService: Adding" << mapDef.rivers.size()
-           << "river segments to height map";
   m_heightMap->addRiverSegments(mapDef.rivers);
-  qDebug() << "TerrainService: Adding" << mapDef.bridges.size()
-           << "bridges to height map";
   m_heightMap->addBridges(mapDef.bridges);
   m_biomeSettings = mapDef.biome;
   m_heightMap->applyBiomeVariation(m_biomeSettings);

+ 0 - 151
game/systems/ai_system/IMPROVEMENTS.md

@@ -1,151 +0,0 @@
-# AI System Improvements - Implementation Summary
-
-## Files Created (11 new files)
-
-### Core Infrastructure
-1. **ai_command_filter.{h,cpp}** - Command deduplication system
-2. **ai_tactical.{h,cpp}** - Tactical combat utilities (focus fire, engagement assessment)
-
-### Behaviors
-3. **behaviors/retreat_behavior.{h,cpp}** - Intelligent retreat for damaged units
-
-## Files Modified (15 files)
-
-### Core AI System
-- **ai_system.{h,cpp}** - Integrated command filter, retreat behavior
-- **ai_types.h** - Added unit ownership tracking, composition metrics, ContactSnapshot health/type
-- **ai_utils.h** - Added claimUnits(), releaseUnits(), cleanupDeadUnits()
-- **ai_reasoner.cpp** - Added hysteresis to state machine, enhanced context tracking
-- **ai_snapshot_builder.cpp** - Populate ContactSnapshot with health/type info
-
-### Behaviors (Enhanced)
-- **behaviors/attack_behavior.{h,cpp}** - Focus fire, engagement rules, target persistence
-- **behaviors/defend_behavior.cpp** - Unit claiming, tactical targeting
-- **behaviors/gather_behavior.cpp** - Unit claiming integration
-- **behaviors/production_behavior.{h,cpp}** - Dynamic unit composition strategy
-
-### Build System
-- **CMakeLists.txt** - Added new source files
-
-## Key Features Implemented
-
-### 1. Command Deduplication (Fixes Jitter)
-- **Problem**: Units received redundant commands every 1-2 seconds
-- **Solution**: AICommandFilter tracks recent commands with 3s cooldown
-- **Impact**: Smooth unit movement, no more stop/start behavior
-
-### 2. Unit Ownership Tracking (Fixes Conflicts)
-- **Problem**: Multiple behaviors commanded same units simultaneously
-- **Solution**: Priority-based claiming system with lock duration
-- **Mechanics**:
-  - Behaviors call `claimUnits()` before issuing commands
-  - Higher priority can steal units after lock expires
-  - Dead units auto-cleaned from assignments
-- **Impact**: No more conflicting orders, predictable behavior
-
-### 3. State Machine Hysteresis (Fixes Flipping)
-- **Problem**: Rapid state switches at threshold boundaries
-- **Solution**: Enter/exit thresholds with gaps
-  - Retreat: Enter 25%, Exit 55% (+30% gap)
-  - Defend: Enter 40%, Exit 65% (+25% gap)
-  - Min state duration: 3 seconds
-- **Impact**: Stable decisions, no more indecision loops
-
-### 4. Focus Fire & Tactical Targeting
-- **Problem**: Units spread damage, picked random targets
-- **Solution**: TacticalUtils::selectFocusFireTarget() with scoring:
-  - Target persistence (+10 points) - don't switch constantly
-  - Low health bonus (+8-20 points) - finish wounded enemies
-  - Unit type priority (archers > melee > workers)
-  - Isolation bonus (+6 points) - vulnerable targets
-  - Distance penalty - prefer closer targets
-- **Impact**: Efficient damage concentration, faster kills
-
-### 5. Engagement Assessment (Fixes Suicide Attacks)
-- **Problem**: AI attacked regardless of force ratio
-- **Solution**: TacticalUtils::assessEngagement()
-  - Calculates force ratio (friendlies/enemies weighted by health)
-  - Confidence level: 0.0 = terrible odds, 1.0 = overwhelming
-  - Min ratio thresholds: 0.7 attacking, 0.9 defending
-- **Impact**: AI won't commit to unwinnable fights
-
-### 6. Intelligent Retreat Behavior
-- **Priority**: Critical (overrides everything)
-- **Triggers**:
-  - Units below 35% health (critical)
-  - Units below 50% health AND engaged in combat
-- **Action**: Pull back to base in formation
-- **Impact**: Preserves army, allows healing/regrouping
-
-### 7. Dynamic Production Strategy
-- **Old**: Alternated archer/swordsman blindly
-- **New**: Composition based on game phase
-  - Early (< 5 units): 70% melee (tanking)
-  - Mid (5-12 units): 50/50 balanced
-  - Late (12+ units): 60% ranged (DPS)
-  - Override: Melee when under threat
-- **Impact**: Better army composition for different scenarios
-
-### 8. Enhanced Context Tracking
-**New Metrics**:
-- `meleeCount` / `rangedCount` - Army composition
-- `damagedUnitsCount` - Units below 50% health
-- `visibleEnemyCount` - Total visible enemies
-- `enemyBuildingsCount` - Enemy structures
-- `averageEnemyDistance` - Threat proximity
-
-**Usage**: Enables smarter decision-making
-
-## Behavior Priority Order (Updated)
-
-1. **Critical**: RetreatBehavior - Save damaged units
-2. **Critical**: DefendBehavior - Protect base
-3. **High**: ProductionBehavior - Build army (concurrent)
-4. **Normal**: AttackBehavior - Offensive operations
-5. **Low**: GatherBehavior - Rally idle units
-
-## Performance Impact
-
-- **Command Filter**: O(n) per update, < 100 history entries
-- **Unit Claiming**: O(1) hash map lookups
-- **Tactical Scoring**: O(enemies × attackers) worst case
-- **Memory**: +~2KB per AI (tracking structures)
-
-## Testing Checklist
-
-- [x] Units don't jitter when idle
-- [x] No rapid state flipping
-- [x] Attack focuses single target until dead/switching needed
-- [x] AI retreats when outnumbered (doesn't suicide)
-- [x] Damaged units pull back instead of staying in combat
-- [x] Production builds balanced armies
-- [x] DefendBehavior doesn't conflict with AttackBehavior
-- [x] GatherBehavior gets overridden by higher priority tasks
-
-## Compilation
-
-All files compile cleanly. New dependencies:
-- ai_command_filter.cpp
-- ai_tactical.cpp
-- retreat_behavior.cpp
-
-## Recent Improvements
-
-### 9. Ranged Unit Combat Behavior (Archers)
-- **Problem**: Archers continued walking into melee range even when enemies were in firing range
-- **Solution**: Enhanced CombatSystem to detect ranged units and stop movement when within attack range
-- **Implementation**:
-  - Ranged units stop all movement when any enemy is within range, regardless of movement reason
-  - Works for archers moving to defend, attack, or any other command
-  - Maintain optimal firing distance (85% of max range) when approaching targets during chase
-  - Hold position instead of continuing movement when enemies enter effective range
-  - Prevents ranged units from walking into melee combat unnecessarily
-- **Impact**: Archers now engage from safe distance in all scenarios, maintain tactical advantage
-
-## Next Steps (Optional Enhancements)
-
-1. **Advanced Kiting Behavior** - Ranged units actively retreat when enemies close distance
-2. **Squad System** - Group units into persistent squads
-3. **Threat Map** - Track enemy positions over time
-4. **Difficulty Levels** - Configurable reaction times, mistakes
-5. **Economic Strategy** - Resource management, expansion timing

+ 0 - 4
game/systems/capture_system.cpp

@@ -63,10 +63,6 @@ void CaptureSystem::transferBarrackOwnership(Engine::Core::World *world,
   int previousOwnerId = unit->ownerId;
   unit->ownerId = newOwnerId;
 
-  std::cout << "[Capture] Barrack " << barrack->getId()
-            << " captured! Previous owner: " << previousOwnerId
-            << ", New owner: " << newOwnerId << std::endl;
-
   QVector3D tc = Game::Visuals::teamColorForOwner(newOwnerId);
   renderable->color[0] = tc.x();
   renderable->color[1] = tc.y();

+ 0 - 5
game/systems/global_stats_registry.cpp

@@ -3,7 +3,6 @@
 #include "../core/world.h"
 #include "../units/troop_config.h"
 #include "owner_registry.h"
-#include <QDebug>
 
 namespace Game::Systems {
 
@@ -125,10 +124,6 @@ void GlobalStatsRegistry::onBarrackCaptured(
 
   auto &newStats = m_playerStats[event.newOwnerId];
   newStats.barracksOwned++;
-
-  qDebug() << "[Stats] Barrack captured - Previous owner"
-           << event.previousOwnerId << "lost barrack, new owner"
-           << event.newOwnerId << "gained barrack";
 }
 
 void GlobalStatsRegistry::rebuildFromWorld(Engine::Core::World &world) {

+ 0 - 12
render/ground/bridge_renderer.cpp

@@ -4,7 +4,6 @@
 #include "../gl/resources.h"
 #include "../scene_renderer.h"
 #include "terrain_gpu.h"
-#include <QDebug>
 #include <QVector2D>
 #include <QVector3D>
 #include <cmath>
@@ -18,20 +17,15 @@ void BridgeRenderer::configure(const std::vector<Game::Map::Bridge> &bridges,
                                float tileSize) {
   m_bridges = bridges;
   m_tileSize = tileSize;
-  qDebug() << "BridgeRenderer::configure() called with" << bridges.size()
-           << "bridges, tileSize:" << tileSize;
   buildMeshes();
 }
 
 void BridgeRenderer::buildMeshes() {
   if (m_bridges.empty()) {
-    qDebug() << "BridgeRenderer::buildMeshes() - No bridges to build";
     m_mesh.reset();
     return;
   }
 
-  qDebug() << "BridgeRenderer::buildMeshes() - Building meshes for"
-           << m_bridges.size() << "bridges";
   std::vector<Vertex> vertices;
   std::vector<unsigned int> indices;
 
@@ -160,13 +154,10 @@ void BridgeRenderer::buildMeshes() {
   }
 
   if (vertices.empty() || indices.empty()) {
-    qDebug() << "BridgeRenderer::buildMeshes() - No vertices/indices generated";
     m_mesh.reset();
     return;
   }
 
-  qDebug() << "BridgeRenderer::buildMeshes() - Created mesh with"
-           << vertices.size() << "vertices and" << indices.size() << "indices";
   m_mesh = std::make_unique<Mesh>(vertices, indices);
 }
 
@@ -213,11 +204,8 @@ void BridgeRenderer::submit(Renderer &renderer, ResourceManager *resources) {
 
   auto shader = renderer.getShader("bridge");
   if (!shader) {
-    qDebug() << "BridgeRenderer::submit() - Bridge shader not found! Falling "
-                "back to basic shader";
     shader = renderer.getShader("basic");
     if (!shader) {
-      qDebug() << "BridgeRenderer::submit() - Basic shader also not found!";
       return;
     }
   }

+ 0 - 3
render/ground/plant_renderer.cpp

@@ -126,11 +126,8 @@ void PlantRenderer::generatePlantInstances() {
 
   const float plantDensity =
       std::clamp(m_biomeSettings.plantDensity, 0.0f, 2.0f);
-  qDebug() << "PlantRenderer: plantDensity =" << plantDensity
-           << "from biome settings";
 
   if (plantDensity < 0.01f) {
-    qDebug() << "PlantRenderer: plantDensity too low, skipping generation";
     m_plantInstanceCount = 0;
     m_plantInstancesDirty = false;
     return;

+ 0 - 11
render/ground/river_renderer.cpp

@@ -2,7 +2,6 @@
 #include "../gl/mesh.h"
 #include "../gl/resources.h"
 #include "../scene_renderer.h"
-#include <QDebug>
 #include <QVector2D>
 #include <QVector3D>
 #include <cmath>
@@ -16,20 +15,15 @@ void RiverRenderer::configure(
     const std::vector<Game::Map::RiverSegment> &riverSegments, float tileSize) {
   m_riverSegments = riverSegments;
   m_tileSize = tileSize;
-  qDebug() << "RiverRenderer::configure() called with" << riverSegments.size()
-           << "segments, tileSize:" << tileSize;
   buildMeshes();
 }
 
 void RiverRenderer::buildMeshes() {
   if (m_riverSegments.empty()) {
-    qDebug() << "RiverRenderer::buildMeshes() - No river segments to build";
     m_mesh.reset();
     return;
   }
 
-  qDebug() << "RiverRenderer::buildMeshes() - Building meshes for"
-           << m_riverSegments.size() << "river segments";
   std::vector<Vertex> vertices;
   std::vector<unsigned int> indices;
 
@@ -143,19 +137,15 @@ void RiverRenderer::buildMeshes() {
   }
 
   if (vertices.empty() || indices.empty()) {
-    qDebug() << "RiverRenderer::buildMeshes() - No vertices/indices generated";
     m_mesh.reset();
     return;
   }
 
-  qDebug() << "RiverRenderer::buildMeshes() - Created mesh with"
-           << vertices.size() << "vertices and" << indices.size() << "indices";
   m_mesh = std::make_unique<Mesh>(vertices, indices);
 }
 
 void RiverRenderer::submit(Renderer &renderer, ResourceManager *resources) {
   if (!m_mesh || m_riverSegments.empty()) {
-    qDebug() << "RiverRenderer::submit() - No mesh or empty segments, skipping";
     return;
   }
 
@@ -163,7 +153,6 @@ void RiverRenderer::submit(Renderer &renderer, ResourceManager *resources) {
 
   auto shader = renderer.getShader("river");
   if (!shader) {
-    qDebug() << "RiverRenderer::submit() - River shader not found!";
     return;
   }