Example #1
0
        private static int ResolveDefense(Entities.Actor defender, int hits, StringBuilder attackMessage, StringBuilder defenseMessage)
        {
            int blocks = 0;

            if (hits > 0)
            {
                attackMessage.AppendFormat("scoring {0} hits.", hits);
                defenseMessage.AppendFormat("{0} defends and rolls: ", defender.Name);

                for (int dice = 0; dice < defender.Defense; dice++)
                {
                    int diceOutcome = Dice.Roll("1d100");
                    if (diceOutcome <= defender.DefenseChance)
                    {
                        blocks++;
                    }
                }
                defenseMessage.AppendFormat("resulting in {0} blocks.", blocks);
            }
            else
            {
                attackMessage.Append("and misses completely!");
            }

            return(blocks);
        }
Example #2
0
 private Entities.Actor FindOrCreateActor(TvMazeClient.Models.Person person)
 {
     Entities.Actor actor = unitOfWork.ActorRepository.Get(a => a.TvMazeId == person.Id).SingleOrDefault();
     if (actor == null)
     {
         actor = actorMapper.Map(person);
     }
     return(actor);
 }
Example #3
0
 private static void ResolveDeath(Entities.Actor defender)
 {
     GameLoop.World.CurrentMap.Remove(defender);
     if (defender is Entities.Player)
     {
         GameLoop.UIManager.MessageLog.Add($"{defender.Name} was killed.");
     }
     else if (defender is Entities.Monster)
     {
         GameLoop.UIManager.MessageLog.Add($"{defender.Name} died and dropped {defender.Gold} gold coins.");
     }
 }
Example #4
0
        public void CreateActor(CreateActor model)
        {
            var result = _authQueries.GetValidationResult(model);

            if (result.IsValid == false)
            {
                throw new ApplicationException(result.Errors.First().ErrorMessage);
            }

            var actor = new Entities.Actor(model.ActorId, model.Username, model.Password);

            _repository.Actors.Add(actor.Data);
            _repository.SaveChanges();
        }
Example #5
0
 private static void ResolveDamage(Entities.Actor defender, int damage)
 {
     if (damage > 0)
     {
         defender.Health -= damage;
         GameLoop.UIManager.MessageLog.Add($"{defender.Name} was hit for {damage} damage.");
         if (defender.Health <= 0)
         {
             ResolveDeath(defender);
         }
     }
     else
     {
         GameLoop.UIManager.MessageLog.Add($"{defender.Name} blocked all damage!");
     }
 }
Example #6
0
        private static int ResolveAttack(Entities.Actor attacker, Entities.Actor defender, StringBuilder attackMessage)
        {
            int hits = 0;

            attackMessage.AppendFormat("{0} attacks {1}, ", attacker.Name, defender.Name);

            for (int dice = 0; dice < attacker.Attack; dice++)
            {
                int diceOutcome = Dice.Roll("1d100");
                if (diceOutcome <= attacker.AttackChance)
                {
                    hits++;
                }
            }

            return(hits);
        }
Example #7
0
        public void Attack(Entities.Actor attacker, Entities.Actor defender)
        {
            // # Create two messages that describe the outcome of the attack and defense
            StringBuilder attackMessage  = new StringBuilder();
            StringBuilder defenseMessage = new StringBuilder();

            // # Count the amount of damage done and the number of successful blocks
            int hits   = ResolveAttack(attacker, defender, attackMessage);
            int blocks = ResolveDefense(defender, hits, attackMessage, defenseMessage);

            // # Display the outcome in the message log
            GameLoop.UIManager.MessageLog.Add(attackMessage.ToString());
            if (!string.IsNullOrWhiteSpace(defenseMessage.ToString()))
            {
                GameLoop.UIManager.MessageLog.Add(defenseMessage.ToString());
            }

            int damage = hits - blocks;

            // # Defender then takes damage
            ResolveDamage(defender, damage);
        }
Example #8
0
 public void CenterOnActor(Entities.Actor actor)
 {
     // Centers the viewport/screen on the actor
     MapConsole.CenterViewPortOnPoint(actor.Position);
 }
Example #9
0
 public bool MoveActorBy(Entities.Actor actor, Point position)
 {
     _lastMoveActor      = actor;
     _lastMoveActorPoint = position;
     return(actor.MoveBy(position));
 }