private void Load()
        {
            if (!LaunchCountdownConfig.Instance.Info.IsSoundEnabled)
            {
                _tick = 15;
                return;
            }

            List <AudioClip> audios =
                GameDatabase.Instance.databaseAudio.Where(x => x.name.Contains(LaunchCountdownConfig.Instance.Info.SoundSet))
                .ToList();

            CountDownClips.Clear();
            EventClips.Clear();

            CountDownClips = audios.Where(x => x.name.Contains("/Timer")).ToList();
            EventClips     = audios.Where(x => x.name.Contains("/Events")).ToList();

            if (!CountDownClips.Any())
            {
                _tick = 15;
                LaunchCountdownConfig.Instance.Info.IsSoundEnabled = false;
                return;
            }

            _tick = CountDownClips.Count;

            DebugHelper.WriteMessage("tick reload {0}", _tick);
        }
        protected override void OnDestroy()
        {
            EventClips.Clear();
            CountDownClips.Clear();

            LaunchCountdownConfig.Instance.Info.OnChanged -= ConfigChanged;

            base.OnDestroy();
        }
        public override void RepeatingWorker()
        {
            DebugHelper.WriteMessage("tick {0}", _tick);

            if (_tick <= 0)
            {
                StopRepeatingWorker();
                return;
            }

            _tick--;

            if (OnTick != null)
            {
                OnTick(this, new LaunchEvenArgs(_tick));
            }

            TryStagingExecute();

            if (!LaunchCountdownConfig.Instance.Info.IsSoundEnabled)
            {
                return;
            }

            var clip = CountDownClips.FirstOrDefault(x => x.name.EndsWith(string.Format("/{0}", _tick)));

            if (clip == null)
            {
                return;
            }


            DebugHelper.WriteMessage("Sound played {0}", clip.name);

            _audioSource.Stop();
            _audioSource.clip = clip;
            _audioSource.Play();
        }
        internal void Abort()
        {
            StopRepeatingWorker();

            DisableEngineControl();

            DebugHelper.WriteMessage("Vessel aborted");

            _tick = CountDownClips.Any() ? CountDownClips.Count : 15;

            if (OnVesselAborted != null)
            {
                OnVesselAborted(this, EventArgs.Empty);
            }

            if (!LaunchCountdownConfig.Instance.Info.IsSoundEnabled)
            {
                return;
            }

            _audioSource.Stop();
            _audioSource.clip = EventClips.Single(x => x.name.EndsWith("/Aborted"));
            _audioSource.Play();
        }