예제 #1
0
 private static Gem.Geo.Mesh CreateNormalBlockMesh(TileSheet Tiles, BlockTemplate Template)
 {
     var mesh = Gem.Geo.Gen.Copy(ShapeTemplates[Template.Shape].Mesh);
     MorphBlockTextureCoordinates(Tiles, Template, mesh);
     return mesh;
 }
예제 #2
0
        private static void MorphBlockTextureCoordinates(TileSheet Tiles, BlockTemplate Template, Gem.Geo.Mesh cube)
        {
            Gem.Geo.Gen.MorphEx(cube, (inV) =>
            {
                var r = inV;

                var top = Template.Top;
                var bottom = Template.Bottom == -1 ? Template.Top : Template.Bottom;
                var sideA = Template.SideA == -1 ? Template.Top : Template.SideA;
                var sideB = Template.SideB == -1 ? sideA : Template.SideB;

                if (r.Normal.Z > 0.1f)
                    r.TextureCoordinate = Vector2.Transform(r.TextureCoordinate,
                        Tiles.TileMatrix(bottom));
                else if (r.Normal.Z < -0.1f)
                    r.TextureCoordinate = Vector2.Transform(r.TextureCoordinate,
                        Tiles.TileMatrix(top));
                else
                {

                    if (r.Normal.X != 0)
                        r.TextureCoordinate = Vector2.Transform(r.TextureCoordinate, Tiles.TileMatrix(sideA));
                    else
                        r.TextureCoordinate = Vector2.Transform(r.TextureCoordinate, Tiles.TileMatrix(sideB));
                }

                return r;
            });
        }
예제 #3
0
 public static Gem.Geo.Mesh CreateResourceBlockMesh(TileSheet Tiles, BlockTemplate Template)
 {
     var mesh = CreateNormalBlockMesh(Tiles, Template);
     Gem.Geo.Gen.Transform(mesh, Matrix.CreateScale(0.5f));
     return mesh;
 }