public EnterBunker(Actor passengerActor, Actor bunkerActor, WPos pos, bool willDisappear = true, int maxTries = 0, bool repathWhileMoving = true) : base(passengerActor, Target.FromActor(bunkerActor)) { this.bunkerActor = bunkerActor; bunkerCargo = bunkerActor.Trait <BunkerCargo>(); bunkerPassenger = passengerActor.Trait <BunkerPassenger>(); this.willDisappear = willDisappear; }
public override bool Tick(Actor self) { if (IsCanceling || cargo.IsEmpty(self)) { return(true); } if (cargo.CanUnload()) { foreach (var inu in notifiers) { inu.Unloading(self); } var actor = cargo.Peek(self); var spawn = self.CenterPosition; var exitSubCell = ChooseExitSubCell(actor); if (exitSubCell == null) { self.NotifyBlocker(BlockedExitCells(actor)); QueueChild(new Wait(10)); return(false); } cargo.Unload(self); self.World.AddFrameEndTask(w => { if (actor.Disposed) { return; } var move = actor.Trait <IMove>(); var pos = actor.Trait <IPositionable>(); //pos.SetPosition(self, exitSubCell.Value.First, exitSubCell.Value.Second); //pos.SetVisualPosition(actor, spawn); actor.CancelActivity(); if (cargo.Info.WillDisappear) { w.Add(actor); } BunkerPassenger bunkerPassenger = actor.TraitOrDefault <BunkerPassenger>(); bunkerPassenger.RevokeCondition(); }); } if (!unloadAll || !cargo.CanUnload()) { if (cargo.Info.AfterUnloadDelay > 0) { QueueChild(new Wait(cargo.Info.AfterUnloadDelay, false)); } if (takeOffAfterUnload) { QueueChild(new TakeOff(self)); } return(true); } return(false); }