Exemple #1
0
        /// <summary>
        /// Unload or kills the vessels in the queue
        /// </summary>
        private void RemoveQueuedVessels()
        {
            while (VesselsToRemove.TryDequeue(out var vesselRemoveEntry))
            {
                KillVessel(vesselRemoveEntry.VesselId, vesselRemoveEntry.Reason);

                //Always add to the killed list even if it exists that vessel or not.
                RemovedVessels.TryAdd(vesselRemoveEntry.VesselId, LunaNetworkTime.UtcNow);
            }
        }
Exemple #2
0
        /// <summary>
        /// Unload or kills the vessels in the queue
        /// </summary>
        private void RemoveQueuedVessels()
        {
            while (VesselsToRemove.TryDequeue(out var vesselId))
            {
                KillVessel(vesselId);

                //Always add to the killed list even if it exists that vessel or not.
                RemovedVessels.TryAdd(vesselId, LunaTime.Now);
            }
        }
Exemple #3
0
 protected override void OnDisabled()
 {
     base.OnDisabled();
     VesselsToRemove = new ConcurrentQueue <Guid>();
     RemovedVessels.Clear();
     GameEvents.onVesselRecovered.Remove(VesselRemoveEvents.OnVesselRecovered);
     GameEvents.onVesselTerminated.Remove(VesselRemoveEvents.OnVesselTerminated);
     GameEvents.onVesselWillDestroy.Remove(VesselRemoveEvents.OnVesselWillDestroy);
     GameEvents.onGameStatePostLoad.Remove(VesselRemoveEvents.OnGameStatePostLoad);
 }
Exemple #4
0
        /// <summary>
        /// Flush vessels older than 20 seconds
        /// </summary>
        private void FlushRemovedVessels()
        {
            var vesselsToFlush = RemovedVessels
                                 .Where(v => (LunaNetworkTime.UtcNow - v.Value) > TimeSpan.FromSeconds(20))
                                 .Select(v => v.Key);

            foreach (var vesselId in vesselsToFlush)
            {
                RemovedVessels.TryRemove(vesselId, out _);
            }
        }
        /// <summary>
        /// Flush vessels older than <see cref="MaxTimeToKeepVesselsInRemoveListMs"/> seconds
        /// </summary>
        private void FlushRemovedVessels()
        {
            var vesselsToFlush = RemovedVessels
                                 .Where(v => (LunaNetworkTime.UtcNow - v.Value) > TimeSpan.FromMilliseconds(MaxTimeToKeepVesselsInRemoveListMs))
                                 .Select(v => v.Key);

            foreach (var vesselId in vesselsToFlush)
            {
                RemovedVessels.TryRemove(vesselId, out _);
            }
        }
        /// <summary>
        /// Kills a vessel.
        /// </summary>
        public void KillVessel(Guid vesselId, bool addToKilledList, string reason)
        {
            VesselCommon.RemoveVesselFromSystems(vesselId);

            if (addToKilledList)
            {
                //Always add to the killed list even if it exists that vessel or not.
                RemovedVessels.TryAdd(vesselId, LunaNetworkTime.UtcNow);
            }

            KillVessel(FlightGlobals.fetch.LmpFindVessel(vesselId), reason);
        }
        /// <summary>
        /// Unload or kills the vessels in the queue
        /// </summary>
        private void RemoveQueuedVessels()
        {
            if (HighLogic.LoadedScene < GameScenes.SPACECENTER)
            {
                return;
            }

            while (VesselsToRemove.TryDequeue(out var vesselRemoveEntry))
            {
                //Always add to the killed list even if it exists that vessel or not.
                RemovedVessels.TryAdd(vesselRemoveEntry.Vessel.id, LunaNetworkTime.UtcNow);

                KillVessel(vesselRemoveEntry.Vessel, vesselRemoveEntry.Reason);
            }
        }
Exemple #8
0
 /// <summary>
 /// Clears the dictionary, you should call this method when switching scene
 /// </summary>
 public void ClearSystem()
 {
     VesselsToRemove = new ConcurrentQueue <VesselRemoveEntry>();
     RemovedVessels.Clear();
 }
Exemple #9
0
 /// <summary>
 /// Check if vessel is in the kill list
 /// </summary>
 public bool VesselWillBeKilled(Guid vesselId)
 {
     return(VesselsToRemove.Any(v => v.VesselId == vesselId) || RemovedVessels.ContainsKey(vesselId));
 }
 /// <summary>
 /// Check if vessel is in the kill list
 /// </summary>
 public bool VesselWillBeKilled(Guid vesselId)
 {
     return(RemovedVessels.ContainsKey(vesselId));
 }
 /// <summary>
 /// Clears the dictionary, you should call this method when switching scene
 /// </summary>
 public void ClearSystem()
 {
     RemovedVessels.Clear();
 }