/// <summary> /// Apply attack from this character using the given parameters /// </summary> /// <param name="attackWeapon"></param> /// <param name="attackHitPercentage"></param> /// <param name="attackDamage"></param> /// <param name="attackCriticalPercentage"></param> /// <param name="defenseCharacter"></param> /// <returns></returns> public AttackResult ApplyAttack(Weapon attackWeapon, int attackHitPercentage, int attackDamage, int attackCriticalPercentage, Character defenseCharacter) { Debug.LogFormat("ApplyAttack: {0}, {1}, {2}, {3}", attackWeapon, attackHitPercentage, attackDamage, defenseCharacter); int attackHitChance = GameManager.Random.Next(100); Debug.LogFormat("Attack hit chance: {0}", attackHitChance); int attackExperience = 1; int defenseExperience = 1; if (attackHitChance <= attackHitPercentage) { int criticalHitChance = GameManager.Random.Next(100); if (criticalHitChance <= attackCriticalPercentage) { Debug.Log("Critical attack"); attackDamage *= 3; } attackWeapon.Use(); if (attackDamage != 0) { attackExperience += 9; defenseCharacter.CurrentHp = Mathf.Max(0, defenseCharacter.CurrentHp - attackDamage); } } if (defenseCharacter.CurrentHp == 0) { attackExperience += 10; defenseCharacter.Die(); } return(new AttackResult(attackExperience, defenseExperience)); }