using System.Collections.Generic; using UnityEngine; public class FireArcherBurn : MonoBehaviour { public ParticleSystem hotOilGround; public float hotOilGroundBurnTickDuration = 0.2f; public int hotOilGroundBurnTicks = 5; public float range = 3.5f; public List damageModifyers = new List(); public List mustHaveTags; public List mayNotHaveTags; public float timeTillSelfDestroy = 5f; private TagManager tagManager; private List foundTaggedObjects = new List(); private float timeTillTickEnds; private int ticksRemaining; private void Start() { tagManager = TagManager.instance; if (DamageTick()) { timeTillTickEnds = hotOilGroundBurnTickDuration; ticksRemaining = hotOilGroundBurnTicks - 1; ParticleSystem.EmissionModule emission = hotOilGround.emission; emission.enabled = true; } } private void Update() { 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; } } } timeTillSelfDestroy -= Time.deltaTime; if (timeTillSelfDestroy <= 0f) { Object.Destroy(base.gameObject); } } 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; } }