Skip to content

Instantly share code, notes, and snippets.

@ansimuz
Created November 24, 2014 23:43
Show Gist options
  • Select an option

  • Save ansimuz/3695fe0c30297894f99f to your computer and use it in GitHub Desktop.

Select an option

Save ansimuz/3695fe0c30297894f99f to your computer and use it in GitHub Desktop.
gamepad.js
ig.module(
'game.plugins.gamepad'
)
.requires(
'impact.input',
'impact.game'
)
.defines(function(){
// Assign some values to the Gamepad buttons. We use an offset of 256
// here so we don't collide with the keyboard buttons when binding.
ig.GAMEPAD_BUTTON_OFFSET = 256;
ig.GAMEPAD = {
FACE_1: ig.GAMEPAD_BUTTON_OFFSET + 0,
FACE_2: ig.GAMEPAD_BUTTON_OFFSET + 1,
FACE_3: ig.GAMEPAD_BUTTON_OFFSET + 2,
FACE_4: ig.GAMEPAD_BUTTON_OFFSET + 3,
LEFT_SHOULDER: ig.GAMEPAD_BUTTON_OFFSET + 4,
RIGHT_SHOULDER: ig.GAMEPAD_BUTTON_OFFSET + 5,
LEFT_SHOULDER_BOTTOM: ig.GAMEPAD_BUTTON_OFFSET + 6,
RIGHT_SHOULDER_BOTTOM: ig.GAMEPAD_BUTTON_OFFSET + 7,
SELECT: ig.GAMEPAD_BUTTON_OFFSET + 8,
START: ig.GAMEPAD_BUTTON_OFFSET + 9,
LEFT_ANALOGUE_STICK: ig.GAMEPAD_BUTTON_OFFSET + 10,
RIGHT_ANALOGUE_STICK: ig.GAMEPAD_BUTTON_OFFSET + 11,
PAD_TOP: ig.GAMEPAD_BUTTON_OFFSET + 12,
PAD_BOTTOM: ig.GAMEPAD_BUTTON_OFFSET + 13,
PAD_LEFT: ig.GAMEPAD_BUTTON_OFFSET + 14,
PAD_RIGHT: ig.GAMEPAD_BUTTON_OFFSET + 15
};
ig.GAMEPAD_AXES = {
LEFT_ANALOGUE_HOR: 0,
LEFT_ANALOGUE_VERT: 1,
RIGHT_ANALOGUE_HOR: 2,
RIGHT_ANALOGUE_VERT: 3
};
ig.normalizeVendorAttribute(navigator, 'getGamepads');
if( !navigator.getGamepads ) {
// No Gamepad support; nothing to do here
return;
}
ig.Input.inject({
gamepad: null,
lastButtons: [],
lastAxes: [],
hasButtonObject: !!window.GamepadButton,
getFirstGamepadSnapshot: function() {
var gamepads = navigator.getGamepads();
for( var i = 0; i < gamepads.length; i++ ) {
if( gamepads[i] ) {
return gamepads[i];
}
}
return null;
},
pollGamepad: function() {
this.toggleGamepad();
if(!ig.gamepadActive){
//ig.log('disable game pad: ' + ig.gamepadActive);
return;
}
this.gamepad = this.getFirstGamepadSnapshot();
if( !this.gamepad ) {
// No gamepad snapshot?
//ig.log('gamepad dis-connected');
return;
}else{
// ig.log('gamepad connected');
}
this.iterateButtonActions();
if(this.gamepad.axes[0] = -1){
}
},
iterateButtonActions: function(){
for( var button = 0; button < this.gamepad.buttons.length; button++ ) {
var action = this.bindings[button+ig.GAMEPAD_BUTTON_OFFSET];
// Is the button bound to an action?
if( action ) {
currentState = this.gamepad.buttons[button].pressed;
var prevState = this.lastButtons[button];
// Was not pressed, but is now?
if( !prevState && currentState ) {
this.actions[action] = true;
this.presses[action] = true;
}
// Was pressed, but is no more?
else if( prevState && !currentState ) {
this.delayedKeyup[action] = true;
}
}
this.lastButtons[button] = currentState;
}
}
});
// Always poll gamepad before each frame
ig.Game.inject({
run: function() {
ig.input.pollGamepad();
this.parent();
}
})
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment