Пример #1
0
 void Drop()
 {
     currentClip.gameObject.transform.parent = null;
     currentClip.gameObject.GetComponent <Rigidbody>().isKinematic = false;
     currentClipAnims.enabled = false;
     currentClip = null;
 }
Пример #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;
     }
 }
Пример #3
0
 public void ReloadClip(GameObject clip)
 {
     currentClip      = clip.GetComponent <AmmoClip>();
     currentClipAnims = currentClip.GetComponent <Animator>();
     currentAmmo      = startAmmo;
     outOfAmmo        = false;
 }
Пример #4
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);
            }
        }
    }
Пример #5
0
 public void ReloadClip(GameObject clip)
 {
     currentClip      = clip.GetComponent <AmmoClip>();
     currentClipAnims = currentClip.GetComponent <Animator>();
     currentAmmo      = startAmmo;
     outOfAmmo        = false;
     gunSoundSource.PlayOneShot(gunReloadSound, 0.3f);
 }
Пример #6
0
    public override void ResetWeaponStats()
    {
        ReloadTime = DEFAULT_RELOAD_TIME;
        attackRate = DEFAULT_ATTACK_RATE;
        projDamage = DEFAULT_PROJ_DAMAGE;
        float ammoInClip = AmmoClip.GetPercentageInClip() * DEFAULT_MAX_CLIP_SIZE * 1f;

        AmmoClip = new AmmoClip((int)ammoInClip, DEFAULT_MAX_CLIP_SIZE, AMMO_USED_PER_BULLET);
    }
Пример #7
0
    private int MaxAmmoClip = DEFAULT_MAX_CLIP_SIZE; // mutated value as level increases

    public HandGun()
    {
        projDamage        = DEFAULT_PROJ_DAMAGE;
        projSpeed         = 1500f;//500;
        weight            = 0;
        ReloadTime        = DEFAULT_RELOAD_TIME;
        attackRate        = DEFAULT_ATTACK_RATE;
        AmmoClip          = new AmmoClip(DEFAULT_MAX_CLIP_SIZE, AMMO_USED_PER_BULLET);
        ReloadSound       = "Universal_Reload";
        ReloadFinishSound = "Universal_Reload_Finished";
    }
Пример #8
0
 public override void UpdateWeaponStats(Stats playerStats)
 {
     ReloadTime = DEFAULT_RELOAD_TIME - (DEFAULT_RELOAD_TIME * playerStats.ReloadMultiplier);
     attackRate = DEFAULT_ATTACK_RATE - (DEFAULT_ATTACK_RATE * playerStats.AttackRateMultiplier);
     projDamage = DEFAULT_PROJ_DAMAGE + playerStats.DamageMultiplier;
     if (playerStats.Level > 1)
     {
         MaxAmmoClip = DEFAULT_MAX_CLIP_SIZE + (AMMO_USED_PER_BULLET * playerStats.Level);
         int ammoInClip = (int)(AmmoClip.GetPercentageInClip() * MaxAmmoClip);
         AmmoClip = new AmmoClip(ammoInClip, MaxAmmoClip, AMMO_USED_PER_BULLET);
     }
 }
Пример #9
0
    private int MaxAmmoClip = DEFAULT_MAX_CLIP_SIZE; // mutated value as level increases

    public Sniper()
    {
        projDamage        = DEFAULT_PROJ_DAMAGE;
        projSpeed         = 2500f;//1000;
        weight            = 2;
        AmmoClip          = new AmmoClip(DEFAULT_MAX_CLIP_SIZE, AMMO_USED_PER_BULLET);
        ReloadTime        = DEFAULT_RELOAD_TIME;
        attackRate        = DEFAULT_ATTACK_RATE;
        ReloadSound       = "Sniper_Reload";
        ReloadFinishSound = "Sniper_Reload_Finished";
        FireSound         = "SniperFire";
    }
