Added callback in Passenger during unload from cargo just before the actor is added back to the world

This commit is contained in:
michaeldgg2
2023-09-27 20:55:07 +02:00
committed by Gustas
parent bc37d7169d
commit 12fb091bbc
3 changed files with 16 additions and 3 deletions

View File

@@ -119,11 +119,12 @@ namespace OpenRA.Mods.Common.Activities
var move = actor.Trait<IMove>();
var pos = actor.Trait<IPositionable>();
var passenger = actor.Trait<Passenger>();
pos.SetPosition(actor, exitSubCell.Value.Cell, exitSubCell.Value.SubCell);
pos.SetCenterPosition(actor, spawn);
actor.CancelActivity();
passenger.OnBeforeAddedToWorld(actor);
w.Add(actor);
});
}

View File

@@ -428,8 +428,7 @@ namespace OpenRA.Mods.Common.Traits
foreach (var nbm in nbms)
nbm.OnNotifyBlockingMove(passenger, passenger);
// For show.
passenger.QueueActivity(new Nudge(passenger));
passenger.Trait<Passenger>().OnEjectedFromKilledCargo(passenger);
}
else
passenger.Kill(e.Attacker);

View File

@@ -207,6 +207,19 @@ namespace OpenRA.Mods.Common.Traits
ReservedCargo = null;
}
public virtual void OnBeforeAddedToWorld(Actor actor)
{
actor.CancelActivity();
}
public virtual void OnEjectedFromKilledCargo(Actor self)
{
// Cancel all other activities to keep consistent behavior with the one in UnloadCargo.
self.CurrentActivity?.Cancel(self);
self.QueueActivity(new Nudge(self));
}
void INotifyKilled.Killed(Actor self, AttackInfo e)
{
if (Transport == null)