Advertisement
Guest User

Untitled

a guest
Aug 30th, 2015
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Agar.io Gamepad Script
  3. // @description Based on WASD script by ProfessorTag and contributors
  4. // @version 0.1
  5. // @match http://agar.io/
  6. // @grant none
  7. // ==/UserScript==
  8.  
  9. // Get canvas and create an object with (fake) mouse position properties.
  10. var canvas = document.getElementById("canvas");
  11. var endPoint = {clientX: innerWidth / 2, clientY: innerHeight / 2};
  12. var gamepadIndex = -1; // -1 means M+KB
  13. var currentGamepad;
  14. var pressedButtons = [];
  15. var holdMoveEvent = null;
  16. var lastStickMag = 0;
  17. var last_x = 0;
  18. var last_y = 0;
  19.  
  20. var ButtonStates = {
  21. UP: -1,
  22. DOWN: 1,
  23. IDLE: 0
  24. };
  25.  
  26. jQuery.fn.simulateKeyDown = function (character) {
  27. jQuery(this).trigger({ type: 'keydown', keyCode: character });
  28. };
  29.  
  30. jQuery.fn.simulateKeyUp = function (character) {
  31. jQuery(this).trigger({ type: 'keyup', keyCode: character });
  32. };
  33.  
  34. // Stop the default mouse move behavior.
  35. (function nullMouseMove(startTime) {
  36. if (Date.now() - startTime > 5000) return;
  37. if (!canvas.onmousemove) return setTimeout(nullMouseMove, 0, startTime);
  38. holdMoveEvent = canvas.onmousemove;
  39. canvas.onmousemove = null;
  40. })(Date.now());
  41.  
  42. function canGame() {
  43. return "getGamepads" in navigator;
  44. }
  45.  
  46. function refreshGamepadList() {
  47. var gamepadList = navigator.getGamepads();
  48.  
  49. console.log(gamepadList);
  50.  
  51. for(var i = 0; i < gamepadList.length; i++) {
  52. var gamepad = gamepadList[i];
  53.  
  54. if(gamepad === undefined)
  55. return;
  56.  
  57. var padLookup = $("#gamepads #gp" + gamepad.index);
  58. if(padLookup.length > 0) {
  59. $(padLookup).addClass("isconnected");
  60. } else {
  61. $("#gamepads").append('<option class="gamepad isconnected" value="' + gamepad.index + '" id="gp' + gamepad.index +'">' + gamepad.id + '</option>');
  62. }
  63. }
  64.  
  65. $("#gamepads option.gamepad:not(.isconnected)").remove();
  66. }
  67.  
  68. $(document).ready(function() {
  69. if(!canGame()) {
  70. console.log("Gamepad API not supported");
  71. return;
  72. }
  73.  
  74. $(window).on('keydown', function(event) {
  75. if (event.repeat && event.type === "keydown") return;
  76.  
  77.  
  78. if (event.which == 82 && event.type === "keydown") {
  79. if (canvas.onmousemove == null) {
  80. canvas.onmousemove = holdMoveEvent;
  81. } else {
  82. canvas.onmousemove = null;
  83. }
  84.  
  85. return;
  86. }
  87. });
  88.  
  89. $(window).on('blur resize', function() {
  90. endPoint = {clientX: innerWidth / 2, clientY: innerHeight / 2};
  91. canvas.onmousedown(endPoint);
  92. });
  93.  
  94. $("#helloDialog #playBtn").click(function() {
  95. if(gamepadIndex < 0)
  96. canvas.onmousemove = holdMoveEvent;
  97. });
  98.  
  99. $("#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>');
  100.  
  101. $("#gamepads").change(function() {
  102. gamepadIndex = $("#gamepads").val();
  103.  
  104. if(gamepadIndex >= 0)
  105. currentGamepad = navigator.getGamepads()[gamepadIndex];
  106. });
  107.  
  108. $(window).on("gamepadconnected", function(e) {
  109. refreshGamepadList();
  110. });
  111.  
  112. $(window).on('gamepaddisconnected', function(e) {
  113. refreshGamepadList();
  114. });
  115.  
  116. refreshGamepadList();
  117.  
  118. requestAnimationFrame(handleGamepadLoop);
  119. });
  120.  
  121. function ButtonDown(gamepad, buttonIndex) {
  122. var findButton = $.inArray(buttonIndex, pressedButtons);
  123.  
  124. if(gamepad.buttons[buttonIndex].pressed) {
  125. if(findButton === -1) {
  126. pressedButtons.push(buttonIndex);
  127. return ButtonStates.DOWN;
  128. }
  129. } else {
  130. if(findButton != -1) {
  131. pressedButtons.splice(findButton, 1);
  132. return ButtonStates.UP;
  133. }
  134. }
  135.  
  136. return ButtonStates.IDLE;
  137. }
  138.  
  139. function handleGamepadLoop() {
  140. setTimeout(handleGamepadLoop, 16);
  141.  
  142. if(gamepadIndex < 0)
  143. return;
  144.  
  145. var gamepad = navigator.getGamepads()[gamepadIndex];
  146.  
  147. if(gamepad == undefined) {
  148. canvas.onmousemove = holdMoveEvent; // Gamepad's gone, let the mouse come back.
  149. return;
  150. }
  151.  
  152. var x_axis = gamepad.axes[0];
  153. var y_axis = gamepad.axes[1];
  154. var x_result = 0;
  155. var y_result = 0;
  156.  
  157. var stickMag = Math.sqrt((x_axis * x_axis) + (y_axis * y_axis));
  158.  
  159. if(stickMag >= 0.5) { // Our dead-zone.
  160. // Normalise and * 500
  161. x_result = (x_axis / stickMag) * 500;
  162. y_result = (y_axis / stickMag) * 500;
  163. } else if(lastStickMag >= 0.5) { // Stick has only just come off
  164. x_result = last_x / 8;
  165. y_result = last_y / 8;
  166. }
  167.  
  168. last_x = x_result;
  169. last_y = y_result;
  170. lastStickMag = stickMag > 0.5 ? stickMag : 0;
  171.  
  172. var mouseLoc = { clientX: endPoint.clientX, clientY: endPoint.clientY};
  173. mouseLoc.clientX += x_result;
  174. mouseLoc.clientY += y_result;
  175.  
  176. canvas.onmousedown(mouseLoc);
  177.  
  178. // A for Split, X for W
  179.  
  180. var shouldSplit = ButtonDown(gamepad, 0);
  181. var shouldEject = ButtonDown(gamepad, 2);
  182. var shouldPause = ButtonDown(gamepad, 9);
  183.  
  184. /*for(var i = 0; i < gamepad.buttons.length; i++) {
  185. if(gamepad.buttons[i].pressed)
  186. console.log("Button " + i + " pressed");
  187. }*/
  188.  
  189. if(shouldEject == ButtonStates.DOWN) {
  190. $(window).simulateKeyDown(87);
  191. } else if(shouldEject == ButtonStates.UP) {
  192. $(window).simulateKeyUp(87);
  193. }
  194.  
  195. if(shouldSplit == ButtonStates.DOWN) {
  196. $(window).simulateKeyDown(32);
  197. } else if(shouldSplit == ButtonStates.UP) {
  198. $(window).simulateKeyUp(32);
  199. }
  200.  
  201. if(shouldPause == ButtonStates.DOWN) {
  202. if($("#overlays").css('display') == "none") {
  203. $(window).simulateKeyDown(27);
  204. } else {
  205. $("#playBtn").click();
  206. }
  207. } else if(shouldPause == ButtonStates.UP) {
  208. $(window).simulateKeyUp(27);
  209. }
  210. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement