using System.Collections.Generic; using UnityEngine; public class HotOilTower : MonoBehaviour { public ParticleSystem hotOilGround; public float hotOilGroundBurnTickDuration = 0.2f; public int hotOilGroundBurnTicks = 5; public float attackCooldown = 5f; public float checkRate = 1f; public float range = 3.5f; public List damageModifyers = new List(); public List mustHaveTags; public List mayNotHaveTags; private float cooldown; private TagManager tagManager; private List foundTaggedObjects = new List(); private float timeTillTickEnds; private int ticksRemaining; private void Start() { cooldown = Random.value; tagManager = TagManager.instance; } public void ReduceCooldownBy(float _reduceBy) { cooldown -= _reduceBy; } private void Update() { cooldown -= Time.deltaTime; if (timeTillTickEnds > 0f) { timeTillTickEnds -= Time.deltaTime; if (timeTillTickEnds <= 0f) { ticksRemaining--; if (ticksRemaining < 0) { ParticleSystem.EmissionModule emission = hotOilGround.emission; emission.enabled = false; } else { DamageTick(); timeTillTickEnds = hotOilGroundBurnTickDuration; } } } if (cooldown <= 0f) { if (DamageTick()) { cooldown = attackCooldown; timeTillTickEnds = hotOilGroundBurnTickDuration; ticksRemaining = hotOilGroundBurnTicks - 1; ParticleSystem.EmissionModule emission2 = hotOilGround.emission; emission2.enabled = true; } else { cooldown = checkRate; } } } private bool DamageTick() { bool result = false; tagManager.FindAllTaggedObjectsWithTags(foundTaggedObjects, mustHaveTags, mayNotHaveTags); for (int i = 0; i < foundTaggedObjects.Count; i++) { if (!(tagManager.MeasureDistanceToTaggedObject(foundTaggedObjects[i], base.transform.position) > range)) { result = true; foundTaggedObjects[i].Hp.TakeDamage(DamageModifyer.CalculateDamageOnTarget(foundTaggedObjects[i], damageModifyers) / (float)hotOilGroundBurnTicks); } } return result; } }