Exemplo n.º 1
0
    string ResolveDamage(EntityBehaviour sender, EntityBehaviour reciever, EffectType type, int valueMin, int valueMax, Characteristic charac = Characteristic.CurrentHP)
    {
        int   baseDamage      = GameManager.instance.randomSeed.Next(valueMin, valueMax + 1);
        float rangeDamage     = 1f;
        float rangeResistance = 1f;
        float typeDamage      = 1f;
        float typeResistance  = 1f;
        float orientation     = 1f;

        if (charac == Characteristic.CurrentHP)
        {
            if (Mathf.Abs(sender.x - reciever.x) + Mathf.Abs(sender.y - reciever.y) <= 1)
            {
                rangeDamage     = sender.character.stats[Characteristic.ContactDamage];
                rangeResistance = reciever.character.stats[Characteristic.ContactResistance];
            }
            else
            {
                rangeDamage     = sender.character.stats[Characteristic.DistantDamage];
                rangeResistance = reciever.character.stats[Characteristic.DistantResistance];
            }
            if (type == EffectType.Magic)
            {
                typeDamage     = sender.character.stats[Characteristic.MagicDamage];
                typeResistance = reciever.character.stats[Characteristic.MagicResistance];
            }
            else
            {
                typeDamage     = sender.character.stats[Characteristic.PhysicalDamage];
                typeResistance = reciever.character.stats[Characteristic.PhysicalResistance];
            }
        }

        if (sender.orientation == reciever.orientation)
        {
            orientation = 1.5f;
        }
        else if (sender.orientation == (reciever.orientation + 180) % 360)
        {
            orientation = 1.0f;
        }
        else
        {
            orientation = 1.25f;
        }

        int damage = -Mathf.RoundToInt(
            (baseDamage
             + (baseDamage * (rangeDamage / rangeResistance - 1))
             + (baseDamage * (typeDamage / typeResistance - 1)))
            * orientation
            );

        if (reciever.character.stats[Characteristic.CurrentHP] <= -damage)
        {
            damage = (int)reciever.character.stats[Characteristic.CurrentHP];
            reciever.character.stats[Characteristic.CurrentHP] = 0f;
            reciever.Die();
            return(-damage + " (die)");
        }
        reciever.character.stats[Characteristic.CurrentHP] += damage;
        return(damage.ToString());
    }