UNPKG

phaser4-rex-plugins

Version:
7 lines (6 loc) 10.9 kB
var t,e;t=void 0,e=function(){const t=Phaser.Input.Keyboard.Key,e=Phaser.Input.Keyboard.KeyCodes,s=["up","down","left","right"];class i{constructor(t){this.scene=t,this.keys={},this.cursorKeys={},this.noKeyDown=!0;for(var e=0,i=s.length;e<i;e++){var r=s[e];this.addKey(r),this.cursorKeys[r]=this.keys[r]}}shutdown(t){for(var e in this.scene=void 0,this.keys)this.keys[e].destroy();this.keys=void 0,this.cursorKeys=void 0}destroy(t){shutdown(t)}createCursorKeys(){return this.cursorKeys}setKeyState(t,e){var s=this.keys[t];return s.enabled?(e&&(this.noKeyDown=!1),s.isDown!==e&&(r.timeStamp=Date.now(),r.keyCode=s.keyCode,e?s.onDown(r):s.onUp(r)),this):this}clearAllKeysState(){for(var t in this.noKeyDown=!0,this.keys)this.setKeyState(t,!1);return this}getKeyState(t){return this.keys[t]}get upKeyDown(){return this.keys.up.isDown}get downKeyDown(){return this.keys.down.isDown}get leftKeyDown(){return this.keys.left.isDown}get rightKeyDown(){return this.keys.right.isDown}get anyKeyDown(){return!this.noKeyDown}addKey(s,i){return void 0===i&&(i=s),"string"==typeof i&&(i=i.toUpperCase(),e.hasOwnProperty(i)&&(i=e[i])),this.keys[s]=new t(this.scene,i),this}addKeys(t){for(var e=0,s=t.length;e<s;e++)this.addKey(t[e]);return this}}var r={timeStamp:0,keyCode:0,altKey:!1,ctrlKey:!1,shiftKey:!1,metaKey:!1,location:0},n=180/Math.PI,h={"up&down":0,"left&right":1,"4dir":2,"8dir":3},o={}; /** * @author Richard Davey <rich@photonstorm.com> * @copyright 2018 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */const a=Phaser.Utils.Objects.GetValue,u=Phaser.Math.Distance.Between,d=Phaser.Math.Angle.Between;class l extends i{constructor(t,e){super(t),this.resetFromJSON(e)}resetFromJSON(t){null==this.start&&(this.start={x:0,y:0}),null==this.end&&(this.end={x:0,y:0}),this._enable=void 0,this.setEnable(a(t,"enable",!0)),this.setMode(a(t,"dir","8dir")),this.setDistanceThreshold(a(t,"forceMin",16));var e=a(t,"start.x",null),s=a(t,"start.y",null),i=a(t,"end.x",null),r=a(t,"end.y",null);return this.setVector(e,s,i,r),this}toJSON(){return{enable:this.enable,dir:this.dirMode,forceMin:this.forceMin,start:{x:this.start.x,y:this.start.y},end:{x:this.end.x,y:this.end.y}}}setMode(t){return"string"==typeof t&&(t=h[t]),this.dirMode=t,this}get enable(){return this._enable}set enable(t){if(this._enable!==t)return t||this.clearVector(),this._enable=t,this}setEnable(t){return void 0===t&&(t=!0),this.enable=t,this}toggleEnable(){return this.setEnable(!this.enable),this}setDistanceThreshold(t){return t<0&&(t=0),this.forceMin=t,this}clearVector(){return this.start.x=0,this.start.y=0,this.end.x=0,this.end.y=0,this.clearAllKeysState(),this}setVector(t,e,s,i){if(!this.enable)return this;if(null===t)return this.clearVector(),this;if(void 0===s&&(s=t,t=0,i=e,e=0),this.start.x=t,this.start.y=e,this.end.x=s,this.end.y=i,this.forceMin>0&&this.force<this.forceMin)this.clearAllKeysState();else{this.noKeyDown=!0;var r=function(t,e,s){switch(void 0===s?s={}:!0===s&&(s=o),s.left=!1,s.right=!1,s.up=!1,s.down=!1,t=(t+360)%360,e){case 0:t<180?s.down=!0:s.up=!0;break;case 1:t>90&&t<=270?s.left=!0:s.right=!0;break;case 2:t>45&&t<=135?s.down=!0:t>135&&t<=225?s.left=!0:t>225&&t<=315?s.up=!0:s.right=!0;break;case 3:t>22.5&&t<=67.5?(s.down=!0,s.right=!0):t>67.5&&t<=112.5?s.down=!0:t>112.5&&t<=157.5?(s.down=!0,s.left=!0):t>157.5&&t<=202.5?s.left=!0:t>202.5&&t<=247.5?(s.left=!0,s.up=!0):t>247.5&&t<=292.5?s.up=!0:t>292.5&&t<=337.5?(s.up=!0,s.right=!0):s.right=!0}return s}(this.angle,this.dirMode,!0);for(var n in r)this.setKeyState(n,r[n])}return this}get forceX(){return this.end.x-this.start.x}get forceY(){return this.end.y-this.start.y}get force(){return u(this.start.x,this.start.y,this.end.x,this.end.y)}get rotation(){return d(this.start.x,this.start.y,this.end.x,this.end.y)}get angle(){return this.rotation*n}get octant(){var t=0;return this.rightKeyDown?t=this.downKeyDown?45:0:this.downKeyDown?t=this.leftKeyDown?135:90:this.leftKeyDown?t=this.upKeyDown?225:180:this.upKeyDown&&(t=this.rightKeyDown?315:270),t}}var y={setEventEmitter(t,e){return void 0===e&&(e=Phaser.Events.EventEmitter),this._privateEE=!0===t||void 0===t,this._eventEmitter=this._privateEE?new e:t,this},destroyEventEmitter(){return this._eventEmitter&&this._privateEE&&this._eventEmitter.shutdown(),this},getEventEmitter(){return this._eventEmitter},on(){return this._eventEmitter&&this._eventEmitter.on.apply(this._eventEmitter,arguments),this},once(){return this._eventEmitter&&this._eventEmitter.once.apply(this._eventEmitter,arguments),this},off(){return this._eventEmitter&&this._eventEmitter.off.apply(this._eventEmitter,arguments),this},emit(t){return this._eventEmitter&&t&&this._eventEmitter.emit.apply(this._eventEmitter,arguments),this},addListener(){return this._eventEmitter&&this._eventEmitter.addListener.apply(this._eventEmitter,arguments),this},removeListener(){return this._eventEmitter&&this._eventEmitter.removeListener.apply(this._eventEmitter,arguments),this},removeAllListeners(){return this._eventEmitter&&this._eventEmitter.removeAllListeners.apply(this._eventEmitter,arguments),this},listenerCount(){return this._eventEmitter?this._eventEmitter.listenerCount.apply(this._eventEmitter,arguments):0},listeners(){return this._eventEmitter?this._eventEmitter.listeners.apply(this._eventEmitter,arguments):[]},eventNames(){return this._eventEmitter?this._eventEmitter.eventNames.apply(this._eventEmitter,arguments):[]}},c={};const v=Phaser.Utils.Objects.GetValue,m=Phaser.Geom.Circle,p=Phaser.Geom.Circle.Contains;class b extends l{constructor(t,e){var s=t.scene;super(s,e);var i=v(e,"eventEmitter",void 0),r=v(e,"EventEmitterClass",void 0);this.setEventEmitter(i,r),this.scene=s,this.mainCamera=s.sys.cameras.main,this.pointer=void 0,this.gameObject=t,this.radius=v(e,"radius",100),t.setInteractive(new m(t.displayOriginX,t.displayOriginY,this.radius),p),this.boot()}resetFromJSON(t){return super.resetFromJSON(t),this.pointer=void 0,this}toJSON(){var t=super.toJSON();return t.radius=this.radius,t}boot(){this.gameObject.on("pointerdown",this.onKeyDownStart,this),this.gameObject.on("pointerover",this.onKeyDownStart,this),this.scene.input.on("pointermove",this.onKeyDown,this),this.scene.input.on("pointerup",this.onKeyUp,this),this.gameObject.once("destroy",this.onParentDestroy,this)}shutdown(t){this.scene&&(this.scene.input.off("pointermove",this.onKeyDown,this),this.scene.input.off("pointerup",this.onKeyUp,this),this.destroyEventEmitter(),this.scene=void 0,this.mainCamera=void 0,this.pointer=void 0,this.gameObject=void 0,super.shutdown())}get enable(){return this._enable}set enable(t){if(this._enable!==t)return t||(this.pointer=void 0),super.enable=t,this}destroy(t){this.shutdown(t)}onParentDestroy(t,e){this.destroy(e)}onKeyDownStart(t){t.isDown&&void 0===this.pointer&&(this.pointer=t,this.onKeyDown(t),this.emit("pointerdown",t))}onKeyDown(t){if(this.pointer===t){var e=function(t,e,s){var i=t.camera;return i?(void 0===s?s={}:!0===s&&(s=c),i===e?(s.x=t.worldX,s.y=t.worldY):i.getWorldPoint(t.x,t.y,s),s):null}(t,this.mainCamera,!0);if(e){var s=t.camera,i=this.gameObject,r=i.x-s.scrollX*(i.scrollFactorX-1),n=i.y-s.scrollY*(i.scrollFactorY-1);this.setVector(r,n,e.x,e.y),this.emit("update")}}}onKeyUp(t){this.pointer===t&&(this.pointer=void 0,this.clearVector(),this.emit("update"),this.emit("pointerup",t))}forceUpdate(){var t=this.pointer;return t&&t.isDown?(this.onKeyDown(t),this):this}}Object.assign(b.prototype,y);const g=Phaser.Utils.Objects.GetValue;class f{constructor(t,e){void 0===e&&(e={});var s=g(e,"eventEmitter",void 0),i=g(e,"EventEmitterClass",void 0);this.setEventEmitter(s,i),e.eventEmitter=this.getEventEmitter(),this.scene=t,this.base=void 0,this.thumb=void 0,this.touchCursor=void 0,this.setRadius(g(e,"radius",100)),this.addBase(g(e,"base",void 0),e),this.addThumb(g(e,"thumb",void 0));var r=g(e,"x",0),n=g(e,"y",0);this.base.setPosition(r,n),this.thumb.setPosition(r,n),g(e,"fixed",!0)&&this.setScrollFactor(0),this.boot()}destroy(){this.destroyEventEmitter(),this.base.destroy(),this.thumb.destroy(),this.scene=void 0,this.base=void 0,this.thumb=void 0,this.touchCursor=void 0}createCursorKeys(){return this.touchCursor.createCursorKeys()}get forceX(){return this.touchCursor.forceX}get forceY(){return this.touchCursor.forceY}get force(){return this.touchCursor.force}get rotation(){return this.touchCursor.rotation}get angle(){return this.touchCursor.angle}get up(){return this.touchCursor.upKeyDown}get down(){return this.touchCursor.downKeyDown}get left(){return this.touchCursor.leftKeyDown}get right(){return this.touchCursor.rightKeyDown}get noKey(){return this.touchCursor.noKeyDown}get pointerX(){return this.touchCursor.end.x}get pointerY(){return this.touchCursor.end.y}get pointer(){return this.touchCursor.pointer}setPosition(t,e){return this.x===t&&this.y===e||(this.x=t,this.y=e,this.forceUpdateThumb()),this}set x(t){this.x!==t&&(this.base.x=t,this.thumb.x=t)}set y(t){this.y!==t&&(this.base.y=t,this.thumb.y=t)}get x(){return this.base.x}get y(){return this.base.y}setVisible(t){return this.visible=t,this}toggleVisible(){return this.visible=!this.visible,this}get visible(){return this.base.visible}set visible(t){this.base.visible=t,this.thumb.visible=t,this.enable=t}get enable(){return this.touchCursor.enable}set enable(t){this.touchCursor.setEnable(t)}setEnable(t){return void 0===t&&(t=!0),this.enable=t,this}toggleEnable(){return this.setEnable(!this.enable),this}setRadius(t){return this.radius=t,this}addBase(t,e){return this.base&&this.base.destroy(),void 0===t&&(t=this.scene.add.circle(0,0,this.radius).setStrokeStyle(3,255)),void 0===e&&(e={}),e.eventEmitter=this.getEventEmitter(),this.touchCursor=new b(t,e),this.base=t,this}addThumb(t){return this.thumb&&this.thumb.destroy(),void 0===t&&(t=this.scene.add.circle(0,0,40).setStrokeStyle(3,65280)),this.thumb=t,this}setScrollFactor(t){return this.base.setScrollFactor(t),this.thumb.setScrollFactor(t),this}boot(){this.on("update",this.update,this)}update(){var t,e,s=this.touchCursor,i=s.dirMode;if(s.anyKeyDown)if(s.force>this.radius){var r=s.rotation;t=0!==i?Math.cos(r)*this.radius:0,e=1!==i?Math.sin(r)*this.radius:0}else t=0!==i?s.forceX:0,e=1!==i?s.forceY:0;else t=0,e=0;return this.thumb.x=this.base.x+t,this.thumb.y=this.base.y+e,this}forceUpdateThumb(){return this.touchCursor.forceUpdate(),this}}Object.assign(f.prototype,y);class E extends Phaser.Plugins.BasePlugin{constructor(t){super(t)}start(){this.game.events.on("destroy",this.destroy,this)}add(t,e){return new f(t,e)}addVectorToCursorKeys(t){return new l(void 0,t)}}return E},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).rexvirtualjoystickplugin=e();