/// <summary>
 /// Forcefully updates a vessel position
 /// </summary>
 public void ForceUpdateVesselPosition(Guid vesselId)
 {
     if (CurrentVesselUpdate.TryGetValue(vesselId, out var posUpdate))
     {
         posUpdate.UpdateVesselWithPositionData();
     }
 }
Esempio n. 2
0
        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 _);
            }
        }
Esempio n. 3
0
        protected override void OnDisabled()
        {
            base.OnDisabled();
            CurrentVesselUpdate.Clear();

            TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, HandleVesselUpdates);
            TimingManager.FixedUpdateRemove(TimingManager.TimingStage.ObscenelyEarly, SendVesselPositionUpdates);
        }
Esempio n. 4
0
 /// <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);
 }
Esempio n. 5
0
 /// <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);
 }
Esempio n. 6
0
        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();
        }
Esempio n. 8
0
 /// <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);
 }
Esempio n. 9
0
        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);
        }
Esempio n. 11
0
        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 _);
         }
     }
 }
Esempio n. 13
0
        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 _);
            }
        }
Esempio n. 14
0
        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 _);
            }
        }
Esempio n. 15
0
 /// <summary>
 /// Removes a vessel from the system
 /// </summary>
 public void RemoveVessel(Guid vesselId)
 {
     CurrentVesselUpdate.TryRemove(vesselId, out _);
     TargetVesselUpdateQueue.TryRemove(vesselId, out _);
 }