/// <summary> /// Forcefully updates a vessel position /// </summary> public void ForceUpdateVesselPosition(Guid vesselId) { if (CurrentVesselUpdate.TryGetValue(vesselId, out var posUpdate)) { posUpdate.UpdateVesselWithPositionData(); } }
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 _); } }
protected override void OnDisabled() { base.OnDisabled(); CurrentVesselUpdate.Clear(); TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, HandleVesselUpdates); TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, SendVesselPositionUpdates); }
/// <summary> /// Gets the latest received ref body of a vessel /// </summary> public int GetLatestVesselRefBody(Guid vesselId) { return(TargetVesselUpdate.TryGetValue(vesselId, out var vesselPosition) ? vesselPosition.BodyIndex : CurrentVesselUpdate.TryGetValue(vesselId, out vesselPosition) ? vesselPosition.BodyIndex : int.MinValue); }
/// <summary> /// Gets the latest received position of a vessel /// </summary> public double[] GetLatestVesselPosition(Guid vesselId) { return(TargetVesselUpdate.TryGetValue(vesselId, out var vesselPosition) ? vesselPosition.LatLonAlt : CurrentVesselUpdate.TryGetValue(vesselId, out vesselPosition) ? vesselPosition.LatLonAlt : null); }
protected override void OnDisabled() { base.OnDisabled(); TimingManager.FixedUpdateRemove(HandlePositionsStage, HandleVesselUpdates); TimingManager.LateUpdateRemove(SendPositionsStage, SendVesselPositionUpdates); CurrentVesselUpdate.Clear(); TargetVesselUpdateQueue.Clear(); }
protected override void OnDisabled() { if (SettingsSystem.CurrentSettings.UseAlternativePositionSystem) { return; } base.OnDisabled(); CurrentVesselUpdate.Clear(); }
/// <summary> /// Gets the latest received position of a vessel /// </summary> public double[] GetLatestVesselPosition(Guid vesselId) { if (CurrentVesselUpdate.TryGetValue(vesselId, out var vesselPos)) { var fullData = new double[vesselPos.LatLonAlt.Length + vesselPos.Orbit.Length]; vesselPos.LatLonAlt.CopyTo(fullData, 0); vesselPos.Orbit.CopyTo(fullData, vesselPos.LatLonAlt.Length); return(fullData); } return(null); }
protected override void OnDisabled() { if (!SettingsSystem.CurrentSettings.UseAlternativePositionSystem) { return; } base.OnDisabled(); CurrentVesselUpdate.Clear(); TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, DisableVesselPrecalculate); }
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); }
private static void HandleVesselUpdates() { foreach (var keyVal in CurrentVesselUpdate) { keyVal.Value.ApplyVesselUpdate(); } while (VesselsToRemove.Count > 0) { var vesselToRemove = VesselsToRemove.Dequeue(); TargetVesselUpdate.TryRemove(vesselToRemove, out _); CurrentVesselUpdate.TryRemove(vesselToRemove, out _); } }
/// <summary> /// Read and apply position updates from other vessels /// </summary> private void HandleVesselUpdates() { if (PositionUpdateSystemReady) { foreach (var vesselId in UpdatedVesselIds.Keys) { if (CurrentVesselUpdate.TryGetValue(vesselId, out VesselPositionUpdate currentUpdate)) { //NOTE: ApplyVesselUpdate must run in FixedUpdate as it's updating the physics of the vessels currentUpdate.ApplyVesselUpdate(); } UpdatedVesselIds.TryRemove(vesselId, out var _); } } }
private static void HandleVesselUpdates() { if (FlightGlobals.ActiveVessel == null) { return; } foreach (var keyVal in CurrentVesselUpdate) { keyVal.Value.ApplyVesselUpdate(); //FlightGlobals.ActiveVessel.StartCoroutine(ApplyVesselUpdate(keyVal.Value)); } while (VesselsToRemove.Count > 0) { var vesselToRemove = VesselsToRemove.Dequeue(); TargetVesselUpdate.TryRemove(vesselToRemove, out _); CurrentVesselUpdate.TryRemove(vesselToRemove, out _); } }
private void HandleVesselUpdates() { if (!PositionUpdateSystemBasicReady) { return; } foreach (var keyVal in CurrentVesselUpdate) { if (!DoVesselChecks(keyVal.Key)) { RemoveVesselFromSystem(keyVal.Key); } keyVal.Value.ApplyVesselUpdate(); } while (VesselsToRemove.Count > 0) { var vesselToRemove = VesselsToRemove.Dequeue(); TargetVesselUpdate.TryRemove(vesselToRemove, out _); CurrentVesselUpdate.TryRemove(vesselToRemove, out _); } }
/// <summary> /// Removes a vessel from the system /// </summary> public void RemoveVessel(Guid vesselId) { CurrentVesselUpdate.TryRemove(vesselId, out _); TargetVesselUpdateQueue.TryRemove(vesselId, out _); }