Add INotifyClientMoving interface
This commit is contained in:
committed by
Matthias Mailänder
parent
d0974cfdd2
commit
82458b5f7e
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
readonly BodyOrientation body;
|
||||
readonly IMove move;
|
||||
readonly CPos targetCell;
|
||||
readonly INotifyHarvesterAction[] notifyHarvesterActions;
|
||||
readonly INotifyHarvestAction[] notifyHarvestActions;
|
||||
|
||||
public HarvestResource(Actor self, CPos targetCell)
|
||||
{
|
||||
@@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
claimLayer = self.World.WorldActor.Trait<ResourceClaimLayer>();
|
||||
resourceLayer = self.World.WorldActor.Trait<IResourceLayer>();
|
||||
this.targetCell = targetCell;
|
||||
notifyHarvesterActions = self.TraitsImplementing<INotifyHarvesterAction>().ToArray();
|
||||
notifyHarvestActions = self.TraitsImplementing<INotifyHarvestAction>().ToArray();
|
||||
}
|
||||
|
||||
protected override void OnFirstRun(Actor self)
|
||||
@@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
// Move towards the target cell
|
||||
if (self.Location != targetCell)
|
||||
{
|
||||
foreach (var n in notifyHarvesterActions)
|
||||
foreach (var n in notifyHarvestActions)
|
||||
n.MovingToResources(self, targetCell);
|
||||
|
||||
QueueChild(move.MoveTo(targetCell, 0));
|
||||
@@ -89,7 +89,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
harv.AcceptResource(self, resource.Type);
|
||||
|
||||
foreach (var t in notifyHarvesterActions)
|
||||
foreach (var t in notifyHarvestActions)
|
||||
t.Harvested(self, resource.Type);
|
||||
|
||||
QueueChild(new Wait(harvInfo.BaleLoadDelay));
|
||||
@@ -103,7 +103,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
public override void Cancel(Actor self, bool keepQueue = false)
|
||||
{
|
||||
foreach (var n in notifyHarvesterActions)
|
||||
foreach (var n in notifyHarvestActions)
|
||||
n.MovementCancelled(self);
|
||||
|
||||
base.Cancel(self, keepQueue);
|
||||
|
||||
@@ -22,14 +22,14 @@ namespace OpenRA.Mods.Common.Activities
|
||||
readonly DockClientManager dockClient;
|
||||
Actor dockHostActor;
|
||||
IDockHost dockHost;
|
||||
readonly INotifyHarvesterAction[] notifyHarvesterActions;
|
||||
readonly INotifyDockClientMoving[] notifyDockClientMoving;
|
||||
|
||||
public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null)
|
||||
{
|
||||
dockClient = self.Trait<DockClientManager>();
|
||||
this.dockHostActor = dockHostActor;
|
||||
this.dockHost = dockHost;
|
||||
notifyHarvesterActions = self.TraitsImplementing<INotifyHarvesterAction>().ToArray();
|
||||
notifyDockClientMoving = self.TraitsImplementing<INotifyDockClientMoving>().ToArray();
|
||||
}
|
||||
|
||||
public override bool Tick(Actor self)
|
||||
@@ -64,8 +64,8 @@ namespace OpenRA.Mods.Common.Activities
|
||||
{
|
||||
if (dockHost.QueueMoveActivity(this, dockHostActor, self, dockClient))
|
||||
{
|
||||
foreach (var n in notifyHarvesterActions)
|
||||
n.MovingToRefinery(self, dockHostActor);
|
||||
foreach (var ndcm in notifyDockClientMoving)
|
||||
ndcm.MovingToDock(self, dockHostActor, dockHost);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -84,8 +84,8 @@ namespace OpenRA.Mods.Common.Activities
|
||||
public override void Cancel(Actor self, bool keepQueue = false)
|
||||
{
|
||||
dockClient.UnreserveHost();
|
||||
foreach (var n in notifyHarvesterActions)
|
||||
n.MovementCancelled(self);
|
||||
foreach (var ndcm in notifyDockClientMoving)
|
||||
ndcm.MovementCancelled(self);
|
||||
|
||||
base.Cancel(self, keepQueue);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public override object Create(ActorInitializer init) { return new CarryableHarvester(); }
|
||||
}
|
||||
|
||||
public class CarryableHarvester : INotifyCreated, INotifyHarvesterAction
|
||||
public class CarryableHarvester : INotifyCreated, INotifyHarvestAction, INotifyDockClientMoving
|
||||
{
|
||||
ICallForTransport[] transports;
|
||||
|
||||
@@ -28,25 +28,30 @@ namespace OpenRA.Mods.Common.Traits
|
||||
transports = self.TraitsImplementing<ICallForTransport>().ToArray();
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell)
|
||||
void INotifyHarvestAction.MovingToResources(Actor self, CPos targetCell)
|
||||
{
|
||||
foreach (var t in transports)
|
||||
t.RequestTransport(self, targetCell);
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor)
|
||||
{
|
||||
var dock = refineryActor.Trait<IDockHost>();
|
||||
foreach (var t in transports)
|
||||
t.RequestTransport(self, self.World.Map.CellContaining(dock.DockPosition));
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.MovementCancelled(Actor self)
|
||||
void INotifyHarvestAction.MovementCancelled(Actor self)
|
||||
{
|
||||
foreach (var t in transports)
|
||||
t.MovementCancelled(self);
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.Harvested(Actor self, string resourceType) { }
|
||||
void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost host)
|
||||
{
|
||||
foreach (var t in transports)
|
||||
t.RequestTransport(self, self.World.Map.CellContaining(host.DockPosition));
|
||||
}
|
||||
|
||||
void INotifyDockClientMoving.MovementCancelled(Actor self)
|
||||
{
|
||||
foreach (var t in transports)
|
||||
t.MovementCancelled(self);
|
||||
}
|
||||
|
||||
void INotifyHarvestAction.Harvested(Actor self, string resourceType) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
public override object Create(ActorInitializer init) { return new WithHarvestAnimation(init, this); }
|
||||
}
|
||||
|
||||
public class WithHarvestAnimation : INotifyHarvesterAction
|
||||
public class WithHarvestAnimation : INotifyHarvestAction
|
||||
{
|
||||
public readonly WithHarvestAnimationInfo Info;
|
||||
readonly WithSpriteBody wsb;
|
||||
@@ -37,15 +37,14 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
wsb = init.Self.TraitsImplementing<WithSpriteBody>().Single(w => w.Info.Name == Info.Body);
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.Harvested(Actor self, string resourceType)
|
||||
void INotifyHarvestAction.Harvested(Actor self, string resourceType)
|
||||
{
|
||||
var sequence = wsb.NormalizeSequence(self, Info.HarvestSequence);
|
||||
if (wsb.DefaultAnimation.HasSequence(sequence) && wsb.DefaultAnimation.CurrentSequence.Name != sequence)
|
||||
wsb.PlayCustomAnimation(self, sequence);
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { }
|
||||
void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) { }
|
||||
void INotifyHarvesterAction.MovementCancelled(Actor self) { }
|
||||
void INotifyHarvestAction.MovingToResources(Actor self, CPos targetCell) { }
|
||||
void INotifyHarvestAction.MovementCancelled(Actor self) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
public override object Create(ActorInitializer init) { return new WithHarvestOverlay(init.Self, this); }
|
||||
}
|
||||
|
||||
sealed class WithHarvestOverlay : INotifyHarvesterAction
|
||||
sealed class WithHarvestOverlay : INotifyHarvestAction
|
||||
{
|
||||
readonly WithHarvestOverlayInfo info;
|
||||
readonly Animation anim;
|
||||
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
p => ZOffsetFromCenter(self, p, 0)), info.Palette);
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.Harvested(Actor self, string resourceType)
|
||||
void INotifyHarvestAction.Harvested(Actor self, string resourceType)
|
||||
{
|
||||
if (visible)
|
||||
return;
|
||||
@@ -63,9 +63,8 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
anim.PlayThen(info.Sequence, () => visible = false);
|
||||
}
|
||||
|
||||
void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { }
|
||||
void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor targetRefinery) { }
|
||||
void INotifyHarvesterAction.MovementCancelled(Actor self) { }
|
||||
void INotifyHarvestAction.MovingToResources(Actor self, CPos targetCell) { }
|
||||
void INotifyHarvestAction.MovementCancelled(Actor self) { }
|
||||
|
||||
public static int ZOffsetFromCenter(Actor self, WPos pos, int offset)
|
||||
{
|
||||
|
||||
@@ -170,6 +170,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[RequireExplicitImplementation]
|
||||
public interface INotifyDockClient { void Docked(Actor self, Actor host); void Undocked(Actor self, Actor host); }
|
||||
|
||||
[RequireExplicitImplementation]
|
||||
public interface INotifyDockClientMoving
|
||||
{
|
||||
void MovingToDock(Actor self, Actor hostActor, IDockHost host);
|
||||
void MovementCancelled(Actor self);
|
||||
}
|
||||
|
||||
[RequireExplicitImplementation]
|
||||
public interface INotifyResourceAccepted { void OnResourceAccepted(Actor self, Actor refinery, string resourceType, int count, int value); }
|
||||
public interface INotifyParachute { void OnParachute(Actor self); void OnLanded(Actor self); }
|
||||
@@ -202,12 +209,11 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[RequireExplicitImplementation]
|
||||
public interface INotifyExitedCargo { void OnExitedCargo(Actor self, Actor cargo); }
|
||||
|
||||
public interface INotifyHarvesterAction
|
||||
public interface INotifyHarvestAction
|
||||
{
|
||||
void MovingToResources(Actor self, CPos targetCell);
|
||||
void MovingToRefinery(Actor self, Actor refineryActor);
|
||||
void MovementCancelled(Actor self);
|
||||
void Harvested(Actor self, string resourceType);
|
||||
void MovingToResources(Actor self, CPos targetCell);
|
||||
void MovementCancelled(Actor self);
|
||||
}
|
||||
|
||||
public interface IDockClientInfo : ITraitInfoInterface { }
|
||||
|
||||
Reference in New Issue
Block a user