Exemple #1
0
        /// <summary>
        /// Тактичекий приказ: Двигать все свои юниты на заданный тип юнитов, выбирая ближайший
        /// </summary>
        /// <param name="type"></param>
        /// <param name="targetTypes"></param>
        /// <param name="me"></param>
        /// <param name="self"></param>
        /// <param name="maxSpeed"></param>
        public static void CommonAttack(Formation formation, List <VehicleType> targetTypes, bool self = false, double maxSpeed = 0)
        {
            var move = new Action();

            if (formation.Units.Count == 0)
            {
                return;
            }

            foreach (var targetType in targetTypes)
            {
                var targets = Global.Units.Values.Where(i => i.Type == targetType && (self ? i.PlayerId == Global.Me.Id : i.PlayerId != Global.Me.Id)).ToList();

                if (targets.Any())
                {
                    var target = targets.OrderBy(i => formation.MassCenter.Distance(i)).First();

                    formation.MoveTo(target.X, target.Y, Formation.TACTICAL_ORDER, maxSpeed);
                    return;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Тактика добивания
        /// </summary>
        /// <param name="expand"></param>
        public static void Rush(bool expand)
        {
            if (_rushStartedTick == -1)
            {
                _rushStartedTick = Global.World.TickIndex;
            }

            var tick = Global.World.TickIndex - _rushStartedTick;

            if (tick == 0 && expand)
            {
                Fighters.Scale(4);
                Helicopters.Scale(4);
                Arrvs.Scale(4);
                Ifvs.Scale(4);
                Tanks.Scale(4);
            }
            else
            {
                if (!Tanks.HasOrders())
                {
                    CommonAttack(Tanks, new List <VehicleType> {
                        VehicleType.Tank, VehicleType.Ifv, VehicleType.Arrv, VehicleType.Fighter, VehicleType.Helicopter
                    });
                    Tanks.Scale(0.1);
                }
                if (!Ifvs.HasOrders())
                {
                    CommonAttack(Ifvs, new List <VehicleType> {
                        VehicleType.Helicopter, VehicleType.Fighter, VehicleType.Arrv, VehicleType.Ifv, VehicleType.Tank
                    });
                    Ifvs.Scale(0.1);
                }
                if (!Helicopters.HasOrders())
                {
                    CommonAttack(Helicopters, new List <VehicleType> {
                        VehicleType.Tank, VehicleType.Arrv, VehicleType.Helicopter, VehicleType.Ifv, VehicleType.Fighter
                    });
                    Helicopters.Scale(0.1);
                }
                if (!Fighters.HasOrders())
                {
                    if (Global.Units.Values.Any(i => i.PlayerId != Global.Me.Id && (i.Type == VehicleType.Helicopter || i.Type == VehicleType.Fighter)))
                    {
                        CommonAttack(Fighters, new List <VehicleType> {
                            VehicleType.Helicopter, VehicleType.Fighter
                        });
                    }
                    else
                    {
                        CommonAttack(Fighters, new List <VehicleType> {
                            VehicleType.Tank, VehicleType.Ifv, VehicleType.Arrv
                        }, self: true);
                    }
                    Fighters.Scale(0.1);
                }

                if (!Arrvs.HasOrders())
                {
                    Arrvs.MoveTo(0.2 * Global.World.Width, 0.8 * Global.World.Height);
                    Arrvs.Scale(0.1);
                }
            }
        }