78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
|
|
/**
|
||
|
|
* 微信小游戏输入子系统
|
||
|
|
*/
|
||
|
|
|
||
|
|
import type {
|
||
|
|
IPlatformInputSubsystem,
|
||
|
|
TouchHandler,
|
||
|
|
TouchEvent
|
||
|
|
} from '@esengine/platform-common';
|
||
|
|
import { getWx } from '../utils';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 微信小游戏输入子系统实现
|
||
|
|
*/
|
||
|
|
export class WeChatInputSubsystem implements IPlatformInputSubsystem {
|
||
|
|
onTouchStart(handler: TouchHandler): void {
|
||
|
|
getWx().onTouchStart((res) => {
|
||
|
|
handler(this.convertTouchEvent(res));
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
onTouchMove(handler: TouchHandler): void {
|
||
|
|
getWx().onTouchMove((res) => {
|
||
|
|
handler(this.convertTouchEvent(res));
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
onTouchEnd(handler: TouchHandler): void {
|
||
|
|
getWx().onTouchEnd((res) => {
|
||
|
|
handler(this.convertTouchEvent(res));
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
onTouchCancel(handler: TouchHandler): void {
|
||
|
|
getWx().onTouchCancel((res) => {
|
||
|
|
handler(this.convertTouchEvent(res));
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
offTouchStart(handler: TouchHandler): void {
|
||
|
|
getWx().offTouchStart(handler as any);
|
||
|
|
}
|
||
|
|
|
||
|
|
offTouchMove(handler: TouchHandler): void {
|
||
|
|
getWx().offTouchMove(handler as any);
|
||
|
|
}
|
||
|
|
|
||
|
|
offTouchEnd(handler: TouchHandler): void {
|
||
|
|
getWx().offTouchEnd(handler as any);
|
||
|
|
}
|
||
|
|
|
||
|
|
offTouchCancel(handler: TouchHandler): void {
|
||
|
|
getWx().offTouchCancel(handler as any);
|
||
|
|
}
|
||
|
|
|
||
|
|
supportsPressure(): boolean {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
private convertTouchEvent(res: WechatMinigame.OnTouchStartListenerResult): TouchEvent {
|
||
|
|
return {
|
||
|
|
touches: res.touches.map((t: WechatMinigame.Touch) => ({
|
||
|
|
identifier: t.identifier,
|
||
|
|
x: t.clientX,
|
||
|
|
y: t.clientY,
|
||
|
|
force: t.force
|
||
|
|
})),
|
||
|
|
changedTouches: res.changedTouches.map((t: WechatMinigame.Touch) => ({
|
||
|
|
identifier: t.identifier,
|
||
|
|
x: t.clientX,
|
||
|
|
y: t.clientY,
|
||
|
|
force: t.force
|
||
|
|
})),
|
||
|
|
timeStamp: res.timeStamp
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|