Fix FreeActorWithDelivery not being properly conditional

This commit is contained in:
abcdefg30
2020-02-03 19:12:49 +01:00
committed by Matthias Mailänder
parent eb007fc43c
commit a7d5b7b8b0
3 changed files with 18 additions and 9 deletions

View File

@@ -58,7 +58,7 @@ namespace OpenRA.Mods.Common.Traits
public class FreeActor : ConditionalTrait<FreeActorInfo>
{
bool allowSpawn;
protected bool allowSpawn;
public FreeActor(ActorInitializer init, FreeActorInfo info)
: base(info)

View File

@@ -36,18 +36,26 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new FreeActorWithDelivery(init, this); }
}
public class FreeActorWithDelivery
public class FreeActorWithDelivery : FreeActor
{
public readonly FreeActorWithDeliveryInfo Info;
readonly FreeActorWithDeliveryInfo info;
readonly Actor self;
public FreeActorWithDelivery(ActorInitializer init, FreeActorWithDeliveryInfo info)
: base(init, info)
{
self = init.Self;
Info = info;
this.info = info;
}
DoDelivery(self.Location + info.DeliveryOffset, info.Actor, info.DeliveringActor);
protected override void TraitEnabled(Actor self)
{
if (!allowSpawn)
return;
allowSpawn = info.AllowRespawn;
DoDelivery(self.Location + info.DeliveryOffset, Info.Actor, info.DeliveringActor);
}
public void DoDelivery(CPos location, string actorName, string carrierActorName)
@@ -61,7 +69,7 @@ namespace OpenRA.Mods.Common.Traits
carryable.Reserve(cargo, carrier);
carrier.Trait<Carryall>().AttachCarryable(carrier, cargo);
carrier.QueueActivity(new DeliverUnit(carrier, Target.FromCell(self.World, location), Info.DeliveryRange));
carrier.QueueActivity(new DeliverUnit(carrier, Target.FromCell(self.World, location), info.DeliveryRange));
carrier.QueueActivity(new Fly(carrier, Target.FromCell(self.World, self.World.Map.ChooseRandomEdgeCell(self.World.SharedRandom))));
carrier.QueueActivity(new RemoveSelf());
@@ -71,7 +79,7 @@ namespace OpenRA.Mods.Common.Traits
void CreateActors(string actorName, string deliveringActorName, out Actor cargo, out Actor carrier)
{
// Get a carryall spawn location
var location = Info.SpawnLocation;
var location = info.SpawnLocation;
if (location == CPos.Zero)
location = self.World.Map.ChooseClosestEdgeCell(self.Location);

View File

@@ -41,7 +41,8 @@ namespace OpenRA.Mods.D2k.Traits
return;
var delivery = refinery.Trait<FreeActorWithDelivery>();
delivery.DoDelivery(refinery.Location + delivery.Info.DeliveryOffset, delivery.Info.Actor, delivery.Info.DeliveringActor);
var deliveryInfo = delivery.Info as FreeActorWithDeliveryInfo;
delivery.DoDelivery(refinery.Location + deliveryInfo.DeliveryOffset, deliveryInfo.Actor, deliveryInfo.DeliveringActor);
}
}
}