private void HandleVesselUpdates() { if (!PositionUpdateSystemBasicReady) { return; } foreach (var keyVal in CurrentVesselUpdate) { if (!VesselCommon.DoVesselChecks(keyVal.Key)) { RemoveVesselFromSystem(keyVal.Key); } if (SettingsSystem.CurrentSettings.InterpolationEnabled) { keyVal.Value.ApplyInterpolatedVesselUpdate(); } else { keyVal.Value.ApplyVesselUpdate(); } } while (VesselsToRemove.Count > 0) { var vesselToRemove = VesselsToRemove.Dequeue(); TargetVesselUpdate.TryRemove(vesselToRemove, out _); CurrentVesselUpdate.TryRemove(vesselToRemove, out _); TargetVesselUpdateQueue.TryRemove(vesselToRemove, out _); } }
/// <summary> /// Gets the latest received position of a vessel /// </summary> public double[] GetLatestVesselPosition(Guid vesselId) { return(TargetVesselUpdateQueue.TryGetValue(vesselId, out var vesselPositionQueue) ? vesselPositionQueue.TryPeek(out var vesselPos) ? vesselPos.LatLonAlt : CurrentVesselUpdate.TryGetValue(vesselId, out vesselPos) ? vesselPos.LatLonAlt : null : null); }
protected override void OnDisabled() { base.OnDisabled(); CurrentVesselUpdate.Clear(); TargetVesselUpdateQueue.Clear(); TimingManager.UpdateRemove(TimingManager.TimingStage.ObscenelyEarly, HandleVesselUpdates); TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, SendVesselPositionUpdates); }
/// <summary> /// Checks if the given vessel id has position messages stored to be replayed /// </summary> public bool VesselHavePositionUpdatesQueued(Guid vesselId) { if (TargetVesselUpdateQueue.TryGetValue(vesselId, out var positionQueue)) { return(positionQueue.Count > 0); } return(false); }
protected override void OnDisabled() { base.OnDisabled(); TimingManager.FixedUpdateRemove(HandlePositionsStage, HandleVesselUpdates); TimingManager.LateUpdateRemove(SendPositionsStage, SendVesselPositionUpdates); CurrentVesselUpdate.Clear(); TargetVesselUpdateQueue.Clear(); }
protected override void OnDisabled() { base.OnDisabled(); CurrentVesselUpdate.Clear(); TargetVesselUpdateQueue.Clear(); TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, HandleVesselUpdates); TimingManager.LateUpdateRemove(TimingManager.TimingStage.BetterLateThanNever, SendVesselPositionUpdates); LockEvent.onLockAcquire.Remove(PositionEvents.OnLockAcquire); }
/// <summary> /// Removes a vessel from the system /// </summary> public void RemoveVessel(Guid vesselId) { CurrentVesselUpdate.TryRemove(vesselId, out _); TargetVesselUpdateQueue.TryRemove(vesselId, out _); }