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;
}
}
}
|