/// <summary>
 /// Use the Ability
 /// </summary>
 /// <param name="Attacker"></param>
 /// <returns></returns>
 public bool UseAbility(EntityInfoModel Attacker)
 {
     BattleMessageModel.ClearMessages();
     BattleMessageModel.TurnMessageSpecial = " Used Ability";
     BattleMessageModel.TurnMessage        = Attacker.Name + BattleMessageModel.TurnMessageSpecial;
     Debug.WriteLine(BattleMessageModel.TurnMessage);
     return(true);
 }
        //Sleeping Turn for Hackthon Scenario 7
        public bool FallAsleep(EntityInfoModel Attacker)
        {
            Debug.WriteLine(string.Format(Attacker.Name, " is sleeping"));
            BattleMessageModel.ClearMessages();
            BattleMessageModel.TurnMessage = Attacker.Name + " is sleeping";

            return(true);
        }
        /// <summary>
        /// Attack Action Deatil
        /// </summary>
        /// <param name="Attacker"></param>
        /// <param name="Target"></param>
        /// <returns></returns>
        public bool TurnAsAttack(EntityInfoModel Attacker, EntityInfoModel Target)
        {
            if (Attacker == null)
            {
                return(false);
            }

            if (Target == null)
            {
                return(false);
            }

            BattleMessageModel.ClearMessages();

            CalculateAttackStatus(Attacker, Target);

            // Hackathon
            // Hackathon Scenario 2, Bob alwasys misses
            if (Attacker.Name.Equals("Bob"))
            {
                BattleMessageModel.HitStatus   = HitStatusEnum.Miss;
                BattleMessageModel.TurnMessage = "Bob always Misses";
                Debug.WriteLine(BattleMessageModel.TurnMessage);
                return(true);
            }

            if (PrimeNumber)
            {
                if (Attacker.PlayerType == PlayerTypeEnum.Character && IsPrime(Attacker))
                {
                    BattleMessageModel.HitStatus   = HitStatusEnum.Hit;
                    BattleMessageModel.TurnMessage = "Prime always Hit";
                    //Debug.WriteLine(Attacker.TestDamage);
                    BattleMessageModel.DamageAmount = Attacker.GetDamageTotal;
                    Debug.WriteLine(BattleMessageModel.TurnMessage);
                    return(true);
                }
            }


            switch (BattleMessageModel.HitStatus)
            {
            case HitStatusEnum.Miss:
                // It's a Miss

                break;

            case HitStatusEnum.Hit:
                // It's a Hit

                BattleMessageModel.DamageAmount = Attacker.GetDamageRollValue();

                ApplyDamage(Target);

                BattleMessageModel.TurnMessageSpecial = BattleMessageModel.GetCurrentHealthMessage();

                // Check if the target dead. If dead, remove it

                RemoveIfDead(Target);

                // If Attacker is a Character, it should gain experience from Monster

                CalculateExperience(Attacker, Target);

                break;
            }
            BattleMessageModel.TurnMessage = Attacker.Name + BattleMessageModel.AttackStatus + Target.Name + BattleMessageModel.TurnMessageSpecial + BattleMessageModel.ExperienceEarned;
            Debug.WriteLine(BattleMessageModel.TurnMessage);
            if (Target.PlayerType == PlayerTypeEnum.Character)
            {
                UpdatePlayerList(Target);
            }
            return(true);
        }