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; }
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; }); }
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; }