Engine.DrawableEvents = class { constructor(parentDrawable /*Drawable*/) { this.parentDrawable = parentDrawable; this.onClick = new Action(); this.onMouseOver = new Action(); this.onMouseOut = new Action(); this.onMouseDown = new Action(); this.onMouseUp = new Action(); this.onActivated = new Action(); this.onDeactivated = new Action(); this.mouseEnabled = false; this.clickThreshold = 10; this.mouseDownPosition = new Vector2(); } enableMouseEvents() { if (this.mouseEnabled) return; this.mouseEnabled = true; this.parentDrawable.interactive = true; this.parentDrawable.interactiveChildren = true; this.parentDrawable.on('pointertap', (event) => { this.clicked(event); } ); this.parentDrawable.on('pointerout', (event) => { this.mouseOut(event); } ); this.parentDrawable.on('pointerover', (event) => { this.mouseOver(event); } ); this.parentDrawable.on('pointerdown', (event) => { this.mouseDown(event); } ); this.parentDrawable.on('pointerup', (event) => { this.mouseUp(event); } ); } disableMouseEvents() { if (!this.mouseEnabled) return; this.mouseEnabled = false; this.parentDrawable.interactive = false; //this.parentDrawable.interactiveChildren = false; this.parentDrawable.off('pointertap', (event) => { this.clicked(event); } ); this.parentDrawable.off('pointerover', (event) => { this.mouseOver(event); } ); this.parentDrawable.off('pointerout', (event) => { this.mouseOut(event); } ); this.parentDrawable.off('pointerdown', (event) => { this.mouseDown(event); } ); this.parentDrawable.off('pointerup', (event) => { this.mouseUp(event); } ); } clicked(event) { if (GameManager.catchAndReportExceptions) { try { this.clickedInner(event); } catch (error) { GameManager.reportException(error); } } else { this.clickedInner(event); } } clickedInner(event) { var clickDistance = Math.sqrt((this.mouseDownPosition.x - event.data.global.x) * (this.mouseDownPosition.x - event.data.global.x) + (this.mouseDownPosition.y - event.data.global.y) * (this.mouseDownPosition.y - event.data.global.y)); if (clickDistance > this.clickThreshold) return; this.onClick.call(this.parentDrawable, event); } mouseOver(event) { if (GameManager.catchAndReportExceptions) { try { this.mouseOverInner(event); } catch (error) { GameManager.reportException(error); } } else { this.mouseOverInner(event); } } mouseOverInner(event) { this.onMouseOver.call(this.parentDrawable, event); } mouseOut(event) { if (GameManager.catchAndReportExceptions) { try { this.mouseOutInner(event); } catch (error) { GameManager.reportException(error); } } else { this.mouseOutInner(event); } } mouseOutInner(event) { this.onMouseOut.call(this.parentDrawable, event); } mouseDown(event) { if (GameManager.catchAndReportExceptions) { try { this.mouseDownInner(event); } catch (error) { GameManager.reportException(error); } } else { this.mouseDownInner(event); } } mouseDownInner(event) { this.mouseDownPosition.x = event.data.global.x; this.mouseDownPosition.y = event.data.global.y; this.onMouseDown.call(this.parentDrawable, event); } mouseUp(event) { if (GameManager.catchAndReportExceptions) { try { this.mouseUpInner(event); } catch (error) { GameManager.reportException(error); } } else { this.mouseUpInner(event); } } mouseUpInner(event) { this.onMouseUp.call(this.parentDrawable, event); } fireActivated() { this.onActivated.call(this.parentDrawable); } fireDeactivated() { this.onDeactivated.call(this.parentDrawable); } }