public override Activity Tick(Actor self) { if (cargo.IsDead || !carryall.IsBusy) { carryall.UnreserveCarryable(); return(NextActivity); } switch (state) { case State.Intercept: state = State.LockCarryable; return(Util.SequenceActivities(movement.MoveWithinRange(Target.FromActor(cargo), WDist.FromCells(4)), this)); case State.LockCarryable: // Last check if (carryable.StandbyForPickup(self)) { state = State.MoveToCarryable; return(this); } // We got cancelled carryall.UnreserveCarryable(); return(NextActivity); case State.MoveToCarryable: // We arrived, move on top if (self.Location == cargo.Location) { state = State.Turn; return(this); } return(Util.SequenceActivities(movement.MoveTo(cargo.Location, 0), this)); case State.Turn: // Align facing and Land if (selfFacing.Facing != cargoFacing.Facing) { return(Util.SequenceActivities(new Turn(self, cargoFacing.Facing), this)); } state = State.Pickup; return(Util.SequenceActivities(new HeliLand(self, false), new Wait(10), this)); case State.Pickup: // Remove our carryable from world self.World.AddFrameEndTask(w => cargo.World.Remove(cargo)); carryall.AttachCarryable(cargo); state = State.TakeOff; return(this); case State.TakeOff: if (HeliFly.AdjustAltitude(self, aircraft, aircraft.Info.CruiseAltitude)) { return(this); } return(NextActivity); } return(NextActivity); }
public override Activity Tick(Actor self) { if (cargo.IsDead || !carryall.IsBusy) { carryall.UnreserveCarryable(); return(NextActivity); } switch (state) { case State.Transport: var targetl = GetLocationToDrop(carryable.Destination); state = State.Land; return(ActivityUtils.SequenceActivities(movement.MoveTo(targetl, 0), this)); case State.Land: if (!CanDropHere()) { state = State.Transport; return(this); } if (HeliFly.AdjustAltitude(self, aircraft, aircraft.Info.LandAltitude)) { return(this); } state = State.Release; return(ActivityUtils.SequenceActivities(new Wait(15), this)); case State.Release: if (!CanDropHere()) { state = State.Transport; return(this); } Release(); return(NextActivity); } return(NextActivity); }