public PbrMaterial GetMaterial(Table table) { return(new PbrMaterial(table.GetMaterial(_data.PlayfieldMaterial), table.GetTexture(_data.Image)) { MaterialType = MaterialType.Standard }); }
public RenderObjectGroup GetRenderObjects(Table table, Origin origin, bool asRightHanded = true) { var material = new PbrMaterial(table.GetMaterial(_data.PlayfieldMaterial), table.GetTexture(_data.Image)); return(HasMeshAsPlayfield ? _playfield.GetRenderObjects(table, origin, asRightHanded, "Table", material) : new RenderObjectGroup(_data.Name, "Table", Matrix3D.Identity, GetFromTableDimensions(asRightHanded, material))); }
private RenderObject GetFromTableDimensions(Table table, bool asRightHanded) { var rgv = new[] { new Vertex3DNoTex2(_data.Left, _data.Top, _data.TableHeight), new Vertex3DNoTex2(_data.Right, _data.Top, _data.TableHeight), new Vertex3DNoTex2(_data.Right, _data.Bottom, _data.TableHeight), new Vertex3DNoTex2(_data.Left, _data.Bottom, _data.TableHeight), }; var mesh = new Mesh { Name = _data.Name, Vertices = rgv.Select(r => new Vertex3DNoTex2()).ToArray(), Indices = new [] { 0, 1, 3, 0, 3, 2 } }; for (var i = 0; i < 4; ++i) { rgv[i].Nx = 0; rgv[i].Ny = 0; rgv[i].Nz = 1.0f; rgv[i].Tv = (i & 2) > 0 ? 1.0f : 0.0f; rgv[i].Tu = (i == 1 || i == 2) ? 1.0f : 0.0f; } var offs = 0; for (var y = 0; y <= 1; ++y) { for (var x = 0; x <= 1; ++x, ++offs) { mesh.Vertices[offs].X = (x & 1) > 0 ? rgv[1].X : rgv[0].X; mesh.Vertices[offs].Y = (y & 1) > 0 ? rgv[2].Y : rgv[0].Y; mesh.Vertices[offs].Z = rgv[0].Z; mesh.Vertices[offs].Tu = (x & 1) > 0 ? rgv[1].Tu : rgv[0].Tu; mesh.Vertices[offs].Tv = (y & 1) > 0 ? rgv[2].Tv : rgv[0].Tv; mesh.Vertices[offs].Nx = rgv[0].Nx; mesh.Vertices[offs].Ny = rgv[0].Ny; mesh.Vertices[offs].Nz = rgv[0].Nz; } } return(new RenderObject( _data.Name, asRightHanded ? mesh.Transform(Matrix3D.RightHanded) : mesh, new PbrMaterial(table.GetMaterial(_data.PlayfieldMaterial), table.GetTexture(_data.Image)), true )); }
public RenderObject GetRenderObject(bool asRightHanded = true) { var material = new PbrMaterial(_table.GetMaterial(_data.PlayfieldMaterial), _table.GetTexture(_data.Image)); return(GetFromTableDimensions(asRightHanded, material)); }
private void WriteGameItems(HashWriter hashWriter) { // again, the order is important, because we're hashing at the same time. // 1. game data _table.Data.WriteData(_gameStorage, hashWriter); // 2. game items foreach (var writeable in _table.ItemDatas.OrderBy(gi => gi.StorageIndex)) { #if !WRITE_VP106 // clean material and texture references CleanInvalidReferences <MaterialReferenceAttribute, Material>(writeable, v => _table.GetMaterial(v)); CleanInvalidReferences <TextureReferenceAttribute, Texture>(writeable, v => _table.GetTexture(v)); #endif writeable.WriteData(_gameStorage); } // 3. Collections var collections = _table.Collections.Values; foreach (var collection in collections.Select(c => c.Data).OrderBy(c => c.StorageIndex)) { collection.WriteData(_gameStorage, hashWriter); } // 5. Mappings #if !WRITE_VP106 && !WRITE_VP107 _table.Mappings.Data.WriteData(_gameStorage); #endif }