mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-21 23:49:33 +08:00
73 lines
1.8 KiB
Dart
73 lines
1.8 KiB
Dart
import 'package:flutter/services.dart';
|
|
|
|
typedef void KeyListener(RawKeyEvent event);
|
|
typedef void GamepadListener(String evtType, String key);
|
|
|
|
const GAMEPAD_BUTTON_UP = "UP";
|
|
const GAMEPAD_BUTTON_DOWN = "DOWN";
|
|
|
|
const GAMEPAD_DPAD_UP = "UP";
|
|
const GAMEPAD_DPAD_DOWN = "DOWN";
|
|
const GAMEPAD_DPAD_LEFT = "LEFT";
|
|
const GAMEPAD_DPAD_RIGHT = "RIGHT";
|
|
|
|
const GAMEPAD_BUTTON_A = "A";
|
|
const GAMEPAD_BUTTON_B = "B";
|
|
const GAMEPAD_BUTTON_X = "X";
|
|
const GAMEPAD_BUTTON_Y = "Y";
|
|
|
|
const GAMEPAD_BUTTON_L1 = "L1";
|
|
const GAMEPAD_BUTTON_L2 = "L2";
|
|
|
|
const GAMEPAD_BUTTON_R1 = "R1";
|
|
const GAMEPAD_BUTTON_R2 = "R2";
|
|
|
|
const GAMEPAD_BUTTON_START = "START";
|
|
const GAMEPAD_BUTTON_SELECT = "SELECT";
|
|
|
|
const ANDROID_MAPPING = {
|
|
19: GAMEPAD_DPAD_UP,
|
|
20: GAMEPAD_DPAD_DOWN,
|
|
21: GAMEPAD_DPAD_LEFT,
|
|
22: GAMEPAD_DPAD_RIGHT,
|
|
96: GAMEPAD_BUTTON_A,
|
|
97: GAMEPAD_BUTTON_B,
|
|
99: GAMEPAD_BUTTON_X,
|
|
100: GAMEPAD_BUTTON_Y,
|
|
102: GAMEPAD_BUTTON_L1,
|
|
103: GAMEPAD_BUTTON_R1,
|
|
104: GAMEPAD_BUTTON_L2,
|
|
105: GAMEPAD_BUTTON_R2,
|
|
108: GAMEPAD_BUTTON_START,
|
|
109: GAMEPAD_BUTTON_SELECT
|
|
};
|
|
|
|
/// Gamepad functionalities
|
|
///
|
|
/// To use this class, access it via [Flame.gamepad].
|
|
class Gamepad {
|
|
KeyListener listener;
|
|
|
|
void addListener(GamepadListener gamepadListener) {
|
|
this.listener = (RawKeyEvent e) {
|
|
String evtType =
|
|
e is RawKeyDownEvent ? GAMEPAD_BUTTON_DOWN : GAMEPAD_BUTTON_UP;
|
|
|
|
if (e.data is RawKeyEventDataAndroid) {
|
|
RawKeyEventDataAndroid androidEvent = e.data as RawKeyEventDataAndroid;
|
|
|
|
String key = ANDROID_MAPPING[androidEvent.keyCode];
|
|
if (key != null) {
|
|
gamepadListener(evtType, key);
|
|
}
|
|
}
|
|
};
|
|
|
|
RawKeyboard.instance.addListener(this.listener);
|
|
}
|
|
|
|
void removeListener() {
|
|
RawKeyboard.instance.removeListener(this.listener);
|
|
}
|
|
}
|