Ejemplo n.º 1
0
        private void Split()
        {
            //Ready?.Invoke();

            var centerLandGroups = _str.MyVehicles.Where(v => v.Groups.Contains((int)Group.Land)).CenterXY();

            _str.MainGameTasks.Enqueue(_str.Act.SelectByFrameTask(new MyPoint(0, 0), new MyPoint(centerLandGroups.X + 50, centerLandGroups.Y)));
            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.LandTop));
            _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(50, 0)));

            _str.MainGameTasks.Enqueue(_str.Act.SelectByFrameTask(new MyPoint(0, centerLandGroups.Y), new MyPoint(centerLandGroups.X + 50, 1024)));
            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.LandLeft));
            _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(0, 50)));

            var squadL1 = new MySquad()
            {
                Id = (int)Group.LandTop
            };

            var squadL2 = new MySquad()
            {
                Id = (int)Group.LandLeft
            };

            _str.GroupManager.AddBigSquad(squadL1);
            _str.GroupManager.AddBigSquad(squadL2);

            //_str.DelayTaksBuilder.Create(Group.Land, Ready);
        }
Ejemplo n.º 2
0
        private void TakePosition(MySquad squad)
        {
            var center = _strategy.MyVehicles.Where(v => v.Groups.Contains(squad.Id)).CenterXY();

            squad.X = center.X.GetCellX();
            squad.Y = center.Y.GetCellY();
        }
Ejemplo n.º 3
0
 public void AddSquad(MySquad squad)
 {
     _str.DelayTaksBuilder.Create((Group)squad.Id, () =>
     {
         Squads.Add(squad);
         if (Squads.Count >= 5)
         {
             _str.GroupingEnded = true;
         }
     });
 }
Ejemplo n.º 4
0
        public void Update(Facility[] facilities)
        {
            foreach (var facility in facilities)
            {
                var id = facility.Id;

                if (facility.Type == FacilityType.VehicleFactory && facility.OwnerPlayerId == _str.Me.Id)
                {
                    if (facility.VehicleType == null)
                    {
                        _str.MainGameTasks.Enqueue(_str.Act.SetupVehicleProduction(VehicleType.Tank, id));
                    }

                    if (_str.World.TickIndex % 256 != 0)
                    {
                        continue;
                    }

                    var newVehicleCount = _str.MyVehicles.Count(v =>
                                                                v.X >= facility.Left &&
                                                                v.X <= facility.Left + 64 &&
                                                                v.Y >= facility.Top &&
                                                                v.Y <= facility.Top + 64 &&
                                                                v.Groups.Length == 0);

                    if (newVehicleCount > 30)
                    {
                        var squad = new MySquad()
                        {
                            VehicleType = (VehicleType)facility.VehicleType,
                            Id          = _newSquadId,
                        };

                        _str.GroupManager.Squads.Add(squad);

                        _newSquadId++;

                        var lastGroupId = _str.CurrentGroup;
                        _str.MainGameTasks.Enqueue(_str.Act.SelectByTypeAndFrameTask((VehicleType)facility.VehicleType, new MyPoint(facility.Left, facility.Top), new MyPoint(facility.Left + 64, facility.Top + 64)));
                        _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(squad.Id));

                        var distToCenter = facility.Distance(512, 512);
                        var normVector   = new MyPoint((512 - facility.Left + 32) / distToCenter, (512 - facility.Top + 8) / distToCenter);

                        _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(facility.Left + normVector.X * 100, facility.Top + normVector.Y * 100)));
                        _str.MainGameTasks.Enqueue(_str.Act.SelectByGroup(lastGroupId));
                    }
                }
            }
        }
Ejemplo n.º 5
0
        private void LastMoveToGroup()
        {
            _str.MainGameTasks.Enqueue(_str.Act.SelectByGroup((int)_landGroups[0]));
            _str.MainGameTasks.Enqueue(_str.Act.MoveToPoint(new MyPoint(59, 119)));

            _str.MainGameTasks.Enqueue(_str.Act.SelectByGroup((int)_landGroups[2]));
            _str.MainGameTasks.Enqueue(_str.Act.MoveToPoint(new MyPoint(179, 119)));

            _str.DelayTaksBuilder.Create(Group.All, VehicleToRows);
            var squad = new MySquad()
            {
                Id = (int)Group.All,
            };

            _str.GroupManager.AddBigSquad(squad);
        }
Ejemplo n.º 6
0
        private void GroupAir()
        {
            VehicleType fistGroup   = VehicleType.Helicopter;
            VehicleType secondGroup = VehicleType.Fighter;

            if (_positions[Group.Fighter].X + _positions[Group.Fighter].Y >=
                _positions[Group.Helicopter].X + _positions[Group.Helicopter].Y)
            {
                fistGroup   = VehicleType.Fighter;
                secondGroup = VehicleType.Helicopter;
            }

            _str.MainGameTasks.Enqueue(_str.Act.SelectByTypeAndFrameTask(fistGroup, new MyPoint(0, 0), new MyPoint(_str.World.Width, _str.World.Height)));

            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(fistGroup.ToGroup()));

            _str.MainGameTasks.Enqueue(_str.Act.MoveToPoint(new MyPoint(267, 267)));
            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.Air));

            _str.MainGameTasks.Enqueue(_str.Act.SelectByTypeAndFrameTask(secondGroup, new MyPoint(0, 0), new MyPoint(_str.World.Width, _str.World.Height)));

            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(secondGroup.ToGroup()));

            _str.MainGameTasks.Enqueue(_str.Act.MoveToPoint(new MyPoint(119, 119 + 9)));
            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.Air));

            _str.DelayTaksBuilder.Create(Group.Air, MixAir);

            var squadF = new MySquad()
            {
                Id          = (int)Group.Fighter,
                VehicleType = VehicleType.Fighter
            };

            var squadC = new MySquad()
            {
                Id          = (int)Group.Copter1,
                VehicleType = VehicleType.Helicopter
            };

            _str.GroupManager.AddBigSquad(squadF);
            _str.GroupManager.AddBigSquad(squadC);
        }
Ejemplo n.º 7
0
        private void MoveMidLandGroup()
        {
            landTopAndDownGroupFinished++;
            if (landTopAndDownGroupFinished == 2)
            {
                for (var i = 2; i >= 0; i--)
                {
                    var tempI = i;
                    if (_landGroups[tempI].ToVehicleType() == VehicleType.Tank)
                    {
                        _str.MainGameTasks.Enqueue(_str.Act.SelectByGroup((int)_landGroups[tempI]));
                    }
                    else
                    {
                        var centerLandGroups = _str.MyVehicles.Where(v => v.Groups.Contains((int)_landGroups[tempI])).CenterXY();

                        _str.MainGameTasks.Enqueue(_str.Act.SelectByTypeAndFrameTask(_landGroups[tempI].ToVehicleType(), new MyPoint(0, 0), new MyPoint(centerLandGroups.X + 40, centerLandGroups.Y)));

                        if (_landGroups[tempI].ToVehicleType() == VehicleType.Ifv)
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.LandTop));
                        }
                        else
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.LandTopR));
                        }

                        if (tempI == 0)
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(100, 0)));
                        }
                        else
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(150, 0)));
                        }

                        _str.MainGameTasks.Enqueue(_str.Act.SelectByTypeAndFrameTask(_landGroups[tempI].ToVehicleType(), new MyPoint(0, centerLandGroups.Y), new MyPoint(centerLandGroups.X + 40, 1024)));

                        if (_landGroups[tempI].ToVehicleType() == VehicleType.Ifv)
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.LandLeft));
                        }
                        else
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.AssignToGroupTask(Group.LandLeftR));
                        }

                        if (tempI == 0)
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(0, 100)));
                        }
                        else
                        {
                            _str.MainGameTasks.Enqueue(_str.Act.MoveByVector(new MyPoint(0, 150)));
                        }
                    }
                }

                var squadL1 = new MySquad()
                {
                    Id          = (int)Group.LandTop,
                    VehicleType = VehicleType.Ifv
                };

                var squadL2 = new MySquad()
                {
                    Id          = (int)Group.LandLeft,
                    VehicleType = VehicleType.Ifv
                };

                var squadL1R = new MySquad()
                {
                    Id          = (int)Group.LandTopR,
                    VehicleType = VehicleType.Arrv
                };

                var squadL2R = new MySquad()
                {
                    Id          = (int)Group.LandLeftR,
                    VehicleType = VehicleType.Arrv
                };

                var squadT = new MySquad()
                {
                    Id          = (int)Group.Tank,
                    VehicleType = VehicleType.Tank
                };

                _str.GroupManager.AddBigSquad(squadL1);
                _str.GroupManager.AddBigSquad(squadL2);
                _str.GroupManager.AddBigSquad(squadL1R);
                _str.GroupManager.AddBigSquad(squadL2R);
                _str.GroupManager.AddBigSquad(squadT);

                _str.DelayTaksBuilder.Create(_landGroups[1], Ready);
            }
        }
