feat: made Flippers movable

pull/123/head
alestiago 4 years ago
parent e5c3708952
commit 0927a4ab97

@ -1,21 +1,35 @@
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame/input.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart';
class BasicFlipperGame extends BasicGame {
class BasicFlipperGame extends BasicGame with KeyboardEvents {
static const info = '''
Basic example of how a Flipper works.
''';
static final _leftFlipperKeys = {
LogicalKeyboardKey.arrowLeft,
LogicalKeyboardKey.keyA,
};
static final _rightFlipperKeys = {
LogicalKeyboardKey.arrowRight,
};
late Flipper leftFlipper;
late Flipper rightFlipper;
@override
Future<void> onLoad() async {
await super.onLoad();
final center = screenToWorld(camera.viewport.canvasSize! / 2);
final leftFlipper = Flipper(side: BoardSide.left)
leftFlipper = Flipper(side: BoardSide.left)
..initialPosition = center - Vector2(Flipper.size.x, 0);
final rightFlipper = Flipper(side: BoardSide.right)
rightFlipper = Flipper(side: BoardSide.right)
..initialPosition = center + Vector2(Flipper.size.x, 0);
await addAll([
@ -23,4 +37,30 @@ class BasicFlipperGame extends BasicGame {
rightFlipper,
]);
}
@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
final movedLeftFlipper =
_leftFlipperKeys.intersection(keysPressed).isNotEmpty;
if (event is RawKeyDownEvent && movedLeftFlipper) {
leftFlipper.moveUp();
} else if (event is RawKeyUpEvent && movedLeftFlipper) {
leftFlipper.moveDown();
}
final movedRightFlipper =
_rightFlipperKeys.intersection(keysPressed).isNotEmpty;
if (event is RawKeyDownEvent && movedRightFlipper) {
rightFlipper.moveUp();
} else if (event is RawKeyUpEvent && movedRightFlipper) {
rightFlipper.moveDown();
}
return movedLeftFlipper || movedRightFlipper
? KeyEventResult.handled
: KeyEventResult.ignored;
}
}

@ -4,9 +4,9 @@ import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/flipper/basic.dart';
class FlipperTracingGame extends BasicGame {
class FlipperTracingGame extends BasicFlipperGame {
static const info = '''
Basic example of how the Flipper body overlays the sprite.
''';
@ -14,17 +14,6 @@ class FlipperTracingGame extends BasicGame {
@override
Future<void> onLoad() async {
await super.onLoad();
final center = screenToWorld(camera.viewport.canvasSize! / 2);
final leftFlipper = Flipper(side: BoardSide.left)
..initialPosition = center - Vector2(Flipper.size.x, 0);
final rightFlipper = Flipper(side: BoardSide.right)
..initialPosition = center + Vector2(Flipper.size.x, 0);
await addAll([
leftFlipper,
rightFlipper,
]);
leftFlipper.trace();
rightFlipper.trace();
}
@ -37,7 +26,6 @@ extension on BodyComponent {
body.joints.whereType<RevoluteJoint>().forEach(
(joint) => joint.setLimits(0, 0),
);
body.setType(BodyType.static);
unawaited(
mounted.whenComplete(() {

Loading…
Cancel
Save