Пример #1
0
        // FinalStage Shooting
        protected override void FinalStageShooting()
        {
            if (currentSlot.projectileObject != null)
            {
                if (projectilesPerShot > 1)
                {
                    for (int i = 0; i < projectilesPerShot; i++)
                    {
                        MuzzleToCameraPoint();
                        Projectile.SpawnFromWeapon(this);
                        projectileOuter.localEulerAngles = nativeOuterAngles;
                    }
                }
                else
                {
                    Projectile.SpawnFromWeapon(this);
                    projectileOuter.localEulerAngles = nativeOuterAngles;
                }

                Shell.SpawnFromWeapon(this);
            }
            else
            {
                Debug.LogError("ERROR: Projectile is not setup! Error in: " + this.name);
            }

            base.FinalStageShooting();

            if (owner.isPlayer && isEmpty && AmmoBackpack.IsEmpty(currentSlot.ammoIndex) == false)
            {
                StartReloading();
            }
        }
Пример #2
0
 // Reloading
 internal virtual void StartReloading()
 {
     if (!isReloading && currentSlot.currentAmmo < maxAmmo && !AmmoBackpack.IsEmpty(currentSlot.ammoIndex))
     {
         StartCoroutine(PlayReload());
     }
 }
Пример #3
0
 // FirstStage Shooting
 protected override void FirstStageShooting()
 {
     if (owner.isPlayer)
     {
         if (isEmpty)
         {
             if (AmmoBackpack.IsEmpty(currentSlot.ammoIndex))
             {
                 m_Audio.pitch = Time.timeScale;
                 m_Audio.PlayOneShot(emptySFX);
                 StartCoroutine(FireRate(.75f));
             }
             else
             {
                 StartReloading();
             }
         }
         else if (!isEmpty && !isReloading)
         {
             base.FirstStageShooting();
         }
     }
     else if (owner.isNPC)
     {
         SecondStageShooting();
     }
 }
Пример #4
0
        // Play Reload
        private IEnumerator PlayReload()
        {
            isReloading     = true;
            singleShotReady = true;

            FirstPersonWeaponSway.IronsightUnzoom();

            while (FirstPersonWeaponSway.ironsightZooming || FirstPersonWeaponSway.isPlaying)
            {
                yield return(null);
            }

            float reloadTime = .15f;

            if (fpWeaponSway != null && fpWeaponSway.reloadClip != null)
            {
                reloadTime = fpWeaponSway.reloadClip.length;
            }
            if (reloadSFX != null)
            {
                reloadTime = reloadSFX.length;
            }
            if (reloadSFX != null && fpWeaponSway != null && fpWeaponSway.reloadClip != null)
            {
                reloadTime = Mathf.Min(reloadSFX.length, fpWeaponSway.reloadClip.length);
            }

            if (fpWeaponSway != null)
            {
                fpWeaponSway.PlayReloadAnimation();
            }

            m_Audio.pitch = Time.timeScale;
            m_Audio.PlayOneShot(reloadSFX);

            float elapsed = 0f;

            while (elapsed < reloadTime)
            {
                elapsed += Time.deltaTime;
                yield return(null);
            }

            int missingAmmo = Mathf.Max(0, maxAmmo - currentSlot.currentAmmo);
            int invAmmo     = AmmoBackpack.GetCurrentAmmo(currentSlot.ammoIndex);

            currentSlot.currentAmmo += Mathf.Min(Mathf.Max(0, invAmmo), missingAmmo);
            invAmmo = Mathf.Max(0, invAmmo -= missingAmmo);

            AmmoBackpack.SetCurrentAmmo(currentSlot.ammoIndex, invAmmo);

            HudElements.WeaponInformer.UpdateCurrentAmmoInfo(currentSlot.currentAmmo);
            HudElements.WeaponInformer.UpdateAllAmmoInfo(invAmmo);

            isReloading = false;
        }
Пример #5
0
        // Ammo Pickup
        private void PickupAmmo()
        {
            if (AmmoBackpack.AddAmmo(ammoIndex, ref amount))
            {
                Utils.Audio.PlayClipAtPoint(pickupSound, m_Transform.position);

                if (pickupType == EPickupType.Ammo || pickupType == EPickupType.Thrown)
                {
                    DestroyIt(false);
                }
            }
        }
