public override void Execute() => OwnWorkers.Where(w => w.IsIdle)
 .Where(w => !MyUnits.TrackedUnits.ContainsKey(w) || !MyUnits.TrackedUnits[w].StartsWith("MoveDroneTo"))
 .ForEach(w =>
 {
     MyUnits.SetActivity(w, nameof(IdleWorkersToMineral));
     GatherClosestMineral(w);
 });
Exemplo n.º 2
0
        public override void Execute()
        {
            if (Game.FrameCount % 5 != 0)
            {
                return;
            }
            var ownGroundRangedUnits = Game.Self.Units
                                       .Where(u => u.UnitType.Type == UnitType.Zerg_Hydralisk).Where(u => !MyUnits.TrackedUnits.ContainsKey(u) || MyUnits.TrackedUnits[u] != nameof(RetreatIfOutnumbered));

            foreach (var attacker in ownGroundRangedUnits)
            {
                var candidateTargets = EnemyUnitsInSight(attacker);
                if (!candidateTargets.Any())
                {
                    continue;
                }
                var target = GetHighestPrioTarget(attacker, candidateTargets);

                if (ShouldKite(attacker, target))
                {
                    Kite(attacker, target);
                    return;
                }

                MyUnits.SetActivity(attacker, nameof(RangedKite));
                attacker.Attack(target, false);
            }
        }
Exemplo n.º 3
0
        public string Serialize()
        {
            var map = heights.StrJoin("|", row => row.StrJoin(""));
            var my  = MyUnits.StrJoin("|");
            var his = HisUnits.StrJoin("|");

            return(string.Join("|", map, my, his));
        }
 public override void Execute()
 {
     OwnFighters.Where(u => u.IsIdle).ForEach(u =>
     {
         u.Move(_rellyFightersTo, false);
         MyUnits.SetActivity(u, nameof(FightersRallyPoint));
     });
 }
Exemplo n.º 5
0
        public string Serialize()
        {
            var map = Size.Times(y => Size.Times(x => heights[y, x]).StrJoin("")).StrJoin("|");
            var my  = MyUnits.StrJoin("|");
            var his = HisUnits.StrJoin("|");

            return(string.Join("|", map, my, his));
        }
Exemplo n.º 6
0
        public override string ToString()
        {
            var map = Size.Times(y => Size.Times(x => heights[y, x]).StrJoin("")).StrJoin("\n");
            var my  = MyUnits.StrJoin("; ");
            var his = HisUnits.StrJoin("; ");

            return($"{map}\n{my}\n{his}\n{CurrentPlayer}");
        }
Exemplo n.º 7
0
        public override string ToString()
        {
            var map = heights.StrJoin("\n", row => row.StrJoin(""));
            var my  = MyUnits.StrJoin("; ");
            var his = HisUnits.StrJoin("; ");

            return($"{map}\n{my}\n{his}\n{CurrentPlayer}");
        }
Exemplo n.º 8
0
        private void RetreatToClosestReinforcement(Unit u)
        {
            MyUnits.SetActivity(u, nameof(RetreatIfOutnumbered));
            var natural      = _gameInfo.MyBases.FirstOrDefault(b => b.IsNatural);
            var any          = _gameInfo.MyBases.FirstOrDefault();
            var retreatPoint = (natural ?? any)?.BaseRegion.ContentTiles.First().AsWalkTile().ToPixelTile() ?? _mapCenter;

            u.Move(retreatPoint, false);
        }
Exemplo n.º 9
0
    private void Start()
    {
        m_Deck         = GetComponentInChildren <Deck>();
        m_Hand         = GetComponentInChildren <Hand>();
        m_UnitsOnBoard = GetComponent <MyUnits>();
        m_UnitsOnBoard.Init(this);

        Register();
    }
Exemplo n.º 10
0
        private static void AttackClosestEnemyBuilding(IReadOnlyCollection <Unit> idleUnitsOfWantedTypeInMyBase)
        {
            var closestEnemyBuilding = GameMemory.EnemyBuildings.MinBy(b =>
                                                                       b.CalcApproximateDistance(idleUnitsOfWantedTypeInMyBase.First().Position));

            idleUnitsOfWantedTypeInMyBase.ForEach(u =>
            {
                MyUnits.SetActivity(u, nameof(OrderIdleUnitsToAttack));
                u.Attack(closestEnemyBuilding, false);
            });
        }
Exemplo n.º 11
0
        private static void Kite(Unit kiter, Unit target)
        {
            const int extraDistance  = 32;
            var       retreatVector  = GetRetreatVector(target, kiter);
            var       wantedDistance = kiter.SelfGroundRangePx() + extraDistance;
            var       fleeToX        = Round(retreatVector.X * wantedDistance + target.Position.X);
            var       fleeToY        = Round(retreatVector.Y * wantedDistance + target.Position.Y);
            var       fleeTo         = new Position(fleeToX, fleeToY);

            MyUnits.SetActivity(kiter, nameof(RangedKite));
            kiter.Move(fleeTo, false);
        }
