summaryrefslogtreecommitdiff
path: root/GameCode/FlameThrower.cs
diff options
context:
space:
mode:
Diffstat (limited to 'GameCode/FlameThrower.cs')
-rw-r--r--GameCode/FlameThrower.cs68
1 files changed, 68 insertions, 0 deletions
diff --git a/GameCode/FlameThrower.cs b/GameCode/FlameThrower.cs
new file mode 100644
index 0000000..d415d88
--- /dev/null
+++ b/GameCode/FlameThrower.cs
@@ -0,0 +1,68 @@
+using UnityEngine;
+
+public class FlameThrower : Tower
+{
+ [SerializeField]
+ private ParticleSystem flames;
+
+ public bool flaming;
+
+ private bool hasMana = true;
+
+ [SerializeField]
+ private AudioSource audioS;
+
+ private bool soundPlaying;
+
+ protected override void Update()
+ {
+ if (hasMana && currentTarget != null && !flaming)
+ {
+ flames.Play();
+ PlaySound(onOff: true);
+ flaming = true;
+ }
+ else if (!hasMana || (currentTarget == null && flaming))
+ {
+ flames.Stop();
+ PlaySound(onOff: false);
+ flaming = false;
+ }
+ base.Update();
+ }
+
+ protected override void Fire()
+ {
+ if (consumesMana)
+ {
+ int manaCost = (int)((float)base.damage * manaConsumptionRate);
+ if (!ResourceManager.instance.CheckMana(manaCost))
+ {
+ hasMana = false;
+ return;
+ }
+ ResourceManager.instance.SpendMana(manaCost);
+ hasMana = true;
+ }
+ RaycastHit[] array = Physics.SphereCastAll(muzzle.position, base.range / 6f, muzzle.transform.forward, base.range * 1.5f, enemyLayerMask, QueryTriggerInteraction.Collide);
+ foreach (RaycastHit raycastHit in array)
+ {
+ raycastHit.collider.GetComponent<IDamageable>()?.TakeDamage(towerType, base.damage, base.healthDamage, base.armorDamage, base.shieldDamage, base.slowPercent, base.bleedPercent, base.burnPercent, base.poisonPercent, base.critChance, base.stunChance);
+ }
+ }
+
+ private void PlaySound(bool onOff)
+ {
+ if (onOff && !soundPlaying)
+ {
+ audioS.volume = OptionsMenu.instance.masterVolume * OptionsMenu.instance.sfxVolume;
+ audioS.Play();
+ soundPlaying = true;
+ }
+ else if (!onOff && soundPlaying)
+ {
+ audioS.Stop();
+ soundPlaying = false;
+ }
+ }
+}