public List <GameObject> CheckTileResource(List <GameObject> tiles, MapHelper.ResourceType resource) { List <GameObject> resourceList = new List <GameObject>(); List <GameObject> noResourceList = new List <GameObject>(); foreach (GameObject obj in tiles) { switch (resource) { case MapHelper.ResourceType.Hunt: if (obj.GetComponent <TileStats>().hasHunt) { resourceList.Add(obj); } break; case MapHelper.ResourceType.Gather: if (obj.GetComponent <TileStats>().hasGather) { resourceList.Add(obj); } break; case MapHelper.ResourceType.Warmth: if (obj.GetComponent <TileStats>().hasWarmth) { resourceList.Add(obj); } break; case MapHelper.ResourceType.Collect: if (obj.GetComponent <TileStats>().hasCollect) { resourceList.Add(obj); } break; default: if (!obj.GetComponent <TileStats>().hasCollect&& !obj.GetComponent <TileStats>().hasWarmth && !obj.GetComponent <TileStats>().hasGather&& !obj.GetComponent <TileStats>().hasHunt) { noResourceList.Add(obj); } break; } } List <GameObject> tileList = noResourceList; if (resource != MapHelper.ResourceType.None) { if (resourceList.Count > 0) { tileList = resourceList; } } return(tileList); }
public GameObject[] FindTile(GameObject[] tileset, Locator nextLoc, MapHelper.ResourceType resourceType) { List <GameObject> availableTiles = new List <GameObject>(); foreach (GameObject tile in tileset) { TileStats tileStats = tile.GetComponent <TileStats>(); foreach (Locator loc in tileStats.locators) { if (!loc.req.Equals(nextLoc.req)) { continue; } switch (nextLoc.dir) { case MapHelper.LocatorDirection.North: if (loc.dir == MapHelper.LocatorDirection.South) { //print("add tile North"); availableTiles.Add(tile); } break; case MapHelper.LocatorDirection.East: if (loc.dir == MapHelper.LocatorDirection.West) { //print("add tile East"); availableTiles.Add(tile); } break; case MapHelper.LocatorDirection.South: if (loc.dir == MapHelper.LocatorDirection.North) { //print("add tile South"); availableTiles.Add(tile); } break; case MapHelper.LocatorDirection.West: if (loc.dir == MapHelper.LocatorDirection.East) { //print("add tile West"); availableTiles.Add(tile); } break; } } } List <GameObject> filteredTiles = CheckTileResource(availableTiles, resourceType); return(filteredTiles.ToArray()); }
public void GenerateRegion(List <Locator> openLocators, out List <Locator> previousRegionLocators) { previousRegionLocators = openLocators; if (openLocators.Count <= 0) { Debug.LogWarning("no locators left!"); return; } int randomIndex = UnityEngine.Random.Range(0, openLocators.Count); Locator locator = openLocators[randomIndex]; openLocators = new List <Locator>(); openLocators.Add(locator); int difficulty = locator.difficulty + 1; GameObject[] currentTileSet = setRandomRegion(difficulty); int regionSize = UnityEngine.Random.Range(regionMinSize, regionMaxSize); //int resourceNum = Mathf.CeilToInt((regionSize * 0.2f) * (difficulty * 0.3f) + (float)UnityEngine.Random.Range(0, 3)); print("Region: " + currentRegion); print("Region Size: " + regionSize); print("Region Difficulty: " + difficulty); //get random locator for (int x = 0; x < regionSize; x++) { bool locatorFound = false; int y = 0; MapHelper.ResourceType currentResource = MapHelper.ResourceType.None; float rand = UnityEngine.Random.Range(0f, 1f); if (rand < currentResourceChance) { //print(rand); //print(currentResourceChance); currentResource = (MapHelper.ResourceType)UnityEngine.Random.Range(0, 3); //print(currentResource); } while (!locatorFound) { y++; if (openLocators.Count <= 0) { Debug.LogWarning("no locators left!"); return; } randomIndex = UnityEngine.Random.Range(0, openLocators.Count); //print(randomIndex); locator = openLocators[randomIndex]; GameObject[] possibleTiles = FindTile(currentTileSet, locator, currentResource); if (possibleTiles.Length > 0) { //print("found locator"); locatorFound = true; openLocators.Remove(locator); GameObject currentTile = possibleTiles[UnityEngine.Random.Range(0, possibleTiles.Length)]; Tilemap prefabTilemap = currentTile.GetComponent <Tilemap>(); List <Locator> newLocs; //print(prefabTilemap); CopyTiles(currentMap, prefabTilemap, locator, out newLocs); openLocators.AddRange(newLocs); y = 0; } else { Debug.LogWarning("possible tile not found"); //print(locator.dir); } if (y == 1000) { Debug.LogWarning("infinite loop????"); locatorFound = true; } } List <Locator> noOverlapLocators = new List <Locator>(); foreach (Locator l in openLocators) { if (!isLocatorOverlap((int)l.location.x, (int)l.location.y, l.dir)) { noOverlapLocators.Add(l); } } openLocators = noOverlapLocators; } for (int i = 0; i < openLocators.Count; i++) { Locator temp = openLocators[i]; temp.difficulty = difficulty; openLocators[i] = temp; } previousRegionLocators.AddRange(openLocators); }