Exemplo n.º 1
0
    private Texture2D GenerateLeafTexture(int size)
    {
        TextureBuilder texturer = new TextureBuilder();

        Color leafColor = new Color(0.1f, 0.5f, 0.1f, 1.0f);

        if (m_leaf_randomize_colors)
        {
            /*
             * Color[] randomColors = new Color[4];
             * randomColors[0] = new Color(Random.Range(0.2f,0.8f),Random.Range(0.2f,0.8f),Random.Range(0.2f,0.8f),1.0f);
             * for(int i = 1; i <= 3; i++) {
             *      randomColors[i] = randomColors[0]*new Color(Random.Range(0.2f,0.8f),Random.Range(0.2f,0.8f),Random.Range(0.2f,0.8f),1.0f);
             * }
             * texturer.Color4GridTexture(size,randomColors);
             */
            Color[] randomColors = new Color[4];
            if (Random.Range(0.00f, 1.00f) > specialChance)
            {
                // Use normal values

                randomColors[0] = new Color(Random.Range(leafColor.r - treeColorVar.r, leafColor.r + treeColorVar.r),
                                            Random.Range(leafColor.g - treeColorVar.g, leafColor.g + treeColorVar.g),
                                            Random.Range(leafColor.b - treeColorVar.b, leafColor.b + treeColorVar.b), 1.0f);
                for (int i = 1; i <= 3; i++)
                {
                    randomColors[i] = randomColors[0] * new Color(Random.Range(leafColor.r - treeColorVar.r, leafColor.r + treeColorVar.r),
                                                                  Random.Range(leafColor.g - treeColorVar.g, leafColor.g + treeColorVar.g),
                                                                  Random.Range(leafColor.b - treeColorVar.b, leafColor.b + treeColorVar.b), 1.0f);
                }
            }
            else
            {
                // Use special values
                randomColors[0] = new Color(Random.Range(treeColorSpecial.r - treeColorSpecialVar.r, treeColorSpecial.r + treeColorSpecialVar.r),
                                            Random.Range(treeColorSpecial.g - treeColorSpecialVar.g, treeColorSpecial.g + treeColorSpecialVar.g),
                                            Random.Range(treeColorSpecial.b - treeColorSpecialVar.b, treeColorSpecial.b + treeColorSpecialVar.b), 1.0f);
                for (int i = 1; i <= 3; i++)
                {
                    randomColors[i] = randomColors[0] * new Color(Random.Range(treeColorSpecial.r - treeColorSpecialVar.r, treeColorSpecial.r + treeColorSpecialVar.r),
                                                                  Random.Range(treeColorSpecial.g - treeColorSpecialVar.g, treeColorSpecial.g + treeColorSpecialVar.g),
                                                                  Random.Range(treeColorSpecial.b - treeColorSpecialVar.b, treeColorSpecial.b + treeColorSpecialVar.b), 1.0f);
                }
            }
            texturer.Color4GridTexture(size, randomColors);
        }
        else
        {
            texturer.Color4GridTexture(size, m_leaf_colors);
        }
        //texturer.OverlaySolidNoise(m_leaf_color-new Color(0.3f,0.3f,0.3f,0.0f),0.5f,20.0f,new Vector2(0.0f,0.0f),1.0f);
        //texturer.OverlaySolidNoise(m_leaf_color,0.6f,20.0f,new Vector2(0.0f,0.0f),1.0f);

        if (m_leaf_randomize_shape)
        {
            texturer.CutOutLeafShape(1, 8, true);
        }
        else
        {
            // Default leaf shape
            TextureBuilder.LeafCurvePoint[] leafPoints = new TextureBuilder.LeafCurvePoint[2];
            //Vector2 up = new Vector2(0.0f,0.1f);
            //Vector2 down = new Vector2(0.0f,-0.1f);
            leafPoints[0].start = new Vector2(0.5f, 0.0f);
            leafPoints[0].mid1  = leafPoints[0].start + new Vector2(0.0f, 0.5f);
            leafPoints[0].end   = new Vector2(0.2f, 0.7f);
            leafPoints[0].mid2  = leafPoints[0].end + new Vector2(0.0f, -0.5f);
            leafPoints[1].start = new Vector2(0.2f, 0.7f);
            leafPoints[1].mid1  = leafPoints[1].start + new Vector2(0.2f, -0.3f);
            leafPoints[1].end   = new Vector2(0.5f, 1.0f);
            leafPoints[1].mid2  = leafPoints[1].end + new Vector2(-0.1f, -0.3f);
            texturer.CutOutLeafShape(leafPoints, 2, true);
        }

        texturer.GetTexture().Apply();

        return(texturer.GetTexture());
    }