Remove InitialActivity

This commit is contained in:
reaperrr
2015-07-07 03:48:25 +02:00
parent 69c49c0139
commit 1baae6653c
11 changed files with 22 additions and 31 deletions

View File

@@ -29,9 +29,6 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Disable production when there are more than this many of this actor on the battlefield. Set to 0 to disable.")]
public readonly int BuildLimit = 0;
[Desc("What the unit should start doing. Warning: If this is not a harvester", "it will break if you use FindResources.")]
public readonly string InitialActivity = null;
[Desc("Force a specific race variant, overriding the race of the producing actor.")]
public readonly string ForceRace = null;

View File

@@ -8,13 +8,12 @@
*/
#endregion
using OpenRA.Activities;
using OpenRA.Primitives;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Player recives a unit for free once the building is placed. This also works for structures.",
[Desc("Player receives a unit for free once the building is placed. This also works for structures.",
"If you want more than one unit to appear copy this section and assign IDs like FreeActor@2, ...")]
public class FreeActorInfo : ITraitInfo
{
@@ -22,9 +21,6 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Name of the actor.")]
public readonly string Actor = null;
[Desc("What the unit should start doing. Warning: If this is not a harvester", "it will break if you use FindResources.")]
public readonly string InitialActivity = null;
[Desc("Offset relative to the top-left cell of the building.")]
public readonly CVec SpawnOffset = CVec.Zero;
@@ -43,16 +39,13 @@ namespace OpenRA.Mods.Common.Traits
init.Self.World.AddFrameEndTask(w =>
{
var a = w.CreateActor(info.Actor, new TypeDictionary
w.CreateActor(info.Actor, new TypeDictionary
{
new ParentActorInit(init.Self),
new LocationInit(init.Self.Location + info.SpawnOffset),
new OwnerInit(init.Self.Owner),
new FacingInit(info.Facing),
});
if (info.InitialActivity != null)
a.QueueActivity(Game.CreateObject<Activity>(info.InitialActivity));
});
}
}

View File

@@ -42,6 +42,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Percentage of maximum speed when fully loaded.")]
public readonly int FullyLoadedSpeed = 85;
[Desc("Automatically scan for resources when created.")]
public readonly bool SearchOnCreation = true;
[Desc("Initial search radius (in cells) from the refinery that created us.")]
public readonly int SearchFromProcRadius = 24;
@@ -55,8 +58,8 @@ namespace OpenRA.Mods.Common.Traits
}
public class Harvester : IIssueOrder, IResolveOrder, IPips,
IExplodeModifier, IOrderVoice, ISpeedModifier, ISync,
INotifyResourceClaimLost, INotifyIdle, INotifyBlockingMove
IExplodeModifier, IOrderVoice, ISpeedModifier, ISync, INotifyCreated,
INotifyResourceClaimLost, INotifyIdle, INotifyBlockingMove, INotifyBuildComplete
{
readonly HarvesterInfo info;
Dictionary<ResourceTypeInfo, int> contents = new Dictionary<ResourceTypeInfo, int>();
@@ -76,6 +79,18 @@ namespace OpenRA.Mods.Common.Traits
self.QueueActivity(new CallFunc(() => ChooseNewProc(self, null)));
}
public void Created(Actor self)
{
if (info.SearchOnCreation)
self.QueueActivity(new FindResources());
}
public void BuildingComplete(Actor self)
{
if (info.SearchOnCreation)
self.QueueActivity(new FindResources());
}
public void SetProcLines(Actor proc)
{
if (proc == null) return;

View File

@@ -96,9 +96,6 @@ namespace OpenRA.Mods.Common.Traits
foreach (var notify in notifyOthers)
notify.Trait.UnitProducedByOther(notify.Actor, self, newUnit);
if (bi != null && bi.InitialActivity != null)
newUnit.QueueActivity(Game.CreateObject<Activity>(bi.InitialActivity));
foreach (var t in newUnit.TraitsImplementing<INotifyBuildComplete>())
t.BuildingComplete(newUnit);
});

View File

@@ -51,19 +51,16 @@ namespace OpenRA.Mods.D2k.Traits
self = init.Self;
Info = info;
DoDelivery(self.Location + info.DeliveryOffset, info.Actor, info.DeliveringActor, info.InitialActivity);
DoDelivery(self.Location + info.DeliveryOffset, info.Actor, info.DeliveringActor);
}
public void DoDelivery(CPos location, string actorName, string carrierActorName, string clientInitialActivity)
public void DoDelivery(CPos location, string actorName, string carrierActorName)
{
Actor cargo;
Actor carrier;
CreateActors(actorName, carrierActorName, out cargo, out carrier);
if (clientInitialActivity != null)
cargo.QueueActivity(Game.CreateObject<Activity>(clientInitialActivity));
var carryable = cargo.Trait<Carryable>();
carryable.Destination = location;
carryable.Reserve(carrier);

View File

@@ -68,10 +68,6 @@ namespace OpenRA.Mods.D2k.Traits
foreach (var notify in notifyOthers)
notify.Trait.UnitProducedByOther(notify.Actor, self, newUnit);
var bi = newUnit.Info.Traits.GetOrDefault<BuildableInfo>();
if (bi != null && bi.InitialActivity != null)
newUnit.QueueActivity(Game.CreateObject<Activity>(bi.InitialActivity));
foreach (var t in newUnit.TraitsImplementing<INotifyBuildComplete>())
t.BuildingComplete(newUnit);
});

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Mods.D2k.Traits
var refinery = refineries.First().Actor;
var delivery = refinery.Trait<FreeActorWithDelivery>();
delivery.DoDelivery(refinery.Location + delivery.Info.DeliveryOffset, delivery.Info.Actor,
delivery.Info.DeliveringActor, delivery.Info.InitialActivity);
delivery.Info.DeliveringActor);
}
}
}

View File

@@ -180,7 +180,6 @@ PROC:
Value: 500
FreeActor:
Actor: HARV
InitialActivity: FindResources
SpawnOffset: 1,2
Facing: 64
WithResources:

View File

@@ -203,7 +203,6 @@ refinery:
Value: 500
FreeActorWithDelivery:
Actor: harvester
InitialActivity: FindResources
DeliveryOffset: 2,2
DeliveringActor: carryall.reinforce
Facing: 160

View File

@@ -972,7 +972,6 @@ PROC:
Value: 600
FreeActor:
Actor: HARV
InitialActivity: FindResources
SpawnOffset: 1,2
Facing: 64
InfiltrateForCash:

View File

@@ -83,7 +83,6 @@ PROC:
Value: 600
FreeActor:
Actor: HARV
InitialActivity: FindResources
SpawnOffset: 3,1
Facing: 160
WithIdleOverlay@REDLIGHTS: