public RenderObject GetRenderObject(Table.Table table, string id, bool asRightHanded, Mesh preGeneratedMesh = null)
        {
            var mesh = preGeneratedMesh ?? GenerateMesh(table, id);

            switch (id)
            {
            case Side:
                return(new RenderObject(
                           id,
                           asRightHanded ? mesh.Transform(Matrix3D.RightHanded) : mesh,
                           new PbrMaterial(table.GetMaterial(_data.SideMaterial), table.GetTexture(_data.SideImage)),
                           _data.IsSideVisible
                           ));

            case Top:
                return(new RenderObject(
                           id,
                           asRightHanded ? mesh.Transform(Matrix3D.RightHanded) : mesh,
                           new PbrMaterial(table.GetMaterial(_data.TopMaterial), table.GetTexture(_data.Image)),
                           _data.IsTopBottomVisible
                           ));

            default:
                throw new ArgumentException($"Unknown mesh ID \"{id}\".");
            }
        }
        public RenderObject GetRenderObject(Table.Table table, string id, Origin origin, bool asRightHanded)
        {
            var(preMatrix, _) = GetPreMatrix(table, origin, asRightHanded);
            switch (id)
            {
            case Plate:
                return(new RenderObject(
                           id,
                           SpinnerPlateMesh.Clone().Transform(preMatrix),
                           new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                           _data.IsVisible
                           ));

            case Bracket:
                return(new RenderObject(
                           id,
                           SpinnerBracketMesh.Clone().Transform(preMatrix),
                           new PbrMaterial(GetBracketMaterial(), table.GetTexture(_data.Image)),
                           _data.IsVisible && _data.ShowBracket
                           ));

            default:
                throw new ArgumentException("Unknown spinner mesh \"" + id + "\".");
            }
        }
Ejemplo n.º 3
0
 public PbrMaterial GetMaterial(Table.Table table)
 {
     return(new PbrMaterial(
                table.GetMaterial(_data.Material),
                table.GetTexture(_data.Image),
                table.GetTexture(_data.NormalMap)
                ));
 }
        public PbrMaterial GetMaterial(string id, Table.Table table, SurfaceData data)
        {
            switch (id)
            {
            case Top:
                return(new PbrMaterial(table.GetMaterial(data.TopMaterial), table.GetTexture(data.Image)));

            case Side:
                return(new PbrMaterial(table.GetMaterial(data.SideMaterial), table.GetTexture(data.SideImage)));
            }
            throw new ArgumentException($"Unknown mesh ID \"{id}\".");
        }
Ejemplo n.º 5
0
        public PbrMaterial GetMaterial(string id, Table.Table table)
        {
            switch (id)
            {
            case Plate:
                return(new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)));

            case Bracket:
                return(new PbrMaterial(GetBracketMaterial(), table.GetTexture(_data.Image)));
            }
            throw new ArgumentException($"Invalid spinner mesh ID \"{id}\"");
        }
Ejemplo n.º 6
0
 public RenderObject GetRenderObject(Table.Table table, Origin origin, bool asRightHanded)
 {
     return(new RenderObject(
                _data.Name,
                GetTransformedMesh(table, origin, asRightHanded),
                new PbrMaterial(
                    table.GetMaterial(_data.Material),
                    table.GetTexture(_data.Image),
                    table.GetTexture(_data.NormalMap)
                    ),
                _data.IsVisible
                ));
 }
        public RenderObjectGroup GetRenderObjects(Table.Table table, Origin origin, bool asRightHanded = true)
        {
            var meshes = GenerateMeshes(table);

            var(preVertexMatrix, preNormalsMatrix) = GetPreMatrix(table, origin, asRightHanded);
            var postMatrix    = GetPostMatrix(table, origin);
            var renderObjects = new List <RenderObject> {
                new RenderObject(
                    Base,
                    meshes[Base].Transform(preVertexMatrix, preNormalsMatrix),
                    new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                    _data.IsVisible
                    )
            };

            if (meshes.ContainsKey(Rubber))
            {
                renderObjects.Add(new RenderObject(
                                      Rubber,
                                      meshes[Rubber].Transform(preVertexMatrix, preNormalsMatrix),
                                      new PbrMaterial(table.GetMaterial(_data.RubberMaterial)),
                                      _data.IsVisible
                                      ));
            }

            return(new RenderObjectGroup(_data.Name, "Flippers", postMatrix, renderObjects.ToArray()));
        }
        public RenderObject GetRenderObject(Table.Table table, string id, Origin origin, bool asRightHanded)
        {
            var meshes = GenerateMeshes(table);

            var(preVertexMatrix, preNormalsMatrix) = GetPreMatrix(table, origin, asRightHanded);
            switch (id)
            {
            case Base:
                return(new RenderObject(
                           id,
                           meshes[Base].Transform(preVertexMatrix, preNormalsMatrix),
                           new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                           _data.IsVisible
                           ));

            case Rubber:
                if (meshes.ContainsKey(Rubber))
                {
                    return(new RenderObject(
                               id,
                               meshes[Rubber].Transform(preVertexMatrix, preNormalsMatrix),
                               new PbrMaterial(table.GetMaterial(_data.RubberMaterial)),
                               _data.IsVisible
                               ));
                }
                break;
            }
            return(null);
        }