Пример #6
0
        // Start
        void Start()
        {
            for (int i = 0; i < weapons.Length; i++)
            {
                WeaponSlot currentSlot = weapons[i];
                GameObject currentGO   = currentSlot.weapon.gameObject;

                currentGO.SetActive(true);

                if (currentSlot.type == EWeaponType.Thrown)
                {
                    Firearms tmpFA = currentSlot.weapon as Firearms;

                    if (!tmpFA.isEmpty || !AmmoBackpack.IsEmpty(tmpFA.currentSlot.ammoIndex))
                    {
                        currentSlot.available = true;
                    }
                    else if (AmmoBackpack.IsEmpty(tmpFA.currentSlot.ammoIndex) && tmpFA.isEmpty)
                    {
                        currentSlot.available = false;
                    }
                }

                if (weaponsCount >= maxWeapons && currentSlot.type == EWeaponType.Standart)
                {
                    DropWeapon(i);
                }
                else if (currentSlot.available && currentSlot.type == EWeaponType.Standart)
                {
                    weaponsCount++;
                }

                currentGO.SetActive(false);
            }

            for (int i = weaponIndex; i < weapons.Length; i++)
            {
                if (i != weaponIndex && weapons[i].available)
                {
                    weaponIndex = i;
                    StartCoroutine(ChangeWeapon());
                    break;
                }
            }

            UpdateHud();
            UpdateInformerAndCrosshair();
        }
Пример #7
0
 // ChangeEmpty to FirstAvaliable
 internal static void ChangeEmptyToFirstAvaliable()
 {
     if (!FirstPersonWeaponSway.isChanging && AmmoBackpack.IsEmpty(m_Firearm.currentSlot.ammoIndex))
     {
         if (m_Instance.weapons[weaponIndex].type == EWeaponType.Thrown)
         {
             m_Instance.weapons[weaponIndex].available = false;
             FindFirstAvailableWeapon();
             CalculateWeaponsCount();
             m_Instance.StartCoroutine(ChangeWeapon());
         }
         else
         {
             if (FindFirstAvailableWeapon())
             {
                 m_Instance.StartCoroutine(ChangeWeapon());
             }
         }
     }
 }
Пример #8
0
        // Update Hud
        public static void UpdateHud(bool updateAll = false)
        {
            if (!PlayerCharacter.Instance.isAlive)
            {
                return;
            }

            if (!isMelee)
            {
                HudElements.Crosshair.UpdatePosition(m_Firearm.dispersion);
                //
                HudElements.WeaponInformer.UpdateAmmoIcon(AmmoBackpack.GetHudIcon(m_Firearm.currentSlot.ammoIndex));
                HudElements.WeaponInformer.UpdateCurrentAmmoInfo(m_Firearm.currentSlot.currentAmmo);
                HudElements.WeaponInformer.UpdateAllAmmoInfo(AmmoBackpack.GetCurrentAmmo(m_Firearm.currentSlot.ammoIndex));
                HudElements.WeaponInformer.UpdateShootingModeIcon(m_Weapon.firingMode);
            }

            if (updateAll)
            {
                UpdateInformerAndCrosshair();
            }
        }
Пример #9
0
        // Pickup Activity
        private static void PickupActivity()
        {
            if (inputUse)
            {
                if (checkPickup)
                {
                    tmpPickup.PickupItem();
                }

                inputUse = false;
                ResetPickup();
            }
            else
            {
                if (hitCollider != prevHitCollider || tmpPickup == null)
                {
                    tmpPickup = hitCollider.GetComponent <IPickup>();
                    HudElements.Crosshair.SetColor(ECrosshairColor.Normal);
                }

                if (!checkPickup)
                {
                    return;
                }

                switch (tmpPickup.PickupType)
                {
                case EPickupType.Melee:
                case EPickupType.Firearms:
                case EPickupType.Thrown:
                    if (WeaponsManager.WeaponIsAvailable(tmpPickup.WeaponIndex))
                    {
                        if ((tmpPickup.PickupType != EPickupType.Melee) && (tmpPickup.Amount > 0) && !AmmoBackpack.IsFull(tmpPickup.AmmoIndex))
                        {
                            crosshairMode = ECrosshairMode.Ammo;
                        }
                        else
                        {
                            crosshairMode = ECrosshairMode.Cancel;
                        }
                    }
                    else if (WeaponsManager.WeaponTypeIsStandart(tmpPickup.WeaponIndex) && WeaponsManager.crowded)
                    {
                        crosshairMode = ECrosshairMode.Swap;
                    }
                    else
                    {
                        crosshairMode = ECrosshairMode.Hand;
                    }
                    break;

                case EPickupType.Ammo:
                    if (AmmoBackpack.IsFull(tmpPickup.AmmoIndex))
                    {
                        crosshairMode = ECrosshairMode.Cancel;
                    }
                    else
                    {
                        crosshairMode = ECrosshairMode.Ammo;
                    }
                    break;

                case EPickupType.Health:
                    if (PlayerCharacter.Instance.isFull)
                    {
                        crosshairMode = ECrosshairMode.Cancel;
                    }
                    else
                    {
                        crosshairMode = ECrosshairMode.Health;
                    }
                    break;

                default:
                    crosshairMode = ECrosshairMode.Hand;
                    break;
                }

                //crosshairMode
                HudElements.Crosshair.SetPointSprite(crosshairMode);
            }
        }