private static void CreateVertices(ref TerrainVars tVars,
                                       List <Vector3> vertices)
    {
        int size  = tVars.Size;
        int scale = tVars.Scale;

        for (int z = 0; z <= size; z++)
        {
            int xSize = size + z;

            for (int x = 0; x <= xSize; x++)
            {
                vertices.Add(new Vector3(x - Hex.cos60 * z - size / 2f,
                                         0, (z - size) * Hex.sin60) * scale);
            }
        }
        for (int z = size + 1, i = 0; z <= 2 * size; z++, i++)
        {
            int xSize = 2 * size - i - 1;

            for (int x = 0; x <= xSize; x++)
            {
                vertices.Add(new Vector3(x - (size - 1 - i) * Hex.cos60 - size / 2f,
                                         0, (z - size) * Hex.sin60) * scale);
            }
        }
    }
    public static Mesh GenerateMesh(ref TerrainVars tVars)
    {
        Mesh mesh = new Mesh();

        List <Vector3> vertices  = new List <Vector3>();
        List <int>     triangles = new List <int>();

        CreateVertices(ref tVars, vertices);
        CreateTriangles(ref tVars, triangles);

        mesh.vertices  = vertices.ToArray();
        mesh.triangles = triangles.ToArray();

        return(mesh);
    }
    private static void CreateTriangles(ref TerrainVars tVars,
                                        List <int> triangles)
    {
        int i    = 0;
        int size = tVars.Size;

        for (int z = 0; z < size; z++, i++)
        {
            int xSize = size + z;

            for (int x = 0; x < xSize; x++, i++)
            {
                triangles.Add(i);
                triangles.Add(i + xSize + 1);
                triangles.Add(i + xSize + 2);

                triangles.Add(i);
                triangles.Add(i + xSize + 2);
                triangles.Add(i + 1);

                if (x == xSize - 1)
                {
                    triangles.Add(i + 1);
                    triangles.Add(i + xSize + 2);
                    triangles.Add(i + xSize + 3);
                }
            }
        }

        for (int z = 0; z < size; z++, i++)
        {
            int xSize = 2 * size - z;

            for (int x = 0; x < xSize; x++, i++)
            {
                triangles.Add(i);
                triangles.Add(i + xSize + 1);
                triangles.Add(i + 1);

                if (x != xSize - 1)
                {
                    triangles.Add(i + 1);
                    triangles.Add(i + xSize + 1);
                    triangles.Add(i + xSize + 2);
                }
            }
        }
    }
Ejemplo n.º 4
0
    private static void AddNoise(ref TerrainVars tVars,
                                 ref NoiseVars nVars, ref MeshData mesh, Vector3 pos)
    {
        Vector3[] vertices = mesh.vertices;
        float     height   = tVars.Height;

        float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars);

        for (int i = 0; i < vertices.Length; i++)
        {
            Vector3 currentVertex = vertices[i];
            vertices[i].y = (noise[i] * 2 - 1) * height;
        }

        mesh.vertices = vertices;
    }
Ejemplo n.º 5
0
    private static void AddNoise(ref TerrainVars tVars,
                                 ref NoiseVars nVars, ref MeshData mesh, Vector3 pos)
    {
        Vector3[] vertices = mesh.vertices;
        Color[]   colors   = new Color[vertices.Length];

        Gradient gradient = tVars.gradient;
        float    height   = tVars.Height;

        float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars);

        for (int i = 0; i < vertices.Length; i++)
        {
            Vector3 currentVertex = vertices[i];
            colors[i]     = gradient.Evaluate(noise[i]);
            vertices[i].y = (noise[i] * 2 - 1) * height;
        }

        mesh.vertices = vertices;
        mesh.colors   = colors;
        mesh.RecalculateNormals();
    }
Ejemplo n.º 6
0
    public void AddHeights(ref TerrainVars tVars,
                           ref NoiseVars nVars, Vector3 pos)
    {
        float height = tVars.Height;

        Vector3[] vertices = this.vertices;

        AnimationCurve curve =
            new AnimationCurve(tVars.curve.keys);

        // Get noise
        float[] noise =
            NoiseGenerator.noise(vertices, pos, ref nVars);

        for (int i = 0; i < vertices.Length; i++)
        {
            noise[i]      = Mathf.Clamp01(curve.Evaluate(noise[i]));
            vertices[i].y = (noise[i] * 2 - 1) * height;
        }

        // Save mesh values
        this.vertices = vertices;
    }
Ejemplo n.º 7
0
    public void AddHeightsAndColors(ref TerrainVars tVars,
                                    ref NoiseVars nVars, Vector3 pos)
    {
        Vector3[] vertices = this.vertices;
        Color[]   colors   = new Color[vertices.Length];

        Gradient gradient = tVars.gradient;

        // Color keys
        float[] keys = gradient.colorKeys
                       .Select(k => k.time).ToArray();

        i1 = new float[vertices.Length];
        i2 = new float[vertices.Length];

        AnimationCurve curve =
            new AnimationCurve(tVars.curve.keys);

        float height = tVars.Height;

        // Get noise
        float[] noise =
            NoiseGenerator.noise(vertices, pos, ref nVars);

        for (int i = 0; i < vertices.Length; i++)
        {
            float cNoise = Mathf.Clamp01(curve.Evaluate(noise[i]));

            colors[i] = gradient.Evaluate(cNoise);

            vertices[i].y = (cNoise * 2 - 1) * height;

            try
            {
                if (cNoise < keys[1])
                {
                    i1[i] = 0;
                }
                if (cNoise > keys[0] && cNoise < keys[3])
                {
                    i2[i] = 1;
                }
                if (cNoise > keys[2] && cNoise < keys[5])
                {
                    i1[i] = 2;
                }
                if (cNoise > keys[4] && cNoise < keys[7])
                {
                    i2[i] = 3;
                }
                if (cNoise > keys[6])
                {
                    i1[i] = 4;
                }
            }
            catch (IndexOutOfRangeException) { };
        }

        // Save mesh values
        this.vertices = vertices;
        this.colors   = colors;
        RecalculateNormals();
        SaveIndexes();
    }