Files
flame/packages/flame_forge2d/example/lib/mouse_joint_sample.dart
Pasha Stetsenko 820950dc39 CameraComponent (#933)
* Viewport and combinedProjector now belong to Camera

* cleanup

* format

* fix analysis issues

* Property viewport removed from BaseGame

* Move camera & viewport into a separate directory

* added CameraComponent

* format

* .camera as computed property

* changelog note

* format

* format

* comment

* CameraComponent is no longer a Component

* Rename CameraComponent -> CameraCo

* format

* Rename CameraC -> CameraWrapper

* minor

* rename BaseGame._cameraComponent -> ._cameraWrapper

* minor fixes in response to reviewer suggestions

* Fix rendering of a ParallaxComponent

Co-authored-by: Lukas Klingsbo <lukas.klingsbo@gmail.com>
2021-09-13 16:46:44 +02:00

58 lines
1.5 KiB
Dart

import 'package:flame/extensions.dart';
import 'package:flame/input.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_forge2d/forge2d_game.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(camera.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;
}
}