/// <summary> /// Create a brand new chunk using Perlin data combined with the given seed. /// </summary> /// <param name="chunkX"></param> /// <param name="chunkY"></param> /// <param name="mapFront"></param> /// <param name="mapBack"></param> /// <param name="generateCollisionMap"></param> /// <param name="smoothLoading"></param> /// <returns></returns> public IEnumerator GenerateChunk(Chunk chunk) { for (int v = 0; v < chunkSize; v++) { for (int h = 0; h < chunkSize; h++) { Vector3Int tilePosition = new Vector3Int(chunk.Position.x + h, chunk.Position.y + v, 0); if ((tilePosition.x < 0 || tilePosition.x >= worldWidth) || (tilePosition.y < 0 || tilePosition.y >= worldHeight)) { continue; } if (tilePosition.y <= surfaceHeights[tilePosition.x]) { // Start with the default block SliderDataCustomizer blockData = defaultBlock; // Loop through the blocks and overwrite the default block if that block can be spawned for (int i = 0; i < scriptableObjects.Count; i++) { SliderDataCustomizer block = scriptableObjects[i] as SliderDataCustomizer; if (block != defaultBlock) { if (CheckPerlinEligibility(tilePosition, block.GetSliderData(SliderData.SliderField.DEPTH_MIN), block.GetSliderData(SliderData.SliderField.DEPTH_MAX), block.GetSliderData(SliderData.SliderField.PERLIN_SPEED), block.GetSliderData(SliderData.SliderField.PERLIN_LEVEL), block.GetSliderData(SliderData.SliderField.ZONE_PERLIN_SPEED), block.GetSliderData(SliderData.SliderField.ZONE_PERLIN_LEVEL), block.GetSliderData(SliderData.SliderField.MAP_PERLIN_SPEED), block.GetSliderData(SliderData.SliderField.MAP_PERLIN_LEVEL))) { blockData = block; break; } } } // Set the desired tile chunk.SetChunkTile(tilePosition, Chunk.TilemapType.BLOCKS_FRONT, blockData.itemTile); chunk.SetChunkTile(tilePosition, Chunk.TilemapType.BLOCKS_BACK, blockData.itemType == Chunk.TileType.AIR ? defaultBlock.itemTile : blockData.itemTile); chunk.SetChunkTileColor(tilePosition, Color.white, Chunk.TilemapType.BLOCKS_FRONT); chunk.SetChunkTileColor(tilePosition, new Color(backLayerShadowFactor, backLayerShadowFactor, backLayerShadowFactor), Chunk.TilemapType.BLOCKS_BACK); chunk.SetChunkTileType(tilePosition, Chunk.TilemapType.BLOCKS_FRONT, blockData.itemType); chunk.SetChunkTileType(tilePosition, Chunk.TilemapType.BLOCKS_BACK, Chunk.TileType.DIRT); } } yield return(null); } yield break; }
/// <summary> /// Assign a ScriptableObject to this GridItem to store its settings in. /// </summary> /// <param name="data"></param> public void InitializeItem(SliderDataCustomizer data) { Data = data; image.sprite = data.gridSprite; // Disable if this is the data of the default terrain block. if (data == GenerationManager.Instance.defaultBlock) { gameObject.SetActive(false); } }