mirror of
https://github.com/Terncode/pixel.horse.git
synced 2026-09-24 21:55:52 +02:00
* Revert "7f7efbb94bab8574e42d942ad82d414e007b2970" Code style changes should probably be part of a PR
275 lines
14 KiB
TypeScript
275 lines
14 KiB
TypeScript
/* tslint:disable:max-line-length */
|
|
|
|
export interface GamepadMapping {
|
|
axes: AxesTable;
|
|
buttons: ButtonsTable;
|
|
name: string;
|
|
supported: any[];
|
|
}
|
|
|
|
interface Index {
|
|
index: number;
|
|
}
|
|
|
|
interface PositiveNegative {
|
|
buttonPositive: number;
|
|
buttonNegative: number;
|
|
}
|
|
|
|
interface Positive {
|
|
buttonPositive: number;
|
|
}
|
|
|
|
interface AxisDirection {
|
|
axis: number;
|
|
direction: number;
|
|
}
|
|
|
|
export const enum GamepadAxes {
|
|
LeftStickX,
|
|
LeftStickY,
|
|
RightStickX,
|
|
RightStickY,
|
|
DpadX,
|
|
DpadY,
|
|
LeftTrigger,
|
|
RightTrigger,
|
|
}
|
|
|
|
export interface AxesTable {
|
|
[key: number]: Index | Positive | PositiveNegative | undefined;
|
|
}
|
|
|
|
export const enum GamepadButtons {
|
|
A,
|
|
B,
|
|
X,
|
|
Y,
|
|
Back,
|
|
Start,
|
|
DpadDown,
|
|
DpadLeft,
|
|
DpadRight,
|
|
DpadUp,
|
|
LeftShoulder,
|
|
LeftStick,
|
|
LeftStickDown,
|
|
LeftStickLeft,
|
|
LeftStickRight,
|
|
LeftStickUp,
|
|
LeftTrigger,
|
|
RightShoulder,
|
|
RightStick,
|
|
RightStickDown,
|
|
RightStickLeft,
|
|
RightStickRight,
|
|
RightStickUp,
|
|
RightTrigger,
|
|
Home,
|
|
}
|
|
|
|
export interface GamepadBrowser {
|
|
browser: string;
|
|
id: string;
|
|
os: string;
|
|
}
|
|
|
|
export interface ButtonsTable {
|
|
[key: number]: Index | AxisDirection | undefined;
|
|
}
|
|
|
|
function gamepad(name: string, supported: GamepadBrowser[], axes: AxesTable, buttons: ButtonsTable): GamepadMapping {
|
|
return { name, supported, axes, buttons };
|
|
}
|
|
|
|
function browser(browser: string, id: string, os: string): GamepadBrowser {
|
|
return { browser, id, os };
|
|
}
|
|
|
|
function index(index: number): Index {
|
|
return { index };
|
|
}
|
|
|
|
function positive(buttonPositive: number): Positive {
|
|
return { buttonPositive };
|
|
}
|
|
|
|
function positiveNegative(buttonPositive: number, buttonNegative: number): PositiveNegative {
|
|
return { buttonPositive, buttonNegative };
|
|
}
|
|
|
|
function axisDirection(axis: number, direction: number): AxisDirection {
|
|
return { axis, direction };
|
|
}
|
|
|
|
function axes(
|
|
lx: number, ly: number, rx: number, ry: number, dpadX?: Index | PositiveNegative, dpadY?: Index | PositiveNegative,
|
|
lt?: Index | Positive, rt?: Index | Positive
|
|
): AxesTable {
|
|
const result: AxesTable = [];
|
|
result[GamepadAxes.LeftStickX] = index(lx);
|
|
result[GamepadAxes.LeftStickY] = index(ly);
|
|
result[GamepadAxes.RightStickX] = index(rx);
|
|
result[GamepadAxes.RightStickY] = index(ry);
|
|
result[GamepadAxes.DpadX] = dpadX;
|
|
result[GamepadAxes.DpadY] = dpadY;
|
|
result[GamepadAxes.LeftTrigger] = lt;
|
|
result[GamepadAxes.RightTrigger] = rt;
|
|
return result;
|
|
}
|
|
|
|
function buttons(
|
|
a: number,
|
|
b: number,
|
|
x: number,
|
|
y: number,
|
|
back: number,
|
|
start: number,
|
|
dpad_down: Index | AxisDirection,
|
|
dpad_left: Index | AxisDirection,
|
|
dpad_right: Index | AxisDirection,
|
|
dpad_up: Index | AxisDirection,
|
|
left_shoulder: number,
|
|
left_stick: number,
|
|
left_stick_down: AxisDirection,
|
|
left_stick_left: AxisDirection,
|
|
left_stick_right: AxisDirection,
|
|
left_stick_up: AxisDirection,
|
|
left_trigger: Index | AxisDirection,
|
|
right_shoulder: number,
|
|
right_stick: number,
|
|
right_stick_down: AxisDirection,
|
|
right_stick_left: AxisDirection,
|
|
right_stick_right: AxisDirection | undefined,
|
|
right_stick_up: AxisDirection,
|
|
right_trigger: Index | AxisDirection,
|
|
home?: number,
|
|
): ButtonsTable {
|
|
const result: ButtonsTable = [];
|
|
result[GamepadButtons.A] = index(a);
|
|
result[GamepadButtons.B] = index(b);
|
|
result[GamepadButtons.X] = index(x);
|
|
result[GamepadButtons.Y] = index(y);
|
|
result[GamepadButtons.Back] = index(back);
|
|
result[GamepadButtons.Start] = index(start);
|
|
result[GamepadButtons.DpadDown] = dpad_down;
|
|
result[GamepadButtons.DpadLeft] = dpad_left;
|
|
result[GamepadButtons.DpadRight] = dpad_right;
|
|
result[GamepadButtons.DpadUp] = dpad_up;
|
|
result[GamepadButtons.LeftShoulder] = index(left_shoulder);
|
|
result[GamepadButtons.LeftStick] = index(left_stick);
|
|
result[GamepadButtons.LeftStickDown] = left_stick_down;
|
|
result[GamepadButtons.LeftStickLeft] = left_stick_left;
|
|
result[GamepadButtons.LeftStickRight] = left_stick_right;
|
|
result[GamepadButtons.LeftStickUp] = left_stick_up;
|
|
result[GamepadButtons.LeftTrigger] = left_trigger;
|
|
result[GamepadButtons.RightShoulder] = index(right_shoulder);
|
|
result[GamepadButtons.RightStick] = index(right_stick);
|
|
result[GamepadButtons.RightStickDown] = right_stick_down;
|
|
result[GamepadButtons.RightStickLeft] = right_stick_left;
|
|
result[GamepadButtons.RightStickRight] = right_stick_right;
|
|
result[GamepadButtons.RightStickUp] = right_stick_up;
|
|
result[GamepadButtons.RightTrigger] = right_trigger;
|
|
result[GamepadButtons.Home] = home ? index(home) : undefined;
|
|
return result;
|
|
}
|
|
|
|
export const GAMEPAD_MAPPINGS: GamepadMapping[] = [
|
|
gamepad('Logitech F310 (DirectInput) Chrome/Firefox Linux', [
|
|
browser('Chrome', 'Logitech Logitech Dual Action (Vendor: 046d Product: c216)', 'Linux'),
|
|
browser('Firefox', '046d-c216-Logitech Logitech Dual Action', 'Linux'),
|
|
],
|
|
axes(0, 1, 2, 3, index(4), index(5)),
|
|
buttons(1, 2, 0, 3, 8, 9, axisDirection(5, 1), axisDirection(4, -1), axisDirection(4, 1), axisDirection(5, -1), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), undefined)),
|
|
gamepad('Logitech F310 (DirectInput) Chrome Windows/OSX', [
|
|
browser('Chrome', 'Logitech Dual Action (STANDARD GAMEPAD Vendor: 046d Product: c216)', 'Mac OS X'),
|
|
browser('Chrome', 'Logitech Dual Action (STANDARD GAMEPAD Vendor: 046d Product: c216)', 'Windows NT'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), undefined)),
|
|
gamepad('Logitech F310 (DirectInput) Firefox OSX', [
|
|
browser('Firefox', '46d-c216-Logitech Dual Action', 'Mac OS X'),
|
|
],
|
|
axes(0, 1, 3, 4, index(6), index(7), index(2), index(5)),
|
|
buttons(1, 2, 0, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(2, 1), axisDirection(1, -1), axisDirection(1, 1), axisDirection(2, -1), index(6), 5, 11, axisDirection(4, 1), axisDirection(3, -1), undefined, axisDirection(4, -1), index(7), undefined)),
|
|
gamepad('Logitech F310 (DirectInput) Firefox Windows', [
|
|
browser('Firefox', '046d-c216-Logitech Dual Action', 'Windows NT'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(1, 2, 0, 3, 8, 9, index(14), index(15), index(16), index(13), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), undefined)),
|
|
gamepad('Logitech F310 (XInput) Chrome Linux', [
|
|
browser('Chrome', 'Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d)', 'Linux'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), 16)),
|
|
gamepad('Logitech F310 (XInput) Firefox Linux', [
|
|
browser('Firefox', '046d-c21d-Logitech Gamepad F310', 'Linux'),
|
|
],
|
|
axes(0, 1, 3, 4, index(6), index(7), index(2), index(5)),
|
|
buttons(0, 1, 2, 3, 6, 7, axisDirection(7, 1), axisDirection(6, -1), axisDirection(6, 1), axisDirection(7, -1), 4, 9, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), axisDirection(2, 1), 5, 10, axisDirection(4, 1), axisDirection(3, -1), axisDirection(3, 1), axisDirection(4, -1), axisDirection(5, 1), 8)),
|
|
gamepad('PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268) Chrome OSX Linux', [
|
|
browser('Chrome', 'PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268)', 'Mac OS X'),
|
|
browser('Chrome', 'Sony PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268)', 'Linux'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), 16)),
|
|
gamepad('054c-0268-Sony PLAYSTATION(R)3 Controller Firefox Linux', [
|
|
browser('Firefox', '054c-0268-Sony PLAYSTATION(R)3 Controller', 'Linux'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), index(12), index(13)),
|
|
buttons(14, 13, 15, 12, 0, 3, index(6), index(7), index(5), index(4), 10, 1, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(8), 11, 2, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(9), 16)),
|
|
gamepad('PS4 Chrome Linux', [
|
|
browser('Chrome', 'Sony Computer Entertainment Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)', 'Linux'),
|
|
],
|
|
axes(0, 1, 2, 3, positiveNegative(15, 14), positiveNegative(13, 12), positive(6), positive(7)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), 16)),
|
|
gamepad('PS4 Chrome Windows/OSX', [
|
|
browser('Chrome', 'Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)', 'Windows NT'),
|
|
browser('Chrome', 'Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)', 'Mac OS X'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), 16)),
|
|
gamepad('PS4 Firefox Linux', [
|
|
browser('Firefox', '054c-05c4-Sony Computer Entertainment Wireless Controller', 'Linux'),
|
|
],
|
|
axes(0, 1, 2, 5, index(6), index(7), index(3), index(4)),
|
|
buttons(1, 2, 0, 3, 8, 9, axisDirection(7, 1), axisDirection(6, -1), axisDirection(6, 1), axisDirection(7, -1), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(5, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(5, -1), index(7), 12)),
|
|
gamepad('PS4 Firefox OSX', [
|
|
browser('Firefox', '54c-5c4-Wireless Controller', 'Mac OS X'),
|
|
],
|
|
axes(0, 1, 2, 5, index(6), index(7)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(15), index(16), index(17), index(14), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(5, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(5, -1), index(7), 12)),
|
|
gamepad('XBone Chrome Linux', [
|
|
browser('Chrome', 'Microsoft Controller (Vendor: 045e Product: 02d1)', 'Linux'),
|
|
],
|
|
axes(0, 1, 3, 4, index(6), index(7), index(2), index(5)),
|
|
buttons(0, 1, 2, 3, 6, 7, axisDirection(7, 1), axisDirection(6, -1), axisDirection(6, 1), axisDirection(7, -1), 4, 9, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), axisDirection(2, 1), 5, 10, axisDirection(4, 1), axisDirection(3, -1), axisDirection(3, 1), axisDirection(4, -1), axisDirection(5, 1), 8)),
|
|
gamepad('Xbox One Chrome OSX Linux', [
|
|
browser('Chrome', '©Microsoft Corporation Controller (STANDARD GAMEPAD Vendor: 045e Product: 028e)', 'Linux'),
|
|
browser('Chrome', 'Xbox One Controller (STANDARD GAMEPAD Vendor: 02d1 Product: 045e)', 'Mac OS X'),
|
|
],
|
|
axes(0, 1, 2, 3),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), 16)),
|
|
gamepad('Xbone Firefox Linux', [
|
|
browser('Firefox', '045e-02d1-Microsoft X-Box One pad', 'Linux'),
|
|
],
|
|
axes(0, 1, 3, 4, index(6), index(7), index(2), index(5)),
|
|
buttons(0, 1, 2, 3, 6, 7, axisDirection(7, 1), axisDirection(6, -1), axisDirection(6, 1), axisDirection(7, -1), 4, 9, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), axisDirection(2, 1), 5, 10, axisDirection(4, 1), axisDirection(3, -1), axisDirection(3, 1), axisDirection(4, -1), axisDirection(5, 1), 8)),
|
|
gamepad('Xbox 360 Chrome Windows/OSX', [
|
|
browser('Chrome', 'Xbox 360 Controller (STANDARD GAMEPAD Vendor: 028e Product: 045e)', 'Mac OS X'),
|
|
browser('Chrome', 'Xbox 360 Controller (XInput STANDARD GAMEPAD)', 'Windows NT'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), 16)),
|
|
gamepad('Xbox 360 Firefox Linux', [
|
|
browser('Firefox', '045e-028e-Microsoft X-Box 360 pad', 'Linux'),
|
|
],
|
|
axes(0, 1, 3, 4, index(6), index(7), index(2), index(5)),
|
|
buttons(0, 1, 2, 3, 6, 7, axisDirection(7, 1), axisDirection(6, -1), axisDirection(6, 1), axisDirection(7, -1), 4, 9, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), axisDirection(2, 1), 5, 10, axisDirection(4, 1), axisDirection(3, -1), axisDirection(3, 1), axisDirection(4, -1), axisDirection(5, 1), 8)),
|
|
gamepad('Xbox 360 FF Windows', [
|
|
browser('Firefox', 'xinput', 'Windows NT'),
|
|
],
|
|
axes(0, 1, 2, 3, index(6), index(7), undefined, index(5)),
|
|
buttons(0, 1, 2, 3, 8, 9, index(13), index(14), index(15), index(12), 4, 10, axisDirection(1, 1), axisDirection(0, -1), axisDirection(0, 1), axisDirection(1, -1), index(6), 5, 11, axisDirection(3, 1), axisDirection(2, -1), axisDirection(2, 1), axisDirection(3, -1), index(7), undefined)),
|
|
];
|