Beispiel #1
0
 public void Decorate(int blockX, int blockY, int blockZ, MCRandom random)
 {
     if (IsAValidLocationforDecoration(blockX, blockY, blockZ, random))
     {
         CreateDecorationAt(blockX, blockY, blockZ, random);
     }
 }
Beispiel #2
0
    /// <summary>
    /// For the given chunk's topsoil blocks, ask each decorator (tree, bush, etc)
    /// to decorate here. Of course, the decorator ultimately decides if it wants to
    /// be here or now.
    /// </summary>
    /// <param name="chunk"></param>
    private void GenerateDecorationsForChunk(Chunk chunk)
    {
        MCRandom random = new MCRandom();

        foreach (IntVect topSoilBlock in chunk.TopSoilBlocks)
        {
            foreach (IDecoration decoration in m_Decorations)
            {
                decoration.Decorate(topSoilBlock.X, topSoilBlock.Y, topSoilBlock.Z, random);
            }
        }
    }
Beispiel #3
0
    private void CreateDecorationAt(int blockX, int blockY, int blockZ, MCRandom random)
    {
        int trunkLength = random.RandomRange(6, 10);

        // Trunk
        for (int z = blockZ + 1; z <= blockZ + trunkLength; z++)
        {
            CreateTrunkAt(blockX, blockY, z);
        }

        // Leaves
        CreateSphereAt(blockX, blockY, blockZ + trunkLength, random.RandomRange(3, 4));
    }
Beispiel #4
0
    /// <summary>
    /// Determines if a tree decoration even wants to be at this location.
    /// </summary>
    /// <param name="blockX"></param>
    /// <param name="blockY"></param>
    /// <param name="blockZ"></param>
    /// <param name="random"></param>
    /// <returns></returns>
    private bool IsAValidLocationforDecoration(int blockX, int blockY, int blockZ, MCRandom random)
    {
        // We don't want TOO many trees...make it a 1% chance to be drawn there.
        if (random.RandomRange(1, 100) < 99)
        {
            return(false);
        }

        // Trees don't like to grow too high
        if (blockZ >= m_WorldData.DepthInBlocks - 20)
        {
            return(false);
        }

        // Trees like to have a minimum amount of space to grow in.
        return(SpaceAboveIsEmpty(blockX, blockY, blockZ, 8, 2, 2));
    }