From eaf70267524e2209cfd3a43ca102d5b557334824 Mon Sep 17 00:00:00 2001 From: Arun Michael Dsouza Date: Wed, 29 Mar 2023 00:48:35 +0100 Subject: [PATCH] Module version bumped --- dist/joypad.min.js | 4 ++-- dist/joypad.min.js.map | 2 +- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/joypad.min.js b/dist/joypad.min.js index 755839e..4db0178 100644 --- a/dist/joypad.min.js +++ b/dist/joypad.min.js @@ -1,6 +1,6 @@ /* - joypad.js v2.3.3 + joypad.js v2.3.5 Copyright (c) 2019 Arun Michael Dsouza (amdsouza92@gmail.com) Licence: MIT */ -var a={events:{},publish:function a(b,c){if(this.events.hasOwnProperty(b))this.events[b].forEach(function(a){return a(c)})},subscribe:function a(b,c){if(!this.events.hasOwnProperty(b))this.events[b]=[];this.events[b].push(c);return{unsubscribe:(function(){this.events[b].splice(this.events[b].indexOf(c),1)}).bind(this)}}};var a1={CONNECT:{NATIVE:"gamepadconnected",ALIAS:"connect"},DISCONNECT:{NATIVE:"gamepaddisconnected",ALIAS:"disconnect"},BUTTON_PRESS:{NATIVE:null,ALIAS:"button_press"},BUTTON_RELEASE:{NATIVE:null,ALIAS:"button_release"},AXIS_MOVEMENT:{NATIVE:null,ALIAS:"axis_move"}};var b={LEFT:{NAME:"left_stick",AXES:{X:0,Y:1}},RIGHT:{NAME:"right_stick",AXES:{X:2,Y:3}}};var c={LEFT:"left",RIGHT:"right",TOP:"top",BOTTOM:"bottom"};var d={button_0:0,button_1:1,button_2:2,button_3:3,button_4:4,button_5:5,button_6:6,button_7:7,button_8:8,button_9:9,button_10:10,button_11:11,button_12:12,button_13:13,button_14:14,button_15:15,button_16:16,button_17:17};var e=.8;var a2=function(a){if(console.warn&&"function"==typeof console.warn)console.warn(a);else console.log(a)};var b1=function(a,b){var c=[];Object.keys(b).forEach(function(d){if(b[d]===a)c.push(d);else if(Array.isArray(b[d])&& -1!==b[d].indexOf(a))c.push(d)});return c};var c1=function(a){return!!a&&!!a.type&&!!a.playEffect&&"function"==typeof a.playEffect||false};var d1=function(){return!!window.navigator.getGamepads&&"function"==typeof window.navigator.getGamepads||false};var f={loopStarted:false,instances:{},buttonEvents:{joypad:[]},settings:{axisMovementThreshold:e},remove:function a(b){return delete this.instances[b]},on:function c(d,e){switch(d){case a1.CONNECT.ALIAS:return a.subscribe(a1.CONNECT.ALIAS,e);case a1.DISCONNECT.ALIAS:return a.subscribe(a1.DISCONNECT.ALIAS,e);case a1.BUTTON_PRESS.ALIAS:return a.subscribe(a1.BUTTON_PRESS.ALIAS,e);case a1.BUTTON_RELEASE.ALIAS:return a.subscribe(a1.BUTTON_RELEASE.ALIAS,e);case a1.AXIS_MOVEMENT.ALIAS:return a.subscribe(a1.AXIS_MOVEMENT.ALIAS,e)}},vibrate:function a(b,c){var f=b.vibrationActuator;var g=c||this.settings.vibration;if(c1(f)){var h=f.type;return b.vibrationActuator.playEffect(h,g)}a2("No vibration actuator interface found - https://developer.mozilla.org/en-US/docs/Web/API/GamepadHapticActuator")},set:function a(b){var c=b.axisMovementThreshold,d=b.vibration,e=b.customButtonMapping;var f=parseFloat(c);if(!isNaN(f))this.settings.axisMovementThreshold=f;this.settings.vibration=d;this.settings.customButtonMapping=e},trigger:function b(c,d){return a.publish(c,d)}};var j=function(a){a.buttons.forEach(function(c,d1){var e=f.settings.customButtonMapping;var f1=e||d;var i=b1(d1,f1);var j=f.buttonEvents;if(i&&i.length)i.forEach(function(b){if(c.pressed){if(!j.joypad[a.index][b])j.joypad[a.index][b]={pressed:true,hold:false,released:false};j.joypad[a.index][b].button=c;j.joypad[a.index][b].index=d1;j.joypad[a.index][b].gamepad=a}else if(!c.pressed&&j.joypad[a.index][b]){j.joypad[a.index][b].released=true;j.joypad[a.index][b].hold=false}})})};var k=function(a){var c1=function(a){return new CustomEvent(a1.AXIS_MOVEMENT.ALIAS,{detail:a})};var g=f.settings.axisMovementThreshold;var h=a.axes;var i=h.length;var j=i/2;h.forEach(function(b1,d){if(Math.abs(b1)>g){var h=null;var i=null;var k=b1;h=dg){var h=null;var i=null;var k=b1;h=d {\n return listener(data);\n });\n }\n },\n subscribe: function (event, listener) {\n if (!this.events.hasOwnProperty(event)) {\n this.events[event] = [];\n }\n this.events[event].push(listener);\n\n return {\n unsubscribe: function () {\n this.events[event].splice(this.events[event].indexOf(listener), 1);\n }.bind(this)\n };\n }\n};\n\nexport default emitter;","// Global constants \n\nconst EVENTS = {\n CONNECT: {\n NATIVE: 'gamepadconnected',\n ALIAS: 'connect'\n },\n DISCONNECT: {\n NATIVE: 'gamepaddisconnected',\n ALIAS: 'disconnect'\n },\n BUTTON_PRESS: {\n NATIVE: null,\n ALIAS: 'button_press'\n },\n BUTTON_RELEASE: {\n NATIVE: null,\n ALIAS: 'button_release'\n },\n AXIS_MOVEMENT: {\n NATIVE: null,\n ALIAS: 'axis_move'\n }\n};\nconst STICKS = {\n LEFT: {\n NAME: 'left_stick',\n AXES: {\n X: 0,\n Y: 1\n }\n },\n RIGHT: {\n NAME: 'right_stick',\n AXES: {\n X: 2,\n Y: 3\n }\n }\n};\nconst DIRECTIONS = {\n LEFT: 'left',\n RIGHT: 'right',\n TOP: 'top',\n BOTTOM: 'bottom'\n};\nconst BUTTON_MAPPING = {\n 'button_0': 0,\n 'button_1': 1,\n 'button_2': 2,\n 'button_3': 3,\n 'button_4': 4,\n 'button_5': 5,\n 'button_6': 6,\n 'button_7': 7,\n 'button_8': 8,\n 'button_9': 9,\n 'button_10': 10,\n 'button_11': 11,\n 'button_12': 12,\n 'button_13': 13,\n 'button_14': 14,\n 'button_15': 15,\n 'button_16': 16,\n 'button_17': 17\n};\nconst AXIS_MOVEMENT_THRESHOLD = 0.8;\n\nexport { EVENTS, STICKS, DIRECTIONS, BUTTON_MAPPING, AXIS_MOVEMENT_THRESHOLD };","// Helper functions\n\nconst log = message => {\n if (console.warn && typeof console.warn === 'function') {\n console.warn(message);\n } else {\n console.log(message);\n }\n};\nconst findButtonMapping = (index, mapping) => {\n let results = [];\n\n Object.keys(mapping).forEach(key => {\n if (mapping[key] === index) {\n results.push(key);\n } else if (Array.isArray(mapping[key]) && mapping[key].indexOf(index) !== -1) {\n results.push(key);\n }\n });\n\n return results;\n};\nconst hasVibrationSupport = vibrationActuator => {\n return vibrationActuator && vibrationActuator.type && vibrationActuator.playEffect && typeof vibrationActuator.playEffect === 'function' ? true : false;\n};\nconst hasGamepadApiSupport = () => {\n return window.navigator.getGamepads && typeof window.navigator.getGamepads === 'function' ? true : false;\n};\n\nexport { log, findButtonMapping, hasVibrationSupport, hasGamepadApiSupport };","// Joypad library\n\nimport emitter from './emitter';\nimport { EVENTS, AXIS_MOVEMENT_THRESHOLD } from './constants';\nimport { log, hasVibrationSupport } from './helpers';\n\nconst joypad = {\n loopStarted: false,\n instances: {},\n buttonEvents: {\n joypad: []\n },\n settings: {\n axisMovementThreshold: AXIS_MOVEMENT_THRESHOLD\n },\n remove: function (index) {\n return delete this.instances[index];\n },\n on: function (event, callback) {\n switch (event) {\n case EVENTS.CONNECT.ALIAS:\n return emitter.subscribe(EVENTS.CONNECT.ALIAS, callback);\n case EVENTS.DISCONNECT.ALIAS:\n return emitter.subscribe(EVENTS.DISCONNECT.ALIAS, callback);\n case EVENTS.BUTTON_PRESS.ALIAS:\n return emitter.subscribe(EVENTS.BUTTON_PRESS.ALIAS, callback);\n case EVENTS.BUTTON_RELEASE.ALIAS:\n return emitter.subscribe(EVENTS.BUTTON_RELEASE.ALIAS, callback);\n case EVENTS.AXIS_MOVEMENT.ALIAS:\n return emitter.subscribe(EVENTS.AXIS_MOVEMENT.ALIAS, callback);\n }\n },\n vibrate: function (gamepadInstance, options) {\n const { vibrationActuator } = gamepadInstance;\n const vibrationSettings = options ? options : this.settings.vibration;\n\n if (hasVibrationSupport(vibrationActuator)) {\n const { type } = vibrationActuator;\n\n return gamepadInstance.vibrationActuator.playEffect(type, vibrationSettings);\n } else {\n log('No vibration actuator interface found - https://developer.mozilla.org/en-US/docs/Web/API/GamepadHapticActuator');\n }\n },\n set: function (settings) {\n const { axisMovementThreshold, vibration, customButtonMapping } = settings;\n const parsedValue = parseFloat(axisMovementThreshold);\n\n if (!isNaN(parsedValue)) {\n this.settings.axisMovementThreshold = parsedValue;\n }\n this.settings.vibration = vibration;\n this.settings.customButtonMapping = customButtonMapping;\n },\n trigger: function (event, data) {\n return emitter.publish(event, data);\n }\n};\n\nexport default joypad;\n","// Joypad events handler\n\nimport emitter from './emitter';\nimport joypad from './joypad';\nimport loop from './loop';\nimport { EVENTS, STICKS, DIRECTIONS, BUTTON_MAPPING } from './constants';\nimport { findButtonMapping } from './helpers';\n\nconst initEventListeners = () => {\n window.addEventListener(EVENTS.CONNECT.NATIVE, e => {\n emitter.publish(EVENTS.CONNECT.ALIAS, e);\n\n // Start loop on gamepad connection if not already started\n if (!joypad.loopStarted) {\n joypad.loopStarted = true;\n return loop.start();\n }\n });\n window.addEventListener(EVENTS.DISCONNECT.NATIVE, e => {\n emitter.publish(EVENTS.DISCONNECT.ALIAS, e);\n\n // Remove instance and reset events on gamepad disconnection\n joypad.remove(e.gamepad.index);\n joypad.buttonEvents.joypad[e.gamepad.index] = null;\n\n // Stop loop if all gamepads have been disconnected\n if (!Object.keys(joypad.instances).length) {\n joypad.loopStarted = false;\n return loop.stop(loop.id);\n }\n });\n window.addEventListener(EVENTS.BUTTON_PRESS.ALIAS, e => {\n return emitter.publish(EVENTS.BUTTON_PRESS.ALIAS, e);\n });\n window.addEventListener(EVENTS.BUTTON_RELEASE.ALIAS, e => {\n return emitter.publish(EVENTS.BUTTON_RELEASE.ALIAS, e);\n });\n window.addEventListener(EVENTS.AXIS_MOVEMENT.ALIAS, e => {\n return emitter.publish(EVENTS.AXIS_MOVEMENT.ALIAS, e);\n });\n};\nconst listenToButtonEvents = gamepad => {\n gamepad.buttons.forEach((button, index) => {\n const { customButtonMapping } = joypad.settings;\n const buttonMapping = customButtonMapping ? customButtonMapping : BUTTON_MAPPING;\n const keys = findButtonMapping(index, buttonMapping);\n const { buttonEvents } = joypad;\n\n if (keys && keys.length) {\n keys.forEach(key => {\n\n // If button is pressed then set press status of button\n if (button.pressed) {\n if (!buttonEvents.joypad[gamepad.index][key]) {\n buttonEvents.joypad[gamepad.index][key] = {\n pressed: true,\n hold: false,\n released: false\n };\n }\n\n // Set button event data\n buttonEvents.joypad[gamepad.index][key].button = button;\n buttonEvents.joypad[gamepad.index][key].index = index;\n buttonEvents.joypad[gamepad.index][key].gamepad = gamepad;\n }\n\n // If button is not pressed then set release status of button\n else if (!button.pressed && buttonEvents.joypad[gamepad.index][key]) {\n buttonEvents.joypad[gamepad.index][key].released = true;\n buttonEvents.joypad[gamepad.index][key].hold = false;\n }\n });\n }\n });\n};\nconst listenToAxisMovements = gamepad => {\n const axisMovementEvent = eventData => new CustomEvent(EVENTS.AXIS_MOVEMENT.ALIAS, { detail: eventData });\n const { axisMovementThreshold } = joypad.settings;\n const { axes } = gamepad;\n const totalAxisIndexes = axes.length;\n const totalSticks = totalAxisIndexes / 2;\n\n axes.forEach((axis, index) => {\n if (Math.abs(axis) > axisMovementThreshold) {\n let stickMoved = null;\n let directionOfMovement = null;\n let axisMovementValue = axis;\n\n if (index < totalSticks) {\n stickMoved = STICKS.LEFT.NAME;\n } else {\n stickMoved = STICKS.RIGHT.NAME;\n }\n\n if (index === STICKS.LEFT.AXES.X || index === STICKS.RIGHT.AXES.X) {\n directionOfMovement = axis < 0 ? DIRECTIONS.LEFT : DIRECTIONS.RIGHT;\n }\n if (index === STICKS.LEFT.AXES.Y || index === STICKS.RIGHT.AXES.Y) {\n directionOfMovement = axis < 0 ? DIRECTIONS.TOP : DIRECTIONS.BOTTOM;\n }\n\n const eventData = { gamepad, totalSticks, stickMoved, directionOfMovement, axisMovementValue, axis: index };\n return window.dispatchEvent(axisMovementEvent(eventData));\n }\n });\n};\nconst dispatchCustomEvent = (eventName, buttonEvents, buttonName) => {\n const joypadEvent = eventData => new CustomEvent(eventName, { detail: eventData });\n const { index, gamepad } = buttonEvents[buttonName];\n const eventData = {\n buttonName,\n button: buttonEvents[buttonName].button,\n index,\n gamepad\n };\n \n window.dispatchEvent(joypadEvent(eventData));\n};\nconst handleButtonEvent = (buttonName, buttonEvents) => {\n // Fire button press event\n if (buttonEvents[buttonName].pressed) {\n dispatchCustomEvent(EVENTS.BUTTON_PRESS.ALIAS, buttonEvents, buttonName);\n\n // Reset button usage flags\n buttonEvents[buttonName].pressed = false;\n buttonEvents[buttonName].hold = true;\n // Set last button press to fire button release event\n buttonEvents[buttonName].last_event = EVENTS.BUTTON_PRESS.ALIAS;\n }\n\n // Button being held\n else if (buttonEvents[buttonName].hold) {}\n\n // Button being released\n else if (buttonEvents[buttonName].released && buttonEvents[buttonName].last_event === EVENTS.BUTTON_PRESS.ALIAS) {\n dispatchCustomEvent(EVENTS.BUTTON_RELEASE.ALIAS, buttonEvents, buttonName);\n\n delete buttonEvents[buttonName];\n }\n};\n\ninitEventListeners();\nexport { listenToButtonEvents, listenToAxisMovements, handleButtonEvent }\n","// Main loop\n\nimport joypad from './joypad';\nimport { listenToButtonEvents, listenToAxisMovements, handleButtonEvent } from './events';\n\nconst loop = {\n id: null,\n start: function () {\n const requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame;\n const { buttonEvents } = joypad;\n let gamepads = window.navigator.getGamepads();\n gamepads = Array.prototype.slice.call(gamepads);\n\n // Loop all the gamepads on each frame\n gamepads.forEach((gamepad, index) => {\n if (gamepad) {\n // Initialise joypad instance events if not present\n if (!buttonEvents.joypad[index]) {\n buttonEvents.joypad[index] = {};\n }\n\n // Update gamepad instance data\n joypad.instances[index] = gamepad;\n\n // Listen to button press events\n listenToButtonEvents(gamepad);\n\n // Listen to axis movement events\n listenToAxisMovements(gamepad);\n }\n });\n\n // Handle button events on each frame\n buttonEvents.joypad.forEach(events => {\n if (events) {\n Object.keys(events).forEach(key => {\n handleButtonEvent(key, events);\n });\n }\n });\n\n // Set loop start flag and recursively call the start function on each frame\n this.id = requestAnimationFrame(this.start.bind(this));\n },\n stop: function (id) {\n const cancelAnimationFrame = window.cancelAnimationFrame || window.webkitCancelAnimationFrame;\n\n return cancelAnimationFrame(id);\n }\n};\n\nexport default loop;","// Entry point\n\nimport './events';\nimport joypad from './joypad';\nimport { log, hasGamepadApiSupport } from './helpers';\n\nif (hasGamepadApiSupport()) {\n window.joypad = joypad;\n} else {\n window.joypad = {};\n log('Your browser does not support the Gamepad API - https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API');\n}"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/emitter.js","/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/constants.js","/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/helpers.js","/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/joypad.js","/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/events.js","/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/loop.js","/Users/arunmichaeldsouza/Workspace/GitHub/joypad.js/src/index.js"],"sourcesContent":["// Events emitter\n\nconst emitter = {\n events: {},\n publish: function (event, data) {\n if (this.events.hasOwnProperty(event)) {\n this.events[event].forEach(listener => {\n return listener(data);\n });\n }\n },\n subscribe: function (event, listener) {\n if (!this.events.hasOwnProperty(event)) {\n this.events[event] = [];\n }\n this.events[event].push(listener);\n\n return {\n unsubscribe: function () {\n const index = this.events[event].indexOf(listener);\n if (index !== -1) this.events[event].splice(index, 1);\n }.bind(this)\n };\n }\n};\n\nexport default emitter;\n","// Global constants \n\nconst EVENTS = {\n CONNECT: {\n NATIVE: 'gamepadconnected',\n ALIAS: 'connect'\n },\n DISCONNECT: {\n NATIVE: 'gamepaddisconnected',\n ALIAS: 'disconnect'\n },\n BUTTON_PRESS: {\n NATIVE: null,\n ALIAS: 'button_press'\n },\n BUTTON_RELEASE: {\n NATIVE: null,\n ALIAS: 'button_release'\n },\n AXIS_MOVEMENT: {\n NATIVE: null,\n ALIAS: 'axis_move'\n }\n};\nconst STICKS = {\n LEFT: {\n NAME: 'left_stick',\n AXES: {\n X: 0,\n Y: 1\n }\n },\n RIGHT: {\n NAME: 'right_stick',\n AXES: {\n X: 2,\n Y: 3\n }\n }\n};\nconst DIRECTIONS = {\n LEFT: 'left',\n RIGHT: 'right',\n TOP: 'top',\n BOTTOM: 'bottom'\n};\nconst BUTTON_MAPPING = {\n 'button_0': 0,\n 'button_1': 1,\n 'button_2': 2,\n 'button_3': 3,\n 'button_4': 4,\n 'button_5': 5,\n 'button_6': 6,\n 'button_7': 7,\n 'button_8': 8,\n 'button_9': 9,\n 'button_10': 10,\n 'button_11': 11,\n 'button_12': 12,\n 'button_13': 13,\n 'button_14': 14,\n 'button_15': 15,\n 'button_16': 16,\n 'button_17': 17\n};\nconst AXIS_MOVEMENT_THRESHOLD = 0.8;\n\nexport { EVENTS, STICKS, DIRECTIONS, BUTTON_MAPPING, AXIS_MOVEMENT_THRESHOLD };","// Helper functions\n\nconst log = message => {\n if (console.warn && typeof console.warn === 'function') {\n console.warn(message);\n } else {\n console.log(message);\n }\n};\nconst findButtonMapping = (index, mapping) => {\n let results = [];\n\n Object.keys(mapping).forEach(key => {\n if (mapping[key] === index) {\n results.push(key);\n } else if (Array.isArray(mapping[key]) && mapping[key].indexOf(index) !== -1) {\n results.push(key);\n }\n });\n\n return results;\n};\nconst hasVibrationSupport = vibrationActuator => {\n return vibrationActuator && vibrationActuator.type && vibrationActuator.playEffect && typeof vibrationActuator.playEffect === 'function' ? true : false;\n};\nconst hasGamepadApiSupport = () => {\n return window.navigator.getGamepads && typeof window.navigator.getGamepads === 'function' ? true : false;\n};\n\nexport { log, findButtonMapping, hasVibrationSupport, hasGamepadApiSupport };","// Joypad library\n\nimport emitter from './emitter';\nimport { EVENTS, AXIS_MOVEMENT_THRESHOLD } from './constants';\nimport { log, hasVibrationSupport } from './helpers';\n\nconst joypad = {\n loopStarted: false,\n instances: {},\n buttonEvents: {\n joypad: []\n },\n settings: {\n axisMovementThreshold: AXIS_MOVEMENT_THRESHOLD\n },\n remove: function (index) {\n return delete this.instances[index];\n },\n on: function (event, callback) {\n switch (event) {\n case EVENTS.CONNECT.ALIAS:\n return emitter.subscribe(EVENTS.CONNECT.ALIAS, callback);\n case EVENTS.DISCONNECT.ALIAS:\n return emitter.subscribe(EVENTS.DISCONNECT.ALIAS, callback);\n case EVENTS.BUTTON_PRESS.ALIAS:\n return emitter.subscribe(EVENTS.BUTTON_PRESS.ALIAS, callback);\n case EVENTS.BUTTON_RELEASE.ALIAS:\n return emitter.subscribe(EVENTS.BUTTON_RELEASE.ALIAS, callback);\n case EVENTS.AXIS_MOVEMENT.ALIAS:\n return emitter.subscribe(EVENTS.AXIS_MOVEMENT.ALIAS, callback);\n }\n },\n vibrate: function (gamepadInstance, options) {\n const { vibrationActuator } = gamepadInstance;\n const vibrationSettings = options ? options : this.settings.vibration;\n\n if (hasVibrationSupport(vibrationActuator)) {\n const { type } = vibrationActuator;\n\n return gamepadInstance.vibrationActuator.playEffect(type, vibrationSettings);\n } else {\n log('No vibration actuator interface found - https://developer.mozilla.org/en-US/docs/Web/API/GamepadHapticActuator');\n }\n },\n set: function (settings) {\n const { axisMovementThreshold, vibration, customButtonMapping } = settings;\n const parsedValue = parseFloat(axisMovementThreshold);\n\n if (!isNaN(parsedValue)) {\n this.settings.axisMovementThreshold = parsedValue;\n }\n this.settings.vibration = vibration;\n this.settings.customButtonMapping = customButtonMapping;\n },\n trigger: function (event, data) {\n return emitter.publish(event, data);\n }\n};\n\nexport default joypad;\n","// Joypad events handler\n\nimport emitter from './emitter';\nimport joypad from './joypad';\nimport loop from './loop';\nimport { EVENTS, STICKS, DIRECTIONS, BUTTON_MAPPING } from './constants';\nimport { findButtonMapping } from './helpers';\n\nconst initEventListeners = () => {\n window.addEventListener(EVENTS.CONNECT.NATIVE, e => {\n emitter.publish(EVENTS.CONNECT.ALIAS, e);\n\n // Start loop on gamepad connection if not already started\n if (!joypad.loopStarted) {\n joypad.loopStarted = true;\n return loop.start();\n }\n });\n window.addEventListener(EVENTS.DISCONNECT.NATIVE, e => {\n emitter.publish(EVENTS.DISCONNECT.ALIAS, e);\n\n // Remove instance and reset events on gamepad disconnection\n joypad.remove(e.gamepad.index);\n joypad.buttonEvents.joypad[e.gamepad.index] = null;\n\n // Stop loop if all gamepads have been disconnected\n if (!Object.keys(joypad.instances).length) {\n joypad.loopStarted = false;\n return loop.stop(loop.id);\n }\n });\n window.addEventListener(EVENTS.BUTTON_PRESS.ALIAS, e => {\n return emitter.publish(EVENTS.BUTTON_PRESS.ALIAS, e);\n });\n window.addEventListener(EVENTS.BUTTON_RELEASE.ALIAS, e => {\n return emitter.publish(EVENTS.BUTTON_RELEASE.ALIAS, e);\n });\n window.addEventListener(EVENTS.AXIS_MOVEMENT.ALIAS, e => {\n return emitter.publish(EVENTS.AXIS_MOVEMENT.ALIAS, e);\n });\n};\nconst listenToButtonEvents = gamepad => {\n gamepad.buttons.forEach((button, index) => {\n const { customButtonMapping } = joypad.settings;\n const buttonMapping = customButtonMapping ? customButtonMapping : BUTTON_MAPPING;\n const keys = findButtonMapping(index, buttonMapping);\n const { buttonEvents } = joypad;\n\n if (keys && keys.length) {\n keys.forEach(key => {\n\n // If button is pressed then set press status of button\n if (button.pressed) {\n if (!buttonEvents.joypad[gamepad.index][key]) {\n buttonEvents.joypad[gamepad.index][key] = {\n pressed: true,\n hold: false,\n released: false\n };\n }\n\n // Set button event data\n buttonEvents.joypad[gamepad.index][key].button = button;\n buttonEvents.joypad[gamepad.index][key].index = index;\n buttonEvents.joypad[gamepad.index][key].gamepad = gamepad;\n }\n\n // If button is not pressed then set release status of button\n else if (!button.pressed && buttonEvents.joypad[gamepad.index][key]) {\n buttonEvents.joypad[gamepad.index][key].released = true;\n buttonEvents.joypad[gamepad.index][key].hold = false;\n }\n });\n }\n });\n};\nconst listenToAxisMovements = gamepad => {\n const axisMovementEvent = eventData => new CustomEvent(EVENTS.AXIS_MOVEMENT.ALIAS, { detail: eventData });\n const { axisMovementThreshold } = joypad.settings;\n const { axes } = gamepad;\n const totalAxisIndexes = axes.length;\n const totalSticks = totalAxisIndexes / 2;\n\n axes.forEach((axis, index) => {\n if (Math.abs(axis) > axisMovementThreshold) {\n let stickMoved = null;\n let directionOfMovement = null;\n let axisMovementValue = axis;\n\n if (index < totalSticks) {\n stickMoved = STICKS.LEFT.NAME;\n } else {\n stickMoved = STICKS.RIGHT.NAME;\n }\n\n if (index === STICKS.LEFT.AXES.X || index === STICKS.RIGHT.AXES.X) {\n directionOfMovement = axis < 0 ? DIRECTIONS.LEFT : DIRECTIONS.RIGHT;\n }\n if (index === STICKS.LEFT.AXES.Y || index === STICKS.RIGHT.AXES.Y) {\n directionOfMovement = axis < 0 ? DIRECTIONS.TOP : DIRECTIONS.BOTTOM;\n }\n\n const eventData = { gamepad, totalSticks, stickMoved, directionOfMovement, axisMovementValue, axis: index };\n return window.dispatchEvent(axisMovementEvent(eventData));\n }\n });\n};\nconst dispatchCustomEvent = (eventName, buttonEvents, buttonName) => {\n const joypadEvent = eventData => new CustomEvent(eventName, { detail: eventData });\n const { index, gamepad } = buttonEvents[buttonName];\n const eventData = {\n buttonName,\n button: buttonEvents[buttonName].button,\n index,\n gamepad\n };\n \n window.dispatchEvent(joypadEvent(eventData));\n};\nconst handleButtonEvent = (buttonName, buttonEvents) => {\n // Fire button press event\n if (buttonEvents[buttonName].pressed) {\n dispatchCustomEvent(EVENTS.BUTTON_PRESS.ALIAS, buttonEvents, buttonName);\n\n // Reset button usage flags\n buttonEvents[buttonName].pressed = false;\n buttonEvents[buttonName].hold = true;\n // Set last button press to fire button release event\n buttonEvents[buttonName].last_event = EVENTS.BUTTON_PRESS.ALIAS;\n }\n\n // Button being held\n else if (buttonEvents[buttonName].hold) {}\n\n // Button being released\n else if (buttonEvents[buttonName].released && buttonEvents[buttonName].last_event === EVENTS.BUTTON_PRESS.ALIAS) {\n dispatchCustomEvent(EVENTS.BUTTON_RELEASE.ALIAS, buttonEvents, buttonName);\n\n delete buttonEvents[buttonName];\n }\n};\n\ninitEventListeners();\nexport { listenToButtonEvents, listenToAxisMovements, handleButtonEvent }\n","// Main loop\n\nimport joypad from './joypad';\nimport { listenToButtonEvents, listenToAxisMovements, handleButtonEvent } from './events';\n\nconst loop = {\n id: null,\n start: function () {\n const requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame;\n const { buttonEvents } = joypad;\n let gamepads = window.navigator.getGamepads();\n gamepads = Array.prototype.slice.call(gamepads);\n\n // Loop all the gamepads on each frame\n gamepads.forEach((gamepad, index) => {\n if (gamepad) {\n // Initialise joypad instance events if not present\n if (!buttonEvents.joypad[index]) {\n buttonEvents.joypad[index] = {};\n }\n\n // Update gamepad instance data\n joypad.instances[index] = gamepad;\n\n // Listen to button press events\n listenToButtonEvents(gamepad);\n\n // Listen to axis movement events\n listenToAxisMovements(gamepad);\n }\n });\n\n // Handle button events on each frame\n buttonEvents.joypad.forEach(events => {\n if (events) {\n Object.keys(events).forEach(key => {\n handleButtonEvent(key, events);\n });\n }\n });\n\n // Set loop start flag and recursively call the start function on each frame\n this.id = requestAnimationFrame(this.start.bind(this));\n },\n stop: function (id) {\n const cancelAnimationFrame = window.cancelAnimationFrame || window.webkitCancelAnimationFrame;\n\n return cancelAnimationFrame(id);\n }\n};\n\nexport default loop;","// Entry point\n\nimport './events';\nimport joypad from './joypad';\nimport { log, hasGamepadApiSupport } from './helpers';\n\nif (hasGamepadApiSupport()) {\n window.joypad = joypad;\n} else {\n window.joypad = {};\n log('Your browser does not support the Gamepad API - https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API');\n}"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 68eeb72..7e2d838 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "joypad.js", - "version": "2.3.3", + "version": "2.3.5", "description": "A JavaScript library that lets you connect various gaming controllers to your browser using the Gamepad API.", "main": "./dist/joypad.min.js", "scripts": {