diff --git a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs index 5164f644db..e94ab5d013 100644 --- a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs +++ b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs @@ -20,11 +20,11 @@ namespace OpenRA.Mods.Cnc.Activities readonly WithVoxelUnloadBody body; readonly WithDockingOverlay spriteOverlay; - public VoxelHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, in WVec dragOffset, int dragLength) - : base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) + public VoxelHarvesterDockSequence(Actor self, Actor refineryActor, Refinery refinery) + : base(self, refineryActor, refinery) { body = self.Trait(); - spriteOverlay = refinery.TraitOrDefault(); + spriteOverlay = RefineryActor.TraitOrDefault(); } 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) 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; spriteOverlay.Visible = true; diff --git a/OpenRA.Mods.Cnc/Traits/Buildings/TiberianSunRefinery.cs b/OpenRA.Mods.Cnc/Traits/Buildings/TiberianSunRefinery.cs index 687483f086..616ac92c9b 100644 --- a/OpenRA.Mods.Cnc/Traits/Buildings/TiberianSunRefinery.cs +++ b/OpenRA.Mods.Cnc/Traits/Buildings/TiberianSunRefinery.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.Cnc.Traits public override Activity DockSequence(Actor harv, Actor self) { - return new VoxelHarvesterDockSequence(harv, self, DeliveryAngle, IsDragRequired, DragOffset, DragLength); + return new VoxelHarvesterDockSequence(harv, self, this); } } } diff --git a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs index d2c184c172..a6cb230f14 100644 --- a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs @@ -23,7 +23,8 @@ namespace OpenRA.Mods.Common.Activities { 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 WAngle DockAngle; protected readonly bool IsDragRequired; @@ -37,19 +38,20 @@ namespace OpenRA.Mods.Common.Activities readonly INotifyDockClient[] notifyDockClients; 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; Refinery = refinery; - DockAngle = dockAngle; - IsDragRequired = isDragRequired; - DragOffset = dragOffset; - DragLength = dragLength; + RefineryActor = refineryActor; + DockAngle = refinery.DeliveryAngle; + IsDragRequired = refinery.IsDragRequired; + DragOffset = refinery.DragOffset; + DragLength = refinery.DragLength; Harv = self.Trait(); StartDrag = self.CenterPosition; - EndDrag = refinery.CenterPosition + DragOffset; + EndDrag = refineryActor.CenterPosition + DragOffset; notifyDockClients = self.TraitsImplementing().ToArray(); - notifyDockHosts = refinery.TraitsImplementing().ToArray(); + notifyDockHosts = refineryActor.TraitsImplementing().ToArray(); } public override bool Tick(Actor self) @@ -65,7 +67,7 @@ namespace OpenRA.Mods.Common.Activities return false; case DockingState.Drag: - if (IsCanceling || !Refinery.IsInWorld || Refinery.IsDead || Harv.IsTraitDisabled) + if (IsCanceling || !RefineryActor.IsInWorld || RefineryActor.IsDead || Harv.IsTraitDisabled) return true; dockingState = DockingState.Dock; @@ -75,7 +77,7 @@ namespace OpenRA.Mods.Common.Activities return false; case DockingState.Dock: - if (!IsCanceling && Refinery.IsInWorld && !Refinery.IsDead && !Harv.IsTraitDisabled) + if (!IsCanceling && RefineryActor.IsInWorld && !RefineryActor.IsDead && !Harv.IsTraitDisabled) { OnStateDock(self); NotifyDocked(self); @@ -86,7 +88,7 @@ namespace OpenRA.Mods.Common.Activities return false; 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; return false; @@ -110,12 +112,12 @@ namespace OpenRA.Mods.Common.Activities public override IEnumerable GetTargets(Actor self) { - yield return Target.FromActor(Refinery); + yield return Target.FromActor(RefineryActor); } public override IEnumerable 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); @@ -125,20 +127,20 @@ namespace OpenRA.Mods.Common.Activities void NotifyDocked(Actor self) { foreach (var nd in notifyDockClients) - nd.Docked(self, Refinery); + nd.Docked(self, RefineryActor); foreach (var nd in notifyDockHosts) - nd.Docked(Refinery, self); + nd.Docked(RefineryActor, self); } void NotifyUndocked(Actor self) { 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) - nd.Undocked(Refinery, self); + nd.Undocked(RefineryActor, self); } } } diff --git a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs index c42ede4652..e1ed2527b9 100644 --- a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs @@ -20,8 +20,8 @@ namespace OpenRA.Mods.Common.Activities readonly WithDockingAnimationInfo wda; protected bool dockAnimPlayed; - public SpriteHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, in WVec dragOffset, int dragLength) - : base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) + public SpriteHarvesterDockSequence(Actor self, Actor refineryActor, Refinery refinery) + : base(self, refineryActor, refinery) { wsb = self.Trait(); wda = self.Info.TraitInfoOrDefault(); diff --git a/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs b/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs index b1e76ecc07..d8cb5a3607 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs @@ -91,7 +91,7 @@ namespace OpenRA.Mods.Common.Traits 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> GetLinkedHarvesters()