Add ActorsHavingTrait<TTrait>([Func<TTrait, bool])

This commit is contained in:
atlimit8
2015-10-25 04:45:53 -05:00
parent 0997f5b52f
commit b6f17df260
27 changed files with 132 additions and 125 deletions

View File

@@ -107,6 +107,16 @@ namespace OpenRA
return InnerGet<T>().All();
}
public IEnumerable<Actor> ActorsHavingTrait<T>()
{
return InnerGet<T>().Actors();
}
public IEnumerable<Actor> ActorsHavingTrait<T>(Func<T, bool> predicate)
{
return InnerGet<T>().Actors(predicate);
}
public void RemoveActor(Actor a)
{
foreach (var t in traits)
@@ -196,6 +206,33 @@ namespace OpenRA
return new AllEnumerable(this);
}
public IEnumerable<Actor> Actors()
{
++Queries;
Actor last = null;
for (var i = 0; i < actors.Count; i++)
{
if (actors[i] == last)
continue;
yield return actors[i];
last = actors[i];
}
}
public IEnumerable<Actor> Actors(Func<T, bool> predicate)
{
++Queries;
Actor last = null;
for (var i = 0; i < actors.Count; i++)
{
if (actors[i] == last || !predicate(traits[i]))
continue;
yield return actors[i];
last = actors[i];
}
}
class AllEnumerable : IEnumerable<TraitPair<T>>
{
readonly TraitContainer<T> container;