summaryrefslogtreecommitdiff
path: root/GameCode/FlameThrower.cs
blob: d415d889e5978656feffbc7dfa4275105a57f4c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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;
		}
	}
}