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

Loading…
Cancel
Save