public static Damage DealDamage(int damage, IModifiersHolder damagerModifiers, IHealth target, IModifiersHolder targetModifiers)
    {
        int realDamage = damage;

        foreach (var modifier in targetModifiers.Modifiers)
        {
            realDamage = modifier.Value.ModifyTakeDamage(realDamage);
        }
        foreach (var modifier in damagerModifiers.Modifiers)
        {
            realDamage = modifier.Value.ModifyDealDamage(realDamage);
        }

        if (realDamage > target.Armor)
        {
            return(new Damage(
                       realDamage - target.Armor,
                       target.Armor
                       ));
        }
        else
        {
            return(new Damage(
                       0,
                       realDamage
                       ));
        }
    }
    public override void OnTargetPlay(GameObject target)
    {
        IHealth          targetHealth     = target.GetComponent <IHealth>();
        IModifiersHolder targetModifiers  = target.GetComponent <IModifiersHolder>();
        IModifiersHolder damagerModifiers = GameObject.FindObjectOfType <PlayerEntity>().ModifiersHolder;

        Damage damage = DamageCalculator.DealDamage(_damage, damagerModifiers, targetHealth, targetModifiers);

        targetHealth.DealDamage(damage);
    }
Example #3
0
    public override bool ExecutePerTarget(GameObject target)
    {
        Entity entityTarget = target.GetComponent <Entity>();

        IHealth          targetHealth    = entityTarget.Health;
        IModifiersHolder targetModifiers = entityTarget.ModifiersHolder;
        IModifiersHolder selfModifiers   = _self.GetComponent <IModifiersHolder>();

        Damage damage = DamageCalculator.DealDamage(_damage, selfModifiers, targetHealth, targetModifiers);

        targetHealth.DealDamage(damage);
        return(true);
    }