public ITurnAction GetTurnAction(IOwnBot ownBot, IReadOnlyCollection <IEnemy> enemies, IBattlefieldView battlefield) { if (!enemies.Any()) { return(TurnAction.Idle()); } if (ownBot.Energy.Percent < 10) { return(TurnAction.Recharge.Battery()); } var enemy = enemies.First(); if (ownBot.Health.Percent < 50 && ownBot.Shield.Percent < 50) { if (ownBot.Energy.Actual > 110) { return(TurnAction.Recharge.Shield(100)); } return(TurnAction.Move.AwayFrom(enemy.Position)); } if (ownBot.DistanceTo(enemy) < (double)Attack.MaxRange / 2) { return(TurnAction.Attack(enemy)); } return(TurnAction.Move.Towards(enemy.Position)); }
public override void SetUp() { base.SetUp(); Enemy = Get <IBotWorkshop>().Create(TestBotAI.Idle); var turnAction = TurnAction.Attack(Enemy.OutsideView); BotAI.TurnAction = turnAction; EnergyCost = BotAI.TurnAction.EnergyCost; }
public ITurnAction GetTurnAction( IOwnBot ownBot, IReadOnlyCollection <IEnemy> enemies, IBattlefieldView battlefield) { var enemy = enemies.FirstOrDefault(); return(enemy != null?TurnAction.Attack(enemy) : TurnAction.Idle()); }
public void WhenClosestEnemyDistanceIs4_MyBotAttacks() { //prepare Mock.Get(myOwnBot).Setup(x => x.DistanceTo(myEnemyOne)).Returns(4); //act var result = sut.GetTurnAction(myOwnBot, enemiesCollection, myBattleField); //verify Assert.That(result, Is.InstanceOf(TurnAction.Attack(myEnemyOne).GetType()), "When the distance to the enemy is 4, Attack action must be returned."); }
public ITurnAction GetTurnAction(IOwnBot ownBot, IReadOnlyCollection <IEnemy> enemies, IBattlefieldView battlefield) { if (enemies.Any()) { var enemy = enemies.First(); var ownPlace = battlefield[ownBot]; var enemyPlace = battlefield[enemy]; return(ownPlace.DistanceTo(enemyPlace) > 3 ? TurnAction.Move.Towards(enemyPlace) : TurnAction.Attack(enemy)); } return(TurnAction.Idle()); }
private static ITurnAction Attack(IEnemy enemy) { return(TurnAction.Attack(enemy)); }