Ejemplo n.º 9
0
        public RenderObjectGroup GetRenderObjects(Table.Table table, Origin origin, bool asRightHanded = true,
                                                  string parent = null, PbrMaterial material = null)
        {
            var postMatrix = GetPostMatrix(table, origin);

            return(new RenderObjectGroup(_data.Name, parent ?? "Primitives", postMatrix, new RenderObject(
                                             _data.Name,
                                             GetTransformedMesh(table, origin, asRightHanded),
                                             material ?? new PbrMaterial(
                                                 table.GetMaterial(_data.Material),
                                                 table.GetTexture(_data.Image),
                                                 table.GetTexture(_data.NormalMap)
                                                 ),
                                             _data.IsVisible
                                             )));
        }
 private RenderObject GetRenderObject(Table.Table table, IReadOnlyDictionary <string, Mesh> meshes, string name, bool asRightHanded)
 {
     return(new RenderObject(
                name,
                asRightHanded ? meshes[name].Transform(Matrix3D.RightHanded) : meshes[name],
                new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                _data.IsVisible
                ));
 }
        public RenderObject GetRenderObject(Table.Table table, string id, Origin origin, bool asRightHanded)
        {
            var mesh = new Mesh();

            if (id == Wires)
            {
                var meshes = GenerateWireMeshes(table);

                for (var i = 1; i <= 4; i++)
                {
                    var name = $"Wire{i}";
                    if (meshes.ContainsKey(name))
                    {
                        mesh.Merge(meshes[name]);
                    }
                }
            }
            else
            {
                var rv = GetRampVertex(table, -1, true);
                switch (id)
                {
                case Floor:
                    mesh = GenerateFlatFloorMesh(table, rv);
                    break;

                case Wall:
                    if (_data.RightWallHeightVisible > 0.0)
                    {
                        mesh = mesh.Merge(GenerateFlatRightWall(table, rv));
                    }

                    if (_data.LeftWallHeightVisible > 0.0)
                    {
                        mesh = mesh.Merge(GenerateFlatLeftWall(table, rv));
                    }
                    break;
                }

                if (mesh.Vertices == null)
                {
                    mesh.Vertices = new Vertex3DNoTex2[0];
                    mesh.Indices  = new int[0];
                }
            }

            return(new RenderObject(
                       id,
                       asRightHanded ? mesh.Transform(Matrix3D.RightHanded) : mesh,
                       new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                       _data.IsVisible
                       ));
        }
        public static PbrMaterial GetMaterial(string id, Table.Table table, FlipperData data)
        {
            switch (id)
            {
            case Base:
                return(new PbrMaterial(table.GetMaterial(data.Material), table.GetTexture(data.Image)));

            case Rubber:
                return(new PbrMaterial(table.GetMaterial(data.RubberMaterial)));
            }
            throw new ArgumentException($"Unknown flipper ID \"{id}\".", nameof(id));
        }
Ejemplo n.º 13
0
        public RenderObject GetRenderObject(Table.Table table, Origin origin, bool asRightHanded)
        {
            var mesh = GetMesh(table);

            var(preVertexMatrix, preNormalsMatrix) = GetPreMatrix(table, origin, asRightHanded);
            return(new RenderObject(
                       _data.Name,
                       mesh.Transform(preVertexMatrix, preNormalsMatrix),
                       new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                       _data.IsVisible
                       ));
        }
Ejemplo n.º 14
0
        public RenderObjectGroup GetRenderObjects(Table.Table table, Origin origin, bool asRightHanded)
        {
            var(preMatrix, _) = GetPreMatrix(table, origin, asRightHanded);
            var postMatrix = GetPostMatrix(table, origin);

            return(new RenderObjectGroup(_data.Name, "Spinners", postMatrix, new RenderObject(
                                             "Plate",
                                             SpinnerPlateMesh.Clone().Transform(preMatrix),
                                             new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                                             _data.IsVisible
                                             ),
                                         new RenderObject(
                                             "Bracket",
                                             SpinnerBracketMesh.Clone().Transform(preMatrix),
                                             new PbrMaterial(GetBracketMaterial(), table.GetTexture(_data.Image)),
                                             _data.IsVisible && _data.ShowBracket
                                             )
                                         ));
        }
