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); }
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(); }
public void AddSquad(MySquad squad) { _str.DelayTaksBuilder.Create((Group)squad.Id, () => { Squads.Add(squad); if (Squads.Count >= 5) { _str.GroupingEnded = true; } }); }
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)); } } } }
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); }
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); }
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); } }
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))); }
public static bool IsGroundSquad(this MySquad squad) { return(squad.VehicleType == VehicleType.Tank || squad.VehicleType == VehicleType.Arrv || squad.VehicleType == VehicleType.Ifv); }
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))); }
public void AddBigSquad(MySquad squad) { Squads.Add(squad); }
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)); }
public void FindSingleEnemy(MySquad group) { }