Răsfoiți Sursa

Disable fog of war renderer in spectator mode

- Call setEnabled(false) on fog renderer when in spectator mode
- Skip visibility service updates in game loop when spectating
- Skip minimap fog updates in spectator mode
- Re-enable fog renderer during reset for next game

Co-authored-by: djeada <[email protected]>
copilot-swe-agent[bot] 1 săptămână în urmă
părinte
comite
95854dd6ac
2 a modificat fișierele cu 11 adăugiri și 2 ștergeri
  1. 4 2
      app/core/game_engine.cpp
  2. 7 0
      game/map/skirmish_loader.cpp

+ 4 - 2
app/core/game_engine.cpp

@@ -588,7 +588,7 @@ void GameEngine::update(float dt) {
     m_world->update(dt);
 
     auto &visibility_service = Game::Map::VisibilityService::instance();
-    if (visibility_service.is_initialized()) {
+    if (visibility_service.is_initialized() && !m_level.is_spectator_mode) {
       m_runtime.visibility_update_accumulator += dt;
       const float visibility_update_interval =
           Game::GameConfig::instance().gameplay().visibility_update_interval;
@@ -611,7 +611,9 @@ void GameEngine::update(float dt) {
     }
 
     if (m_minimap_manager) {
-      m_minimap_manager->update_fog(dt, m_runtime.local_owner_id);
+      if (!m_level.is_spectator_mode) {
+        m_minimap_manager->update_fog(dt, m_runtime.local_owner_id);
+      }
       auto *selection_system =
           m_world->get_system<Game::Systems::SelectionSystem>();
       m_minimap_manager->update_units(m_world.get(), selection_system);

+ 7 - 0
game/map/skirmish_loader.cpp

@@ -98,6 +98,7 @@ void SkirmishLoader::reset_game_state() {
   Game::Systems::NationRegistry::instance().clear_player_assignments();
 
   if (m_fog != nullptr) {
+    m_fog->setEnabled(true);
     m_fog->update_mask(0, 0, 1.0F, {});
   }
 }
@@ -448,8 +449,14 @@ auto SkirmishLoader::start(const QString &map_path,
 
   if (is_spectator_mode) {
     visibility_service.reveal_all();
+    if (m_fog != nullptr) {
+      m_fog->setEnabled(false);
+    }
   } else {
     visibility_service.computeImmediate(m_world, player_owner_id);
+    if (m_fog != nullptr) {
+      m_fog->setEnabled(true);
+    }
   }
 
   if ((m_fog != nullptr) && visibility_service.is_initialized()) {