public void TestDropSphere(int x, int y) { GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); _currentIsland.AddObjectToTile(obj, x, y); }
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); } } } } } }