mirror of https://github.com/flutter/pinball.git
parent
2ed26bed35
commit
05bca49561
@ -0,0 +1,52 @@
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:pinball/flame/flame.dart';
|
||||
import 'package:pinball_components/pinball_components.dart';
|
||||
|
||||
/// {@template controlled_plunger}
|
||||
/// A [Plunger] with a [PlungerController] attached.
|
||||
/// {@endtemplate}
|
||||
class ControlledPlunger extends Plunger with Controls<PlungerController> {
|
||||
/// {@macro controlled_plunger}
|
||||
ControlledPlunger({required double compressionDistance})
|
||||
: super(compressionDistance: compressionDistance) {
|
||||
controller = PlungerController(this);
|
||||
}
|
||||
}
|
||||
|
||||
/// {@template plunger_controller}
|
||||
/// A [ComponentController] that controls a [Plunger]s movement.
|
||||
/// {@endtemplate}
|
||||
|
||||
class PlungerController extends ComponentController<Plunger>
|
||||
with KeyboardHandler {
|
||||
/// {@macro plunger_controller}
|
||||
PlungerController(Plunger plunger)
|
||||
: _keys = [
|
||||
LogicalKeyboardKey.arrowDown,
|
||||
LogicalKeyboardKey.space,
|
||||
LogicalKeyboardKey.keyS,
|
||||
],
|
||||
super(plunger);
|
||||
|
||||
/// The [LogicalKeyboardKey]s that will control the [Flipper].
|
||||
///
|
||||
/// [onKeyEvent] method listens to when one of these keys is pressed.
|
||||
final List<LogicalKeyboardKey> _keys;
|
||||
|
||||
@override
|
||||
bool onKeyEvent(
|
||||
RawKeyEvent event,
|
||||
Set<LogicalKeyboardKey> keysPressed,
|
||||
) {
|
||||
if (!_keys.contains(event.logicalKey)) return true;
|
||||
|
||||
if (event is RawKeyDownEvent) {
|
||||
component.pull();
|
||||
} else if (event is RawKeyUpEvent) {
|
||||
component.release();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue