public void PrepareToFire(TurnState turnState, int?preferredFireTargetCoord)
        {
            if (!canFire)
            {
                return;
            }
            var ship = turnState.FindMyShip(shipId);

            fireTarget = TryGetPreferredFireTarget(ship, preferredFireTargetCoord) ?? SelectFireTarget(turnState, ship);
        }
        private FireTarget SelectFireTarget(TurnState turnState, Ship ship)
        {
            FireTarget bestFireTarget = null;

            foreach (var enemyShip in turnState.enemyShips)
            {
                var fireTargets = GetFireTargets(ship, enemyShip);
                foreach (var fireTarget in fireTargets)
                {
                    if (bestFireTarget == null ||
                        fireTarget.turns < bestFireTarget.turns ||
                        fireTarget.turns == bestFireTarget.turns && fireTarget.TargetType < bestFireTarget.TargetType)
                    {
                        bestFireTarget = fireTarget;
                    }
                }
            }
            return(bestFireTarget);
        }
 public void StartTurn(TurnState turnState)
 {
     canFire    = !cooldown;
     cooldown   = false;
     fireTarget = null;
 }