Example #1
0
    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;
 }