| 
					
				 | 
			
			
				@@ -68,6 +68,8 @@ function Runner(outerContainerId, opt_config) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.loadImages(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this.gamepadPreviousKeyDown = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 window['Runner'] = Runner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -215,7 +217,8 @@ Runner.events = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   VISIBILITY: 'visibilitychange', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   BLUR: 'blur', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   FOCUS: 'focus', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  LOAD: 'load' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  LOAD: 'load', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GAMEPADCONNECTED: 'gamepadconnected' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -565,6 +568,7 @@ Runner.prototype = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case events.KEYDOWN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case events.TOUCHSTART: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case events.MOUSEDOWN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case events.GAMEPADCONNECTED: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           this.onKeyDown(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case events.KEYUP: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -594,6 +598,35 @@ Runner.prototype = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       document.addEventListener(Runner.events.MOUSEDOWN, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       document.addEventListener(Runner.events.MOUSEUP, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    window.addEventListener(Runner.events.GAMEPADCONNECTED, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    window.setInterval(this.pollGamepads.bind(this), 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Convert Gamepad input events to keydown/up events (spacebar) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  pollGamepads: function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var gamepads = navigator.getGamepads(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var keydown = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(var i = 0; i < gamepads.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (gamepads[i] != undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (gamepads[i].buttons.filter(function(e){return e.pressed == true}).length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          keydown = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (keydown != this.gamepadPreviousKeyDown) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.gamepadPreviousKeyDown = keydown; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var event = new Event(keydown ? 'keydown' : 'keyup'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.keyCode = 32;//keys(Runner.keycodes.JUMP)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.which = event.keyCode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.altKey = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.ctrlKey = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.shiftKey = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.metaKey = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      document.dispatchEvent(event); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -625,7 +658,7 @@ Runner.prototype = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // if (e.target != this.detailsButton) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (!this.crashed && (Runner.keycodes.JUMP[e.keyCode] || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           e.type == Runner.events.TOUCHSTART)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           e.type == Runner.events.TOUCHSTART || e.type == Runner.events.GAMEPADCONNECTED)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!this.activated) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           this.loadSounds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           this.activated = true; 
			 |