Пример #10
0
    private int MaxAmmoClip = DEFAULT_MAX_CLIP_SIZE; // mutated value as level increases

    public AssaultRifle()
    {
        ReloadTime        = DEFAULT_ATTACK_RATE;
        AmmoClip          = new AmmoClip(DEFAULT_MAX_CLIP_SIZE, AMMO_USED_PER_BULLET);
        weight            = 2;
        projSpeed         = 1500f;//650f;
        attackRate        = DEFAULT_ATTACK_RATE;
        projDamage        = DEFAULT_PROJ_DAMAGE;
        ReloadSound       = "Universal_Reload";
        ReloadFinishSound = "Universal_Reload_Finished";
        FireSound         = "AssaultFire";
    }
Пример #11
0
 public Shotgun()
 {
     weight            = 3;
     projDamage        = DEFAULT_PROJ_DAMAGE;
     projSpeed         = 2000f;//350;
     AmmoClip          = new AmmoClip(DEFAULT_MAX_CLIP_SIZE, AMMO_USED_PER_BULLET);
     ReloadTime        = DEFAULT_RELOAD_TIME;
     attackRate        = DEFAULT_ATTACK_RATE;
     ReloadSound       = "Shotgun_Reload";
     ReloadFinishSound = "Shotgun_Reload_Finished";
     FireSound         = "ShotgunFire";
 }
Пример #12
0
    private int MaxAmmoClip = DEFAULT_MAX_CLIP_SIZE; // mutated value as level increases

    public RocketLauncher()
    {
        projDamage = DEFAULT_PROJ_DAMAGE;
        projSpeed  = 1000f;//300f;
        weight     = 4;
        ReloadTime = DEFAULT_RELOAD_TIME;
        attackRate = DEFAULT_ATTACK_RATE;
        AmmoClip   = new AmmoClip(DEFAULT_MAX_CLIP_SIZE, AMMO_USED_PER_BULLET);
        // Will need to be updated to a better sound
        ReloadSound       = "Universal_Reload";
        ReloadFinishSound = "Universal_Reload_Finished";
        FireSound         = "RocketFire";
    }
Пример #13
0
    public override void InitStateInfo(ItemStateInfo stateInfo)
    {
        RangedWeaponStateInfo casted = (RangedWeaponStateInfo)stateInfo;

        this.StateInfo.FireMode          = casted.FireMode;
        this.StateInfo.AmmoClipStateInfo = casted.AmmoClipStateInfo;

        if (this.StateInfo.AmmoClipStateInfo != null)
        {
            if (StateInfo.AmmoClipStateInfo.ProjectileCount > 0)
            {
                AmmoClip = (AmmoClip)GameObject.Instantiate(StateInfo.AmmoClipStateInfo.Prefab);
                AmmoClip.transform.SetParent(AmmoClipParent);
                AmmoClip.transform.localPosition = Vector3.zero;
                AmmoClip.transform.localRotation = Quaternion.identity;
            }
        }
    }
Пример #14
0
    private IEnumerator Reload(float time)
    {
        InventoryItem ammoClipInventoryItem = GetNextClipFromInventory();

        if (_rangedWeapon.AmmoClip != null)
        {
            GameObject.Destroy(_rangedWeapon.AmmoClip.gameObject);
            _rangedWeapon.AmmoClip = null;
        }

        AmmoClip spawnedAmmoClip = (AmmoClip)Character.EquipmentManager.Equip(AttachmentSlotId.LeftHand, ammoClipInventoryItem);

        yield return(new WaitForSeconds(time));

        spawnedAmmoClip.transform.SetParent(_rangedWeapon.AmmoClipParent);
        spawnedAmmoClip.transform.localPosition   = Vector3.zero;
        spawnedAmmoClip.transform.localRotation   = Quaternion.identity;
        _rangedWeapon.StateInfo.AmmoClipStateInfo = spawnedAmmoClip.StateInfo;

        StateMachine.TryActivateState(StateId.Aim);
    }
Пример #15
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());
            }
        }
    }