// ignore me: public override void ApplyEffect <T>(EffectHandlerComponent unit, T data) { if (data is MissileEffectData) { this.ApplyEffect(unit, data); } }
private void ApplyEffect(EffectHandlerComponent unit, DamageOverTimeEffectData data) { Debug.Log("Do Damage: " + data.Amount * Time.deltaTime + " of type " + data.Type.ToString()); data.Time -= Time.deltaTime; data.Finished = data.Time <= 0; }
//! DO THE ACTUALL APPLYEFFECT METHOD HERE: private void ApplyEffect(EffectHandlerComponent unit, DamageEffectData data) { // something like: // unit.GetComponent<HealthComponent>().ApplyDamage(data.Amount, data.Type) Debug.Log("Do Damage: " + data.Amount + " of type " + data.Type.ToString()); data.Finished = true; }
//! THIS LOOPHOLE HERE IS SADLY NECESSARY TO OVERCOME THE UNITY'S EDITOR //! PROBLEM WITH EXPOSING GENERICS OR INTERFACES IN THE INSPECTOR public override void ApplyEffect <T>(EffectHandlerComponent unit, T data) { if (data is DamageOverTimeEffectData) { this.ApplyEffect(unit, (DamageOverTimeEffectData)(object)data); } else if (data is DamageEffectData) { this.ApplyEffect(unit, (DamageEffectData)(object)data); } }
// Use this for initialization void Awake() { EHC = this.GetComponent <EffectHandlerComponent>(); }
private void ApplyEffect(EffectHandlerComponent unit, MissileEffectData data) { // do stuff here: // data.Finished = true; }