refactor: implemented unlock method

pull/15/head
alestiago 4 years ago
parent bccce10cdb
commit d8c9530419

@ -187,4 +187,28 @@ class FlipperAnchorRevoluteJointDef extends RevoluteJointDef {
/// The total angle of the arc motion.
static const _sweepingAngle = math.pi / 7;
/// Unlocks the [Flipper] from its resting position.
///
/// The [Flipper] is locked when initialized in order to force it to be at
/// its resting position.
// TODO(alestiago): consider refactor once the issue is solved:
// https://github.com/flame-engine/forge2d/issues/36
static void unlock(RevoluteJoint joint) {
assert(joint.bodyA is Flipper && joint.bodyB is Anchor, 'Invalid joint.');
final flipper = joint.bodyA as Flipper;
late final double upperLimit, lowerLimit;
switch (flipper.side) {
case BoardSide.left:
lowerLimit = joint.lowerLimit * -1;
upperLimit = joint.upperLimit;
break;
case BoardSide.right:
lowerLimit = joint.lowerLimit;
upperLimit = joint.upperLimit * -1;
}
joint.setLimits(lowerLimit, upperLimit);
}
}

@ -82,14 +82,8 @@ class PinballGame extends Forge2DGame with FlameBloc, KeyboardEvents {
await _leftFlipper.hasMounted.future;
await _rightFlipper.hasMounted.future;
_leftFlipperRevoluteJoint.setLimits(
_leftFlipperRevoluteJoint.lowerLimit * -1,
_leftFlipperRevoluteJoint.upperLimit,
);
_rightFlipperRevoluteJoint.setLimits(
_rightFlipperRevoluteJoint.lowerLimit,
_rightFlipperRevoluteJoint.upperLimit * -1,
);
FlipperAnchorRevoluteJointDef.unlock(_leftFlipperRevoluteJoint);
FlipperAnchorRevoluteJointDef.unlock(_rightFlipperRevoluteJoint);
}
@override

Loading…
Cancel
Save