Exemplo n.º 12
0
        private static void ShiftAttackAllStartLocations(IEnumerable <Unit> units)
        {
            var notMyBaseStartLocations = Game.StartLocations.Except(new[] { Game.Self.StartLocation })
                                          .Select(loc => new Position(loc.X * 32, loc.Y * 32))
                                          .ToList();

            units.ForEach(u => notMyBaseStartLocations.ForEach(position =>
            {
                MyUnits.SetActivity(u, nameof(OrderIdleUnitsToAttack));
                u.Attack(position, true);
            }));
        }
Exemplo n.º 13
0
 public override void Execute()
 {
     if (!EnemiesInBase.Any())
     {
         return;
     }
     OwnFighters.Where(u => u.IsIdle)
     .ForEach(u =>
     {
         MyUnits.SetActivity(u, nameof(AttackEnemiesInBase));
         u.Attack(EnemiesInBase.First().Position, false);
     });
 }
Exemplo n.º 14
0
    private void AITowerBeforeMove()
    {
        var potentialTargets = MyPositions.Where(p => IsMyBorder(p) && !IsDefended(p)).ToList();

        var potentialTargetsExtended = new List <Position>();

        foreach (var target in potentialTargets)
        {
            potentialTargetsExtended.AddRange(target.Arounds(true).Where(p => !IsDefended(p) && Map[p.X, p.Y].IsOwned).ToList());
        }
        // Make them distinct
        potentialTargets = potentialTargetsExtended.GroupBy(i => (i.X, i.Y)).Select(x => x.First()).ToList();
        potentialTargets.RemoveAll(p => p.Arounds(true).Where(pA => IsMyBorder(pA) && Map[pA.X, pA.Y].IsOccupied && !IsDefended(pA)).ToList().Count < 2);
        potentialTargets.RemoveAll(p => Map[p.X, p.Y].HasMineSpot);

        while (MyGold > BUILD_COST_TOWER && potentialTargets.Count > 0)
        {
            potentialTargets.Sort(delegate(Position p1, Position p2)
            {
                int count1 = p1.Arounds(true).Where(p => IsMyBorder(p) && Map[p.X, p.Y].IsOccupied && !IsDefended(p)).ToList().Count;
                int count2 = p2.Arounds(true).Where(p => IsMyBorder(p) && Map[p.X, p.Y].IsOccupied && !IsDefended(p)).ToList().Count;
                if (count1 != count2)
                {
                    return(count2 - count1);
                }
                else
                {
                    return((int)(Math.Abs(11 - (p1.X + p1.Y)) - Math.Abs(11 - (p2.X + p2.Y))));
                }
                // Or closer to our Hq ??
            });

            var target       = potentialTargets[0];
            int soldierCount = target.Arounds(true).Where(p => IsMyBorder(p) && Map[p.X, p.Y].IsOccupied && !IsDefended(p)).ToList().Count;
            if (soldierCount < 2)
            {
                break;
            }
            else
            {
                List <Unit> onTheWayUnits = MyUnits.FindAll(u => u.Position.Arounds(true).Exists(p => p == target));
                FreePlace(target);
                Build("TOWER", target);
                potentialTargets.RemoveAt(0);
            }

            //potentialTargets.RemoveAll(p => IsDefended(p));
            potentialTargets.RemoveAll(p => p.Arounds(true).Where(pA => IsMyBorder(pA) && Map[pA.X, pA.Y].IsOccupied && !IsDefended(pA)).ToList().Count < 2);
        }
    }
Exemplo n.º 15
0
        public override void Execute()
        {
            var triggeringUnits = MyCombatUnits.Where(u => u.IsIdle).Where(IsOutsideOfBase).ToList();

            if (!triggeringUnits.Any())
            {
                return;
            }

            var visibleEnemyUnits = Game.Enemy.Units
                                    .Where(eu => eu.UnitType.Type != UnitType.Unknown)
                                    .Where(eu => !eu.IsCloaked)
                                    .ToList();

            if (visibleEnemyUnits.Any())
            {
                triggeringUnits.ForEach(u =>
                {
                    MyUnits.SetActivity(u, nameof(IdleFightersAttackClosestEnemy) + "Unit");
                    u.Attack(visibleEnemyUnits.ClosestTo(u).Position, false);
                });
                return;
            }

            if (!GameMemory.EnemyBuildings.Any())
            {
                triggeringUnits.ForEach(u =>
                {
                    MyUnits.SetActivity(u, nameof(IdleFightersAttackClosestEnemy) + "Searching");
                    u.Attack(RandomResourceSitePosition, false);
                });
                return;
            }

            triggeringUnits.ForEach(u =>
            {
                var closestEnemyBuilding = GameMemory.EnemyBuildings.MinBy(b => u.Position.CalcApproximateDistance(b));
                MyUnits.SetActivity(u, nameof(IdleFightersAttackClosestEnemy) + "Building");
                u.Attack(closestEnemyBuilding, false);
            });
        }
