/// <summary>
        /// Main system that picks changes received and process them
        /// </summary>
        public IEnumerator HandleVesselChanges()
        {
            var seconds = new WaitForSeconds(0.5f);

            while (true)
            {
                try
                {
                    if (!Enabled)
                    {
                        break;
                    }

                    if (MainSystem.Singleton.GameRunning)
                    {
                        while (IncomingChanges.Count > 0 && Time.fixedTime - IncomingChanges.Peek().ReceiveTime >= 0.5)
                        {
                            HandleVesselChange(IncomingChanges.Dequeue());
                        }
                    }
                }
                catch (Exception e)
                {
                    Debug.LogError($"[LMP]: Error in coroutine HandleVesselChanges {e}");
                }

                yield return(seconds);
            }
        }
 public override void OnDisabled()
 {
     base.OnDisabled();
     IncomingChanges.Clear();
     GameEvents.onStageSeparation.Remove(VesselChangeEvents.OnStageSeparation);
     GameEvents.onPartDie.Remove(VesselChangeEvents.OnPartDie);
 }