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

@@ -100,9 +100,8 @@ namespace OpenRA.Mods.D2k.Traits
public Actor GetClosestIdleCarrier()
{
// Find carriers
var carriers = self.World.ActorsWithTrait<Carryall>()
.Where(p => p.Actor.Owner == self.Owner && !p.Trait.IsBusy && p.Actor.IsInWorld)
.Select(h => h.Actor);
var carriers = self.World.ActorsHavingTrait<Carryall>(c => !c.IsBusy)
.Where(a => a.Owner == self.Owner && a.IsInWorld);
return carriers.ClosestTo(self);
}

View File

@@ -31,15 +31,15 @@ namespace OpenRA.Mods.D2k.Traits
public void TryActivate()
{
var harvesters = self.World.ActorsWithTrait<Harvester>().Where(x => x.Actor.Owner == self.Owner);
var harvesters = self.World.ActorsHavingTrait<Harvester>().Where(x => x.Owner == self.Owner);
if (harvesters.Any())
return;
var refineries = self.World.ActorsWithTrait<Refinery>().Where(x => x.Actor.Owner == self.Owner);
var refineries = self.World.ActorsHavingTrait<Refinery>().Where(x => x.Owner == self.Owner);
if (!refineries.Any())
return;
var refinery = refineries.First().Actor;
var refinery = refineries.First();
var delivery = refinery.Trait<FreeActorWithDelivery>();
delivery.DoDelivery(refinery.Location + delivery.Info.DeliveryOffset, delivery.Info.Actor,
delivery.Info.DeliveringActor);

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Mods.D2k.Traits
public WormManager(Actor self, WormManagerInfo info)
{
this.info = info;
spawnPointActors = Exts.Lazy(() => self.World.ActorsWithTrait<WormSpawner>().Select(x => x.Actor).ToArray());
spawnPointActors = Exts.Lazy(() => self.World.ActorsHavingTrait<WormSpawner>().ToArray());
}
public void Tick(Actor self)