feat: moved triangle to centroid

pull/39/head
alestiago 4 years ago
parent d3d8bf8774
commit 8a2475650c

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

Loading…
Cancel
Save