123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- import { Observable } from "../Misc/observable.js";
- /**
- * Represents a gamepad control stick position
- */
- export class StickValues {
- /**
- * Initializes the gamepad x and y control stick values
- * @param x The x component of the gamepad control stick value
- * @param y The y component of the gamepad control stick value
- */
- constructor(
- /**
- * The x component of the control stick
- */
- x,
- /**
- * The y component of the control stick
- */
- y) {
- this.x = x;
- this.y = y;
- }
- }
- /**
- * Represents a gamepad
- */
- export class Gamepad {
- /**
- * Specifies if the gamepad has been connected
- */
- get isConnected() {
- return this._isConnected;
- }
- /**
- * Initializes the gamepad
- * @param id The id of the gamepad
- * @param index The index of the gamepad
- * @param browserGamepad The browser gamepad
- * @param leftStickX The x component of the left joystick
- * @param leftStickY The y component of the left joystick
- * @param rightStickX The x component of the right joystick
- * @param rightStickY The y component of the right joystick
- */
- constructor(
- /**
- * The id of the gamepad
- */
- id,
- /**
- * The index of the gamepad
- */
- index,
- /**
- * The browser gamepad
- */
- browserGamepad, leftStickX = 0, leftStickY = 1, rightStickX = 2, rightStickY = 3) {
- this.id = id;
- this.index = index;
- this.browserGamepad = browserGamepad;
- this._leftStick = { x: 0, y: 0 };
- this._rightStick = { x: 0, y: 0 };
- /** @internal */
- this._isConnected = true;
- /**
- * Specifies whether the left control stick should be Y-inverted
- */
- this._invertLeftStickY = false;
- this.type = Gamepad.GAMEPAD;
- this._leftStickAxisX = leftStickX;
- this._leftStickAxisY = leftStickY;
- this._rightStickAxisX = rightStickX;
- this._rightStickAxisY = rightStickY;
- if (this.browserGamepad.axes.length >= 2) {
- this._leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };
- }
- if (this.browserGamepad.axes.length >= 4) {
- this._rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };
- }
- }
- /**
- * Callback triggered when the left joystick has changed
- * @param callback callback to trigger
- */
- onleftstickchanged(callback) {
- this._onleftstickchanged = callback;
- }
- /**
- * Callback triggered when the right joystick has changed
- * @param callback callback to trigger
- */
- onrightstickchanged(callback) {
- this._onrightstickchanged = callback;
- }
- /**
- * Gets the left joystick
- */
- get leftStick() {
- return this._leftStick;
- }
- /**
- * Sets the left joystick values
- */
- set leftStick(newValues) {
- if (this._onleftstickchanged && (this._leftStick.x !== newValues.x || this._leftStick.y !== newValues.y)) {
- this._onleftstickchanged(newValues);
- }
- this._leftStick = newValues;
- }
- /**
- * Gets the right joystick
- */
- get rightStick() {
- return this._rightStick;
- }
- /**
- * Sets the right joystick value
- */
- set rightStick(newValues) {
- if (this._onrightstickchanged && (this._rightStick.x !== newValues.x || this._rightStick.y !== newValues.y)) {
- this._onrightstickchanged(newValues);
- }
- this._rightStick = newValues;
- }
- /**
- * Updates the gamepad joystick positions
- */
- update() {
- if (this._leftStick) {
- this.leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };
- if (this._invertLeftStickY) {
- this.leftStick.y *= -1;
- }
- }
- if (this._rightStick) {
- this.rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };
- }
- }
- /**
- * Disposes the gamepad
- */
- dispose() { }
- }
- /**
- * Represents a gamepad controller
- */
- Gamepad.GAMEPAD = 0;
- /**
- * Represents a generic controller
- */
- Gamepad.GENERIC = 1;
- /**
- * Represents an XBox controller
- */
- Gamepad.XBOX = 2;
- /**
- * Represents a pose-enabled controller
- */
- Gamepad.POSE_ENABLED = 3;
- /**
- * Represents an Dual Shock controller
- */
- Gamepad.DUALSHOCK = 4;
- /**
- * Represents a generic gamepad
- */
- export class GenericPad extends Gamepad {
- /**
- * Callback triggered when a button has been pressed
- * @param callback Called when a button has been pressed
- */
- onbuttondown(callback) {
- this._onbuttondown = callback;
- }
- /**
- * Callback triggered when a button has been released
- * @param callback Called when a button has been released
- */
- onbuttonup(callback) {
- this._onbuttonup = callback;
- }
- /**
- * Initializes the generic gamepad
- * @param id The id of the generic gamepad
- * @param index The index of the generic gamepad
- * @param browserGamepad The browser gamepad
- */
- constructor(id, index, browserGamepad) {
- super(id, index, browserGamepad);
- /**
- * Observable triggered when a button has been pressed
- */
- this.onButtonDownObservable = new Observable();
- /**
- * Observable triggered when a button has been released
- */
- this.onButtonUpObservable = new Observable();
- this.type = Gamepad.GENERIC;
- this._buttons = new Array(browserGamepad.buttons.length);
- }
- _setButtonValue(newValue, currentValue, buttonIndex) {
- if (newValue !== currentValue) {
- if (newValue === 1) {
- if (this._onbuttondown) {
- this._onbuttondown(buttonIndex);
- }
- this.onButtonDownObservable.notifyObservers(buttonIndex);
- }
- if (newValue === 0) {
- if (this._onbuttonup) {
- this._onbuttonup(buttonIndex);
- }
- this.onButtonUpObservable.notifyObservers(buttonIndex);
- }
- }
- return newValue;
- }
- /**
- * Updates the generic gamepad
- */
- update() {
- super.update();
- for (let index = 0; index < this._buttons.length; index++) {
- this._buttons[index] = this._setButtonValue(this.browserGamepad.buttons[index].value, this._buttons[index], index);
- }
- }
- /**
- * Disposes the generic gamepad
- */
- dispose() {
- super.dispose();
- this.onButtonDownObservable.clear();
- this.onButtonUpObservable.clear();
- }
- }
- //# sourceMappingURL=gamepad.js.map
|