void Drop() { currentClip.gameObject.transform.parent = null; currentClip.gameObject.GetComponent <Rigidbody>().isKinematic = false; currentClipAnims.enabled = false; currentClip = null; }
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; } }
public void ReloadClip(GameObject clip) { currentClip = clip.GetComponent <AmmoClip>(); currentClipAnims = currentClip.GetComponent <Animator>(); currentAmmo = startAmmo; outOfAmmo = false; }
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); } } }
public void ReloadClip(GameObject clip) { currentClip = clip.GetComponent <AmmoClip>(); currentClipAnims = currentClip.GetComponent <Animator>(); currentAmmo = startAmmo; outOfAmmo = false; gunSoundSource.PlayOneShot(gunReloadSound, 0.3f); }
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); }
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"; }
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); } }
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"; }
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"; }
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"; }
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"; }
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; } } }
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); }
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()); } } }