vigemclient
Version:
Native bindings to the ViGem virtual gamepad driver
84 lines (73 loc) • 1.78 kB
JavaScript
const { XUSB_BUTTON, InputReport } = require('./common');
class X360ControllerReport extends InputReport {
constructor() {
super();
this.reset();
}
reset() {
this.reportObj = {
wButtons: 0,
bLeftTrigger: 0,
bRightTrigger: 0,
sThumbLX: 0,
sThumbLY: 0,
sThumbRX: 0,
sThumbRY: 0,
};
this._dpadH = 0;
this._dpadV = 0;
}
updateButton(name, value) {
if (value) {
this.reportObj.wButtons |= XUSB_BUTTON[name];
} else {
this.reportObj.wButtons &= ~XUSB_BUTTON[name];
}
}
updateAxis(name, value) {
switch (name) {
case "dpadH":
this._dpadH = value;
if (value > 0.5) {
this.updateButton("DPAD_RIGHT", true);
this.updateButton("DPAD_LEFT", false);
} else if (value < -0.5) {
this.updateButton("DPAD_RIGHT", false);
this.updateButton("DPAD_LEFT", true);
} else {
this.updateButton("DPAD_RIGHT", false);
this.updateButton("DPAD_LEFT", false);
}
break;
case "dpadV":
this._dpadV = value;
if (value > 0.5) {
this.updateButton("DPAD_UP", true);
this.updateButton("DPAD_DOWN", false);
} else if (value < -0.5) {
this.updateButton("DPAD_UP", false);
this.updateButton("DPAD_DOWN", true);
} else {
this.updateButton("DPAD_UP", false);
this.updateButton("DPAD_DOWN", false);
}
break;
default:
this.reportObj[name] = value;
}
}
getButtonValue(name) {
return (this.reportObj.wButtons & XUSB_BUTTON[name]) > 0;
}
getAxisValue(name) {
switch (name) {
case "dpadH":
return this._dpadH;
case "dpadV":
return this._dpadV;
default:
return this.reportObj[name];
}
}
}
module.exports = { X360ControllerReport };