/// <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));
        }