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); }