Пример #1
0
    //Same as above with offset
    public static GridCubeNoise[,] ReturnGridCubeNoise(int width, int length, Vector2 offset)
    {
        GridCubeNoise[,] gridCubeNoises = new GridCubeNoise[width, length];

        float[,] noiseMapValues = ReturnNoiseArray(width + 1, length + 1, offset);

        int noiseMapWidth  = noiseMapValues.GetLength(0);
        int noiseMapLength = noiseMapValues.GetLength(1);

        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < length; y++)
            {
                float leftDown  = noiseMapValues[x, y];
                float leftUp    = noiseMapValues[x, y + 1];
                float rightUp   = noiseMapValues[x + 1, y + 1];
                float rightDown = noiseMapValues[x + 1, y];

                GridCubeNoise cubeNoise = new GridCubeNoise(leftDown, leftUp, rightUp, rightDown);

                gridCubeNoises[x, y] = cubeNoise;
            }
        }

        return(gridCubeNoises);
    }
Пример #2
0
    //This method is run when all GridCube class objs are initializes and constructed
    //After that, for each face new obj is created.
    //Parameter is GridCubeNoise which is yOffset for top vertex of cube
    public void InitializeGridCubeFaces(GridCubeNoise gridCubeNoise)
    {
        cubeFaceToObj.Add(GridCubeFaceID.DOWN, GridCubeMeshHandler.GenerateGridCubeFace(GridCubeFaceID.DOWN, gridCubeObj, gridCubeNoise));
        cubeFaceToObj.Add(GridCubeFaceID.LEFT, GridCubeMeshHandler.GenerateGridCubeFace(GridCubeFaceID.LEFT, gridCubeObj, gridCubeNoise));
        cubeFaceToObj.Add(GridCubeFaceID.RIGHT, GridCubeMeshHandler.GenerateGridCubeFace(GridCubeFaceID.RIGHT, gridCubeObj, gridCubeNoise));
        cubeFaceToObj.Add(GridCubeFaceID.FORWARD, GridCubeMeshHandler.GenerateGridCubeFace(GridCubeFaceID.FORWARD, gridCubeObj, gridCubeNoise));
        cubeFaceToObj.Add(GridCubeFaceID.BACKWARD, GridCubeMeshHandler.GenerateGridCubeFace(GridCubeFaceID.BACKWARD, gridCubeObj, gridCubeNoise));
        cubeFaceToObj.Add(GridCubeFaceID.UP, GridCubeMeshHandler.GenerateGridCubeFace(GridCubeFaceID.UP, gridCubeObj, gridCubeNoise));

        CombineGridCubeFaceMeshes();
    }
    //Not used anymore
    public static GameObject GenerateGridCubeTopFaceObj(GridCubeNoise cubeNoise , GameObject parent)
    {
        GameObject cubeFace;
        MeshRenderer cubeFaceRenderer;
        MeshFilter cubeFaceMeshFilter;
        GenerateFaceObjSettings(GridCubeFaceID.UP, parent, out cubeFace, out cubeFaceRenderer, out cubeFaceMeshFilter);

        Mesh topMesh = new Mesh();
        Vector3[] verts = new Vector3[4];

        float leftDown = cubeNoise.OrientationToValue[VerticeOrientation.LeftDown];
        float leftUp = cubeNoise.OrientationToValue[VerticeOrientation.LeftUp];
        float rightUp = cubeNoise.OrientationToValue[VerticeOrientation.RightUp];
        float rightDown = cubeNoise.OrientationToValue[VerticeOrientation.RightDown];

        verts[0] = new Vector3(-CubeXDim / 2f, CubeYDim / 2f + leftDown, -CubeXDim / 2f);
        verts[1] = new Vector3(-CubeXDim / 2f, CubeYDim / 2f + leftUp, CubeXDim / 2f);
        verts[2] = new Vector3(CubeXDim / 2f, CubeYDim / 2f + rightUp, CubeXDim / 2f);
        verts[3] = new Vector3(CubeXDim / 2f, CubeYDim / 2f + rightDown, -CubeXDim / 2f);

        //verts[0] = new Vector3(0, 0, 0);
        //verts[1] = new Vector3(1, 0, 0);
        //verts[2] = new Vector3(1, 0, 1);
        //verts[3] = new Vector3(0, 0, 1);

        topMesh.vertices = verts;

        Vector2[] uvs = new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(1, 1) };

        topMesh.uv = uvs;

        int[] triangles = new int[6];
        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 3;
        triangles[3] = 3;
        triangles[4] = 1;
        triangles[5] = 2;

        topMesh.triangles = triangles;

        topMesh.RecalculateNormals();
        topMesh.RecalculateTangents();
        topMesh.RecalculateBounds();

        ApplyCubeFaceMeshSettings(GridCubeFaceID.UP, cubeFaceRenderer, cubeFaceMeshFilter, topMesh);
        cubeFace.transform.localPosition = Vector3.zero;
        return cubeFace;
    }
    //Generating desired face mesh for face Obj
    //Most of variables such as vertex positions for top vertices are pre prefined by Noise Sampler
    //Each face has two vertices located at the top
    //And for every cube there is GridCubeNoise data which keep data about specific (x,y) GridCube
    public static Mesh GenerateGridCubeTopFace(GridCubeNoise cubeNoise)
    {

        Mesh topMesh = new Mesh();
        Vector3[] verts = new Vector3[4];

        float leftDown = cubeNoise.OrientationToValue[VerticeOrientation.LeftDown];
        float leftUp = cubeNoise.OrientationToValue[VerticeOrientation.LeftUp];
        float rightUp = cubeNoise.OrientationToValue[VerticeOrientation.RightUp];
        float rightDown = cubeNoise.OrientationToValue[VerticeOrientation.RightDown];

        verts[0] = new Vector3(-CubeXDim / 2f, CubeYDim / 2f + leftDown, -CubeZDim / 2f);
        verts[1] = new Vector3(-CubeXDim / 2f, CubeYDim / 2f + leftUp, CubeZDim / 2f);
        verts[2] = new Vector3(CubeXDim / 2f, CubeYDim / 2f + rightUp, CubeZDim / 2f);
        verts[3] = new Vector3(CubeXDim / 2f, CubeYDim / 2f + rightDown, -CubeZDim / 2f);

        //verts[0] = new Vector3(0, 0, 0);
        //verts[1] = new Vector3(1, 0, 0);
        //verts[2] = new Vector3(1, 0, 1);
        //verts[3] = new Vector3(0, 0, 1);

        topMesh.vertices = verts;

        Vector2[] uvs = new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(1, 1) };

        topMesh.uv = uvs;

        int[] triangles = new int[6];
        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 3;
        triangles[3] = 3;
        triangles[4] = 1;
        triangles[5] = 2;

        topMesh.triangles = triangles;

        topMesh.RecalculateNormals();
        topMesh.RecalculateTangents();
        topMesh.RecalculateBounds();

        return topMesh;
    }
    public static Mesh GenerateGridCubeLeftFace(GridCubeNoise cubeNoise)
    {

        Mesh downMesh = new Mesh();
        Vector3[] verts = new Vector3[4];
        verts[0] = new Vector3(-CubeXDim / 2f, -CubeYDim / 2f, CubeZDim / 2f);
        verts[1] = new Vector3(-CubeXDim / 2f, CubeYDim / 2f + cubeNoise.OrientationToValue[VerticeOrientation.LeftUp], CubeZDim / 2f);
        verts[2] = new Vector3(-CubeXDim / 2f, CubeYDim / 2f + cubeNoise.OrientationToValue[VerticeOrientation.LeftDown], -CubeZDim / 2f);
        verts[3] = new Vector3(-CubeXDim / 2f, -CubeYDim / 2f, -CubeZDim / 2f);

        //verts[0] = new Vector3(0, 0, 0);
        //verts[1] = new Vector3(1, 0, 0);
        //verts[2] = new Vector3(1, 0, 1);
        //verts[3] = new Vector3(0, 0, 1);

        downMesh.vertices = verts;

        Vector2[] uvs = new Vector2[] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(1, 1) };

        downMesh.uv = uvs;

        int[] triangles = new int[6];
        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 3;
        triangles[3] = 3;
        triangles[4] = 1;
        triangles[5] = 2;

        downMesh.triangles = triangles;

        downMesh.RecalculateNormals();
        downMesh.RecalculateTangents();
        downMesh.RecalculateBounds();

        return downMesh;
    }
    //Generating gridCubeFace based on informations passed in paramethers
    //New Obj is instantiated, with default Cube Components
    //Approporiate FaceMesh is then applied to this obj
    public static GameObject GenerateGridCubeFace(GridCubeFaceID faceID , GameObject parent , GridCubeNoise cubeNoise)
    {
        GameObject cubeFace;
        MeshRenderer cubeFaceRenderer;
        MeshFilter cubeFaceMeshFilter;
        GenerateFaceObjSettings(faceID, parent, out cubeFace, out cubeFaceRenderer, out cubeFaceMeshFilter);
        Mesh faceMesh = new Mesh();

        if (faceID == GridCubeFaceID.DOWN)
        {
            faceMesh = GenerateGridCubeDownFace(cubeNoise);
            //cubeFace.transform.localRotation = Quaternion.LookRotation(Vector3.forward, Vector3.down);
        }
        else if (faceID == GridCubeFaceID.LEFT)
        {
            faceMesh = GenerateGridCubeLeftFace(cubeNoise);
        }
        else if (faceID == GridCubeFaceID.RIGHT)
        {
            faceMesh = GenerateGridCubeRightFace(cubeNoise);
        }
        else if (faceID == GridCubeFaceID.FORWARD)
        {
            faceMesh = GenerateGridCubeForwardFace(cubeNoise);
        }
        else if (faceID == GridCubeFaceID.BACKWARD)
        {
            faceMesh = GenerateGridCubeBackwardFace(cubeNoise);
        }
        
        else if(faceID == GridCubeFaceID.UP)
        {
            faceMesh = GenerateGridCubeTopFace(cubeNoise);
        }
        

        ApplyCubeFaceMeshSettings(faceID, cubeFaceRenderer, cubeFaceMeshFilter, faceMesh);

        cubeFace.isStatic = true;

        return cubeFace;
    }
Пример #7
0
 //Not used anymore
 public void InitializeGridCubeNoise(GridCubeNoise gridCubeNoise)
 {
     cubeFaceToObj.Add(GridCubeFaceID.UP, GridCubeMeshHandler.GenerateGridCubeTopFaceObj(gridCubeNoise, gridCubeObj));
 }