Files
flame/packages/flame_forge2d/example/lib/mouse_joint_sample.dart
Lukas Klingsbo cf19ec5e4e Migrate flame_forge2d to monorepo (#852)
* Migrate flame_forge2d to monorepo

* Put in the temporary publish to none

* Update docs

* Add dart_code_metrics

* Add analysis options

* Fix analyze issues

* Fix formatting

* Add dart_code_metrics to flame_forge2d example
2021-06-21 22:02:32 +02:00

58 lines
1.5 KiB
Dart

import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_forge2d/forge2d_game.dart';
import 'package:flame/gestures.dart';
import 'package:flame/extensions.dart';
import 'balls.dart';
import 'boundaries.dart';
import 'circle_stress_sample.dart';
class MouseJointSample extends Forge2DGame with MultiTouchDragDetector {
late Ball ball;
late Body groundBody;
MouseJoint? mouseJoint;
MouseJointSample() : super(gravity: Vector2(0, -10.0));
@override
Future<void> onLoad() async {
await super.onLoad();
final boundaries = createBoundaries(this);
boundaries.forEach(add);
final center = screenToWorld(viewport.effectiveSize / 2);
groundBody = world.createBody(BodyDef());
ball = Ball(center, radius: 5);
add(ball);
add(CornerRamp(center));
add(CornerRamp(center, isMirrored: true));
}
@override
bool onDragUpdate(int pointerId, DragUpdateInfo details) {
final mouseJointDef = MouseJointDef()
..maxForce = 3000 * ball.body.mass * 10
..dampingRatio = 0.1
..frequencyHz = 5
..target.setFrom(ball.body.position)
..collideConnected = false
..bodyA = groundBody
..bodyB = ball.body;
mouseJoint ??= world.createJoint(mouseJointDef) as MouseJoint;
mouseJoint?.setTarget(details.eventPosition.game);
return false;
}
@override
bool onDragEnd(int pointerId, DragEndInfo details) {
if (mouseJoint == null) {
return true;
}
world.destroyJoint(mouseJoint!);
mouseJoint = null;
return false;
}
}