private void OnCollisionEnter(Collision collision) { IDamagable damagable = collision.collider.GetComponent <IDamagable>(); if (damagable != null) { if (damage > 0) { var result = damagable.TakeDamage(damage); if (result == TakeDamageResult.Destroy) { Destroy(gameObject); } else if (result == TakeDamageResult.Stuck) { transform.parent = collision.transform; Destroy(this); Destroy(GetComponent <Rigidbody>()); Destroy(GetComponent <Collider>()); } } IEffectedDamagable effectedDamagable = damagable as IEffectedDamagable; if (effectedDamagable != null) { EffectParams parameters = new EffectParams(collision.gameObject, effectedDamagable); foreach (var effect in effects) { if (!effectedDamagable.IgnoresEffect(effect)) { EffectHandler.Instance.ApplyEffect(effect, parameters); } } } } }
public EffectParams(GameObject target, IEffectedDamagable damagable, params object[] paramenters) { Target = target; Damagable = damagable; Parameters = paramenters; }