Ejemplo n.º 15
0
        public RenderObject GetRenderObject(int frame, Table.Table table, string id, Origin origin, bool asRightHanded)
        {
            Init(table);
            var material = new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image));

            switch (id)
            {
            case Flat:
                var flatMesh = BuildFlatMesh(frame);
                return(new RenderObject(
                           id,
                           asRightHanded ? flatMesh.Transform(Matrix3D.RightHanded) : flatMesh,
                           material,
                           true
                           ));

            case Rod:
                CalculateArraySizes();
                var rodMesh = BuildRodMesh(frame);
                return(new RenderObject(
                           id,
                           asRightHanded ? rodMesh.Transform(Matrix3D.RightHanded) : rodMesh,
                           material,
                           true
                           ));

            case Spring:
                CalculateArraySizes();
                var springMesh = BuildSpringMesh(frame);
                return(new RenderObject(
                           id,
                           asRightHanded ? springMesh.Transform(Matrix3D.RightHanded) : springMesh,
                           material,
                           true
                           ));

            default:
                throw new ArgumentException("Unknown plunger mesh \"" + id + "\".");
            }
        }
Ejemplo n.º 16
0
 public PbrMaterial GetMaterial(Table.Table table, MetalWireGuideData metalWireGuideData)
 {
     return(new PbrMaterial(table.GetMaterial(metalWireGuideData.Material), table.GetTexture(metalWireGuideData.Image)));
 }
 public PbrMaterial GetMaterial()
 {
     return(new PbrMaterial(_table.GetMaterial(_data.Material), _table.GetTexture(_data.Image)));
 }
Ejemplo n.º 18
0
        public RenderObjectGroup GetRenderObjects(Table.Table table, bool asRightHanded = true)
        {
            var meshes        = GenerateMeshes(table);
            var renderObjects = new List <RenderObject>();

            if (meshes.ContainsKey("Side"))
            {
                renderObjects.Add(new RenderObject(
                                      "Side",
                                      asRightHanded ? meshes["Side"].Transform(Matrix3D.RightHanded) : meshes["Side"],
                                      new PbrMaterial(table.GetMaterial(_data.SideMaterial), table.GetTexture(_data.SideImage)),
                                      _data.IsSideVisible
                                      ));
            }

            if (meshes.ContainsKey("Top"))
            {
                renderObjects.Add(new RenderObject(
                                      "Top",
                                      asRightHanded ? meshes["Top"].Transform(Matrix3D.RightHanded) : meshes["Top"],
                                      new PbrMaterial(table.GetMaterial(_data.TopMaterial), table.GetTexture(_data.Image)),
                                      _data.IsTopBottomVisible
                                      ));
            }

            return(new RenderObjectGroup(_data.Name, "Surfaces", Matrix3D.Identity, renderObjects.ToArray()));
        }
 public PbrMaterial GetMaterial(Table.Table table, RubberData rubberData)
 {
     return(new PbrMaterial(table.GetMaterial(rubberData.Material), table.GetTexture(rubberData.Image)));
 }
Ejemplo n.º 20
0
        public RenderObjectGroup GetRenderObjects(int frame, Table.Table table, Origin origin, bool asRightHanded = true)
        {
            Init(table);

            // todo
            var translationMatrix = Matrix3D.Identity;
            var material          = new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image));

            // flat plunger
            if (_data.Type == PlungerType.PlungerTypeFlat)
            {
                var flatMesh = BuildFlatMesh(frame);
                return(new RenderObjectGroup(_data.Name, "Plungers", translationMatrix,
                                             new RenderObject(
                                                 FlatName,
                                                 asRightHanded ? flatMesh.Transform(Matrix3D.RightHanded) : flatMesh,
                                                 material,
                                                 true
                                                 )
                                             )
                {
                    ForceChild = true
                });
            }

            CalculateArraySizes();
            var rodMesh = BuildRodMesh(frame);

            // custom plunger
            if (_data.Type == PlungerType.PlungerTypeCustom)
            {
                var springMesh = BuildSpringMesh(frame);

                return(new RenderObjectGroup(_data.Name, "Plungers", translationMatrix,
                                             new RenderObject(
                                                 RodName,
                                                 asRightHanded ? rodMesh.Transform(Matrix3D.RightHanded) : rodMesh,
                                                 material,
                                                 true
                                                 ),
                                             new RenderObject(
                                                 SpringName,
                                                 asRightHanded ? springMesh.Transform(Matrix3D.RightHanded) : springMesh,
                                                 material,
                                                 true
                                                 )
                                             ));
            }

            // modern plunger
            return(new RenderObjectGroup(_data.Name, "Plungers", translationMatrix,
                                         new RenderObject(
                                             RodName,
                                             asRightHanded ? rodMesh.Transform(Matrix3D.RightHanded) : rodMesh,
                                             material,
                                             true
                                             )
                                         )
            {
                ForceChild = true
            });
        }
        public RenderObjectGroup GetRenderObjects(Table.Table table, Origin origin, bool asRightHanded)
        {
            var mesh = GetBaseMesh();

            var(preMatrix, _) = GetPreMatrix(table, origin, asRightHanded);
            var postMatrix = GetPostMatrix(table, origin);

            return(new RenderObjectGroup(_data.Name, "HitTargets", postMatrix, new RenderObject(
                                             _data.Name,
                                             mesh.Transform(preMatrix),
                                             new PbrMaterial(table.GetMaterial(_data.Material), table.GetTexture(_data.Image)),
                                             _data.IsVisible
                                             )));
        }