Exemple #1
0
        private Base FindBase(List <Unit> resources, TilePosition startPos, bool starting = false)
        {
            const int    resDist = 15;
            var          nearRes = resources.Where(x => startPos.CalcDistance(x.TilePosition) <= resDist);
            TilePosition center  = new TilePosition(nearRes.Sum(x => x.TilePosition.X) / nearRes.Count(), nearRes.Sum(x => x.TilePosition.Y) / nearRes.Count());

            center = starting ? startPos : GetDepotPosition(center);

            if (center == null)
            {
                resources.RemoveAll(x => startPos.CalcDistance(x.TilePosition) <= resDist);
                return(null);
            }

            var b = new Base(center, starting, nearRes.Where(x => x.UnitType.IsMineralField).ToList(),
                             nearRes.Where(x => x.UnitType.IsGas()).ToList(),
                             Zones[BuildGrid[center.X, center.Y].Zone],
                             SubZones[BuildGrid[center.X, center.Y].SubZone], this);

            resources.RemoveAll(x => startPos.CalcDistance(x.TilePosition) <= resDist);
            return(b);
        }