/// <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); } }
/// <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); } }
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); }
/// <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); } }
/// <summary> /// Clears the dictionary, you should call this method when switching scene /// </summary> public void ClearSystem() { VesselsToRemove = new ConcurrentQueue <VesselRemoveEntry>(); RemovedVessels.Clear(); }
/// <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(); }