diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/world/physics/Poly.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/world/physics/Poly.kt index 3853bc30..82c7f241 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/world/physics/Poly.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/world/physics/Poly.kt @@ -26,18 +26,26 @@ import kotlin.math.sin private fun calculateEdges(points: List): Pair, ImmutableList> { require(points.size >= 2) { "Provided poly is invalid (only ${points.size} points are defined)" } - val edges = ImmutableList.Builder() - if (points.size == 2) { - // line, to make it one faced, we need to make only one edge + // line... + // while double edged line seems to work fine + // for more stable collision detection lets make it a very thin rectangle + val newPoints = ImmutableList.Builder() val (p0, p1) = points val diff = (p1 - p0).unitVector val normal = Vector2d(-diff.y, diff.x) - edges.add(Poly.Edge(p0, p1, normal)) + newPoints.add(p0 + normal * 0.001) + newPoints.add(p1 + normal * 0.001) + newPoints.add(p1 - normal * 0.001) + newPoints.add(p0 - normal * 0.001) + + return calculateEdges(newPoints.build()) } else { + val edges = ImmutableList.Builder() + for (i in points.indices) { val p0 = points[i] val p1 = points[(i + 1) % points.size] @@ -47,9 +55,9 @@ private fun calculateEdges(points: List): Pair