private GameObject[] GetDetailsForBiome(eBiome biome) { //if (biome == eBiome.Desert) //{ // return WorldGenerator.Instance.DesertDetails; //} //else if (biome == eBiome.Savannah) //{ // return WorldGenerator.Instance.SavannahDetails; //} //else if (biome == eBiome.Plains) //{ // return WorldGenerator.Instance.PlainsDetails; //} //else if (biome == eBiome.Forest) //{ // return WorldGenerator.Instance.ForestDetails; //} //else if (biome == eBiome.Swamp) //{ // return WorldGenerator.Instance.SwampDetails; //} //else if (biome == eBiome.Jungle) //{ // return WorldGenerator.Instance.JungleDetails; //} //else //{ // return WorldGenerator.Instance.TundraDetails; //} return(_biomeData.GetBiome(biome).DetailObjects); }
public void IsBorder () { water = true; border = true; ocean = true; biome = eBiome.water; }
public void SetBiomeFields(eMoisture moist, eTemperature temp, eBiome biome) { _moisture = moist; _temp = temp; _biome = biome; // for now, durability will just be a straight addition of moisture/temp // drier/colder means harder, moist/warm means softer int count = System.Enum.GetNames(typeof(eMoisture)).Length; _durability = (count - (int)moist) + (int)temp; }
public void Reset () { biome = eBiome.water; water = true; ocean = true; coast = false; border = false; elevation = 0; moisture = 0; heat = 0; neighborCells.Clear (); voronoiEdges.Clear (); }
public BiomeData GetBiome(eBiome biome) { return(_data[(int)biome]); }
public static Color GetColorFromBiome (eBiome b) { Color c; switch (b) { case eBiome.water: c = cell_color_water; break; case eBiome.stone: c = cell_color_stone; break; case eBiome.desert: c = cell_color_desert; break; case eBiome.snow: c = cell_color_snow; break; case eBiome.tundra: c = cell_color_tundra; break; case eBiome.bare: c = cell_color_bare; break; case eBiome.scorched: c = cell_color_scorched; break; case eBiome.taiga: c = cell_color_taiga; break; case eBiome.shrubland: c = cell_color_shrubland; break; case eBiome.temperateDesert: c = cell_color_temperateDesert; break; case eBiome.temperateRainForest: c = cell_color_temperateRainForest; break; case eBiome.temperateDeciduousForest: c = cell_color_temperateDeciduousForest; break; case eBiome.grassland: c = cell_color_grassland; break; case eBiome.tropicalRainForest: c = cell_color_tropicalRainForest; break; case eBiome.tropicalSeasonalForest: c = cell_color_tropicalSeasonalForest; break; case eBiome.subtropicalDesert: c = cell_color_subtropicalDesert; break; case eBiome.aridPlains: c = cell_color_aridPlains; break; case eBiome.aridDesert: c = cell_color_aridDesert; break; case eBiome.magical: c = cell_color_magical; break; default: c = Color.cyan; break; } return c; }
public static Material GetMaterialFromBiome (eBiome b) { Material m; switch (b) { case eBiome.water: m = cell_material_water; break; case eBiome.stone: m = cell_material_stone; break; case eBiome.desert: m = cell_material_desert; break; case eBiome.snow: m = cell_material_snow; break; case eBiome.tundra: m = cell_material_tundra; break; case eBiome.bare: m = cell_material_bare; break; case eBiome.scorched: m = cell_material_scorched; break; case eBiome.taiga: m = cell_material_taiga; break; case eBiome.shrubland: m = cell_material_shrubland; break; case eBiome.temperateDesert: m = cell_material_temperateDesert; break; case eBiome.temperateRainForest: m = cell_material_temperateRainForest; break; case eBiome.temperateDeciduousForest: m = cell_material_temperateDeciduousForest; break; case eBiome.grassland: m = cell_material_grassland; break; case eBiome.tropicalRainForest: m = cell_material_tropicalRainForest; break; case eBiome.tropicalSeasonalForest: m = cell_material_tropicalSeasonalForest; break; case eBiome.subtropicalDesert: m = cell_material_subtropicalDesert; break; case eBiome.aridPlains: m = cell_material_aridPlains; break; case eBiome.aridDesert: m = cell_material_aridDesert; break; case eBiome.magical: m = cell_material_magical; break; default: m = cell_material_water; break; } return m; }
void Update () { if (Input.GetKeyUp (KeyCode.I)) { Redraw (); } if (QTree != null && PBrush.transform.position != PreviousPositon) { center = new Vector2 (PBrush.transform.position.x, PBrush.transform.position.z); CloseRect = new Rect (center.x - close, center.y - close, close * 2, close * 2); FarRect = new Rect (center.x - far, center.y - far, far * 2, far * 2); CloseTiles.Clear (); FarTiles.Clear (); CloseTiles = QTree.Root.GetAllQuadsInRectCorners (CloseRect); CloseTileCount = CloseTiles.Count; PreviousPositon = PBrush.transform.position; FarTiles = QTree.Root.GetAllQuadsInRectCorners (FarRect); FarTileCount = FarTiles.Count; KeyValuePair<bool,Cell> c = QTree.Root.GetNearestCellToAPoint (new Vector2 (PBrush.transform.position.x, PBrush.transform.position.z)); if (c.Key == false) { CellIsNull = true; CellBiome = eBiome.none; } else { CellIsNull = false; CellBiome = c.Value.biome; if (c.Value.ocean) { OverOcean = true; } else { OverOcean = false; } } } }
public void SetCellBiome(eBiome b, bool IsOverride) { Cell.BiomeOverride = IsOverride; Cell.biome = b; SetCellMaterial(false, BiomeHelper.GetMaterialFromBiome(b)); }
private void PlaceDetails(float[,] heights, int size, ref IslandData data, int seed) { System.Random prng = new System.Random(seed); int noiseSeed = prng.Next(); GameObject detailContainer = new GameObject(); detailContainer.name = "Details Container"; detailContainer.transform.SetParent(_currentTerrain.transform); eBiome currentBiome = eBiome.Forest; PerlinGenerator detailNoiseGen = new PerlinGenerator(); float[][] noise = detailNoiseGen.Generate(noiseSeed, 3, size); int detailID = -1; for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { detailID = -1; bool changeScale = false; float height = heights[j, i]; if (height > 0f) { float value = noise[i][j]; //currentBiome = data.GetTile(i, j).Biome; // slope // need to map x/z to terrain space float y_01 = (float)i / (float)size; float x_01 = (float)j / (float)size; // Calculate the steepness of the terrain float steepness = data.Data.GetSteepness(y_01, x_01); if (steepness < _maxVegetationSlope) { if (value > 0.85f) { detailID = (int)eDetailType.Tree; changeScale = true; if (value > 0.95f) { // TODO set scale modifier here or something //detail = _detailObjects[(int)DetailType.Tree_Pine_0]; } else if (value > 0.9f) { //detail = _detailObjects[(int)DetailType.Tree_Pine_1]; } else { //detail = _detailObjects[(int)DetailType.Tree_Pine_2]; } } else if (value > 0.75f) { detailID = (int)eDetailType.Flower; //detail = _detailObjects[(int)DetailType.Flower_Bud]; } else if (value > 0.68f) { detailID = (int)eDetailType.Grass; //detail = _detailObjects[(int)DetailType.Grass]; } else if (value > 0.65f) { detailID = (int)eDetailType.Fern; //detail = _detailObjects[(int)DetailType.Fern]; } else if (value < 0.025f) { detailID = (int)eDetailType.Rock; //detail = _detailObjects[(int)DetailType.Rock_Medium]; } //if (detail != null) if (detailID > -1) { //GameObject detail = null; GameObject detail = GetDetailsForBiome(currentBiome)[detailID]; GameObject detailObj = (GameObject)Instantiate(detail, Vector3.zero, Quaternion.identity); float angle = prng.Next(359) + 1; detailObj.transform.Rotate(Vector3.up, angle); if (changeScale) { float scaleFactor = (float)prng.NextDouble() + 0.25f; detailObj.transform.localScale = new Vector3(scaleFactor, scaleFactor, scaleFactor); } detailObj.transform.SetParent(detailContainer.transform); // need to place a tile here PlaceTile(i, j, ref data, _currentTerrain.transform.position); data.AddObjectToTile(detailObj, i, j); } } } } } }
private void PopulateTiles(ref IslandData data, Vector3 terrainPos, float[][] moisture, float[][] temps, float[,] heights, int size, ref TerrainData tData) { GameObject container = new GameObject(); container.name = "Tile Colliders"; container.transform.SetParent(_currentTerrain.transform); container.transform.position = Vector3.zero; GameObject tileObject = null; Tile t = null; int tilesPerMeter = 3; //int[] offsets = new int[] { 0, 4, 7, 10, 13, 16, 19 }; //float[,,] splatData = new float[size, size, _terrainSplats.Length]; float subTileOffset = 1 / (float)tilesPerMeter; Vector3 offsetPosition = new Vector3(0f, 0.05f, 0f); for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { float height = heights[j, i]; // don't put tiles on the bottom most layer if (height > 0f) { int terrainX, terrainY; GetWorldTerrainPosition(terrainPos, i, j, out terrainX, out terrainY); GameObject tileContainer = new GameObject(); tileContainer.name = string.Format("Tile[{0},{1}]", i, j); tileContainer.transform.SetParent(container.transform); tileContainer.transform.position = Vector3.zero; // for multiple tiles per meter for (int k = 0; k < tilesPerMeter; ++k) { for (int l = 0; l < tilesPerMeter; ++l) { // create physical tile offsetPosition.x = (subTileOffset / 2f) + subTileOffset * k; offsetPosition.z = (subTileOffset / 2f) + subTileOffset * l; tileObject = (GameObject)Instantiate(_tilePrefab); tileObject.name = string.Format("Sub Tile[{0},{1}]", k, l); t = tileObject.AddComponent <Tile>(); t.Init(i, j, height, terrainX + offsetPosition.z, terrainY + offsetPosition.x); tileObject.transform.position = t.WorldPosition; // add to parent container for a neat hierarchy tileObject.transform.SetParent(tileContainer.transform); } } // determine biome eMoisture moist = GetMoistureEnumFromValue(moisture[i][j]); eTemperature temp = GetTempEnumFromValue(temps[i][j]); eBiome biome = _biomeTable[(int)moist, (int)temp]; t.SetBiomeFields(moist, temp, biome); // set terrain texture //int textureIndex = offsets[(int)biome] + (int)eTileType.Grass; //splatData[j, i, textureIndex] = 1; } else { // just dirt if height is zero //int textureIndex = offsets[(int)eBiome.Jungle] + (int)eTileType.Dirt; //splatData[j, i, textureIndex] = 1; } // need to fill the island data with values, even if no tile is actually created data.AddTile(t, i, j); } } //tData.SetAlphamaps(0, 0, splatData); }
public void PlaceTile(float x, float z, ref IslandData data, Vector3 terrainPos) { TerrainData tData = data.Data; float[,] heights = tData.GetHeights(0, 0, data.Size, data.Size); int tilesPerMeter = 3; float subTileOffset = 1 / (float)tilesPerMeter; Vector3 offsetPosition = new Vector3(0f, 0.05f, 0f); int i = Mathf.RoundToInt(x); int j = Mathf.RoundToInt(z); if (_tileContainer == null) { _tileContainer = new GameObject("Tile Container"); _tileContainer.transform.SetParent(_currentTerrain.transform); _tileContainer.transform.localPosition = Vector3.zero; } float height = heights[j, i]; GameObject tileObject = null; Tile t = null; // don't put tiles on the bottom most layer if (height > 0f) { int terrainX, terrainY; GetWorldTerrainPosition(terrainPos, i, j, out terrainX, out terrainY); // TODO this will need to be removed and only 1 tile be placed; not all 9 //for multiple tiles per meter for (int k = 0; k < tilesPerMeter; ++k) { for (int l = 0; l < tilesPerMeter; ++l) { // create physical tile offsetPosition.x = (subTileOffset / 2f) + subTileOffset * k; offsetPosition.z = (subTileOffset / 2f) + subTileOffset * l; tileObject = (GameObject)Instantiate(_tilePrefab); tileObject.name = string.Format("Sub Tile[{0},{1}]", k, l); t = tileObject.AddComponent <Tile>(); t.Init(i, j, height, terrainX + offsetPosition.z, terrainY + offsetPosition.x); tileObject.transform.position = t.WorldPosition; // add to parent container for a neat hierarchy tileObject.transform.SetParent(_tileContainer.transform); } } // determine biome eMoisture moist = eMoisture.Wet; //GetMoistureEnumFromValue(moisture[i][j]); eTemperature temp = eTemperature.Normal; //GetTempEnumFromValue(temps[i][j]); eBiome biome = _biomeTable[(int)moist, (int)temp]; t.SetBiomeFields(moist, temp, biome); // set terrain texture //int textureIndex = offsets[(int)biome] + (int)eTileType.Grass; //splatData[j, i, textureIndex] = 1; } else { // just dirt if height is zero //int textureIndex = offsets[(int)eBiome.Jungle] + (int)eTileType.Dirt; //splatData[j, i, textureIndex] = 1; } // need to fill the island data with values, even if no tile is actually created data.AddTile(t, i, j); }