public static TerrainUtility.TerrainMap CreateFromPlacement(Vector2 gridOrigin, Vector2 gridSize, TerrainUtility.TerrainMap.TerrainFilter filter = null, bool fullValidation = true) { bool flag = Terrain.activeTerrains == null || Terrain.activeTerrains.Length == 0; TerrainUtility.TerrainMap result; if (flag) { result = null; } else { TerrainUtility.TerrainMap terrainMap = new TerrainUtility.TerrainMap(); float num = 1f / gridSize.x; float num2 = 1f / gridSize.y; Terrain[] activeTerrains = Terrain.activeTerrains; for (int i = 0; i < activeTerrains.Length; i++) { Terrain terrain = activeTerrains[i]; bool flag2 = terrain.terrainData == null; if (!flag2) { bool flag3 = filter == null || filter(terrain); if (flag3) { Vector3 position = terrain.transform.position; int tileX = Mathf.RoundToInt((position.x - gridOrigin.x) * num); int tileZ = Mathf.RoundToInt((position.z - gridOrigin.y) * num2); terrainMap.TryToAddTerrain(tileX, tileZ, terrain); } } } if (fullValidation) { terrainMap.Validate(); } result = ((terrainMap.m_terrainTiles.Count > 0) ? terrainMap : null); } return(result); }
public static TerrainUtility.TerrainMap CreateFromConnectedNeighbors(Terrain originTerrain, TerrainUtility.TerrainMap.TerrainFilter filter = null, bool fullValidation = true) { bool flag = originTerrain == null; TerrainUtility.TerrainMap result; if (flag) { result = null; } else { bool flag2 = originTerrain.terrainData == null; if (flag2) { result = null; } else { TerrainUtility.TerrainMap terrainMap = new TerrainUtility.TerrainMap(); Queue <TerrainUtility.TerrainMap.QueueElement> queue = new Queue <TerrainUtility.TerrainMap.QueueElement>(); queue.Enqueue(new TerrainUtility.TerrainMap.QueueElement(0, 0, originTerrain)); int num = Terrain.activeTerrains.Length; while (queue.Count > 0) { TerrainUtility.TerrainMap.QueueElement queueElement = queue.Dequeue(); bool flag3 = filter == null || filter(queueElement.terrain); if (flag3) { bool flag4 = terrainMap.TryToAddTerrain(queueElement.tileX, queueElement.tileZ, queueElement.terrain); if (flag4) { bool flag5 = terrainMap.m_terrainTiles.Count > num; if (flag5) { break; } bool flag6 = queueElement.terrain.leftNeighbor != null; if (flag6) { queue.Enqueue(new TerrainUtility.TerrainMap.QueueElement(queueElement.tileX - 1, queueElement.tileZ, queueElement.terrain.leftNeighbor)); } bool flag7 = queueElement.terrain.bottomNeighbor != null; if (flag7) { queue.Enqueue(new TerrainUtility.TerrainMap.QueueElement(queueElement.tileX, queueElement.tileZ - 1, queueElement.terrain.bottomNeighbor)); } bool flag8 = queueElement.terrain.rightNeighbor != null; if (flag8) { queue.Enqueue(new TerrainUtility.TerrainMap.QueueElement(queueElement.tileX + 1, queueElement.tileZ, queueElement.terrain.rightNeighbor)); } bool flag9 = queueElement.terrain.topNeighbor != null; if (flag9) { queue.Enqueue(new TerrainUtility.TerrainMap.QueueElement(queueElement.tileX, queueElement.tileZ + 1, queueElement.terrain.topNeighbor)); } } } } if (fullValidation) { terrainMap.Validate(); } result = terrainMap; } } return(result); }