mirror of
https://gitee.com/dgflash/oops-plugin-framework.git
synced 2026-10-17 05:40:41 +08:00
86 lines
2.6 KiB
TypeScript
86 lines
2.6 KiB
TypeScript
/*
|
|
* @Author: dgflash
|
|
* @Date: 2022-04-14 17:08:01
|
|
* @LastEditors: dgflash
|
|
*/
|
|
import type { EventKeyboard } from 'cc';
|
|
import { Input, input } from 'cc';
|
|
import { GameViewModule } from './GameViewModuleBase';
|
|
|
|
/** 键盘事件回调 */
|
|
export interface KeyboardCallbacks {
|
|
onKeyDown?: (event: EventKeyboard) => void;
|
|
onKeyUp?: (event: EventKeyboard) => void;
|
|
onKeyPressing?: (event: EventKeyboard) => void;
|
|
}
|
|
|
|
/** 键盘输入 */
|
|
export class GameKeyboardModule extends GameViewModule {
|
|
private _enabled = false;
|
|
private _callbacks: KeyboardCallbacks | null = null;
|
|
|
|
/**
|
|
* 键盘事件开关
|
|
* @param on 是否开启
|
|
* @param callbacks 开启时传入对应键事件回调(可只传需要的项)
|
|
*/
|
|
setKeyboard(on: boolean, callbacks?: KeyboardCallbacks): void {
|
|
if (on) {
|
|
if (callbacks) {
|
|
this._callbacks = callbacks;
|
|
}
|
|
if (!this._callbacks) {
|
|
console.warn('[OopsFramework]', 'setKeyboard(true) 需传入 callbacks');
|
|
return;
|
|
}
|
|
this._register(this._callbacks);
|
|
this._enabled = true;
|
|
}
|
|
else {
|
|
if (this._enabled && this._callbacks) {
|
|
this._unregister(this._callbacks);
|
|
}
|
|
this._enabled = false;
|
|
this._callbacks = null;
|
|
}
|
|
}
|
|
|
|
/** 销毁键盘模块 */
|
|
override destroy(): void {
|
|
if (this._enabled && this._callbacks) {
|
|
this._unregister(this._callbacks);
|
|
this._enabled = false;
|
|
this._callbacks = null;
|
|
}
|
|
}
|
|
|
|
/** 注册键盘事件
|
|
* @param callbacks 键盘事件回调
|
|
*/
|
|
private _register(callbacks: KeyboardCallbacks): void {
|
|
if (callbacks.onKeyDown) {
|
|
input.on(Input.EventType.KEY_DOWN, callbacks.onKeyDown, this.comp);
|
|
}
|
|
if (callbacks.onKeyUp) {
|
|
input.on(Input.EventType.KEY_UP, callbacks.onKeyUp, this.comp);
|
|
}
|
|
if (callbacks.onKeyPressing) {
|
|
input.on(Input.EventType.KEY_PRESSING, callbacks.onKeyPressing, this.comp);
|
|
}
|
|
}
|
|
|
|
/** 注销键盘事件
|
|
* @param callbacks 键盘事件回调
|
|
*/
|
|
private _unregister(callbacks: KeyboardCallbacks): void {
|
|
if (callbacks.onKeyDown) {
|
|
input.off(Input.EventType.KEY_DOWN, callbacks.onKeyDown, this.comp);
|
|
}
|
|
if (callbacks.onKeyUp) {
|
|
input.off(Input.EventType.KEY_UP, callbacks.onKeyUp, this.comp);
|
|
}
|
|
if (callbacks.onKeyPressing) {
|
|
input.off(Input.EventType.KEY_PRESSING, callbacks.onKeyPressing, this.comp);
|
|
}
|
|
}
|
|
} |