Skip to content

Commit

Permalink
Restored the hack to make Chrono Miner force unload work again.
Browse files Browse the repository at this point in the history
  • Loading branch information
MustaphaTR committed Nov 25, 2023
1 parent 3b52918 commit 767e146
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 14 deletions.
12 changes: 7 additions & 5 deletions OpenRA.Mods.AS/Activities/ChronoResourceTeleport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,16 @@ public class ChronoResourceTeleport : Activity
readonly CPos destination;
readonly ChronoResourceDeliveryInfo info;
readonly CPos harvestedField;
readonly Actor refinery;
readonly Actor hostActor;
readonly IDockHost host;

public ChronoResourceTeleport(CPos destination, ChronoResourceDeliveryInfo info, CPos harvestedField, Actor refinery)
public ChronoResourceTeleport(CPos destination, ChronoResourceDeliveryInfo info, CPos harvestedField, Actor hostActor, IDockHost host)
{
this.destination = destination;
this.info = info;
this.harvestedField = harvestedField;
this.refinery = refinery;
this.hostActor = hostActor;
this.host = host;
}

public override bool Tick(Actor self)
Expand Down Expand Up @@ -58,10 +60,10 @@ public override bool Tick(Actor self)
if (info.WarpOutSound != null && (info.AudibleThroughFog || !self.World.FogObscures(sourcepos)))
Game.Sound.Play(SoundType.World, info.WarpOutSound, self.CenterPosition, info.SoundVolume);

if (refinery == null)
if (hostActor == null)
self.QueueActivity(new FindAndDeliverResources(self, harvestedField));
else
self.QueueActivity(new FindAndDeliverResources(self, refinery.Location));
self.QueueActivity(new MoveToDock(self, hostActor, host, true));

return true;
}
Expand Down
10 changes: 6 additions & 4 deletions OpenRA.Mods.AS/Traits/ChronoResourceDelivery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ public class ChronoResourceDeliveryInfo : ConditionalTraitInfo, Requires<Harvest
public class ChronoResourceDelivery : ConditionalTrait<ChronoResourceDeliveryInfo>, INotifyHarvestAction, INotifyDockClientMoving, ITick
{
CPos? destination = null;
Actor refinery = null;
Actor forcedHostActor = null;
IDockHost forcedHost = null;
CPos harvestedField;
int ticksTillCheck = 0;

Expand All @@ -78,7 +79,7 @@ void ITick.Tick(Actor self)
ticksTillCheck--;
}

void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost host)
void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost host, bool forceEnter)
{
var deliverypos = self.World.Map.CellContaining(host.DockPosition);

Expand All @@ -87,7 +88,8 @@ void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost

harvestedField = self.World.Map.CellContaining(self.CenterPosition);

refinery = hostActor;
forcedHostActor = forceEnter ? hostActor : null;
forcedHost = forceEnter ? host : null;
destination = deliverypos;
}

Expand All @@ -111,7 +113,7 @@ void TeleportIfPossible(Actor self)
var pos = self.Trait<IPositionable>();
if (pos.CanEnterCell(destination.Value))
{
self.QueueActivity(false, new ChronoResourceTeleport(destination.Value, Info, harvestedField, refinery));
self.QueueActivity(false, new ChronoResourceTeleport(destination.Value, Info, harvestedField, forcedHostActor, forcedHost));
Reset();
}
}
Expand Down
6 changes: 4 additions & 2 deletions OpenRA.Mods.Common/Activities/MoveToDock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,18 @@ namespace OpenRA.Mods.Common.Activities
public class MoveToDock : Activity
{
readonly DockClientManager dockClient;
readonly bool forceEnter;
Actor dockHostActor;
IDockHost dockHost;
readonly INotifyDockClientMoving[] notifyDockClientMoving;

public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null)
public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null, bool forceEnter = false)
{
ActivityType = ActivityType.Move;
dockClient = self.Trait<DockClientManager>();
this.dockHostActor = dockHostActor;
this.dockHost = dockHost;
this.forceEnter = forceEnter;
notifyDockClientMoving = self.TraitsImplementing<INotifyDockClientMoving>().ToArray();
}

Expand Down Expand Up @@ -66,7 +68,7 @@ public override bool Tick(Actor self)
if (dockHost.QueueMoveActivity(this, dockHostActor, self, dockClient))
{
foreach (var ndcm in notifyDockClientMoving)
ndcm.MovingToDock(self, dockHostActor, dockHost);
ndcm.MovingToDock(self, dockHostActor, dockHost, forceEnter);

return false;
}
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Mods.Common/Traits/CarryableHarvester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ void INotifyHarvestAction.MovementCancelled(Actor self)
t.MovementCancelled(self);
}

void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost host)
void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost host, bool forceEnter)
{
foreach (var t in transports)
t.RequestTransport(self, self.World.Map.CellContaining(host.DockPosition));
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Mods.Common/Traits/DockClientManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ void IResolveOrder.ResolveOrder(Actor self, Order order)
if (!dock.HasValue)
return;

self.QueueActivity(order.Queued, new MoveToDock(self, dock.Value.Actor, dock.Value.Trait));
self.QueueActivity(order.Queued, new MoveToDock(self, dock.Value.Actor, dock.Value.Trait, true));
self.ShowTargetLines();
}
}
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Mods.Common/TraitsInterfaces.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ public interface INotifyDockClient { void Docked(Actor self, Actor host); void U
[RequireExplicitImplementation]
public interface INotifyDockClientMoving
{
void MovingToDock(Actor self, Actor hostActor, IDockHost host);
void MovingToDock(Actor self, Actor hostActor, IDockHost host, bool forceEnter);
void MovementCancelled(Actor self);
}

Expand Down

0 comments on commit 767e146

Please sign in to comment.