コード例 #1
0
    void WeaponSwitching()
    {
        ///////////////////////////////////////////////////////// WEAPON SWITCHING //////////////////////////////////////////////
        int prevSelectedWeapon = _currentlySelectedWeapon;

        // DPAD input
        if (XCI.GetDPadDown(XboxDPad.Right, _inputScript.controller))
        {
            //switch to weapon slot 0
            prevSelectedWeapon = 0; //set new selected weapon slot enum
            switchDirection    = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Right;
            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
            }
        }

        if (XCI.GetDPadDown(XboxDPad.Left, _inputScript.controller))
        {
            prevSelectedWeapon = 1;
            switchDirection    = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Left;
            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
            }
        }

        if (XCI.GetDPadDown(XboxDPad.Up, _inputScript.controller))
        {
            prevSelectedWeapon = 2; //set new selected weapon slot enum
            switchDirection    = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Up;
            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
            }
        }

        float leftTrigHeight = MAX_TRG_SCL * (1.0f - XCI.GetAxis(XboxAxis.LeftTrigger, _inputScript.controller));


        if (leftTrigHeight < 1.0f && !bLeftTriggerDown)
        {
            bLeftTriggerDown      = true;
            grenadePreviousWeapon = prevSelectedWeapon;

            prevSelectedWeapon = 3; //set new selected weapon slot enum
            switchDirection    = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Down;
            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
                _gunInventory[prevSelectedWeapon].gunObject.GetComponent <SCR_GrenadeParent>().GrenadePossible();
            }
        }

        if (leftTrigHeight >= 1.0f && bLeftTriggerDown)
        {
            bLeftTriggerDown   = false;
            prevSelectedWeapon = grenadePreviousWeapon;
            switch (prevSelectedWeapon)
            {
            case 0: switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Right; break;

            case 1: switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Left; break;

            case 2: switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Up; break;
            }

            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
                _gunInventory[prevSelectedWeapon].gunObject.GetComponent <SCR_AutomaticWeapon>().SetBulletTimer(0.5f);
            }
        }

        if (XCI.GetButtonUp(XboxButton.Y, _inputScript.controller))
        {
            //loop through inventory until next gunobject is found
            prevSelectedWeapon = CycleWeapons(prevSelectedWeapon);

            //set worldspace UI elements of new gun object
            switch (prevSelectedWeapon)
            {
            case 0:
                switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Right;
                break;

            case 1:
                switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Left;
                break;

            case 2:
                switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Up;
                break;

            case 3:
                switchDirection = SCR_PlayerWorldSpaceUI.WeaponSwitchDirection.Down;
                break;
            }

            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
            }
        }

        if (prevSelectedWeapon != _currentlySelectedWeapon)
        {
            if (_gunInventory[prevSelectedWeapon].gunObject != null)
            {
                StopReloadCoroutines();
                uiManagerScript.ResetGaugePin(gameObject.tag);
                if (_gunInventory[_currentlySelectedWeapon].gunObject != null)
                {
                    ResetReloadValues();
                    _gunInventory[_currentlySelectedWeapon].gunObject.SetActive(false);
                }

                // remove reload prompt if they switch weapon to a weapon with ammo
                if (GetAmmo(_currentlySelectedWeapon) > 0)
                {
                    if (playerWorldSpaceUIScr.bIsDisplayed)
                    {
                        playerWorldSpaceUIScr.ShowReloadPrompt(false);
                    }
                }
                else
                {
                    if (!playerWorldSpaceUIScr.bIsDisplayed)
                    {
                        playerWorldSpaceUIScr.ShowReloadPrompt(true);
                    }
                }

                if (!bHasSwitchedWeapons && bTutorialCanSwitchWeapons)
                {
                    GameObject tutorialManager = GameObject.FindGameObjectWithTag("TutorialManager");
                    if (tutorialManager)
                    {
                        SCR_TutorialManager tutorialManagerScr = tutorialManager.GetComponent <SCR_TutorialManager>();
                        tutorialManagerScr.SetHasSwitchedWeapons();
                    }
                    bHasSwitchedWeapons = true;
                }

                if (prevSelectedWeapon != 3)
                {
                    _grenadeSelected                 = false;
                    _currentlySelectedWeapon         = prevSelectedWeapon;
                    _attackScript.setGrenadeSelected = _grenadeSelected;
                    _attackScript.setGrenadeSCR      = null;
                    _currentWeaponInterface          = (IWeapon)_gunInventory[prevSelectedWeapon].gunObject.GetComponent(typeof(IWeapon));
                    _gunInventory[prevSelectedWeapon].gunObject.SetActive(true);
                    _attackScript.UpdateWeaponInterface(_currentWeaponInterface);
                    if (_currentlySelectedWeapon != 2)
                    {
                        float percentage = _currentWeaponInterface.ReturnClipSize() * playerStats.GetUpgradeLevelMultiplier(PlayerUpgradeType.reload);
                        uiManagerScript.SetGauge(gameObject.tag, (int)percentage);
                        float clipPercentage = _currentWeaponInterface.ClipPercentagerFilled();
                        uiManagerScript.SetCurrentAmmoText(gameObject.tag, clipPercentage * _currentWeaponInterface.ReturnClipSize(), _gunInventory[prevSelectedWeapon].currentAmmo, _currentWeaponInterface.ReturnClipSize());
                        uiManagerScript.SwitchGunImages(gameObject.tag, false, ThrowableType.FireGrenade, false, _currentWeaponInterface.RetrieveGunValues().ReturnGunValues().GUNTYPE, _currentWeaponInterface.RetrieveGunValues().ReturnGunValues().RARITY, _currentWeaponInterface.RetrieveGunValues().ReturnGunValues().EFFECT);
                    }
                    else
                    {
                        uiManagerScript.SetGauge(gameObject.tag, 0);
                        float clipPercentage = _currentWeaponInterface.ClipPercentagerFilled();
                        uiManagerScript.SetCurrentAmmoText(gameObject.tag, clipPercentage * _currentWeaponInterface.ReturnClipSize(), _gunInventory[prevSelectedWeapon].currentAmmo, _currentWeaponInterface.ReturnClipSize(), true);
                        uiManagerScript.SwitchGunImages(gameObject.tag, false, ThrowableType.FireGrenade, true);
                    }


                    PlaySwitchingSound();
                }
                else
                {
                    _currentWeaponInterface  = null;
                    _currentlySelectedWeapon = prevSelectedWeapon;
                    _grenadeSelected         = true;
                    SCR_GrenadeParent currentGrenadeScript = _gunInventory[_currentlySelectedWeapon].gunObject.GetComponent <SCR_GrenadeParent>();
                    _attackScript.setGrenadeSCR            = currentGrenadeScript;
                    currentGrenadeScript.bHasResetVelocity = false;
                    _attackScript.setGrenadeSelected       = _grenadeSelected;
                    _gunInventory[_currentlySelectedWeapon].gunObject.SetActive(true);



                    if (_gunInventory[_currentlySelectedWeapon].currentAmmo > 0)
                    {
                        currentGrenadeScript.setCurrentAmmo(_gunInventory[_currentlySelectedWeapon].currentAmmo);
                        //_gunInventory[_currentlySelectedWeapon].currentAmmo = 0;
                    }
                    uiManagerScript.SetCurrentAmmoText(gameObject.tag, _gunInventory[_currentlySelectedWeapon].currentAmmo, 0, 0);
                    uiManagerScript.SetGauge(gameObject.tag, 0);

                    if (currentGrenadeScript)
                    {
                        uiManagerScript.SwitchGunImages(gameObject.tag, true, currentGrenadeScript.GetGrenadeType());
                    }

                    weaponSwitchingSource.PlayOneShot(grenadeSwitchingClip);
                }

                uiManagerScript.SwitchSelectedWeaponUI(gameObject.tag, prevSelectedWeapon);

                //playerWorldSpaceUIScr.StartWeaponSwitchWorldSpaceUI(switchDirection);
            }
            else
            {
                weaponSwitchingSource.PlayOneShot(failedWeaponSwitchClip);
            }
        }
    }
