Exemplo n.º 1
0
    public virtual void Fire(Player player)
    {
        if (AmmoClip.EnoughAmmoToFire())
        {
            if (IsReloading)
            {
                ReloadingInterrupted(player.playerNumber);
            }

            PlayFireAnimation(player);
            var x = Instantiate(bullet, player.shootPosition.position, player.shootPosition.rotation);

            x.SetDamage(projDamage);
            x.setShooter(player.gameObject);
            Debug.Log("FireSound = " + FireSound);
            x.setSound(FireSound);
            x.GetComponent <Rigidbody2D>().AddForce(x.transform.right * projSpeed);
            AmmoClip.Decrement();
            EventAggregator.GetInstance().Publish <OnWeaponAmmoChangedEvent>(new OnWeaponAmmoChangedEvent(player.playerNumber, AmmoClip.GetCurrentAmmo()));
        }
        else
        {
            // Fire OnReloadMessage Event
            if (IsReloading && !ReloadCancel)
            {
                Debug.Log(this.name + " is still reloading");
            }
            else
            {
                AudioManager.Play(NO_AMMO_SOUND);
                Debug.Log("Not enough ammo in clip to fire, need to reload " + this.name + "\nAmmoUsePerBullet: " + AmmoClip.AMMO_USE_PER_BULLET + ", but in clip: " + AmmoClip.CurrentAmmoRaw);
            }
        }
    }
Exemplo n.º 2
0
 public IEnumerator Reload(int playerNumber, Ammunition ammunition)
 {
     if (AmmoClip.IsFull() || IsReloading)
     {
         yield break;                                   // if already reloading, then return
     }
     else
     {
         IsReloading = true;
         //Debug.Log(this.name + ": Reloading...");
         AudioManager.Play(ReloadSound);
         EventAggregator.GetInstance().Publish <OnWeaponReloadEvent>(new OnWeaponReloadEvent(playerNumber, this));
         for (float timer = ReloadTime; timer > 0; timer -= 0.25f)
         {
             if (ReloadCancel)
             {
                 IsReloading = ReloadCancel = false;
                 yield break;
             }
             yield return(new WaitForSeconds(0.25f));
         }
         AudioManager.Stop(ReloadSound);
         AmmoClip.LoadAmmunition(ammunition);
         EventAggregator.GetInstance().Publish(new OnWeaponAmmoChangedEvent(playerNumber, AmmoClip.GetCurrentAmmo()));
         EventAggregator.GetInstance().Publish(new OnPlayerAmmoChangedEvent(playerNumber, ammunition));
         AudioManager.Play(ReloadFinishSound);
         IsReloading = false;
     }
 }
Exemplo n.º 3
0
    public override void Fire(Player player)
    {
        if (AmmoClip.EnoughAmmoToFire())
        {
            Bullet[] bulletArr = new Bullet[5];

            //currentPlayer = player;
            PlayFireAnimation(player);

            for (int i = 0; i < bulletArr.Length; i++)
            {
                bulletArr[i] = Instantiate(bullet, player.shootPosition.position, player.shootPosition.rotation * Quaternion.Euler(projAngles[i]));
            }
            foreach (Bullet b in bulletArr)
            {
                b.SetDamage(projDamage);
                b.SetDistance(20f);
                b.GetComponent <Rigidbody2D>().AddForce(b.transform.right * projSpeed);
                b.setShooter(player.gameObject);
                b.setSound(FireSound);
            }
            AmmoClip.Decrement();
            EventAggregator.GetInstance().Publish <OnWeaponAmmoChangedEvent>(new OnWeaponAmmoChangedEvent(player.playerNumber, AmmoClip.GetCurrentAmmo()));
        }
        else
        {
            // Fire OnReloadMessage Event
            if (IsReloading && !ReloadCancel)
            {
                Debug.Log(this.name + " is still reloading");
            }
            else
            {
                AudioManager.Play("No_Ammo_Sound");
                Debug.Log("Not enough ammo in clip to fire, need to reload " + this.name + "\nAmmoUsePerBullet: " + AmmoClip.AMMO_USE_PER_BULLET + ", but in clip: " + AmmoClip.GetCurrentAmmo());
            }
        }
    }