0% found this document useful (0 votes)
154 views4 pages

Agar - Io Gamepad Userscript

Uploaded by

sonic100222
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
154 views4 pages

Agar - Io Gamepad Userscript

Uploaded by

sonic100222
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

// ==UserScript==

// @name Agar.io Gamepad Script


// @description Based on WASD script by ProfessorTag and contributors
// @version 0.1
// @match http://agar.io/
// @grant none
// ==/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
};

jQuery.fn.simulateKeyDown = function (character) {


jQuery(this).trigger({ type: 'keydown', keyCode: character });
};

jQuery.fn.simulateKeyUp = function (character) {


jQuery(this).trigger({ type: 'keyup', keyCode: character });
};

// Stop the default mouse move behavior.


(function nullMouseMove(startTime) {
if (Date.now() - startTime > 5000) return;
if (!canvas.onmousemove) return setTimeout(nullMouseMove, 0, startTime);
holdMoveEvent = canvas.onmousemove;
canvas.onmousemove = null;
})(Date.now());

function canGame() {
return "getGamepads" in navigator;
}

function refreshGamepadList() {
var gamepadList = navigator.getGamepads();

console.log(gamepadList);

for(var i = 0; i < gamepadList.length; i++) {


var gamepad = gamepadList[i];

if(gamepad === undefined)


return;

var padLookup = $("#gamepads #gp" + gamepad.index);


if(padLookup.length > 0) {
$(padLookup).addClass("isconnected");
} else {
$("#gamepads").append('<option class="gamepad isconnected" value="' +
gamepad.index + '" id="gp' + gamepad.index +'">' + gamepad.id + '</option>');
}
}

$("#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;

if (event.which == 82 && event.type === "keydown") {


if (canvas.onmousemove == null) {
canvas.onmousemove = holdMoveEvent;
} else {
canvas.onmousemove = null;
}

return;
}
});

$(window).on('blur resize', function() {


endPoint = {clientX: innerWidth / 2, clientY: innerHeight / 2};
canvas.onmousedown(endPoint);
});

$("#helloDialog #playBtn").click(function() {
if(gamepadIndex < 0)
canvas.onmousemove = holdMoveEvent;
});

$("#helloDialog #region").parent().after('<div class="form-group"><select


id="gamepads" class="form-control"><option value="-1" class="mkb">Mouse &amp;
Keyboard</option></select></div>');

$("#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);
});

function ButtonDown(gamepad, buttonIndex) {


var findButton = $.inArray(buttonIndex, pressedButtons);

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;

var gamepad = navigator.getGamepads()[gamepadIndex];

if(gamepad == undefined) {
canvas.onmousemove = holdMoveEvent; // Gamepad's gone, let the mouse come
back.
return;
}

var x_axis = gamepad.axes[0];


var y_axis = gamepad.axes[1];
var x_result = 0;
var y_result = 0;

var stickMag = Math.sqrt((x_axis * x_axis) + (y_axis * y_axis));

if(stickMag >= 0.5) { // Our dead-zone.


// Normalise and * 500
x_result = (x_axis / stickMag) * 500;
y_result = (y_axis / stickMag) * 500;
} else if(lastStickMag >= 0.5) { // Stick has only just come off
x_result = last_x / 8;
y_result = last_y / 8;
}

last_x = x_result;
last_y = y_result;
lastStickMag = stickMag > 0.5 ? stickMag : 0;

var mouseLoc = { clientX: endPoint.clientX, clientY: endPoint.clientY};


mouseLoc.clientX += x_result;
mouseLoc.clientY += y_result;

canvas.onmousedown(mouseLoc);

// A for Split, X for W

var shouldSplit = ButtonDown(gamepad, 0);


var shouldEject = ButtonDown(gamepad, 2);
var shouldPause = ButtonDown(gamepad, 9);

/*for(var i = 0; i < gamepad.buttons.length; i++) {


if(gamepad.buttons[i].pressed)
console.log("Button " + i + " pressed");
}*/

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);
}
};

You might also like