public Combat(PlayerEntity player, IEnumerable <CombatActor> enemies) { Player = player; _Actors = enemies.ToList(); PlayerActor = new CombatActor(player, player.Stats, player.Damageable, player); _Actors.Add(PlayerActor); InitiativeStatsVisitor = new CombatInitiativeStatsVisitor(); SetTargets(); }
private void Attack(CombatActor actor) { var dmg = actor.DamageDealer.Damage(); if (actor.Target != null) { actor.Target.Damageable.ReceiveDamage(ref dmg); OnAction(new CombatAction { Type = CombatActionType.Attack, Actor = actor, Target = actor.Target, Damage = dmg }); } }
private bool AttemptRetreat(CombatActor actor) { int initiative = InitiativeStatsVisitor.Calculate(actor.Stats); int chance = 20 + initiative; var rng = new Random(); FinishedByRetreat = rng.Next(100) < chance; OnAction(new CombatAction { Actor = actor, Target = actor, Damage = null, Type = FinishedByRetreat ? CombatActionType.RetreatSuccess : CombatActionType.RetreatFail }); return(FinishedByRetreat); }