Example #1
0
    /// <summary>
    /// Наносит урон персонажу в размере <paramref name="amount"/>.
    /// </summary>
    /// <param name="amount">Количество наносимого урона.</param>
    public void ApplyDamage(int amount)
    {
        if (amount <= 0)
        {
            return;
        }

        amount = Mathf.FloorToInt(amount * (1 - CurrentInfo.guardCoeff));

        var info = CurrentInfo;

        if (info.hp - amount <= 0)
        {
            info.hp = 0;
        }
        else
        {
            info.hp -= amount;
        }

        CurrentInfo = info;

        OnHealthCountChanged?.Invoke(_unitInfo.hp, CurrentInfo.hp);

        if (CurrentInfo.hp <= 0)
        {
            Die();
        }
        else
        {
            RestoreEnergy(Mathf.FloorToInt(amount / 4f));
        }
    }
Example #2
0
    /// <summary>
    /// Наносит исцеление персонажу в размере <paramref name="amount"/>.
    /// </summary>
    /// <param name="amount">Количество наносимого исцеления.</param>
    public void ApplyHeal(int amount)
    {
        if (amount <= 0)
        {
            return;
        }

        var info = CurrentInfo;

        if (info.hp + amount >= _unitInfo.hp)
        {
            info.hp = _unitInfo.hp;
        }
        else
        {
            info.hp += amount;
        }

        CurrentInfo = info;

        OnHealthCountChanged?.Invoke(_unitInfo.hp, CurrentInfo.hp);
    }