public void ConvertCollisionToRender(ResourceTypes.ItemDesc.CollisionConvex convex)
        {
            DoRender    = true;
            BoundingBox = new BoundingBox(new Vector3(-0.5f), new Vector3(0.5f));

            Indices   = convex.indices;
            Vertices  = new VertexLayouts.CollisionLayout.Vertex[convex.vertices.Length];
            materials = new CollisionMaterials[convex.vertices.Length];
            for (int i = 0; i != convex.vertices.Length; i++)
            {
                VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex();
                vertex.Position = convex.vertices[i];
                vertex.Normal   = new Vector3(0.0f);
                vertex.Colour   = SelectionColour.ToArgb();
                Vertices[i]     = vertex;
            }
            CalculateNormals();
        }
        public void ConvertCollisionToRender(TriangleMesh triangleMesh)
        {
            DoRender    = true;
            BoundingBox = triangleMesh.BoundingBox;

            Indices   = triangleMesh.Triangles.SelectMany(t => new[] { t.v0, t.v1, t.v2 }).ToArray();
            Vertices  = new VertexLayouts.CollisionLayout.Vertex[triangleMesh.Vertices.Count];
            materials = triangleMesh.MaterialIndices.Select(m => (CollisionMaterials)m).ToArray();
            for (int i = 0; i != triangleMesh.Vertices.Count; i++)
            {
                VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex();
                vertex.Position = triangleMesh.Vertices[i];
                vertex.Normal   = new Vector3(0.0f);
                vertex.Colour   = SelectionColour.ToArgb();
                Vertices[i]     = vertex;
            }

            int materialIDX = 0;

            for (int i = 0; i != triangleMesh.Triangles.Count; i++)
            {
                int currentColour = Color.White.ToArgb();
                switch (materials[materialIDX])
                {
                case CollisionMaterials.GrassAndSnow:
                    currentColour = Color.FromArgb(255, 0, 102, 0).ToArgb();
                    Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour;
                    break;

                case CollisionMaterials.Water:
                    currentColour = Color.FromArgb(255, 77, 204, 255).ToArgb();
                    Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour;
                    break;

                case CollisionMaterials.Gravel:
                case CollisionMaterials.Tarmac:
                case CollisionMaterials.Sidewalk:
                case CollisionMaterials.SidewalkEdge:
                    currentColour = Color.FromArgb(255, 128, 128, 128).ToArgb();
                    Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour;
                    break;

                case CollisionMaterials.Mud:
                    currentColour = Color.FromArgb(255, 102, 51, 0).ToArgb();
                    Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour;
                    break;

                case CollisionMaterials.PlayerCollision:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour;
                    break;

                default:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v1].Colour = currentColour;
                    Vertices[triangleMesh.Triangles[i].v2].Colour = currentColour;
                    break;
                }
                materialIDX++;
            }
            CalculateNormals();
        }
        public void ConvertCollisionToRender(TriangleMesh triangleMesh)
        {
            DoRender    = true;
            BoundingBox = new RenderBoundingBox();
            BoundingBox.Init(triangleMesh.BoundingBox);
            BoundingBox.DoRender = false;

            Indices   = triangleMesh.Triangles.SelectMany(t => new[] { t.v0, t.v1, t.v2 }).ToArray();
            Vertices  = new VertexLayouts.CollisionLayout.Vertex[triangleMesh.Vertices.Count];
            materials = triangleMesh.MaterialIndices.Select(m => (CollisionMaterials)m).ToArray();
            for (int i = 0; i != triangleMesh.Vertices.Count; i++)
            {
                VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex();
                vertex.Position = triangleMesh.Vertices[i];
                vertex.Normal   = new Vector3(0.0f);
                vertex.Colour   = new Vector4(1.0f);
                Vertices[i]     = vertex;
            }

            int materialIDX = 0;

            for (int i = 0; i != triangleMesh.Triangles.Count; i++)
            {
                switch (materials[materialIDX])
                {
                case CollisionMaterials.GrassAndSnow:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0, 0.4f, 0, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0, 0.4f, 0, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0, 0.4f, 0, 1.0f);
                    break;

                case CollisionMaterials.Water:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f);
                    break;

                case CollisionMaterials.Gravel:
                case CollisionMaterials.Tarmac:
                case CollisionMaterials.Sidewalk:
                case CollisionMaterials.SidewalkEdge:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    break;

                case CollisionMaterials.Mud:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f);
                    break;

                case CollisionMaterials.PlayerCollision:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
                    Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
                    break;

                default:
                    Vertices[triangleMesh.Triangles[i].v0].Colour = new Vector4(1.0f);
                    Vertices[triangleMesh.Triangles[i].v1].Colour = new Vector4(1.0f);
                    Vertices[triangleMesh.Triangles[i].v2].Colour = new Vector4(1.0f);
                    break;
                }
                materialIDX++;
            }
            CalculateNormals();
        }
