Merge pull request #9759 from atlimit8/ActorsHavingTrait

Add ActorsHavingTrait<TTrait>()
This commit is contained in:
Oliver Brakmann
2015-11-04 22:26:10 +01:00
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)