(client) feat:修复Tick中创建实体导致遍历时修改列表错误

This commit is contained in:
m0_75251201
2025-08-17 12:21:46 +08:00
parent ed7ecdb226
commit dea6cd5fa3

View File

@ -20,6 +20,9 @@ namespace Managers
public EntityPrefab defaultEntityPrefab;
private List<Tuple<string,EntityPrefab>> pendingAdditions;
public LinkedList<EntityPrefab> FindEntitiesByFaction(string factionKey)
{
if (factionEntities.TryGetValue(factionKey, out var entities))
@ -56,6 +59,20 @@ namespace Managers
Destroy(entityToRemove.gameObject);
}
}
if (pendingAdditions.Any())
{
foreach (var entity in pendingAdditions)
{
if (!factionEntities.ContainsKey(entity.Item1))
{
factionEntities[entity.Item1] = new LinkedList<EntityPrefab>();
}
factionEntities[entity.Item1].AddLast(entity.Item2);
}
pendingAdditions.Clear();
}
}
/// <summary>
@ -96,12 +113,14 @@ namespace Managers
// 管理派系列表
var factionKey = def.attributes.label ?? "default";
if (!factionEntities.ContainsKey(factionKey))
{
factionEntities[factionKey] = new LinkedList<EntityPrefab>();
}
pendingAdditions.Add(Tuple.Create(factionKey, entityComponent));
factionEntities[factionKey].AddLast(entityComponent);
// if (!factionEntities.ContainsKey(factionKey))
// {
// factionEntities[factionKey] = new LinkedList<EntityPrefab>();
// }
// factionEntities[factionKey].AddLast(entityComponent);
return entityComponent;
}
@ -219,13 +238,14 @@ namespace Managers
var entityComponent = entity.GetComponent<EntityPrefab>();
const string factionKey = "default";
if (!factionEntities.ContainsKey(factionKey))
{
factionEntities[factionKey] = new LinkedList<EntityPrefab>();
}
pendingAdditions.Add(Tuple.Create(factionKey, entityComponent));
// if (!factionEntities.ContainsKey(factionKey))
// {
// factionEntities[factionKey] = new LinkedList<EntityPrefab>();
// }
entityComponent.DefaultInit();
factionEntities[factionKey].AddLast(entityComponent);
// entityComponent.DefaultInit();
// factionEntities[factionKey].AddLast(entityComponent);
}
protected override void OnStart()