public Gun(ItemManager itemManager, MasterRenderer renderer)
            : base(renderer, itemManager, ItemType.Gun)
        {
            CurrentMag = GunConfig.MagazineSize;
            StoredAmmo = GunConfig.MagazineSize * GunConfig.MaxStoredMags;

            if (GlobalNetwork.IsClient && GlobalNetwork.IsConnected)
            {
                ServerMag        = (ushort)CurrentMag;
                ServerStoredAmmo = (ushort)StoredAmmo;
            }

            fovAnim     = new FloatAnim();
            modelAnim   = new Vector3Anim();
            muzzleFlash = itemManager.GetMuzzleFlash();

            if (!GlobalNetwork.IsServer)
            {
                if (itemManager.IsReplicated)
                {
                    if (GunConfig.PrimaryFireAudio?.ReplicatedFilepath != null)
                    {
                        fireAudioSource = LoadAudioFromConfig(GunConfig.PrimaryFireAudio, replicated: true, far: false);
                    }

                    if (GunConfig.PrimaryFireAudio?.FarFilepath != null)
                    {
                        fireFarAudioSource = LoadAudioFromConfig(GunConfig.PrimaryFireAudio, replicated: true, far: true);
                    }

                    if (GunConfig.ReloadAudio?.ReplicatedFilepath != null)
                    {
                        reloadAudioSource = LoadAudioFromConfig(GunConfig.ReloadAudio, replicated: true);
                    }
                }
                else
                {
                    if (GunConfig.PrimaryFireAudio?.LocalFilepath != null)
                    {
                        fireAudioSource = LoadAudioFromConfig(GunConfig.PrimaryFireAudio);
                    }

                    if (GunConfig.ReloadAudio?.LocalFilepath != null)
                    {
                        reloadAudioSource = LoadAudioFromConfig(GunConfig.ReloadAudio);
                    }

                    AudioBuffer dryFireBuffer = AssetManager.LoadSound("Weapons/dry-fire.wav");

                    if (dryFireBuffer != null)
                    {
                        dryFireAudioSource = new AudioSource(dryFireBuffer);
                        dryFireAudioSource.IsSourceRelative = true;
                        dryFireAudioSource.Gain             = 0.5f;
                    }
                }
            }
        }
        public ItemManager(MasterRenderer renderer, Player ownerPlayer, World world, ItemViewbob viewbob)
        {
            this.renderer = renderer;
            this.viewbob  = viewbob;
            OwnerPlayer   = ownerPlayer;
            World         = world;

            if (GlobalNetwork.IsClient)
            {
                muzzleFlash = new ClientMuzzleFlash(renderer, ownerPlayer);
            }
            else
            {
                muzzleFlash = new ServerMuzzleFlash();
            }

            SelectedItemIndex = -1;
        }