Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }