Use Refinery reference in HarvesterDockSequence

This commit is contained in:
Gustas
2023-01-12 16:46:45 +02:00
committed by abcdefg30
parent f56b0ea0d0
commit f5aa2f153a
5 changed files with 28 additions and 26 deletions

View File

@@ -20,11 +20,11 @@ namespace OpenRA.Mods.Cnc.Activities
readonly WithVoxelUnloadBody body; readonly WithVoxelUnloadBody body;
readonly WithDockingOverlay spriteOverlay; readonly WithDockingOverlay spriteOverlay;
public VoxelHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, in WVec dragOffset, int dragLength) public VoxelHarvesterDockSequence(Actor self, Actor refineryActor, Refinery refinery)
: base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) : base(self, refineryActor, refinery)
{ {
body = self.Trait<WithVoxelUnloadBody>(); body = self.Trait<WithVoxelUnloadBody>();
spriteOverlay = refinery.TraitOrDefault<WithDockingOverlay>(); spriteOverlay = RefineryActor.TraitOrDefault<WithDockingOverlay>();
} }
public override void OnStateDock(Actor self) public override void OnStateDock(Actor self)
@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Cnc.Activities
// If body.Docked wasn't set, we didn't actually dock and have to skip the undock overlay // If body.Docked wasn't set, we didn't actually dock and have to skip the undock overlay
if (!body.Docked) if (!body.Docked)
dockingState = DockingState.Complete; dockingState = DockingState.Complete;
else if (Refinery.IsInWorld && !Refinery.IsDead && spriteOverlay != null && !spriteOverlay.Visible) else if (RefineryActor.IsInWorld && !RefineryActor.IsDead && spriteOverlay != null && !spriteOverlay.Visible)
{ {
dockingState = DockingState.Wait; dockingState = DockingState.Wait;
spriteOverlay.Visible = true; spriteOverlay.Visible = true;

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.Cnc.Traits
public override Activity DockSequence(Actor harv, Actor self) public override Activity DockSequence(Actor harv, Actor self)
{ {
return new VoxelHarvesterDockSequence(harv, self, DeliveryAngle, IsDragRequired, DragOffset, DragLength); return new VoxelHarvesterDockSequence(harv, self, this);
} }
} }
} }

View File

