public IEnumerable <MonoBehaviour> SetReferencedData(PrimitiveData primitiveData, Table table, IMaterialProvider materialProvider, ITextureProvider textureProvider) { var mf = GetComponent <MeshFilter>(); var playfieldMeshComponent = GetComponent <PlayfieldMeshComponent>(); if (!mf || !playfieldMeshComponent) { return(Array.Empty <MonoBehaviour>()); } var updatedComponents = new List <MonoBehaviour> { this }; var mg = new PrimitiveMeshGenerator(primitiveData); var mesh = mg .GetTransformedMesh(table?.TableHeight ?? 0f, primitiveData.Mesh, Origin.Original, false) .Transform(mg.TransformationMatrix(PlayfieldHeight)); // apply transformation to mesh, because this is the playfield var material = new PbrMaterial( table.GetMaterial(_playfieldMaterial), table.GetTexture(_playfieldImage) ); MeshComponent <PrimitiveData, PrimitiveComponent> .CreateMesh(gameObject, mesh, material, "playfield_mesh", textureProvider, materialProvider); playfieldMeshComponent.AutoGenerate = false; updatedComponents.Add(playfieldMeshComponent); return(updatedComponents); }
private static void AddCylinder(Entity entity, GraphicsDevice device, Material material, MaterialTexture materialTexture) { entity.Set(new Transform()); entity.Set(material); entity.Set(materialTexture); var cylinder = PrimitiveMeshGenerator.GenerateCapsule(1, 0.3f); var mesh = new RenderableMeshGeometry() { Vertices = new ResizableBuffer <VertexPositionTextureNormal>(device, VertexPositionTextureNormal.SizeInBytes, BufferUsage.VertexBuffer, cylinder .Select(v => new VertexPositionTextureNormal(v.Vertex, new Vector2(20, 20), v.Normal)) .ToArray()), Indices = new ResizableBuffer <ushort>(device, sizeof(ushort), BufferUsage.IndexBuffer, cylinder.Select((v, i) => (ushort)i).ToArray()), TransparentIndices = new ResizableBuffer <ushort>(device, sizeof(ushort), BufferUsage.IndexBuffer), BoundingRadius = 0 }; entity.Set(mesh); }