diff --git a/lib/game/components/sling_shot.dart b/lib/game/components/sling_shot.dart index 988d7c08..36a25ae9 100644 --- a/lib/game/components/sling_shot.dart +++ b/lib/game/components/sling_shot.dart @@ -24,12 +24,19 @@ class SlingShot extends BodyComponent { List _createFixtureDefs() { final fixtures = []; + // TODO(alestiago): use size from [PositionBodyComponent]. + final size = Vector2(10, 10); final triangleVertices = [ Vector2(0, 0), - Vector2(0, -10), - Vector2(10, -10), + Vector2(0, -size.y), + Vector2(size.x, -size.y), ]; + final triangleCentroid = centroid(triangleVertices); + for (final vertex in triangleVertices) { + vertex.setFrom(vertex - triangleCentroid); + } + final triangle = PolygonShape()..set(triangleVertices); fixtures.add(FixtureDef(triangle)); @@ -44,10 +51,19 @@ class SlingShot extends BodyComponent { return fixtures; } + /// https://en.wikipedia.org/wiki/Centroid + // TODO(alestiago): use from geometry package. + static Vector2 centroid(List vertices) { + final centroid = Vector2.zero(); + for (final vertex in vertices) { + centroid.add(vertex); + } + return centroid / vertices.length.toDouble(); + } + @override Body createBody() { final bodyDef = BodyDef()..position = _position; - final body = world.createBody(bodyDef); _createFixtureDefs().forEach(body.createFixture);