Files
esengine/packages/engine/platform-wechat/src/subsystems/WeChatInputSubsystem.ts

78 lines
2.0 KiB
TypeScript
Raw Normal View History

/**
*
*/
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
};
}
}