DamageOverTime

neubern

Member
Script made for DOTs using DamageProcessor. Have fun

using Opsive.Shared.Game; using Opsive.UltimateCharacterController.Traits.Damage; using UnityEngine; using EventHandler = Opsive.Shared.Events.EventHandler; [CreateAssetMenu(fileName = "DamageOverTime", menuName = "Ultimate Character Controller/Damage Processors/DamageOverTime")] public class DamageOverTime : DamageProcessor { [Tooltip("Specifies the Number of Damage Ticks")] [SerializeField] protected int m_NumberOfTicks = 2; [Tooltip("Specifies the Time between each of the Ticks")] [SerializeField] protected float m_TimePerTick = 1f; private IDamageTarget m_Target; private DamageData m_DamageData; private ScheduledEventBase m_scheduledEventBase; public int NumberOfTicks { get { return m_NumberOfTicks; } set { m_NumberOfTicks = value; } } public float TimePerTick { get { return m_TimePerTick; } set { m_TimePerTick = value; } } /// <summary> /// Processes the DamageData on the DamageTarget. /// </summary> /// <param name="target">The object receiving the damage.</param> /// <param name="damageData">The damage data to be applied to the target.</param> public override void Process(IDamageTarget target, DamageData damageData) { m_Target = target; m_DamageData = damageData; //EventHandler.RegisterEvent(m_Target.Owner, "OnDeath", OnTargetDeath); EventHandler.RegisterEvent<Vector3, Vector3, GameObject>(m_Target.Owner, "OnDeath", OnDeath); for (int i = 0; i < m_NumberOfTicks; i++) { m_scheduledEventBase = Scheduler.Schedule(i * m_TimePerTick, ApplyDamageToTarget); } m_scheduledEventBase = Scheduler.Schedule(m_NumberOfTicks * m_TimePerTick, RemoveEvent); } private void ApplyDamageToTarget() { m_Target.Damage(m_DamageData); } private void RemoveEvent() { EventHandler.UnregisterEvent<Vector3, Vector3, GameObject>(m_Target.Owner, "OnDeath", OnDeath); } private void RemoveSchedule() { SchedulerBase.Cancel( m_scheduledEventBase ); } private void OnDeath(Vector3 v3, Vector3 v31, GameObject go) { RemoveEvent(); RemoveSchedule(); } }
 
Top