예제 #1
0
    // Character tries to attack
    // Checks every possible outcome of a single attack:
    // 1. Enemy can Dodge or Block
    // 2. Character can deal Critical Damage
    public void AttackAttempt()
    {
        if (!enemy.DodgeHit())     // Checks enemy dodging
        {
            if (!enemy.BlockHit()) // Checks enemy blocking
            {
                // If hit isn't blocked
                // Check dmg amount and apply to enemy health

                // Check if this character deals critical damage
                if (SpellBook_script.InstaCrit.isActive == true && Time.time > SpellBook_script.InstaCrit.lastUse)
                {
                    if (weaponToggle == "Melee")
                    {
                        damage = meleeDmgMax + 5f;
                    }
                    else
                    {
                        damage = rangedDmgMax + 5f;
                    }
                    // Apply the damage to enemy
                    enemy.TakesHit(damage);
                    if (SpellBook_script.DoubleStrike.isActive == true && Time.time > SpellBook_script.DoubleStrike.lastUse)
                    {
                        enemy.TakesHit(damage);
                        Debug.Log("Double strike hit!");
                        SpellBook_script.DoubleStrike.isActive = false;
                        SpellBook_script.DoubleStrike.lastUse  = Time.time + SpellBook_script.InstaCrit.GetCooldown();
                    }
                    lastAttack = Time.time + attackCooldown;
                    Debug.Log("InstaCrit hit! Damage dealt : " + damage);
                    // Apply cooldown to Spell
                    SpellBook_script.InstaCrit.isActive = false;
                    SpellBook_script.InstaCrit.lastUse  = Time.time + SpellBook_script.InstaCrit.GetCooldown();
                }
                else if (CriticalHit())                                                    // <---------------------------   Add Insta Crit Spell check
                {
                    // Check which weapon is equipped
                    // & applies its Maximum Damage
                    if (weaponToggle == "Melee")
                    {
                        damage = meleeDmgMax + 5f;
                    }
                    else
                    {
                        damage = rangedDmgMax + 5f;
                    }
                    // Apply the damage to enemy
                    enemy.TakesHit(damage);
                    if (SpellBook_script.DoubleStrike.isActive == true && Time.time > SpellBook_script.DoubleStrike.lastUse)
                    {
                        enemy.TakesHit(damage);
                        Debug.Log("Double strike hit!");
                        SpellBook_script.DoubleStrike.isActive = false;
                        SpellBook_script.DoubleStrike.lastUse  = Time.time + SpellBook_script.InstaCrit.GetCooldown();
                    }
                    lastAttack = Time.time + attackCooldown;
                }
                else
                {
                    // apply regular damage
                    damage = RollDamage();
                    if (SpellBook_script.DoubleStrike.isActive == true && Time.time > SpellBook_script.DoubleStrike.lastUse)
                    {
                        enemy.TakesHit(damage);
                        Debug.Log("Double strike hit!");
                        SpellBook_script.DoubleStrike.isActive = false;
                        SpellBook_script.DoubleStrike.lastUse  = Time.time + SpellBook_script.InstaCrit.GetCooldown();
                    }
                    enemy.TakesHit(damage);
                    lastAttack = Time.time + attackCooldown;
                }
            }
            else
            {
                // Hit was blocked
                // Apply the damage to the opponent's shield
                damage = RollDamage();
                if (SpellBook_script.DoubleStrike.isActive == true && Time.time > SpellBook_script.DoubleStrike.lastUse)
                {
                    enemy.TakesHit(damage);
                    Debug.Log("Double strike hit!");
                    SpellBook_script.DoubleStrike.isActive = false;
                    SpellBook_script.DoubleStrike.lastUse  = Time.time + SpellBook_script.InstaCrit.GetCooldown();
                }
                enemy.TakesBlockedHit(damage);
                lastAttack = Time.time + attackCooldown;
            }
        }
    }