Ejemplo n.º 8
0
 public static double Distance(this MyGridCellInfo cell, MySquad squad)
 {
     return(Math.Sqrt(Math.Pow(cell.X - squad.X, 2) + Math.Pow(cell.Y - squad.Y, 2)));
 }
Ejemplo n.º 9
0
 public static bool IsGroundSquad(this MySquad squad)
 {
     return(squad.VehicleType == VehicleType.Tank ||
            squad.VehicleType == VehicleType.Arrv ||
            squad.VehicleType == VehicleType.Ifv);
 }
Ejemplo n.º 10
0
 public static double Distance(this MySquad s, Facility f)
 {
     return(Math.Sqrt(Math.Pow(s.X - (f.Left + 32), 2) + Math.Pow(s.Y - (f.Top + 32), 2)));
 }
Ejemplo n.º 11
0
 public void AddBigSquad(MySquad squad)
 {
     Squads.Add(squad);
 }
Ejemplo n.º 12
0
        public void FindSingleEnemy(MySquad squad)
        {
            var myRandomUnit = _str.MyVehicles.FirstOrDefault(v => v.Groups.Contains(squad.Id));

            if (myRandomUnit == null || !_str.EnemyVehicles.Any())
            {
                return;
            }
            var    nearestEnemyPoint = new MyPoint();
            double distance          = 10000;
            IEnumerable <Vehicle> targets;

            var fac = _str.World.Facilities.Where(f => f.OwnerPlayerId != _str.Me.Id && f.Type == FacilityType.VehicleFactory);

            if (!fac.Any())
            {
                fac = _str.World.Facilities.Where(f => f.OwnerPlayerId != _str.Me.Id && f.Type == FacilityType.ControlCenter);
            }

            if (!fac.Any())
            {
                targets = _str.EnemyVehicles.Where(v => v.Type != VehicleType.Fighter && v.Type != VehicleType.Helicopter);
                if (!targets.Any())
                {
                    new MyPoint(512, 512);
                }
                foreach (var vehicle in targets)
                {
                    double currentDistance;
                    try
                    {
                        currentDistance = vehicle.GetDistanceTo(myRandomUnit);
                    }
                    catch (Exception e)
                    {
                        continue;
                    }

                    if (currentDistance < distance)
                    {
                        distance            = currentDistance;
                        nearestEnemyPoint.X = vehicle.X;
                        nearestEnemyPoint.Y = vehicle.Y;
                    }
                }
            }
            else
            {
                foreach (var f in fac)
                {
                    double currentDistance = f.Distance(myRandomUnit.X, myRandomUnit.Y);

                    if (currentDistance < distance)
                    {
                        distance            = currentDistance;
                        nearestEnemyPoint.X = f.Top + 42;
                        nearestEnemyPoint.Y = f.Left + 32;
                    }
                }
            }

            _str.MainGameTasks.Enqueue(_str.Act.SelectByGroup(squad.Id));
            _str.MainGameTasks.Enqueue(_str.Act.MoveToPoint(nearestEnemyPoint));
        }
Ejemplo n.º 13
0
 public void FindSingleEnemy(MySquad group)
 {
 }