Ejemplo n.º 1
0
    /// <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;
    }
Ejemplo n.º 2
0
    /// <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);
        }
    }