avg-core-ts
Version:
Develop Adventure Game (or ADV, Visual Novel, Galgame, etc.) on your own!
91 lines (80 loc) • 2.63 kB
JavaScript
/**
* @file General event handle module
* @author MicroMatrix <yangpan.1985@bytedance.com>
* @copyright 2012-2020 bytedance
* @link git@code.byted.org:yangpan.1985/avg.git
*/
export function attachToSprite(sprite) {
sprite.interactive = true;
sprite.on('click', handleEvent);
sprite.on('tap', handleEvent);
sprite.on('mousemove', handleEvent);
sprite.on('mouseover', handleEvent);
sprite.on('mouseout', handleEvent);
sprite.on('mousedown', handleEvent);
sprite.on('mouseup', handleEvent);
sprite.on('mouseupoutside', handleEvent);
sprite.on('touchstart', handleEvent);
sprite.on('touchmove', handleEvent);
sprite.on('touchend', handleEvent);
sprite.on('touchendoutside', handleEvent);
sprite.on('pointerover', pointerHandler);
sprite.on('pointerenter', pointerHandler);
sprite.on('pointerdown', pointerHandler);
sprite.on('pointermove', pointerHandler);
sprite.on('pointerup', pointerHandler);
sprite.on('pointerupoutside', pointerHandler);
sprite.on('pointercancel', pointerHandler);
sprite.on('pointerout', pointerHandler);
sprite.on('pointerleave', pointerHandler);
sprite.on('pointertap', pointerHandler);
}
class EventData {
constructor(evt) {
this.type = evt.type;
this._preventDefault = false;
this.originalEvent = evt;
// this.index = evt.target.index;
this.target = evt.target;
this.currentTarget = evt.currentTarget;
this.global = {
x: evt.data.global.x,
y: evt.data.global.y,
};
this.local = evt.currentTarget ? evt.currentTarget.toLocal(this.global) : null;
// 有时候会有奇怪的触发,导致 data.originalEvent 是 null……
if (evt.data.originalEvent) {
this.movement = {
x: evt.data.originalEvent.movementX,
y: evt.data.originalEvent.movementY,
};
} else {
this.movement = { x: 0, y: 0 };
}
}
preventDefault() {
this._preventDefault = true;
}
stopPropagation() {
this.originalEvent.stopped = true;
}
}
// let Handler;
// export function registerHandler(handler) {
// if (typeof handler === 'function')
// Handler = handler;
// else {
// Err.warn('[EventManager] Event Handler must be a function, ignored.');
// }
// }
function handleEvent(evt) {
const e = new EventData(evt);
const handler = e.currentTarget ? e.currentTarget[`_on${e.type}`] : null;
handler && handler(e);
}
function pointerHandler(evt) {
const e = new EventData(evt);
// console.log(e.type)
const defaultHandler = e.currentTarget ? e.currentTarget[`_on${e.type}`] : null;
defaultHandler && defaultHandler(e);
}