Exemplo n.º 4
0
        public void ConvertCollisionToRender(MeshData data)
        {
            DoRender    = true;
            BoundingBox = new RenderBoundingBox();
            BoundingBox.Init(data.BoundingBox);
            BoundingBox.DoRender = false;

            Indices   = data.Indices;
            Vertices  = new VertexLayouts.CollisionLayout.Vertex[data.Vertices.Length];
            materials = data.Materials;
            for (int i = 0; i != data.Vertices.Length; i++)
            {
                VertexLayouts.CollisionLayout.Vertex vertex = new VertexLayouts.CollisionLayout.Vertex();
                vertex.Position = data.Vertices[i];
                vertex.Normal   = new Vector3(0.0f);
                vertex.Colour   = new Vector4(1.0f);
                Vertices[i]     = vertex;
            }

            int materialIDX = 0;

            for (int i = 0; i != data.Indices.Length; i += 3)
            {
                switch (materials[materialIDX])
                {
                case CollisionMaterials.GrassAndSnow:
                    Vertices[data.Indices[i]].Colour     = new Vector4(0, 0.4f, 0, 1.0f);
                    Vertices[data.Indices[i + 1]].Colour = new Vector4(0, 0.4f, 0, 1.0f);
                    Vertices[data.Indices[i + 2]].Colour = new Vector4(0, 0.4f, 0, 1.0f);
                    break;

                case CollisionMaterials.Water:
                    Vertices[data.Indices[i]].Colour     = new Vector4(0, 0.3f, 0.8f, 1.0f);
                    Vertices[data.Indices[i + 1]].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f);
                    Vertices[data.Indices[i + 2]].Colour = new Vector4(0, 0.3f, 0.8f, 1.0f);
                    break;

                case CollisionMaterials.Gravel:
                case CollisionMaterials.Tarmac:
                case CollisionMaterials.Sidewalk:
                case CollisionMaterials.SidewalkEdge:
                    Vertices[data.Indices[i]].Colour     = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    Vertices[data.Indices[i + 1]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    Vertices[data.Indices[i + 2]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    break;

                case CollisionMaterials.Mud:
                    Vertices[data.Indices[i]].Colour     = new Vector4(0.4f, 0.2f, 0.0f, 1.0f);
                    Vertices[data.Indices[i + 1]].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f);
                    Vertices[data.Indices[i + 2]].Colour = new Vector4(0.4f, 0.2f, 0.0f, 1.0f);
                    break;

                case CollisionMaterials.PlayerCollision:
                    Vertices[data.Indices[i]].Colour     = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
                    Vertices[data.Indices[i + 1]].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
                    Vertices[data.Indices[i + 2]].Colour = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
                    break;

                default:
                    Vertices[data.Indices[i]].Colour     = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    Vertices[data.Indices[i + 1]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    Vertices[data.Indices[i + 2]].Colour = new Vector4(0.5f, 0.5f, 0.5f, 1.0f);
                    break;
                }
                materialIDX++;
            }
            CalculateNormals();
        }