Add ActorsHavingTrait<TTrait>([Func<TTrait, bool])
This commit is contained in:
@@ -185,8 +185,7 @@ namespace OpenRA.Graphics
|
||||
|
||||
if (World.Type == WorldType.Regular && Game.Settings.Game.AlwaysShowStatusBars)
|
||||
{
|
||||
foreach (var g in World.Actors.Where(a => !a.Disposed
|
||||
&& a.Info.HasTraitInfo<SelectableInfo>()
|
||||
foreach (var g in World.ActorsHavingTrait<Selectable>().Where(a => !a.Disposed
|
||||
&& !World.FogObscures(a)
|
||||
&& !World.Selection.Actors.Contains(a)))
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -351,6 +351,16 @@ namespace OpenRA
|
||||
return TraitDict.ActorsWithTrait<T>();
|
||||
}
|
||||
|
||||
public IEnumerable<Actor> ActorsHavingTrait<T>()
|
||||
{
|
||||
return TraitDict.ActorsHavingTrait<T>();
|
||||
}
|
||||
|
||||
public IEnumerable<Actor> ActorsHavingTrait<T>(Func<T, bool> predicate)
|
||||
{
|
||||
return TraitDict.ActorsHavingTrait<T>(predicate);
|
||||
}
|
||||
|
||||
public void OnPlayerWinStateChanged(Player player)
|
||||
{
|
||||
var pi = gameInfo.GetPlayer(player);
|
||||
|
||||
Reference in New Issue
Block a user