浏览代码

Make sure round robin spawn index is reset after unregistering. Also added safety net to check for out-of-bounds spawn index if needed

Signed-off-by: Gene Walters <[email protected]>
Gene Walters 3 年之前
父节点
当前提交
01f1dec599
共有 1 个文件被更改,包括 13 次插入0 次删除
  1. 13 0
      Gem/Code/Source/Spawners/RoundRobinSpawner.cpp

+ 13 - 0
Gem/Code/Source/Spawners/RoundRobinSpawner.cpp

@@ -30,6 +30,12 @@ namespace MultiplayerSample
             return AZStd::make_pair<Multiplayer::PrefabEntityId, AZ::Transform>(Multiplayer::PrefabEntityId(), AZ::Transform::CreateIdentity());
         }
 
+        if (m_spawnIndex >= m_spawners.size())
+        {
+            AZLOG_WARN("RoundRobinSpawner has an out-of-bounds spawner index. Resetting spawn index to 0.")
+            m_spawnIndex = 0;
+        }
+
         NetworkPlayerSpawnerComponent* spawner = m_spawners[m_spawnIndex];
         m_spawnIndex = m_spawnIndex + 1 == m_spawners.size() ? 0 : m_spawnIndex + 1;
         // NetworkEntityManager currently operates against/validates AssetId or Path, opt for Path via Hint
@@ -44,6 +50,13 @@ namespace MultiplayerSample
         if (AZStd::find(m_spawners.begin(), m_spawners.end(), spawner))
         {
             m_spawners.erase(AZStd::remove(m_spawners.begin(), m_spawners.end(), spawner));
+
+            // A spawner was removed, reset the next spawnIndex if it's now out-of-bounds
+            if (m_spawnIndex >= m_spawners.size())
+            {
+                m_spawnIndex = 0;
+            }
+
             return true;
         }