private void Start()
        {
            CurrentWeaponIndex   = 0;
            _previousWeaponIndex = 0;

            if (WeaponHolder.childCount <= 0)
            {
                NoWeaponSelected.Invoke();
                CurrentWeapon = null;
                return;
            }

            CurrentWeapon = WeaponHolder.GetChild(CurrentWeaponIndex).GetComponent <Gun>();
            CurrentWeapon.gameObject.SetActive(true);

            for (int i = 0; i < WeaponHolder.childCount; i++)
            {
                if (i != CurrentWeaponIndex)
                {
                    WeaponHolder.GetChild(i).gameObject.SetActive(false);
                }
            }

            WeaponSwitched?.Invoke();
        }
        private void Update()
        {
            if (GameStateManager.CurrentState == GameState.Paused)
            {
                return;
            }

            if (WeaponHolder.childCount <= 0)
            {
                return;
            }

            _previousWeaponIndex = CurrentWeaponIndex;

            // Handle scroll wheel.
            if (Input.GetAxis("Mouse ScrollWheel") > 0f)
            {
                CurrentWeaponIndex = (CurrentWeaponIndex + 1) % (WeaponHolder.childCount);
            }
            else if (Input.GetAxis("Mouse ScrollWheel") < 0f)
            {
                CurrentWeaponIndex = (CurrentWeaponIndex - 1 + WeaponHolder.childCount) % (WeaponHolder.childCount);
            }

            // Handle numkey presses.
            for (int i = 0; i < WeaponHolder.childCount && WeaponHolder.childCount < _numRowKeyCodes.Length; i++)
            {
                if (Input.GetKeyDown(_numRowKeyCodes[i]))
                {
                    CurrentWeaponIndex = i;
                }
            }

            if (_previousWeaponIndex != CurrentWeaponIndex)
            {
                CurrentWeapon = SwitchWeapon(_previousWeaponIndex, CurrentWeaponIndex);
                WeaponSwitched.Invoke();
            }
        }