public void Done(CreatureAI Rider) { if (State == States.DroppingOffRider && CurrentRider != null && Object.ReferenceEquals(CurrentRider.Rider, Rider)) { State = States.Idle; CurrentRider = null; } }
public void Update(DwarfTime Time) { if (Invalid) { return; // ?? } TimeoutTimer.Update(Time); switch (State) { case States.Idle: if (RiderQueue.Count == 0) { return; } CurrentRider = RiderQueue[0]; RiderQueue.RemoveAt(0); State = States.MovingToRider; TimeoutTimer.Reset(); break; case States.MovingToRider: if (MovePlatform(CurrentRider.RidePlan.Entrance, null, Time)) { State = States.PickingUpRider; } break; case States.PickingUpRider: if (TimeoutTimer.HasTriggered) { CurrentRider = null; State = States.Idle; } break; case States.TransportingRider: if (MovePlatform(CurrentRider.RidePlan.Exit, CurrentRider.Rider, Time)) { State = States.DroppingOffRider; } break; case States.DroppingOffRider: if (TimeoutTimer.HasTriggered) { CurrentRider = null; State = States.Idle; } break; } // Todo: Time out when rider doesn't enter fast enough. // Todo: Time out and forget a rider when they don't exit fast enough. }