Esempio n. 1
0
    void DoAttack()
    {
        CombatPlayer player = GameObject.FindObjectOfType <CombatPlayer>();

        if (player == null)
        {
            return;
        }

        int hitSkill = 50 + Level * 10;

        if (Random.Range(0, hitSkill) < Random.Range(0, player.Dodge()))
        {
            CombatBubbleSpawner.SpawnBubble(
                player.transform.position,
                "Dodged!",
                CombatBubbleSpawner.BubbleTypes.Round,
                Color.green
                );
            return;
        }

        int maxDamage = ((Bossiness - 1) * 2 + Level) * (1 + Difficulty.DiffLevel);

        int damage = Random.Range(maxDamage / 2, maxDamage);

        player.TakeDamage(damage, damageType);
    }
Esempio n. 2
0
    void DoAttack()
    {
        CombatEnemy enemy = combatQueue.FirstEnemy();

        if (enemy == null)
        {
            return;
        }

        int hitSkill = (int)statManager.DerivedPrecision();

        if (Random.Range(0, hitSkill) < Random.Range(0, enemy.Dodge()))
        {
            CombatBubbleSpawner.SpawnBubble(
                enemy.transform.position,
                "Missed!",
                CombatBubbleSpawner.BubbleTypes.Round,
                Color.gray
                );

            SoundsManager.PlayClip(MissSounds[Random.Range(0, MissSounds.Length)]);

            return;
        }

        int maxDamage = (int)statManager.DerivedDamage();

        int damage = Random.Range(maxDamage / 2, maxDamage);

        bool isCrit = Random.Range(0, 100) < statManager.GetValue(Stats.Critical);

        if (isCrit)
        {
            // TODO: Crit event
            damage *= 2;
        }

        CombatBubbleSpawner.SpawnBubble(
            enemy.transform.position,
            damage.ToString(),
            (isCrit ? CombatBubbleSpawner.BubbleTypes.Spiky : CombatBubbleSpawner.BubbleTypes.Round),
            (isCrit ? Color.red : Color.white)
            );

        SoundsManager.PlayClip(AttackSounds[Random.Range(0, AttackSounds.Length)]);

        enemy.TakeDamage(damage);
    }
Esempio n. 3
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
            );
    }