Agar - Io Gamepad Userscript
Agar - Io Gamepad Userscript
// Get canvas and create an object with (fake) mouse position properties.
var canvas = document.getElementById("canvas");
var endPoint = {clientX: innerWidth / 2, clientY: innerHeight / 2};
var gamepadIndex = -1; // -1 means M+KB
var currentGamepad;
var pressedButtons = [];
var holdMoveEvent = null;
var lastStickMag = 0;
var last_x = 0;
var last_y = 0;
var ButtonStates = {
UP: -1,
DOWN: 1,
IDLE: 0
};
function canGame() {
return "getGamepads" in navigator;
}
function refreshGamepadList() {
var gamepadList = navigator.getGamepads();
console.log(gamepadList);
$("#gamepads option.gamepad:not(.isconnected)").remove();
}
$(document).ready(function() {
if(!canGame()) {
console.log("Gamepad API not supported");
return;
}
$(window).on('keydown', function(event) {
if (event.repeat && event.type === "keydown") return;
return;
}
});
$("#helloDialog #playBtn").click(function() {
if(gamepadIndex < 0)
canvas.onmousemove = holdMoveEvent;
});
$("#gamepads").change(function() {
gamepadIndex = $("#gamepads").val();
if(gamepadIndex >= 0)
currentGamepad = navigator.getGamepads()[gamepadIndex];
});
$(window).on("gamepadconnected", function(e) {
refreshGamepadList();
});
$(window).on('gamepaddisconnected', function(e) {
refreshGamepadList();
});
refreshGamepadList();
requestAnimationFrame(handleGamepadLoop);
});
if(gamepad.buttons[buttonIndex].pressed) {
if(findButton === -1) {
pressedButtons.push(buttonIndex);
return ButtonStates.DOWN;
}
} else {
if(findButton != -1) {
pressedButtons.splice(findButton, 1);
return ButtonStates.UP;
}
}
return ButtonStates.IDLE;
}
function handleGamepadLoop() {
setTimeout(handleGamepadLoop, 16);
if(gamepadIndex < 0)
return;
if(gamepad == undefined) {
canvas.onmousemove = holdMoveEvent; // Gamepad's gone, let the mouse come
back.
return;
}
last_x = x_result;
last_y = y_result;
lastStickMag = stickMag > 0.5 ? stickMag : 0;
canvas.onmousedown(mouseLoc);
if(shouldEject == ButtonStates.DOWN) {
$(window).simulateKeyDown(87);
} else if(shouldEject == ButtonStates.UP) {
$(window).simulateKeyUp(87);
}
if(shouldSplit == ButtonStates.DOWN) {
$(window).simulateKeyDown(32);
} else if(shouldSplit == ButtonStates.UP) {
$(window).simulateKeyUp(32);
}
if(shouldPause == ButtonStates.DOWN) {
if($("#overlays").css('display') == "none") {
$(window).simulateKeyDown(27);
} else {
$("#playBtn").click();
}
} else if(shouldPause == ButtonStates.UP) {
$(window).simulateKeyUp(27);
}
};