-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxPad.min.js
1 lines (1 loc) · 1.8 KB
/
xPad.min.js
1
class XPad{constructor(t,s){this.emitters={},this.buttons={},this.buttonsConfig=t,this.joysticks={left:{x:0,y:0},right:{x:0,y:0}},this.joysticksConfig=s,this.updateInterval=10,this.on("update",()=>{this.buttonsConfig.forEach((t,s)=>{const i=XPad.getButtonValue(this.gamepad.buttons[s]);this.buttons[t]!==i&&(this.buttons[t]=i,this.emit("buttonUpdate",t,i,s),1===i?this.emit("buttonPressed",t,s):0===i&&this.emit("buttonReleased",t,s))});for(const t in this.joysticksConfig)for(const s in this.joysticksConfig[t]){const i=this.joysticksConfig[t][s],e=this.gamepad.axes[i];this.joysticks[t][s]!==e&&(this.joysticks[t][s]=e,this.emit("joysticksUpdate",this.joysticks,i),this.emit(t+"joystickUpdate",this.joysticks[t],i))}}),window.addEventListener("gamepadconnected",t=>{if("xinput"===t.gamepad.id){this.buttonsConfig.forEach((s,i)=>{this.buttons[s]=XPad.getButtonValue(t.gamepad.buttons[i])});for(const s in this.joysticksConfig)for(const i in this.joysticksConfig[s]){const e=this.joysticksConfig[s][i];this.joysticks[s][i]=t.gamepad.axes[e]}this.update=setInterval(()=>this.emit("update"),this.updateInterval),this.gamepad=t.gamepad,this.emit("connected")}}),window.addEventListener("gamepaddisconnected",t=>{t.gamepad===this.gamepad&&(clearInterval(this.update),this.gamepad=null,this.emit("disconnected"))})}get connected(){return!!this.gamepad}on(t,s){return this.emitters.hasOwnProperty(t)?this.emitters[t].push(s):this.emitters[t]=[s],this}once(t,s){return s.onlyOneTime=!0,this.on(t,s),this}emit(t,...s){return this.emitters.hasOwnProperty(t)&&(this.emitters[t]=this.emitters[t].filter(t=>(t(...s),!t.onlyOneTime))),this}static getButtonValue(t){return"number"==typeof t?t:t.value}}const xPad=new XPad(["A","B","X","Y","LB","RB","LT","RT","BACK","START","L-STICK","R-STICK","UP","DOWN","LEFT","RIGHT"],{left:{x:0,y:1},right:{x:2,y:3}});