public Mesh CreateQuad(Cubeside side) { Mesh mesh = new Mesh { name = "ScriptedMesh" + side }; //all possible UVs Vector2 uv00 = new Vector2(0, 0); Vector2 uv10 = new Vector2(1, 0); Vector2 uv01 = new Vector2(0, 1); Vector2 uv11 = new Vector2(1, 1); mesh.vertices = ((dynamic)dictionary[side]).vertices; mesh.normals = ((dynamic)dictionary[side]).normals; mesh.uv = new[] { uv11, uv01, uv00, uv10 }; mesh.triangles = new[] { 3, 1, 0, 3, 2, 1 }; mesh.RecalculateBounds(); return(mesh); }
public override void CreateQuad(Cubeside side) { string textureName; switch (side) { case Cubeside.TOP: { textureName = textureNames[0]; break; } case Cubeside.BOTTOM: { textureName = textureNames[1]; break; } default: { textureName = textureNames[2]; break; } } QuadMesh quadMesh = new QuadMesh(side); TextureAtlasMapper mapper = Game.currentGame.mapper; Vector2[] uvs = mapper.GetMappedUVs(textureName); GameObject quad = new GameObject("Quad"); quad.transform.position = globalPosition; quad.transform.parent = chunk.GameObject.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); Mesh myMesh = quadMesh.mesh; myMesh.uv = uvs; myMesh.RecalculateBounds(); myMesh.name = "my mesh"; meshFilter.mesh = myMesh; MeshRenderer renderer = quad.AddComponent(typeof(MeshRenderer)) as MeshRenderer; }
public BlockQuad(Cubeside cubeside, BlockType blockType, Transform parrentTransform, Position position) { this.BlockType = blockType; this.Cubeside = cubeside; this.ParrentTransform = parrentTransform; this.Position = position; Mesh mesh = this.CreateQuad(cubeside); this.MeshCollider = mesh; this.QuadGameObject = new GameObject("BlockQuad"); this.QuadGameObject.transform.localPosition = this.Position; this.QuadGameObject.transform.parent = this.Buffer; this.QuadGameObject.transform.localScale *= StaticWorld.K; this.MeshFilter = (MeshFilter)this.QuadGameObject.AddComponent(typeof(MeshFilter)); this.MeshFilter.mesh = mesh; }
public virtual void CreateQuad(Cubeside side) { string[] textures = new String[6]; if (textureNames.Length == 1) { for (int j = 0; j < 6; j++) { textures[j] = textureNames[0]; } } else { textures = textureNames; } for (int i = 0; i < textures.Length; i++) { QuadMesh quadMesh = new QuadMesh(side); TextureAtlasMapper mapper = Game.currentGame.mapper; Vector2[] uvs = mapper.GetMappedUVs(textures[i]); GameObject quad = new GameObject("Quad"); quad.transform.position = globalPosition; quad.transform.parent = chunk.GameObject.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); Mesh myMesh = quadMesh.mesh; myMesh.uv = uvs; myMesh.RecalculateBounds(); myMesh.name = "my mesh"; meshFilter.mesh = myMesh; hasCubeSideMesh[side] = true; } }
private Mesh CreateQuads(Cubeside side, BlockType bType) { Mesh mesh = new Mesh(); mesh.name = "ScriptedMesh" + side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; int[] triangles = new int[6]; Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (bType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (bType == BlockType.GRASS && side == Cubeside.BOTTOM) { uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; } else { uv00 = blockUVs[(int)(bType + 1), 0]; uv10 = blockUVs[(int)(bType + 1), 1]; uv01 = blockUVs[(int)(bType + 1), 2]; uv11 = blockUVs[(int)(bType + 1), 3]; } //All vertices Vector3 p0 = new Vector3(-.5f, -.5f, .5f) + position; Vector3 p1 = new Vector3(.5f, -.5f, .5f) + position; Vector3 p2 = new Vector3(.5f, -.5f, -.5f) + position; Vector3 p3 = new Vector3(-.5f, -.5f, -.5f) + position; Vector3 p4 = new Vector3(-.5f, .5f, .5f) + position; Vector3 p5 = new Vector3(.5f, .5f, .5f) + position; Vector3 p6 = new Vector3(.5f, .5f, -.5f) + position; Vector3 p7 = new Vector3(-.5f, .5f, -.5f) + position; switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.triangles = triangles; mesh.RecalculateBounds(); return(mesh); }
void CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); mesh.name = side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; int[] triangles = new int[6]; //all possible UVS Vector2 uv00 = new Vector2(0f, 0f); Vector2 uv10 = new Vector2(1f, 0f); Vector2 uv01 = new Vector2(0f, 1f); Vector2 uv11 = new Vector2(1f, 1f); //all possible vertices Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.triangles = triangles; mesh.RecalculateBounds(); GameObject quad = new GameObject("quad"); quad.transform.parent = transform; MeshFilter meshFilter = quad.AddComponent <MeshFilter>(); meshFilter.mesh = mesh; }
void CreateQuad(Cubeside side, List <Vector3> v, List <Vector3> n, List <Vector2> u, List <int> t) { /* * Mesh mesh = new Mesh(); * mesh.name = "ScriptedMesh" + side.ToString(); */ Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; int[] triangles = new int[6]; //all possible UVs Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (bType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (bType == BlockType.GRASS && side == Cubeside.BOTTOM) { uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; } else { uv00 = blockUVs[(int)(bType + 1), 0]; uv10 = blockUVs[(int)(bType + 1), 1]; uv01 = blockUVs[(int)(bType + 1), 2]; uv11 = blockUVs[(int)(bType + 1), 3]; } //all possible vertices Vector3 p0 = World.allVertices[x, y, z + 1]; Vector3 p1 = World.allVertices[x + 1, y, z + 1]; Vector3 p2 = World.allVertices[x + 1, y, z]; Vector3 p3 = World.allVertices[x, y, z]; Vector3 p4 = World.allVertices[x, y + 1, z + 1]; Vector3 p5 = World.allVertices[x + 1, y + 1, z + 1]; Vector3 p6 = World.allVertices[x + 1, y + 1, z]; Vector3 p7 = World.allVertices[x, y + 1, z]; int trioffset = 0; switch (side) { case Cubeside.BOTTOM: /*vertices = new Vector3[] {p0, p1, p2, p3}; * normals = new Vector3[] {Vector3.down, Vector3.down, * Vector3.down, Vector3.down}; * uvs = new Vector2[] {uv11, uv01, uv00, uv10}; * triangles = new int[] { 3, 1, 0, 3, 2, 1};*/ trioffset = v.Count; v.Add(p0); v.Add(p1); v.Add(p2); v.Add(p3); n.Add(World.allNormals[(int)World.NDIR.DOWN]); n.Add(World.allNormals[(int)World.NDIR.DOWN]); n.Add(World.allNormals[(int)World.NDIR.DOWN]); n.Add(World.allNormals[(int)World.NDIR.DOWN]); u.Add(uv11); u.Add(uv01); u.Add(uv00); u.Add(uv10); t.Add(3 + trioffset); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(1 + trioffset); break; case Cubeside.TOP: /*vertices = new Vector3[] {p7, p6, p5, p4}; * normals = new Vector3[] {Vector3.up, Vector3.up, * Vector3.up, Vector3.up}; * uvs = new Vector2[] {uv11, uv01, uv00, uv10}; * triangles = new int[] {3, 1, 0, 3, 2, 1};*/ trioffset = v.Count; v.Add(p7); v.Add(p6); v.Add(p5); v.Add(p4); n.Add(World.allNormals[(int)World.NDIR.UP]); n.Add(World.allNormals[(int)World.NDIR.UP]); n.Add(World.allNormals[(int)World.NDIR.UP]); n.Add(World.allNormals[(int)World.NDIR.UP]); u.Add(uv11); u.Add(uv01); u.Add(uv00); u.Add(uv10); t.Add(3 + trioffset); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(1 + trioffset); break; case Cubeside.LEFT: /*vertices = new Vector3[] {p7, p4, p0, p3}; * normals = new Vector3[] {Vector3.left, Vector3.left, * Vector3.left, Vector3.left}; * uvs = new Vector2[] {uv11, uv01, uv00, uv10}; * triangles = new int[] {3, 1, 0, 3, 2, 1};*/ trioffset = v.Count; v.Add(p7); v.Add(p4); v.Add(p0); v.Add(p3); n.Add(World.allNormals[(int)World.NDIR.LEFT]); n.Add(World.allNormals[(int)World.NDIR.LEFT]); n.Add(World.allNormals[(int)World.NDIR.LEFT]); n.Add(World.allNormals[(int)World.NDIR.LEFT]); u.Add(uv11); u.Add(uv01); u.Add(uv00); u.Add(uv10); t.Add(3 + trioffset); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(1 + trioffset); break; case Cubeside.RIGHT: /*vertices = new Vector3[] {p5, p6, p2, p1}; * normals = new Vector3[] {Vector3.right, Vector3.right, * Vector3.right, Vector3.right}; * uvs = new Vector2[] {uv11, uv01, uv00, uv10}; * triangles = new int[] {3, 1, 0, 3, 2, 1};*/ trioffset = v.Count; v.Add(p5); v.Add(p6); v.Add(p2); v.Add(p1); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); u.Add(uv11); u.Add(uv01); u.Add(uv00); u.Add(uv10); t.Add(3 + trioffset); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(1 + trioffset); break; case Cubeside.FRONT: /*vertices = new Vector3[] {p4, p5, p1, p0}; * normals = new Vector3[] {Vector3.forward, Vector3.forward, * Vector3.forward, Vector3.forward}; * uvs = new Vector2[] {uv11, uv01, uv00, uv10}; * triangles = new int[] {3, 1, 0, 3, 2, 1};*/ trioffset = v.Count; v.Add(p4); v.Add(p5); v.Add(p1); v.Add(p0); n.Add(World.allNormals[(int)World.NDIR.FRONT]); n.Add(World.allNormals[(int)World.NDIR.FRONT]); n.Add(World.allNormals[(int)World.NDIR.FRONT]); n.Add(World.allNormals[(int)World.NDIR.FRONT]); u.Add(uv11); u.Add(uv01); u.Add(uv00); u.Add(uv10); t.Add(3 + trioffset); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(1 + trioffset); break; case Cubeside.BACK: /*vertices = new Vector3[] {p6, p7, p3, p2}; * normals = new Vector3[] {Vector3.back, Vector3.back, * Vector3.back, Vector3.back}; * uvs = new Vector2[] {uv11, uv01, uv00, uv10}; * triangles = new int[] {3, 1, 0, 3, 2, 1};*/ trioffset = v.Count; v.Add(p6); v.Add(p7); v.Add(p3); v.Add(p2); n.Add(World.allNormals[(int)World.NDIR.BACK]); n.Add(World.allNormals[(int)World.NDIR.BACK]); n.Add(World.allNormals[(int)World.NDIR.BACK]); n.Add(World.allNormals[(int)World.NDIR.BACK]); u.Add(uv11); u.Add(uv01); u.Add(uv00); u.Add(uv10); t.Add(3 + trioffset); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(1 + trioffset); break; } /*mesh.vertices = vertices; * mesh.normals = normals; * mesh.uv = uvs; * mesh.triangles = triangles; * * mesh.RecalculateBounds(); * * GameObject quad = new GameObject("Quad"); * quad.transform.position = position; * quad.transform.parent = parent.transform; * * MeshFilter meshFilter = (MeshFilter) quad.AddComponent(typeof(MeshFilter)); * meshFilter.mesh = mesh;*/ //MeshRenderer renderer = quad.AddComponent(typeof(MeshRenderer)) as MeshRenderer; //renderer.material = cubeMaterial; }
public static MeshData createQuad(Cubeside side) { List <Vector3> vertices = new List <Vector3>(); List <Vector3> normals = new List <Vector3>(); List <int> triangles = new List <int> { 0, 1, 2, 2, 3, 0 }; switch (side) { case Cubeside.FRONT: vertices = new List <Vector3> { allVertices[CubeVertices.FRONT_TOP_LEFT], allVertices[CubeVertices.FRONT_TOP_RIGHT], allVertices[CubeVertices.FRONT_BOTTOM_RIGHT], allVertices[CubeVertices.FRONT_BOTTOM_LEFT] }; normals = new List <Vector3> { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; break; case Cubeside.BACK: vertices = new List <Vector3> { allVertices[CubeVertices.BACK_TOP_LEFT], allVertices[CubeVertices.BACK_TOP_RIGHT], allVertices[CubeVertices.BACK_BOTTOM_RIGHT], allVertices[CubeVertices.BACK_BOTTOM_LEFT] }; normals = new List <Vector3> { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; break; case Cubeside.LEFT: vertices = new List <Vector3> { allVertices[CubeVertices.FRONT_TOP_LEFT], allVertices[CubeVertices.BACK_TOP_LEFT], allVertices[CubeVertices.BACK_BOTTOM_LEFT], allVertices[CubeVertices.FRONT_BOTTOM_LEFT] }; normals = new List <Vector3> { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; break; case Cubeside.RIGHT: vertices = new List <Vector3> { allVertices[CubeVertices.FRONT_TOP_RIGHT], allVertices[CubeVertices.BACK_TOP_RIGHT], allVertices[CubeVertices.BACK_BOTTOM_RIGHT], allVertices[CubeVertices.FRONT_BOTTOM_RIGHT] }; normals = new List <Vector3> { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; break; case Cubeside.TOP: vertices = new List <Vector3> { allVertices[CubeVertices.FRONT_TOP_LEFT], allVertices[CubeVertices.BACK_TOP_LEFT], allVertices[CubeVertices.BACK_TOP_RIGHT], allVertices[CubeVertices.FRONT_TOP_RIGHT] }; normals = new List <Vector3> { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; break; case Cubeside.BOTTOM: vertices = new List <Vector3> { allVertices[CubeVertices.FRONT_BOTTOM_LEFT], allVertices[CubeVertices.BACK_BOTTOM_LEFT], allVertices[CubeVertices.BACK_BOTTOM_RIGHT], allVertices[CubeVertices.FRONT_BOTTOM_RIGHT] }; normals = new List <Vector3> { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; break; default: break; } return(new MeshData(vertices, normals, triangles, uvs)); }
void CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); mesh.name = side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; int[] triangles = new int[6]; //all possible UVS Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (bType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if ((bType == BlockType.GRASS && side == Cubeside.BOTTOM) || bType == BlockType.DIRT) { uv00 = blockUVs[2, 0]; uv10 = blockUVs[2, 1]; uv01 = blockUVs[2, 2]; uv11 = blockUVs[2, 3]; } else if (bType == BlockType.GRASS) { uv00 = blockUVs[1, 0]; uv10 = blockUVs[1, 1]; uv01 = blockUVs[1, 2]; uv11 = blockUVs[1, 3]; } else { uv00 = blockUVs[3, 0]; uv10 = blockUVs[3, 1]; uv01 = blockUVs[3, 2]; uv11 = blockUVs[3, 3]; } //all possible vertices Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 0, 2, 1, 0, 3, 2 }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.triangles = triangles; mesh.RecalculateBounds(); GameObject quad = new GameObject("quad"); quad.transform.position = position; quad.transform.parent = parent.transform; MeshFilter meshFilter = quad.AddComponent <MeshFilter>(); meshFilter.mesh = mesh; }
protected void CreateQuad(Cubeside side, List <Vector3> v, List <Vector3> n, List <Vector2> u, List <Vector2> su, List <int> t, ItemTexture texture) { float resolution = 0.0625f; //all possible UVs Vector2 uv00 = new Vector2(0f, 0f) * resolution; Vector2 uv10 = new Vector2(1f, 0f) * resolution; Vector2 uv01 = new Vector2(0f, 1f) * resolution; Vector2 uv11 = new Vector2(1f, 1f) * resolution; int x = (int)position.x, y = (int)position.y, z = (int)position.z; //all possible vertices Vector3 p0 = World.allVertices[x, y, z + 1]; Vector3 p1 = World.allVertices[x + 1, y, z + 1]; Vector3 p2 = World.allVertices[x + 1, y, z]; Vector3 p3 = World.allVertices[x, y, z]; Vector3 p4 = World.allVertices[x, y + 1, z + 1]; Vector3 p5 = World.allVertices[x + 1, y + 1, z + 1]; Vector3 p6 = World.allVertices[x + 1, y + 1, z]; Vector3 p7 = World.allVertices[x, y + 1, z]; int trioffset = 0; switch (side) { case Cubeside.BOTTOM: trioffset = v.Count; v.Add(p0); v.Add(p1); v.Add(p2); v.Add(p3); n.Add(World.allNormals[(int)World.NDIR.DOWN]); n.Add(World.allNormals[(int)World.NDIR.DOWN]); n.Add(World.allNormals[(int)World.NDIR.DOWN]); n.Add(World.allNormals[(int)World.NDIR.DOWN]); u.Add(uv11 + texture.bottom); u.Add(uv01 + texture.bottom); u.Add(uv00 + texture.bottom); u.Add(uv10 + texture.bottom); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(2 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(0 + trioffset); break; case Cubeside.TOP: trioffset = v.Count; v.Add(p7); v.Add(p6); v.Add(p5); v.Add(p4); n.Add(World.allNormals[(int)World.NDIR.UP]); n.Add(World.allNormals[(int)World.NDIR.UP]); n.Add(World.allNormals[(int)World.NDIR.UP]); n.Add(World.allNormals[(int)World.NDIR.UP]); u.Add(uv11 + texture.top); u.Add(uv01 + texture.top); u.Add(uv00 + texture.top); u.Add(uv10 + texture.top); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(2 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(0 + trioffset); break; case Cubeside.LEFT: trioffset = v.Count; v.Add(p7); v.Add(p4); v.Add(p0); v.Add(p3); n.Add(World.allNormals[(int)World.NDIR.LEFT]); n.Add(World.allNormals[(int)World.NDIR.LEFT]); n.Add(World.allNormals[(int)World.NDIR.LEFT]); n.Add(World.allNormals[(int)World.NDIR.LEFT]); u.Add(uv11 + texture.left); u.Add(uv01 + texture.left); u.Add(uv00 + texture.left); u.Add(uv10 + texture.left); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(2 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(0 + trioffset); break; case Cubeside.RIGHT: trioffset = v.Count; v.Add(p5); v.Add(p6); v.Add(p2); v.Add(p1); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); n.Add(World.allNormals[(int)World.NDIR.RIGHT]); u.Add(uv11 + texture.right); u.Add(uv01 + texture.right); u.Add(uv00 + texture.right); u.Add(uv10 + texture.right); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(2 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(0 + trioffset); break; case Cubeside.FRONT: trioffset = v.Count; v.Add(p4); v.Add(p5); v.Add(p1); v.Add(p0); n.Add(World.allNormals[(int)World.NDIR.FRONT]); n.Add(World.allNormals[(int)World.NDIR.FRONT]); n.Add(World.allNormals[(int)World.NDIR.FRONT]); n.Add(World.allNormals[(int)World.NDIR.FRONT]); u.Add(uv11 + texture.front); u.Add(uv01 + texture.front); u.Add(uv00 + texture.front); u.Add(uv10 + texture.front); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(2 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(0 + trioffset); break; case Cubeside.BACK: trioffset = v.Count; v.Add(p6); v.Add(p7); v.Add(p3); v.Add(p2); n.Add(World.allNormals[(int)World.NDIR.BACK]); n.Add(World.allNormals[(int)World.NDIR.BACK]); n.Add(World.allNormals[(int)World.NDIR.BACK]); n.Add(World.allNormals[(int)World.NDIR.BACK]); u.Add(uv11 + texture.back); u.Add(uv01 + texture.back); u.Add(uv00 + texture.back); u.Add(uv10 + texture.back); t.Add(1 + trioffset); t.Add(0 + trioffset); t.Add(2 + trioffset); t.Add(3 + trioffset); t.Add(2 + trioffset); t.Add(0 + trioffset); break; default: break; } su.Add(uv11 + ItemTexture.Cracks[(int)(health)].back); su.Add(uv01 + ItemTexture.Cracks[(int)(health)].back); su.Add(uv00 + ItemTexture.Cracks[(int)(health)].back); su.Add(uv10 + ItemTexture.Cracks[(int)(health)].back); }
void CreateQuad(Cubeside side) { GameObject quad = new GameObject("quad"); quad.transform.position = position; quad.transform.parent = owner.chunk.gameObject.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); Mesh mesh = meshFilter.mesh = new Mesh(); mesh.name = prefix + side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; // All Possible UV's Vector2 uv00 = new Vector2(0f, 0f); Vector2 uv10 = new Vector2(1f, 0f); Vector2 uv01 = new Vector2(0f, 1f); Vector2 uv11 = new Vector2(1f, 1f); if (element == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (element == BlockType.GRASS && side == Cubeside.BOTTOM) { uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; } else { uv00 = blockUVs[(int)(element + 1), 0]; uv10 = blockUVs[(int)(element + 1), 1]; uv01 = blockUVs[(int)(element + 1), 2]; uv11 = blockUVs[(int)(element + 1), 3]; } switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.triangles = triangles; mesh.uv = new Vector2[] { uv11, uv01, uv00, uv10 }; //set cracks if necessary if (healthrating[(int)element] != (int)element) { List <Vector2> suvs = new List <Vector2>(); suvs.Add(decalUVs[(int)(health + 1), 3]); suvs.Add(decalUVs[(int)(health + 1), 2]); suvs.Add(decalUVs[(int)(health + 1), 1]); suvs.Add(decalUVs[(int)(health + 1), 0]); mesh.SetUVs(1, suvs); } mesh.RecalculateBounds(); }
void CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); mesh.name = "ScriptedMesh" + side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; List <Vector2> suvs = new List <Vector2>(); int[] triangles = new int[6]; //all possible UVS Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (bType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (bType == BlockType.GRASS && side == Cubeside.BOTTOM) { uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; } else { uv00 = blockUVs[(int)(bType + 1), 0]; uv10 = blockUVs[(int)(bType + 1), 1]; uv01 = blockUVs[(int)(bType + 1), 2]; uv11 = blockUVs[(int)(bType + 1), 3]; } //all possible vertices suvs.Add(blockUVs[(int)(health + 1), 3]); suvs.Add(blockUVs[(int)(health + 1), 2]); suvs.Add(blockUVs[(int)(health + 1), 0]); suvs.Add(blockUVs[(int)(health + 1), 1]); Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); Vector2[] uvsref = new Vector2[] { (uv11), (uv01), (uv00), (uv10) }; //Vector2[] uvsref = new Vector2[] { (uv11/16.00f), (uv01/16.00f), (uv00/16.00f), (uv10/16.00f)}; // //for(int i = 0; i < uvsref.Length; i++){ // uvsref[i].y += 15f/16f; //} int[] trianglesref = new int[] { 3, 1, 0, 3, 2, 1 }; switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = uvsref; triangles = trianglesref; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = uvsref; triangles = trianglesref; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = uvsref; triangles = trianglesref; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = uvsref; triangles = trianglesref; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = uvsref; triangles = trianglesref; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = uvsref; triangles = trianglesref; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.SetUVs(1, suvs); mesh.triangles = triangles; mesh.RecalculateBounds(); GameObject quad = new GameObject("Quad"); quad.transform.position = position; quad.transform.parent = parent.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); meshFilter.mesh = mesh; }
private Mesh CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); Vector3[] vertices; Vector3[] normals; Vector2[] uvs; int[] triangles; Vector2 uv00 = new Vector2(0f, 0f); Vector2 uv10 = new Vector2(1f, 0f); Vector2 uv01 = new Vector2(0f, 1f); Vector2 uv11 = new Vector2(1f, 1f); //all possible vertices Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; default: throw new System.Exception(); } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.triangles = triangles; mesh.RecalculateBounds(); return(mesh); }
/// <summary> /// Assembles one side of a cube's mesh by selecting the UVs, defining the vertices and calculating the normals. /// </summary> /// <param name="side">Quad to be created for this side</param> private void CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); mesh.name = "ScriptedMesh" + side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; List <Vector2> suvs = new List <Vector2>(); int[] triangles = new int[6]; // All possible UVs Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (blockType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (blockType == BlockType.GRASS) { uv00 = blockUVs[1, 0]; uv10 = blockUVs[1, 1]; uv01 = blockUVs[1, 2]; uv11 = blockUVs[1, 3]; } // TODO: grass bottom = sand?? // else if(blockType == BlockType.GRASS && side == Cubeside.BOTTOM) // { // uv00 = blockUVs[(int)(BlockType.DIRT+2),0]; // uv10 = blockUVs[(int)(BlockType.DIRT+2),1]; // uv01 = blockUVs[(int)(BlockType.DIRT+2),2]; // uv11 = blockUVs[(int)(BlockType.DIRT+2),3]; // } else if (blockType == BlockType.CACTUS && side == Cubeside.TOP) { uv00 = blockUVs[2, 0]; uv10 = blockUVs[2, 1]; uv01 = blockUVs[2, 2]; uv11 = blockUVs[2, 3]; } else if (blockType == BlockType.PUMPKIN && side == Cubeside.FRONT) { uv00 = blockUVs[(int)(blockType + 1), 0]; uv10 = blockUVs[(int)(blockType + 1), 1]; uv01 = blockUVs[(int)(blockType + 1), 2]; uv11 = blockUVs[(int)(blockType + 1), 3]; } else if (blockType == BlockType.PUMPKIN && side == Cubeside.TOP) { uv00 = blockUVs[(int)(blockType + 3), 0]; uv10 = blockUVs[(int)(blockType + 3), 1]; uv01 = blockUVs[(int)(blockType + 3), 2]; uv11 = blockUVs[(int)(blockType + 3), 3]; } else if (blockType == BlockType.LISA && side == Cubeside.TOP) { uv00 = blockUVs[(int)(blockType + 3), 0]; uv10 = blockUVs[(int)(blockType + 3), 1]; uv01 = blockUVs[(int)(blockType + 3), 2]; uv11 = blockUVs[(int)(blockType + 3), 3]; } else if (blockType == BlockType.LISA) { uv00 = blockUVs[(int)(blockType + 4), 0]; uv10 = blockUVs[(int)(blockType + 4), 1]; uv01 = blockUVs[(int)(blockType + 4), 2]; uv11 = blockUVs[(int)(blockType + 4), 3]; } else if (blockType == BlockType.JULIA && side == Cubeside.TOP) { uv00 = blockUVs[(int)(blockType + 4), 0]; uv10 = blockUVs[(int)(blockType + 4), 1]; uv01 = blockUVs[(int)(blockType + 4), 2]; uv11 = blockUVs[(int)(blockType + 4), 3]; } else if (blockType == BlockType.JULIA || blockType == BlockType.SIGNBASE) { uv00 = blockUVs[(int)(blockType + 5), 0]; uv10 = blockUVs[(int)(blockType + 5), 1]; uv01 = blockUVs[(int)(blockType + 5), 2]; uv11 = blockUVs[(int)(blockType + 5), 3]; } else if (blockType == BlockType.HELGE) { uv00 = blockUVs[25, 0]; uv10 = blockUVs[25, 1]; uv01 = blockUVs[25, 2]; uv11 = blockUVs[25, 3]; } else if (blockType == BlockType.CACTUSBASE) { uv00 = blockUVs[6, 0]; uv10 = blockUVs[6, 1]; uv01 = blockUVs[6, 2]; uv11 = blockUVs[6, 3]; } else if (blockType == BlockType.SIGNLEFT) { if (side == Cubeside.BACK) { uv00 = blockUVs[21, 0]; uv10 = blockUVs[21, 1]; uv01 = blockUVs[21, 2]; uv11 = blockUVs[21, 3]; } else if (side == Cubeside.FRONT) { uv00 = blockUVs[23, 0]; uv10 = blockUVs[23, 1]; uv01 = blockUVs[23, 2]; uv11 = blockUVs[23, 3]; } else { uv00 = blockUVs[24, 0]; uv10 = blockUVs[24, 1]; uv01 = blockUVs[24, 2]; uv11 = blockUVs[24, 3]; } } else if (blockType == BlockType.SIGNRIGHT) { if (side == Cubeside.FRONT) { uv00 = blockUVs[21, 0]; uv10 = blockUVs[21, 1]; uv01 = blockUVs[21, 2]; uv11 = blockUVs[21, 3]; } else if (side == Cubeside.BACK) { uv00 = blockUVs[23, 0]; uv10 = blockUVs[23, 1]; uv01 = blockUVs[23, 2]; uv11 = blockUVs[23, 3]; } else { uv00 = blockUVs[24, 0]; uv10 = blockUVs[24, 1]; uv01 = blockUVs[24, 2]; uv11 = blockUVs[24, 3]; } } else if (blockType == BlockType.SIGNMIDDLE) { if (side == Cubeside.BACK || side == Cubeside.FRONT) { uv00 = blockUVs[22, 0]; uv10 = blockUVs[22, 1]; uv01 = blockUVs[22, 2]; uv11 = blockUVs[22, 3]; } else { uv00 = blockUVs[24, 0]; uv10 = blockUVs[24, 1]; uv01 = blockUVs[24, 2]; uv11 = blockUVs[24, 3]; } } else { uv00 = blockUVs[(int)(blockType + 2), 0]; uv10 = blockUVs[(int)(blockType + 2), 1]; uv01 = blockUVs[(int)(blockType + 2), 2]; uv11 = blockUVs[(int)(blockType + 2), 3]; } // Set cracks suvs.Add(blockUVs[(int)(health + 2), 3]); suvs.Add(blockUVs[(int)(health + 2), 2]); suvs.Add(blockUVs[(int)(health + 2), 0]); suvs.Add(blockUVs[(int)(health + 2), 1]); //{uv11, uv01, uv00, uv10}; // All possible vertices // Top vertices Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); // Bottom vertices Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.SetUVs(1, suvs); mesh.triangles = triangles; mesh.RecalculateBounds(); GameObject quad = new GameObject("Quad"); quad.transform.position = position; quad.transform.parent = this.parent.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); meshFilter.mesh = mesh; }
/// <summary> /// Assembles one side of a cube's mesh by selecting the UVs, defining the vertices and calculating the normals. /// </summary> /// <param name="side">Quad to be created for this side</param> private void CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); mesh.name = "ScriptedMesh" + side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; List <Vector2> suvs = new List <Vector2>(); int[] triangles = new int[6]; // All possible UVs Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; { uv00 = blockUVs[(int)(blockType), 0]; uv10 = blockUVs[(int)(blockType), 1]; uv01 = blockUVs[(int)(blockType), 2]; uv11 = blockUVs[(int)(blockType), 3]; } //{uv11, uv01, uv00, uv10}; // All possible vertices // Top vertices Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); // Bottom vertices Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.SetUVs(1, suvs); mesh.triangles = triangles; mesh.RecalculateBounds(); GameObject quad = new GameObject("Quad"); quad.transform.position = position; quad.transform.parent = this.parent.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); meshFilter.mesh = mesh; }
void CreateQuad(Cubeside side) { Mesh mesh = new Mesh(); mesh.name = "ScriptedMesh" + side.ToString(); Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; int[] triangles = new int[6]; Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (bType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (bType == BlockType.GRASS && side == Cubeside.BOTTOM) { uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; } else { uv00 = blockUVs[(int)(bType + 1), 0]; uv10 = blockUVs[(int)(bType + 1), 1]; uv01 = blockUVs[(int)(bType + 1), 2]; uv11 = blockUVs[(int)(bType + 1), 3]; } //all possible vertices Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; triangles = new int[] { 3, 1, 0, 3, 2, 1 }; break; } mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uvs; mesh.triangles = triangles; mesh.RecalculateBounds(); GameObject quad = new GameObject("Quad"); quad.transform.parent = this.gameObject.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); meshFilter.mesh = mesh; MeshRenderer renderer = quad.AddComponent(typeof(MeshRenderer)) as MeshRenderer; renderer.material = cubeMaterial; }
} //END Constructor /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /// /// CreateQuad ///------------------------------------------ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void CreateQuad(Cubeside side, List <Vector3> pVerts, List <Vector3> pNormals, List <Vector2> pUVs, List <int> pTris) { Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uvs = new Vector2[4]; int[] triangles = new int[6]; //all possible UVs Vector2 uv00; Vector2 uv10; Vector2 uv01; Vector2 uv11; if (bType == BlockType.GRASS && side == Cubeside.TOP) { uv00 = blockUVs[0, 0]; uv10 = blockUVs[0, 1]; uv01 = blockUVs[0, 2]; uv11 = blockUVs[0, 3]; } else if (bType == BlockType.GRASS && side == Cubeside.BOTTOM) { uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; } else { uv00 = blockUVs[(int)(bType + 1), 0]; uv10 = blockUVs[(int)(bType + 1), 1]; uv01 = blockUVs[(int)(bType + 1), 2]; uv11 = blockUVs[(int)(bType + 1), 3]; }//END if/else //all possible vertices Vector3 p0 = World.allVertices[x, y, z + 1]; Vector3 p1 = World.allVertices[x + 1, y, z + 1]; Vector3 p2 = World.allVertices[x + 1, y, z]; Vector3 p3 = World.allVertices[x, y, z]; Vector3 p4 = World.allVertices[x, y + 1, z + 1]; Vector3 p5 = World.allVertices[x + 1, y + 1, z + 1]; Vector3 p6 = World.allVertices[x + 1, y + 1, z]; Vector3 p7 = World.allVertices[x, y + 1, z]; int trioffset = 0; switch (side) { case Cubeside.BOTTOM: trioffset = pVerts.Count; pVerts.Add(p0); pVerts.Add(p1); pVerts.Add(p2); pVerts.Add(p3); pNormals.Add(World.allNormals[(int)World.NDIR.DOWN]); pNormals.Add(World.allNormals[(int)World.NDIR.DOWN]); pNormals.Add(World.allNormals[(int)World.NDIR.DOWN]); pNormals.Add(World.allNormals[(int)World.NDIR.DOWN]); pUVs.Add(uv11); pUVs.Add(uv01); pUVs.Add(uv00); pUVs.Add(uv10); pTris.Add(3 + trioffset); pTris.Add(1 + trioffset); pTris.Add(0 + trioffset); pTris.Add(3 + trioffset); pTris.Add(2 + trioffset); pTris.Add(1 + trioffset); break; case Cubeside.TOP: trioffset = pVerts.Count; pVerts.Add(p7); pVerts.Add(p6); pVerts.Add(p5); pVerts.Add(p4); pNormals.Add(World.allNormals[(int)World.NDIR.UP]); pNormals.Add(World.allNormals[(int)World.NDIR.UP]); pNormals.Add(World.allNormals[(int)World.NDIR.UP]); pNormals.Add(World.allNormals[(int)World.NDIR.UP]); pUVs.Add(uv11); pUVs.Add(uv01); pUVs.Add(uv00); pUVs.Add(uv10); pTris.Add(3 + trioffset); pTris.Add(1 + trioffset); pTris.Add(0 + trioffset); pTris.Add(3 + trioffset); pTris.Add(2 + trioffset); pTris.Add(1 + trioffset); break; case Cubeside.LEFT: trioffset = pVerts.Count; pVerts.Add(p7); pVerts.Add(p4); pVerts.Add(p0); pVerts.Add(p3); pNormals.Add(World.allNormals[(int)World.NDIR.LEFT]); pNormals.Add(World.allNormals[(int)World.NDIR.LEFT]); pNormals.Add(World.allNormals[(int)World.NDIR.LEFT]); pNormals.Add(World.allNormals[(int)World.NDIR.LEFT]); pUVs.Add(uv11); pUVs.Add(uv01); pUVs.Add(uv00); pUVs.Add(uv10); pTris.Add(3 + trioffset); pTris.Add(1 + trioffset); pTris.Add(0 + trioffset); pTris.Add(3 + trioffset); pTris.Add(2 + trioffset); pTris.Add(1 + trioffset); break; case Cubeside.RIGHT: trioffset = pVerts.Count; pVerts.Add(p5); pVerts.Add(p6); pVerts.Add(p2); pVerts.Add(p1); pNormals.Add(World.allNormals[(int)World.NDIR.RIGHT]); pNormals.Add(World.allNormals[(int)World.NDIR.RIGHT]); pNormals.Add(World.allNormals[(int)World.NDIR.RIGHT]); pNormals.Add(World.allNormals[(int)World.NDIR.RIGHT]); pUVs.Add(uv11); pUVs.Add(uv01); pUVs.Add(uv00); pUVs.Add(uv10); pTris.Add(3 + trioffset); pTris.Add(1 + trioffset); pTris.Add(0 + trioffset); pTris.Add(3 + trioffset); pTris.Add(2 + trioffset); pTris.Add(1 + trioffset); break; case Cubeside.FRONT: trioffset = pVerts.Count; pVerts.Add(p4); pVerts.Add(p5); pVerts.Add(p1); pVerts.Add(p0); pNormals.Add(World.allNormals[(int)World.NDIR.FRONT]); pNormals.Add(World.allNormals[(int)World.NDIR.FRONT]); pNormals.Add(World.allNormals[(int)World.NDIR.FRONT]); pNormals.Add(World.allNormals[(int)World.NDIR.FRONT]); pUVs.Add(uv11); pUVs.Add(uv01); pUVs.Add(uv00); pUVs.Add(uv10); pTris.Add(3 + trioffset); pTris.Add(1 + trioffset); pTris.Add(0 + trioffset); pTris.Add(3 + trioffset); pTris.Add(2 + trioffset); pTris.Add(1 + trioffset); break; case Cubeside.BACK: trioffset = pVerts.Count; pVerts.Add(p6); pVerts.Add(p7); pVerts.Add(p3); pVerts.Add(p2); pNormals.Add(World.allNormals[(int)World.NDIR.BACK]); pNormals.Add(World.allNormals[(int)World.NDIR.BACK]); pNormals.Add(World.allNormals[(int)World.NDIR.BACK]); pNormals.Add(World.allNormals[(int)World.NDIR.BACK]); pUVs.Add(uv11); pUVs.Add(uv01); pUVs.Add(uv00); pUVs.Add(uv10); pTris.Add(3 + trioffset); pTris.Add(1 + trioffset); pTris.Add(0 + trioffset); pTris.Add(3 + trioffset); pTris.Add(2 + trioffset); pTris.Add(1 + trioffset); break; }//END switch } //END CreateQuad
private void CreateQuad(Cubeside side) { // Create a new mesh and give it a name Mesh mesh = new Mesh { name = "CubeMesh" + side.ToString() }; // Declare the needed vectors for the mesh Vector3[] vertices = null, normals = null; // Intitialize the triangles vector int[] triangles = new int[] { 3, 1, 0, 3, 2, 1 }; // Initialize all the possible verticies Vector3 p0 = new Vector3(-0.5f, -0.5f, 0.5f); Vector3 p1 = new Vector3(0.5f, -0.5f, 0.5f); Vector3 p2 = new Vector3(0.5f, -0.5f, -0.5f); Vector3 p3 = new Vector3(-0.5f, -0.5f, -0.5f); Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); // Set the value of the vectors based on the cubeside switch (side) { case Cubeside.BOTTOM: vertices = new Vector3[] { p0, p1, p2, p3 }; normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; break; case Cubeside.TOP: vertices = new Vector3[] { p7, p6, p5, p4 }; normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; break; case Cubeside.LEFT: vertices = new Vector3[] { p7, p4, p0, p3 }; normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; break; case Cubeside.RIGHT: vertices = new Vector3[] { p5, p6, p2, p1 }; normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; break; case Cubeside.FRONT: vertices = new Vector3[] { p4, p5, p1, p0 }; normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; break; case Cubeside.BACK: vertices = new Vector3[] { p6, p7, p3, p2 }; normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; break; } // Save the created vectors in the mesh and recalculate bounding volume mesh.vertices = vertices; mesh.normals = normals; mesh.triangles = triangles; mesh.uv = new Vector2[] { blockUVs[3], blockUVs[2], blockUVs[0], blockUVs[1] };; mesh.RecalculateBounds(); // Create the new GameObject for the Quad GameObject quad = new GameObject("Quad"); // Set the position, parent object quad.transform.position = position; quad.transform.parent = parent.transform; // Add MeshFilter Component to the GameObject MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); meshFilter.mesh = mesh; }