/// <summary> /// Refreshes the default queuing state of all vehicles /// </summary> public static void RefreshQueuingMonitors() { if (TacticalDirector.ValidVehicles != null) { foreach (VehicleAgent va in TacticalDirector.ValidVehicles.Values) { QueueingUpdate qu = va.IsStopped ? QueueingUpdate.NotQueueing : QueueingUpdate.Queueing; va.QueuingState.Reset(); } } }
/// <summary> /// Updates the monitor with a new state of the vehicle /// </summary> /// <param name="StateMonitor"></param> public void Update(QueueingUpdate update, double ts) { if (update == QueueingUpdate.NotQueueing) { if (this.Queuing == QueuingState.Failed && this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > 7.0) { this.QueuingTime = Math.Min(this.QueuingTime + 10.0, this.MaximumQueuingTime); } else if (this.TimeStopped > (3.0 / 4.0) * this.QueuingTime) { this.QueuingTime = Math.Min(this.QueuingTime + 5.0, this.MaximumQueuingTime); } if (!this.NotQueuingTimer.IsRunning) { this.NotQueuingTimer.Start(); } else if (this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > QueuingTime) { this.QueuingTime = Math.Max(this.QueuingTime, Math.Min(this.NotQueuingTimer.ElapsedMilliseconds / 1000.0, this.MaximumQueuingTime / 2.0)); } this.Reset(); } else { if (this.NotQueuingTimer.IsRunning) { this.NotQueuingTimer.Stop(); } if (!this.StartedTimer) { this.StartedTimer = true; this.StoppedTimestamp = ts; } if (Queuing == QueuingState.Normal) { TimeStopped = ts - StoppedTimestamp; if (TimeStopped > QueuingTime) { Queuing = QueuingState.Failed; } } else { TimeStopped = ts - StoppedTimestamp; } } }
/// <summary> /// Updates the monitor with a new state of the vehicle /// </summary> /// <param name="StateMonitor"></param> public void Update(QueueingUpdate update, double ts) { if (update == QueueingUpdate.NotQueueing) { if (this.Queuing == QueuingState.Failed && this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > 7.0) this.QueuingTime = Math.Min(this.QueuingTime + 10.0, this.MaximumQueuingTime); else if(this.TimeStopped > (3.0/4.0) * this.QueuingTime) this.QueuingTime = Math.Min(this.QueuingTime + 5.0, this.MaximumQueuingTime); if (!this.NotQueuingTimer.IsRunning) this.NotQueuingTimer.Start(); else if (this.NotQueuingTimer.ElapsedMilliseconds / 1000.0 > QueuingTime) this.QueuingTime = Math.Max(this.QueuingTime, Math.Min(this.NotQueuingTimer.ElapsedMilliseconds / 1000.0, this.MaximumQueuingTime / 2.0)); this.Reset(); } else { if (this.NotQueuingTimer.IsRunning) this.NotQueuingTimer.Stop(); if (!this.StartedTimer) { this.StartedTimer = true; this.StoppedTimestamp = ts; } if (Queuing == QueuingState.Normal) { TimeStopped = ts - StoppedTimestamp; if (TimeStopped > QueuingTime) Queuing = QueuingState.Failed; } else { TimeStopped = ts - StoppedTimestamp; } } }