Example #1
0
    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);
    }
Example #2
0
				public void IsBorder ()
				{
						water = true;
						border = true;
						ocean = true;
						biome = eBiome.water;
				}
Example #3
0
    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;
    }
Example #4
0
				public void Reset ()
				{
						biome = eBiome.water;
						water = true;
						ocean = true;
						coast = false;
						border = false;
						elevation = 0;
						moisture = 0;
						heat = 0;
						neighborCells.Clear ();
						voronoiEdges.Clear ();
				}
Example #5
0
 public BiomeData GetBiome(eBiome biome)
 {
     return(_data[(int)biome]);
 }
Example #6
0
				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;
				}
Example #7
0
				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;
				}
Example #8
0
		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;
								}
						}
		
				}
		}
Example #9
0
 public void SetCellBiome(eBiome b, bool IsOverride)
 {
     Cell.BiomeOverride = IsOverride;
     Cell.biome = b;
     SetCellMaterial(false, BiomeHelper.GetMaterialFromBiome(b));
 }
Example #10
0
    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);
                        }
                    }
                }
            }
        }
    }
Example #11
0
    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);
    }
Example #12
0
    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);
    }