コード例 #2
0
    void Reload()
    {
        if (_gunInventory[_currentlySelectedWeapon].gunObject && !_grenadeSelected && _currentlySelectedWeapon != 2)
        {
            if (_currentWeaponInterface.returnCurrentMagazineValue() == 0)
            {
                RemoveCritBoost();
            }


            bool fullMagazine = _currentWeaponInterface.returnCurrentMagazineValue() == _currentWeaponInterface.ReturnClipSize();
            if (XCI.GetButtonDown(XboxButton.X, _inputScript.controller) && !fullMagazine && _gunInventory[_currentlySelectedWeapon].currentAmmo > 0)
            {
                GetComponent <SCR_PlayerWorldSpaceUI>().ShowReloadPrompt(true);
                if (!_isReloading)
                {
                    if (bCritActive)
                    {
                        RemoveCritBoost();
                    }
                    critGauge    = null;
                    _isReloading = true;
                    _currentWeaponInterface.GunReload(true);
                    normalGauge = uiManagerScript.DecreaseSteamGauge(gameObject.tag, this, reloadMultiplier, playerWorldSpaceUIScr);
                    _currentWeaponInterface.PlayReloadSound();
                    StartCoroutine(normalGauge);

                    if (!bHasReloaded && bTutorialCanReload)
                    {
                        GameObject tutorialManager = GameObject.FindGameObjectWithTag("TutorialManager");
                        if (tutorialManager)
                        {
                            SCR_TutorialManager tutorialManagerScr = tutorialManager.GetComponent <SCR_TutorialManager>();
                            tutorialManagerScr.SetHasReloaded();
                        }
                        bHasReloaded = true;
                    }

                    playerWorldSpaceUIScr.HideReloadButtonPrompt();
                }
                else if (_isReloading && !_CritAttempted)
                {
                    if (normalGauge != null)
                    {
                        StopCoroutine(normalGauge);
                        normalGauge = null;
                    }

                    critGauge = uiManagerScript.rotateGaugePinFull(0.0f, this, gameObject.tag, false);
                    StartCoroutine(critGauge);


                    playerWorldSpaceUIScr.ShowReloadPrompt(false);
                    //Original system
                    //float clipPercentage = uiManagerScript.ReturnPercentage(gameObject.tag);
                    //float ammoGaugePercentage = RefillClip(clipPercentage);


                    //EGX SYSTEM
                    float ammoGaugePercentage = RefillClip(100);


                    _CritAttempted = true;
                    uiManagerScript.SetCurrentAmmoText(gameObject.tag, ammoGaugePercentage * _currentWeaponInterface.ReturnClipSize(), _gunInventory[_currentlySelectedWeapon].currentAmmo, _currentWeaponInterface.ReturnClipSize());

                    if (uiManagerScript.WithinCritZone())
                    {
                        CriticalDamageBonus();
                        SCR_AudioManager.instance.Play("DingReload");
                    }
                }
            }
        }
    }