Exemplo n.º 16
0
        public override void Execute()
        {
            OwnWorkers.Where(u => u.IsUnderAttack).ForEach(worker =>
            {
                var closeUnits      = worker.UnitsInRadius(64);
                var closeEnemyUnits = closeUnits.Where(Game.Enemy.Units.Contains).ToList();
                if (!closeEnemyUnits.Any())
                {
                    return;
                }
                var closeAlliedUnits = closeUnits.Where(Game.Self.Units.Contains)
                                       .Where(w => w.IsGatheringMinerals || w.IsGatheringGas).Where(w => !ShouldFlee(w));
                closeAlliedUnits.ForEach(u =>
                {
                    MyUnits.SetActivity(u, nameof(WorkersAttackClosestEnemy));
                    u.Attack(closeEnemyUnits.First(), false);
                });

                if (ShouldFlee(worker))
                {
                    GatherBaseMineralFarFromAttacker(worker, closeEnemyUnits.First());
                }
            });
        }
Exemplo n.º 17
0
 private static bool MoveDroneToExpandLocation(Unit drone, Position expandLocation)
 {
     MyUnits.SetActivity(drone, "MoveDroneToExpansion");
     return(drone.Move(expandLocation, false));
 }
Exemplo n.º 18
0
        public void Scan(PlayerView view)
        {
            Me                = view.Players.Single(p => p.Id == view.MyId);
            EnemyPlayers      = view.Players.Where(p => p.Id != view.MyId).ToList();
            SpiceMilange      = view.Entities.Where(e => e.EntityType == EntityType.Resource).ToList();
            BusySpiceMilange  = new List <Entity>();
            EnemyEntities     = view.Entities.Where(e => e.PlayerId != view.MyId && e.EntityType != EntityType.Resource).ToList();
            MyEntities        = view.Entities.Where(e => e.PlayerId == view.MyId).ToList();
            MyBuildingsBroken = MyBuildings.Where(b => b.Health < view.EntityProperties.Single(ep => ep.Key == b.EntityType).Value.MaxHealth).ToList();
            MyUnitsBroken     = MyUnits.Where(b => b.Health < view.EntityProperties.Single(ep => ep.Key == b.EntityType).Value.MaxHealth).ToList();
            // MyUnitsBusyWorkers = new List<Entity>();

            // todo delete -1 in another round
            HouseBuildingCost   = view.EntityProperties.Single(ep => ep.Key == EntityType.House).Value.InitialCost + MyBuildingsHouses.Count();
            WorkersBuildingCost = view.EntityProperties.Single(ep => ep.Key == EntityType.BuilderBase).Value.InitialCost + MyBuildingsWorkers.Count() - 1;
            RangedBuildingCost  = view.EntityProperties.Single(ep => ep.Key == EntityType.RangedBase).Value.InitialCost + MyBuildingsRanged.Count() - 1;
            MeleeBuildingCost   = view.EntityProperties.Single(ep => ep.Key == EntityType.MeleeBase).Value.InitialCost + MyBuildingsMelees.Count() - 1;
            WallBuildingCost    = view.EntityProperties.Single(ep => ep.Key == EntityType.Wall).Value.InitialCost + MyBuildingsWalls.Count();
            WorkerUnitCost      = view.EntityProperties.Single(ep => ep.Key == EntityType.BuilderUnit).Value.InitialCost + MyUnitsWorkers.Count() - 1;
            RangedUnitCost      = view.EntityProperties.Single(ep => ep.Key == EntityType.RangedUnit).Value.InitialCost + MyUnitsRanged.Count() - 1;
            MeleeUnitCost       = view.EntityProperties.Single(ep => ep.Key == EntityType.MeleeUnit).Value.InitialCost + MyUnitsMelees.Count() - 1;
            TurretUnitCost      = view.EntityProperties.Single(ep => ep.Key == EntityType.Turret).Value.InitialCost + MyUnitsTurrets.Count() - 1;

            // SquareOfMyInterests = new Vec2Int(MyEntities.Max(e => e.Position.X) + 1,
            //                                   MyEntities.Max(e => e.Position.Y) + 1);
            SquareOfMyInterests = new Vec2Int(35, 35);
            PopulationProvide   = 0;
            PopulationUse       = 0;
            foreach (var entity in MyEntities)
            {
                PopulationProvide += view.EntityProperties.Single(ep => ep.Key == entity.EntityType).Value.PopulationProvide;
                PopulationUse     += view.EntityProperties.Single(ep => ep.Key == entity.EntityType).Value.PopulationUse;
            }

            NotFreePoints = new List <Vec2Int>();
            foreach (var entity in view.Entities)
            {
                var size = view.EntityProperties.Single(ep => ep.Key == entity.EntityType).Value.Size;

                if (MyBuildings.Contains(entity))
                {
                    for (var x = 0; x < size + 2; x++)
                    {
                        for (var y = 0; y < size + 2; y++)
                        {
                            var _x = entity.Position.X + x - 1;
                            var _y = entity.Position.Y + y - 1;
                            NotFreePoints.CheckPointInsideAndSave(_x, _y);
                        }
                    }
                }
                else
                {
                    for (var x = 0; x < size; x++)
                    {
                        for (var y = 0; y < size; y++)
                        {
                            NotFreePoints.Add(new Vec2Int(entity.Position.X + x,
                                                          entity.Position.Y + y));
                        }
                    }
                }
            }

            ChooseBehavior();
        }