private void Initialize()
        {
            _isRunning = Animator.StringToHash("IsRunning");
            _isInSub   = Player.main.IsInSubmarine();

            if (StorageManager == null)
            {
                StorageManager = new MFFStorageManager();
                StorageManager.Initialize(this);
            }

            if (PowerManager == null)
            {
                PowerManager = new PowerManager();
                PowerManager.Initialize(this);
                StartCoroutine(UpdatePowerState());
            }

            AnimationManager = gameObject.GetComponent <AnimationManager>();

            if (ColorManager == null)
            {
                ColorManager = new ColorManager();
                ColorManager.Initialize(gameObject, MiniFountainFilterBuildable.BodyMaterial);
            }

            if (TankManager == null)
            {
                TankManager = new TankManager();
                TankManager.Initialize(this);
            }

            if (PlayerManager == null)
            {
                PlayerManager = new PlayerManager();
                PlayerManager.Initialize();
            }

            if (AudioManager == null)
            {
                AudioManager = new AudioManager(gameObject.GetComponent <FMOD_CustomLoopingEmitter>());
            }

            if (DisplayManager == null)
            {
                DisplayManager = gameObject.AddComponent <MFFDisplayManager>();
                DisplayManager.Setup(this);
            }

            IsInitialized = true;

            QuickLogger.Debug($"Initialized");
        }
        private void UpdateSystem()
        {
            if (!IsInitialized)
            {
                return;
            }

            if (!IsConstructed && _isOperational)
            {
                QuickLogger.Debug("Update System: IsConstructed False", true);
                AudioManager?.StopMachineAudio();
                AnimationManager.SetBoolHash(_isRunning, false);
                DisplayManager.PowerOffDisplay();
                _isOperational = false;
                return;
            }

            if (PowerManager.GetPowerState() != FCSPowerStates.Powered || !IsUnderwater() && _isOperational)
            {
                QuickLogger.Debug("Update System: Powered and Underwater Else", true);

                AudioManager.StopMachineAudio();
                AnimationManager.SetBoolHash(_isRunning, false);
                DisplayManager.AboveWaterMessage();
                _isOperational = false;
                return;
            }

            if (PowerManager.GetPowerState() == FCSPowerStates.Powered && IsUnderwater() && !_isOperational)
            {
                QuickLogger.Debug("Update System: Powered and Underwater", true);

                AudioManager.PlayMachineAudio();
                AnimationManager.SetBoolHash(_isRunning, true);
                DisplayManager.PowerOnDisplay();
                _isOperational = true;
            }
        }