示例#1
0
 private static Vehicle GetNukeGunner(this IVehicleFormation formation, Unit target, IEnumerable <Vehicle> myVehicles, World world, Game game)
 {
     return(myVehicles
            .Where(v => formation.VehicleRegistry.GetVision(v.Id, world, game) >= v.GetDistanceTo(target))
            .OrderByDescending(v => v.Durability)
            .FirstOrDefault());
 }
示例#2
0
        public static bool TryNuke(this IVehicleFormation formation,
                                   VehiclesGroup myArmy,
                                   IReadOnlyCollection <Vehicle> myVehicles,
                                   IReadOnlyList <Vehicle> enemyVehicles,
                                   Player me,
                                   Game game,
                                   World world,
                                   IList <Command> commands)
        {
            if (me.RemainingNuclearStrikeCooldownTicks != 0)
            {
                return(false);
            }
            if (!enemyVehicles.Any())
            {
                return(false);
            }
            if (myArmy.Center.GetDistanceTo(enemyVehicles.GetCenterPoint()) > 4 * game.TacticalNuclearStrikeRadius)
            {
                return(false);
            }
            var nukeTarget = GetNukeTarget(enemyVehicles, myVehicles, game);

            if (nukeTarget == null)
            {
                return(false);
            }
            var nukeGunner = formation.GetNukeGunner(nukeTarget, myVehicles, world, game);

            if (nukeGunner == null)
            {
                return(false);
            }
            myArmy
            .Nuke(nukeGunner.Id, nukeTarget);
            commands.Add(formation.CommandManager.PeekLastCommand(formation.Id));
            myArmy
            .Select(formation.Id)
            .Stop();
            return(true);
        }
示例#3
0
        public static void PreventNuke(this IVehicleFormation formation, VehiclesGroup myArmy, World world, Game game, IList <Command> commands)
        {
            var opponentPlayer = world.GetOpponentPlayer();

            myArmy
            .Select(formation.Id)
            .Stop()
            .SelectArea(
                opponentPlayer.NextNuclearStrikeX - game.TacticalNuclearStrikeRadius,
                opponentPlayer.NextNuclearStrikeY - game.TacticalNuclearStrikeRadius,
                opponentPlayer.NextNuclearStrikeX + game.TacticalNuclearStrikeRadius,
                opponentPlayer.NextNuclearStrikeY + game.TacticalNuclearStrikeRadius,
                true
                )
            .Scale(
                opponentPlayer.NextNuclearStrikeX,
                opponentPlayer.NextNuclearStrikeY,
                10.0,
                tick => tick - world.TickIndex > game.TacticalNuclearStrikeDelay)
            .Scale(opponentPlayer.NextNuclearStrikeX,
                   opponentPlayer.NextNuclearStrikeY,
                   0.1);
            commands.Add(formation.CommandManager.PeekLastCommand(formation.Id));
        }