[w3c/gamepad] Direction and thrust of the joystick (#128)

I'm currently implementing gamepad support for the GUI of ESP Easy (OS for IoT). I know that there's a discussion regarding adding events for button presses etc. so I will not discuss that here. This is what I've done to get the direction of the joystick + its thrust (0...1).

```
"joystick": {
 "left": {
  "x": Math.floor(gp.axes[0] * 100)/100,
  "y": Math.floor(gp.axes[1] * 100)/100,
  "direction": direction(gp.axes[0], gp.axes[1], "up"),
  "thrust": thrust(gp.axes[0], gp.axes[1])
 },
 "right": {
  "x": Math.floor(gp.axes[2] * 100)/100,
  "y": Math.floor(gp.axes[3] * 100)/100,
  "direction": direction(gp.axes[2], gp.axes[3], "up"),
  "thrust": thrust(gp.axes[2], gp.axes[3])
 }
}
```

```
thrust = function (x, y) {
    x = Math.floor(x * 100)/100;
    y = Math.floor(y * 100)/100;
    if (x === 0 && y === 0) {
        return NaN;
    }
    if (x === 0) {
        return Math.abs(y);
    }
    if (y === 0) {
        return Math.abs(x);
    }
    let xy = Math.sqrt(Math.pow(x,2) + Math.pow(y, 2));
    xy = Math.floor(xy * 100)/100;
    return (xy > 1 ? 1 : xy);
};

direction = function (x, y, zeroPoint) {
    x = Math.floor(x * 100)/100;
    y = Math.floor(y * 100)/100;
    if (x === 0 && y === 0) {
        return NaN;
    }
    let degree = (Math.atan2(y, x) > 0 ? Math.atan2(y, x) : (2*Math.PI + Math.atan2(y, x))) * 360 / (2*Math.PI);
    if (zeroPoint === "up") {
        degree = degree - 270;
        return (degree < 0 ? degree + 360 : degree);
    }
    if (zeroPoint === "down") {
        degree = degree - 90;
        return (degree < 0 ? degree + 360 : degree);
    }
    if (zeroPoint === "left") {
        degree = degree - 180;
        return (degree < 0 ? degree + 360 : degree);
    }
    // right just return the degrees...
    return degree;
};
```

It would be nice to get this info from the API. Perhaps also the 3D vector of the joystick position.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/gamepad/issues/128

Received on Tuesday, 24 March 2020 12:37:56 UTC