/// <summary>
        /// Calculate the attack information for the attack on the specified defense Character
        /// </summary>
        /// <param name="defenseCharacter"></param>
        /// <returns></returns>
        public AttackInformation CalculateAttackInformation(Character defenseCharacter)
        {
            Debug.LogFormat("CalculateAttackInformation: {0}", defenseCharacter);
            Weapon attackWeapon = GetUsableItem <Weapon>();

            Debug.LogFormat("Attack weapon: {0}", attackWeapon);

            Weapon defenseWeapon = defenseCharacter.GetUsableItem <Weapon>();

            Debug.LogFormat("Defense weapon: {0}", defenseWeapon);

            bool defenseCanAttack = false;

            if (defenseWeapon != null)
            {
                defenseCanAttack = defenseWeapon.IsInRange(defenseCharacter.transform.position, transform.position);
            }

            int attackHitPercentage      = CalculateHitPercentage(attackWeapon, defenseCharacter, defenseWeapon);
            int attackDamage             = CalculateDamage(attackWeapon, defenseCharacter, defenseWeapon);
            int attackCriticalPercentage = CalculateCriticalPercentage(attackWeapon, defenseCharacter, defenseWeapon);
            int attackNumberOfAttacks    = CalculateNumberOfAttacks(attackWeapon, defenseCharacter, defenseWeapon);

            int defenseHitPercentage      = 0;
            int defenseDamage             = 0;
            int defenseCriticalPercentage = 0;
            int defenseNumberOfAttacks    = 0;

            if (defenseCanAttack)
            {
                defenseHitPercentage      = defenseCharacter.CalculateHitPercentage(defenseWeapon, this, attackWeapon);
                defenseDamage             = defenseCharacter.CalculateDamage(defenseWeapon, this, attackWeapon);
                defenseCriticalPercentage = defenseCharacter.CalculateCriticalPercentage(defenseWeapon, this, attackWeapon);
                defenseNumberOfAttacks    = defenseCharacter.CalculateNumberOfAttacks(defenseWeapon, this, attackWeapon);
            }

            AttackInformation attackInformation = new AttackInformation(
                attackWeapon: attackWeapon,
                attackHitPercentage: attackHitPercentage,
                attackDamage: attackDamage,
                attackCriticalPercentage: attackCriticalPercentage,
                attackNumberOfAttacks: attackNumberOfAttacks,
                defenseWeapon: defenseWeapon,
                defenseHitPercentage: defenseHitPercentage,
                defenseDamage: defenseDamage,
                defenseCriticalPercentage: defenseCriticalPercentage,
                defenseCanAttack: defenseCanAttack,
                defenseNumberOfAttacks: defenseNumberOfAttacks);

            Debug.Log(attackInformation);

            return(attackInformation);
        }