Esempio n. 1
0
    public void TakeDamage(int amount, DamageType dtype)
    {
        int mitigation = 0;

        switch (dtype)
        {
        case DamageType.Physical:
            mitigation = Random.Range(0, (int)statManager.GetValue(Stats.Armor));
            break;

        case DamageType.Fire:
            mitigation = Random.Range(0, (int)statManager.DerivedResFire());
            break;

        case DamageType.Electrical:
            mitigation = Random.Range(0, (int)statManager.DerivedResElec());
            break;

        case DamageType.Cold:
            mitigation = Random.Range(0, (int)statManager.DerivedResCold());
            break;

        default:
            break;
        }

        mitigation = Mathf.FloorToInt(Mathf.Min(amount * 0.75f, mitigation));

        int actualDamage = amount - mitigation;

        statManager.ChangeValue(Stats.CurrentHP, -(actualDamage));

        Color c = Color.white;

        switch (dtype)
        {
        case DamageType.Physical:
            c = Color.grey;
            break;

        case DamageType.Fire:
            c = Color.red;
            break;

        case DamageType.Electrical:
            c = Color.yellow;
            break;

        case DamageType.Cold:
            c = Color.blue;
            break;

        default:
            break;
        }

        if (actualDamage > 0)
        {
            SoundsManager.PlayClip(HurtSounds[Random.Range(0, HurtSounds.Length)]);
        }

        CombatBubbleSpawner.SpawnBubble(
            this.transform.position,
            "-" + actualDamage,
            CombatBubbleSpawner.BubbleTypes.Round,
            c
            );
    }