You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
5.0 KiB
145 lines
5.0 KiB
import { _decorator, Component, director, EventKeyboard, Input, input, KeyCode, Node, UIOpacity } from 'cc';
|
|
import MesMgr from '../MesEvent/MesMgr';
|
|
import { EGlobalEvent } from '../MesEvent/EGlobalEvent';
|
|
|
|
//#region 键盘按键管理
|
|
|
|
// 该脚本主要处理 键盘按键输入事件
|
|
|
|
//#endregion
|
|
|
|
const { ccclass, property } = _decorator;
|
|
@ccclass('InputMgr')
|
|
export class InputMgr extends Component {
|
|
private static _ins: InputMgr;
|
|
/** 单例 */
|
|
public static get ins(): InputMgr {
|
|
if (this._ins == null) {
|
|
let audio = new Node("InputMgr");
|
|
director.addPersistRootNode(audio);
|
|
audio.addComponent(UIOpacity).opacity = 0;
|
|
this._ins = audio.addComponent(InputMgr);
|
|
}
|
|
return this._ins;
|
|
}
|
|
|
|
/**点击的按键符号*/
|
|
private _KeyDownList: KeyCode[] = [];
|
|
/**按键类型 */
|
|
private _KeyType: Record<string, string> = {
|
|
[Input.EventType.KEY_DOWN]: `${EGlobalEvent.E_INPUT_KEY}_${Input.EventType.KEY_DOWN}`,
|
|
[Input.EventType.KEY_UP]: `${EGlobalEvent.E_INPUT_KEY}_${Input.EventType.KEY_UP}`,
|
|
}
|
|
|
|
/**组合按键事件 */
|
|
private getKeyType(type:Input.EventType,code:KeyCode = null){
|
|
const key = `${type}_${code ? code : ""}`;
|
|
if (!this._KeyType[key]) {
|
|
this._KeyType[key] = `${EGlobalEvent.E_INPUT_KEY}_${key}`
|
|
}
|
|
return this._KeyType[key];
|
|
}
|
|
|
|
protected onLoad(): void {
|
|
input.on(Input.EventType.KEY_DOWN, this.onKeyDown, this);
|
|
input.on(Input.EventType.KEY_UP, this.onKeyUp, this);
|
|
}
|
|
|
|
protected onDestroy(): void {
|
|
input.off(Input.EventType.KEY_DOWN, this.onKeyDown, this);
|
|
input.off(Input.EventType.KEY_UP, this.onKeyUp, this);
|
|
InputMgr._ins = null;
|
|
MesMgr.offAllCaller(this);
|
|
}
|
|
|
|
/**注册 多次触发的点击按键事件 */
|
|
onKey(type:Input.EventType,listener:(...any: any[]) => void, target?: any,code:KeyCode[] | KeyCode = null){
|
|
if(code){
|
|
if(Array.isArray(code)){
|
|
for (let i = 0; i < code.length; i++) {
|
|
const tCode = code[i];
|
|
MesMgr.on(this.getKeyType(type,tCode),listener,target);
|
|
}
|
|
}else{
|
|
MesMgr.on(this.getKeyType(type,code),listener,target);
|
|
}
|
|
}else{
|
|
MesMgr.on(this.getKeyType(type),listener,target);
|
|
}
|
|
}
|
|
/**注册 一次触发的点击按键事件 */
|
|
onceKey(type:Input.EventType,listener:(...any: any[]) => void, target?: any,code:KeyCode[] | KeyCode = null){
|
|
if (code) {
|
|
if (Array.isArray(code)) {
|
|
for (let i = 0; i < code.length; i++) {
|
|
const tCode = code[i];
|
|
MesMgr.once(this.getKeyType(type, tCode), listener, target);
|
|
}
|
|
} else {
|
|
MesMgr.once(this.getKeyType(type, code), listener, target);
|
|
}
|
|
} else {
|
|
MesMgr.once(this.getKeyType(type), listener, target);
|
|
}
|
|
}
|
|
|
|
/**取消注册 多次触发的点击按键事件 */
|
|
offKey(type:Input.EventType,listener:(...any: any[]) => void, target?: any,code:KeyCode[] | KeyCode = null){
|
|
if (code) {
|
|
if (Array.isArray(code)) {
|
|
for (let i = 0; i < code.length; i++) {
|
|
const tCode = code[i];
|
|
MesMgr.off(this.getKeyType(type, tCode), listener, target);
|
|
}
|
|
} else {
|
|
MesMgr.off(this.getKeyType(type, code), listener, target);
|
|
}
|
|
} else {
|
|
MesMgr.off(this.getKeyType(type), listener, target);
|
|
}
|
|
}
|
|
|
|
/**取消注册 所有的触发的点击按键事件 */
|
|
offAll(type:Input.EventType,code:KeyCode[] | KeyCode = null){
|
|
if (code) {
|
|
if (Array.isArray(code)) {
|
|
for (let i = 0; i < code.length; i++) {
|
|
const tCode = code[i];
|
|
MesMgr.offAll(this.getKeyType(type, tCode));
|
|
}
|
|
} else {
|
|
MesMgr.offAll(this.getKeyType(type, code));
|
|
}
|
|
} else {
|
|
MesMgr.offAll(this.getKeyType(type));
|
|
}
|
|
}
|
|
|
|
/**取消注册 某个目标的所有按键事件 */
|
|
offAllCaller(caller: any){
|
|
MesMgr.offAllCaller(caller);
|
|
}
|
|
|
|
protected onKeyDown(event: EventKeyboard) {
|
|
if (!this._KeyDownList.includes(event.keyCode)) {
|
|
this._KeyDownList.push(event.keyCode);
|
|
}
|
|
MesMgr.event(this.getKeyType(Input.EventType.KEY_DOWN));
|
|
MesMgr.event(this.getKeyType(Input.EventType.KEY_DOWN,event.keyCode));
|
|
}
|
|
|
|
protected onKeyUp(event: EventKeyboard) {
|
|
let idx = this._KeyDownList.indexOf(event.keyCode);
|
|
if (idx >= 0) {
|
|
this._KeyDownList.splice(idx, 1)
|
|
}
|
|
MesMgr.event(this.getKeyType(Input.EventType.KEY_UP),event.keyCode);
|
|
MesMgr.event(this.getKeyType(Input.EventType.KEY_UP,event.keyCode),event.keyCode);
|
|
}
|
|
|
|
// protected update(deltaTime: number) {
|
|
|
|
// }
|
|
}
|
|
|
|
|
|
|