@@ -23,7 +23,8 @@ namespace OpenRA.Mods.Common.Activities
{ {
protected enum DockingState { Wait, Turn, Drag, Dock, Loop, Undock, Complete } protected enum DockingState { Wait, Turn, Drag, Dock, Loop, Undock, Complete }
protected readonly Actor Refinery; protected readonly Actor RefineryActor;
protected readonly Refinery Refinery;
protected readonly Harvester Harv; protected readonly Harvester Harv;
protected readonly WAngle DockAngle; protected readonly WAngle DockAngle;
protected readonly bool IsDragRequired; protected readonly bool IsDragRequired;
@@ -37,19 +38,20 @@ namespace OpenRA.Mods.Common.Activities
readonly INotifyDockClient[] notifyDockClients; readonly INotifyDockClient[] notifyDockClients;
readonly INotifyDockHost[] notifyDockHosts; readonly INotifyDockHost[] notifyDockHosts;
public HarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, in WVec dragOffset, int dragLength) public HarvesterDockSequence(Actor self, Actor refineryActor, Refinery refinery)
{ {
dockingState = DockingState.Turn; dockingState = DockingState.Turn;
Refinery = refinery; Refinery = refinery;
DockAngle = dockAngle; RefineryActor = refineryActor;
IsDragRequired = isDragRequired; DockAngle = refinery.DeliveryAngle;
DragOffset = dragOffset; IsDragRequired = refinery.IsDragRequired;
DragLength = dragLength; DragOffset = refinery.DragOffset;
DragLength = refinery.DragLength;
Harv = self.Trait<Harvester>(); Harv = self.Trait<Harvester>();
StartDrag = self.CenterPosition; StartDrag = self.CenterPosition;
EndDrag = refinery.CenterPosition + DragOffset; EndDrag = refineryActor.CenterPosition + DragOffset;
notifyDockClients = self.TraitsImplementing<INotifyDockClient>().ToArray(); notifyDockClients = self.TraitsImplementing<INotifyDockClient>().ToArray();
notifyDockHosts = refinery.TraitsImplementing<INotifyDockHost>().ToArray(); notifyDockHosts = refineryActor.TraitsImplementing<INotifyDockHost>().ToArray();
} }
public override bool Tick(Actor self) public override bool Tick(Actor self)
@@ -65,7 +67,7 @@ namespace OpenRA.Mods.Common.Activities
return false; return false;
case DockingState.Drag: case DockingState.Drag:
if (IsCanceling || !Refinery.IsInWorld || Refinery.IsDead || Harv.IsTraitDisabled) if (IsCanceling || !RefineryActor.IsInWorld || RefineryActor.IsDead || Harv.IsTraitDisabled)
return true; return true;
dockingState = DockingState.Dock; dockingState = DockingState.Dock;
@@ -75,7 +77,7 @@ namespace OpenRA.Mods.Common.Activities
return false; return false;
case DockingState.Dock: case DockingState.Dock:
if (!IsCanceling && Refinery.IsInWorld && !Refinery.IsDead && !Harv.IsTraitDisabled) if (!IsCanceling && RefineryActor.IsInWorld && !RefineryActor.IsDead && !Harv.IsTraitDisabled)
{ {
OnStateDock(self); OnStateDock(self);
NotifyDocked(self); NotifyDocked(self);
@@ -86,7 +88,7 @@ namespace OpenRA.Mods.Common.Activities
return false; return false;
case DockingState.Loop: case DockingState.Loop:
if (IsCanceling || !Refinery.IsInWorld || Refinery.IsDead || Harv.IsTraitDisabled || Harv.TickUnload(self, Refinery)) if (IsCanceling || !RefineryActor.IsInWorld || RefineryActor.IsDead || Harv.IsTraitDisabled || Harv.TickUnload(self, RefineryActor))
dockingState = DockingState.Undock; dockingState = DockingState.Undock;
return false; return false;
@@ -110,12 +112,12 @@ namespace OpenRA.Mods.Common.Activities
public override IEnumerable<Target> GetTargets(Actor self) public override IEnumerable<Target> GetTargets(Actor self)
{ {
yield return Target.FromActor(Refinery); yield return Target.FromActor(RefineryActor);
} }
public override IEnumerable<TargetLineNode> TargetLineNodes(Actor self) public override IEnumerable<TargetLineNode> TargetLineNodes(Actor self)
{ {
yield return new TargetLineNode(Target.FromActor(Refinery), Color.Green); yield return new TargetLineNode(Target.FromActor(RefineryActor), Color.Green);
} }
public abstract void OnStateDock(Actor self); public abstract void OnStateDock(Actor self);
@@ -125,20 +127,20 @@ namespace OpenRA.Mods.Common.Activities
void NotifyDocked(Actor self) void NotifyDocked(Actor self)
{ {
foreach (var nd in notifyDockClients) foreach (var nd in notifyDockClients)
nd.Docked(self, Refinery); nd.Docked(self, RefineryActor);
foreach (var nd in notifyDockHosts) foreach (var nd in notifyDockHosts)
nd.Docked(Refinery, self); nd.Docked(RefineryActor, self);
} }
void NotifyUndocked(Actor self) void NotifyUndocked(Actor self)
{ {
foreach (var nd in notifyDockClients) foreach (var nd in notifyDockClients)
nd.Undocked(self, Refinery); nd.Undocked(self, RefineryActor);
if (Refinery.IsInWorld && !Refinery.IsDead) if (RefineryActor.IsInWorld && !RefineryActor.IsDead)
foreach (var nd in notifyDockHosts) foreach (var nd in notifyDockHosts)
nd.Undocked(Refinery, self); nd.Undocked(RefineryActor, self);
} }
} }
} }

View File

@@ -20,8 +20,8 @@ namespace OpenRA.Mods.Common.Activities
readonly WithDockingAnimationInfo wda; readonly WithDockingAnimationInfo wda;
protected bool dockAnimPlayed; protected bool dockAnimPlayed;
public SpriteHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, in WVec dragOffset, int dragLength) public SpriteHarvesterDockSequence(Actor self, Actor refineryActor, Refinery refinery)
: base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) : base(self, refineryActor, refinery)
{ {
wsb = self.Trait<WithSpriteBody>(); wsb = self.Trait<WithSpriteBody>();
wda = self.Info.TraitInfoOrDefault<WithDockingAnimationInfo>(); wda = self.Info.TraitInfoOrDefault<WithDockingAnimationInfo>();

View File

@@ -91,7 +91,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual Activity DockSequence(Actor harv, Actor self) public virtual Activity DockSequence(Actor harv, Actor self)
{ {
return new SpriteHarvesterDockSequence(harv, self, DeliveryAngle, IsDragRequired, DragOffset, DragLength); return new SpriteHarvesterDockSequence(harv, self, this);
} }
public IEnumerable<TraitPair<Harvester>> GetLinkedHarvesters() public IEnumerable<TraitPair<Harvester>> GetLinkedHarvesters()