You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
40 lines
1.3 KiB
# Gamepad HTML5 API |
|
class Gamepad |
|
constructor: (pad) -> |
|
@gamepad = pad |
|
@map = @detectMapping(pad.id, navigator.userAgent) |
|
detectMapping: (id, browser) -> |
|
for map in salet.view.gamepadmappings |
|
for device in map.supported |
|
if id.indexOf(device.id) != -1 and browser.indexOf(device.browser) != -1 |
|
return map |
|
# mapping not found, return the first map for this browser |
|
for device in map.supported |
|
if browser.indexOf(device.browser) != -1 |
|
return map |
|
# browser and device are not supported, just return the first map |
|
console.warn "Browser and device are not found, gamepad support not guaranteed." |
|
return salet.view.gamepadmappings[0] |
|
axis: (name) -> |
|
map = @map.axes[name] |
|
unless map? |
|
return 0 |
|
if map.index? |
|
return @gamepad.axes[map.index] |
|
if map.buttonPositive? and @gamepad.buttons[map.buttonPositive].pressed |
|
return 1 |
|
if map.buttonNegative? and @gamepad.buttons[map.buttonNegative].pressed |
|
return -1 |
|
return 0 |
|
button: (name) -> |
|
map = @map.buttons[name] |
|
unless map? |
|
return 0 |
|
if map.index? |
|
return @gamepad.buttons[map.index].pressed |
|
if map.axis? |
|
if map.direction < 0 |
|
return @gamepad.axes[map.axis] < -0.75 |
|
else |
|
return @gamepad.axes[map.axis] > 0.75 |
|
return false
|
|
|