Tagging Ashley because he probably knows the most about this but if you have experience with C2's gamepad object I'd appreciate any input (pun intended).
So...I've set up configurable controls for both keyboard and gamepad, using keycodes and such. Pretty cool. It's all saved to a dictionary and I even consolidated keyboard/gamepad inputs to prevent input condition conflicts in a given event.
Anyway, problem is...how am I supposed to set the default configuration when all gamepads use different key codes? I thought all controllers modeled after the xbox 360 one used the same keycodes, but apparently that's not the case. I've read they change with OS, too.
I've been using this for reference...but it's incorrect for all of my gamepads.
And I also found this from microsoft but it's using bitmasks..so..er...
I found this while looking through the gamepad.runtime file
// How to write a mapping:
// Construct 2 normalises all controller states to the format used by the XBox 360 controller
// on Chrome/Windows. Everything is mapped to a single 20-element array in the format:
// 0: A 10: Left analog button
// 1: B 11: Right analog button
// 2: X 12: D-pad up
// 3: Y 13: D-pad down
// 4: Left shoulder button 14: D-pad left
// 5: Right shoulder button 15: D-pad right
// 6: Left shoulder trigger 16: Left analog X axis
// 7: Right shoulder trigger 17: Left analog Y axis
// 8: Back 18: Right analog X axis
// 9: Start 19: Right analog Y axis
// Since different controllers return buttons and axes in a different order on different
// browsers and OSs, all combinations need to be mapped to the above 20-element array,
// called the 'c2state'.
// The buttons mapping array translates a raw button input to the c2state, and the axis
// mapping array translates a raw axis input to the range 0, 1, 2 or 3 (automatically offset
// by 16 to fit in to the c2state). However, sometimes an axis is mapped to a pair of buttons,
// e.g. for the D-pad coming up as an axis. In this case the mapping is another array
// of the buttons to map the axis to; the first element for the button when axis negative,
// and the second element for the button when the axis positive. e.g. XBox 360 on Firefox/Windows
// has axis 5 mapped to D-pad left and right; the entry is [14, 15] to map negative (left) to
// c2state 14 (D-pad left), and positive (right) to c2state 15 (D-pad right).
// If no mapping exists for an OS/browser/controller configuration, it defaults to assuming it's
// the same as Windows/Chrome/XBox 360, done by the defaultMap function.[/code:2kai9r9d]
Do I need to do something similar? So confused -w-;
For the record I'm only using NWjs. Controllers tested are MadCatz 360 Controller, Logitech 360 controller, WiiU pro controller. I also have a PS2 controller but I haven't tested it yet. IIRC C2 didn't even recognize it when I tried long ago.