diff --git a/OpenKh.Command.MapGen/Utils/FlattenCollisionBuilder.cs b/OpenKh.Command.MapGen/Utils/FlattenCollisionBuilder.cs index 42a0f5b19..a3d6a1ffa 100644 --- a/OpenKh.Command.MapGen/Utils/FlattenCollisionBuilder.cs +++ b/OpenKh.Command.MapGen/Utils/FlattenCollisionBuilder.cs @@ -56,7 +56,7 @@ Func getAttributeFrom var v3 = face.positionList[2]; var v4 = quad ? face.positionList[3] : Vector3.Zero; - collisionMesh.Collisions.Add(coct.Complete( + var collision = coct.Complete( new Collision { Vertex1 = helper.AllocateVertex(v1.X, -v1.Y, -v1.Z), // why -Y and -Z ? @@ -68,7 +68,16 @@ Func getAttributeFrom FloorLevel = face.matDef.floorLevel, }, inflate: 1 - )); + ); + + if (float.IsNaN(collision.Plane.D)) + { + // 3 points are on the same line (not a plane) + } + else + { + collisionMesh.Collisions.Add(collision); + } } if (collisionMesh.Collisions.Any()) diff --git a/OpenKh.Command.MapGen/Utils/HierarchicalCollisionBuilder.cs b/OpenKh.Command.MapGen/Utils/HierarchicalCollisionBuilder.cs index f950beb6b..02feadcbc 100644 --- a/OpenKh.Command.MapGen/Utils/HierarchicalCollisionBuilder.cs +++ b/OpenKh.Command.MapGen/Utils/HierarchicalCollisionBuilder.cs @@ -70,7 +70,7 @@ private WalkResult WalkTree(Node walkNode, BuildHelper helper) var v3 = face.positionList[2]; var v4 = quad ? face.positionList[3] : Vector3.Zero; - collisionMesh.Collisions.Add(coct.Complete( + var collision = coct.Complete( new Collision { Vertex1 = helper.AllocateVertex(v1.X, -v1.Y, -v1.Z), // why -Y and -Z ? @@ -82,7 +82,16 @@ private WalkResult WalkTree(Node walkNode, BuildHelper helper) FloorLevel = face.matDef.floorLevel, }, inflate: 1 - )); + ); + + if (float.IsNaN(collision.Plane.D)) + { + // 3 points are on the same line (not a plane) + } + else + { + collisionMesh.Collisions.Add(collision); + } } coct.Complete(collisionMesh);