feat(sandbox): made BasicFlipperGame respond to KeyEvents (#123)

* feat: made Flippers movable

* feat(sanbox): included balls in flipper example

* feat: improved moving logic

* refactor: removed unused import
pull/130/head
Alejandro Santiago 4 years ago committed by GitHub
parent 21cc04facc
commit 0285698e5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,21 +1,39 @@
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';
class BasicFlipperGame extends BasicGame { import 'package:sandbox/stories/ball/basic.dart';
class BasicFlipperGame extends BasicBallGame with KeyboardEvents {
BasicFlipperGame() : super(color: Colors.blue);
static const info = ''' static const info = '''
Basic example of how a Flipper works. Basic example of how a Flipper works.
'''; ''';
static const _leftFlipperKeys = [
LogicalKeyboardKey.arrowLeft,
LogicalKeyboardKey.keyA,
];
static const _rightFlipperKeys = [
LogicalKeyboardKey.arrowRight,
LogicalKeyboardKey.keyD,
];
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 +41,32 @@ class BasicFlipperGame extends BasicGame {
rightFlipper, rightFlipper,
]); ]);
} }
@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
final movedLeftFlipper = _leftFlipperKeys.contains(event.logicalKey);
if (movedLeftFlipper) {
if (event is RawKeyDownEvent) {
leftFlipper.moveUp();
} else if (event is RawKeyUpEvent) {
leftFlipper.moveDown();
}
}
final movedRightFlipper = _rightFlipperKeys.contains(event.logicalKey);
if (movedRightFlipper) {
if (event is RawKeyDownEvent) {
rightFlipper.moveUp();
} else if (event is RawKeyUpEvent) {
rightFlipper.moveDown();
}
}
return movedLeftFlipper || movedRightFlipper
? KeyEventResult.handled
: KeyEventResult.ignored;
}
} }

@ -3,10 +3,9 @@ import 'dart:async';
import 'package:flame/components.dart'; 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:sandbox/stories/flipper/basic.dart';
import 'package:sandbox/common/common.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 +13,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 +25,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