From c0c005221a43d33910957d91a07398074cbef9e3 Mon Sep 17 00:00:00 2001 From: e7d Date: Sat, 5 Nov 2016 22:53:05 +0100 Subject: [PATCH] added zoom handling --- js/gamepad.js | 65 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/js/gamepad.js b/js/gamepad.js index 25568fa..635b7e2 100644 --- a/js/gamepad.js +++ b/js/gamepad.js @@ -33,7 +33,7 @@ var mapping = { window.addEventListener("gamepadconnected", onGamepadConnect); window.addEventListener("gamepaddisconnected", onGamepadDisconnect); -window.addEventListener("keypress", onKeyPress); +window.addEventListener("keydown", onKeyDown); function onGamepadConnect(e) { addGamepad(e.gamepad); @@ -43,16 +43,23 @@ function onGamepadDisconnect(e) { removeGamepad(e.gamepad.index); } -function onKeyPress(e) { - switch (e.key) { - case "d": - case "D": +function onKeyDown(e) { + switch (e.code) { + case "Delete": + case "Escape": removeGamepad(activeGamepadIndex); break; - case "c": - case "C": + case "KeyC": changeGamepadColor(); break; + case "NumpadAdd": + case "Equal": + changeZoom("+"); + break; + case "NumpadSubtract": + case "Minus": + changeZoom("-"); + break; } } @@ -106,7 +113,7 @@ function mapGamepad(gamepad) { if (gamepadIdentifiers[gamepadType].id.test(gamepad.id)) { activeGamepadType = gamepadType; activeGamepadIdentifier = gamepadIdentifiers[gamepadType]; - activeGamepadColor = 0; + activeGamepadColorIndex = 0; } } @@ -120,6 +127,16 @@ function mapGamepad(gamepad) { if ($.urlParam('color')) { changeGamepadColor($.urlParam('color')); } + if ($.urlParam('c')) { + changeGamepadColor($.urlParam('c')); + } + + if ($.urlParam('zoom')) { + changeZoom($.urlParam('zoom')); + } + if ($.urlParam('z')) { + changeZoom($.urlParam('z')); + } mapping.buttons = []; for (var buttonIndex = 0; buttonIndex < gamepad.buttons.length; buttonIndex++) { @@ -223,5 +240,35 @@ function changeGamepadColor(gamepadColor) { activeGamepadColorName = activeGamepadIdentifier.colors[activeGamepadColorIndex]; } - $gamepad.attr('data-color', activeGamepadIdentifier.colors[activeGamepadColor]); + $gamepad.attr('data-color', activeGamepadColorName); +} + +function changeZoom(zoomLevel) { + if (! activeGamepadIdentifier) { + return; + } + + if (! zoomLevel) { + return; + } + + if ('+' === zoomLevel && activeGamepadZoomLevel < 2) { + activeGamepadZoomLevel += 0.1; + } + if ('-' === zoomLevel && activeGamepadZoomLevel > 0.2) { + activeGamepadZoomLevel -= 0.1; + } + + if (! isNaN(zoomLevel = parseFloat(zoomLevel))) { + activeGamepadZoomLevel = zoomLevel; + } + + // hack: fix floatjs float issues + activeGamepadZoomLevel = +activeGamepadZoomLevel.toFixed(1); + + $gamepad.css('transform', 'translate(-50%, -50%) scale(' + activeGamepadZoomLevel + ', ' + activeGamepadZoomLevel + ')'); +} + +function toggleHelp(zoomLevel) { + $help.toggleClass('active'); }