Misc TraitDictionary style fixes

This commit is contained in:
reaperrr
2021-04-04 15:32:55 +02:00
committed by teinarss
parent aa834db1e3
commit e161d9daa7

View File

@@ -161,6 +161,7 @@ namespace OpenRA
var result = GetOrDefault(actor); var result = GetOrDefault(actor);
if (result == null) if (result == null)
throw new InvalidOperationException("Actor {0} does not have trait of type `{1}`".F(actor.Info.Name, typeof(T))); throw new InvalidOperationException("Actor {0} does not have trait of type `{1}`".F(actor.Info.Name, typeof(T)));
return result; return result;
} }
@@ -169,10 +170,12 @@ namespace OpenRA
++Queries; ++Queries;
var index = actors.BinarySearchMany(actor.ActorID); var index = actors.BinarySearchMany(actor.ActorID);
if (index >= actors.Count || actors[index] != actor) if (index >= actors.Count || actors[index] != actor)
return default(T); return default;
else if (index + 1 < actors.Count && actors[index + 1] == actor)
if (index + 1 < actors.Count && actors[index + 1] == actor)
throw new InvalidOperationException("Actor {0} has multiple traits of type `{1}`".F(actor.Info.Name, typeof(T))); throw new InvalidOperationException("Actor {0} has multiple traits of type `{1}`".F(actor.Info.Name, typeof(T)));
else return traits[index];
return traits[index];
} }
public IEnumerable<T> GetMultiple(uint actor) public IEnumerable<T> GetMultiple(uint actor)
@@ -229,6 +232,7 @@ namespace OpenRA
var current = actors[i]; var current = actors[i];
if (current == last) if (current == last)
continue; continue;
yield return current; yield return current;
last = current; last = current;
} }
@@ -244,6 +248,7 @@ namespace OpenRA
var current = actors[i]; var current = actors[i];
if (current == last || !predicate(traits[i])) if (current == last || !predicate(traits[i]))
continue; continue;
yield return current; yield return current;
last = current; last = current;
} }
@@ -282,9 +287,11 @@ namespace OpenRA
var startIndex = actors.BinarySearchMany(actor); var startIndex = actors.BinarySearchMany(actor);
if (startIndex >= actors.Count || actors[startIndex].ActorID != actor) if (startIndex >= actors.Count || actors[startIndex].ActorID != actor)
return; return;
var endIndex = startIndex + 1; var endIndex = startIndex + 1;
while (endIndex < actors.Count && actors[endIndex].ActorID == actor) while (endIndex < actors.Count && actors[endIndex].ActorID == actor)
endIndex++; endIndex++;
var count = endIndex - startIndex; var count = endIndex - startIndex;
actors.RemoveRange(startIndex, count); actors.RemoveRange(startIndex, count);
traits.RemoveRange(startIndex, count); traits.RemoveRange(startIndex, count);