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); }
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); }
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."); } }
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(); }
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!"); } }
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); }
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); }
public void CenterOnActor(Entities.Actor actor) { // Centers the viewport/screen on the actor MapConsole.CenterViewPortOnPoint(actor.Position); }
public bool MoveActorBy(Entities.Actor actor, Point position) { _lastMoveActor = actor; _lastMoveActorPoint = position; return(actor.MoveBy(position)); }