diff --git a/gamepad.js b/gamepad.js new file mode 100644 index 0000000..e38cd4b --- /dev/null +++ b/gamepad.js @@ -0,0 +1,77 @@ +var haveEvents = 'ongamepadconnected' in window; +var controllers = {}; + +function connecthandler(e) { + addgamepad(e.gamepad); +} + +function addgamepad(gamepad) { + controllers[gamepad.index] = gamepad; + requestAnimationFrame(updateStatus); +} + +function disconnecthandler(e) { + removegamepad(e.gamepad); +} + +function removegamepad(gamepad) { + delete controllers[gamepad.index]; +} + + + +function updateStatus() { + if (!haveEvents) { + scangamepads(); + } + + var i = 0; + var j; + + for (j in controllers) { + var controller = controllers[j]; + + for (i = 0; i < controller.buttons.length; i++) { + var val = controller.buttons[i]; + var pressed = val == 1.0; + if (typeof(val) == "object") { + pressed = val.pressed; + val = val.value; + } + + if (pressed) { + if(buttonPressed) { buttonPressed(i); } + } + } + + /*var axes = d.getElementsByClassName("axis"); + for (i = 0; i < controller.axes.length; i++) { + var a = axes[i]; + a.innerHTML = i + ": " + controller.axes[i].toFixed(4); + a.setAttribute("value", controller.axes[i] + 1); + } */ + } + + requestAnimationFrame(updateStatus); +} + +function scangamepads() { + var gamepads = navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : []); + for (var i = 0; i < gamepads.length; i++) { + if (gamepads[i]) { + if (gamepads[i].index in controllers) { + controllers[gamepads[i].index] = gamepads[i]; + } else { + addgamepad(gamepads[i]); + } + } + } +} + + +window.addEventListener("gamepadconnected", connecthandler); +window.addEventListener("gamepaddisconnected", disconnecthandler); + +if (!haveEvents) { + setInterval(scangamepads, 500); +} diff --git a/gamepadtest.html b/gamepadtest.html new file mode 100644 index 0000000..9e2bb26 --- /dev/null +++ b/gamepadtest.html @@ -0,0 +1,33 @@ + + +
+ + + + + + + + + diff --git a/index.html b/index.html index bb7bdbd..c35c8eb 100644 --- a/index.html +++ b/index.html @@ -42,7 +42,7 @@ @@ -115,6 +115,8 @@ + + + +