Example #1
0
 public void Shake(float scale)
 {
     cameraShakeController.Shake(scale);
 }
    public void Attack(EnemyBase[] enemyStats, int selectedEnemy, Skill skill, CameraShakeController cameraShakeController)
    {
        int   playerDamage = damage;
        Color attackColor  = Color.white;

        int criticalChance = 10 + ((criticalHit - 1) * 2);

        if (Random.Range(1, 101) <= criticalChance)
        {
            // Critical hit
            float criticalMultiplier = 2 + (criticalHit / 10f);
            Debug.Log("Player damage: " + playerDamage);
            playerDamage = Mathf.RoundToInt(playerDamage * criticalMultiplier);
            Debug.Log("Critical multiplier: " + criticalMultiplier);
            Debug.Log("Critical damage: " + playerDamage);
            attackColor = Color.red;
            StartCoroutine(cameraShakeController.Shake(0.1f, 0.8f));
        }

        if (IsBuffed())
        {
            playerDamage *= 2;
        }

        if (skill == Skill.Areal)
        {
            // Damage all enemies
            foreach (EnemyBase eb in enemyStats)
            {
                if (!eb.isDestroyed)
                {
                    eb.TakeDamage(playerDamage, attackColor);
                }
            }
        }
        else
        {
            if (skill == Skill.Basic)
            {
                playerDamage += Mathf.RoundToInt(playerDamage * (PlayerStatsController.ps.basicEffect / 100f));

                // Chance for poison attack
                if (PlayerStatsController.ps.isSkillUnlocked[(int)Skill.PoisonChance] && Random.Range(1, 101) <= PlayerStatsController.ps.poisonChance)
                {
                    enemyStats[selectedEnemy].ApplyPoison(PlayerStatsController.ps.poisonLength);
                }
            }
            else if (skill == Skill.Stun)
            {
                playerDamage = Mathf.RoundToInt(playerDamage / 2f); // half damage
                enemyStats[selectedEnemy].ApplyStun(PlayerStatsController.ps.stunLength);
            }
            else if (skill == Skill.Ultimate)
            {
                playerDamage = Mathf.RoundToInt(playerDamage * PlayerStatsController.ps.ultimateEffect);
            }
            else if (skill == Skill.Poison)
            {
                enemyStats[selectedEnemy].ApplyPoison(PlayerStatsController.ps.poisonLength);
            }
            enemyStats[selectedEnemy].TakeDamage(playerDamage, attackColor);
        }
    }