//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); }
//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; }
//Not used anymore public void InitializeGridCubeNoise(GridCubeNoise gridCubeNoise) { cubeFaceToObj.Add(GridCubeFaceID.UP, GridCubeMeshHandler.GenerateGridCubeTopFaceObj(gridCubeNoise, gridCubeObj)); }