Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }
Example #4
0
        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);
    }
Example #6
0
    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;
    }
Example #8
0
    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));
    }
Example #9
0
    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;
    }
Example #10
0
    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);
    }
Example #11
0
    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();
    }
Example #12
0
    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;
    }
Example #13
0
    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);
    }
Example #14
0
    /// <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;
    }
Example #15
0
    /// <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;
    }
Example #16
0
    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;
    }
Example #17
0
    }    //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
Example #18
0
    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;
    }