@gjsify/gamepad 0.3.21 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});export{__name};
@@ -1 +1 @@
1
- var GamepadButton=class{pressed;touched;value;constructor(e=!1,t=!1,n=0){this.pressed=e,this.touched=t,this.value=n}get[Symbol.toStringTag](){return`GamepadButton`}};export{GamepadButton};
1
+ import"./_virtual/_rolldown/runtime.js";var GamepadButton=class{pressed;touched;value;constructor(e=!1,t=!1,n=0){this.pressed=e,this.touched=t,this.value=n}get[Symbol.toStringTag](){return`GamepadButton`}};export{GamepadButton};
@@ -1 +1 @@
1
- import{Event as e}from"@gjsify/dom-events";var GamepadEvent=class extends e{gamepad;constructor(e,t){super(e,t),this.gamepad=t.gamepad}get[Symbol.toStringTag](){return`GamepadEvent`}};export{GamepadEvent};
1
+ import"./_virtual/_rolldown/runtime.js";import{Event as e}from"@gjsify/dom-events";var GamepadEvent=class extends e{gamepad;constructor(e,t){super(e,t),this.gamepad=t.gamepad}get[Symbol.toStringTag](){return`GamepadEvent`}};export{GamepadEvent};
@@ -1 +1 @@
1
- import{MANETTE_TO_W3C_AXIS as e,ManetteAxis as t,TRIGGER_PRESS_THRESHOLD as n}from"./axis-mapping.js";import{MANETTE_TO_W3C_BUTTON as r,W3CButton as i}from"./button-mapping.js";import{GamepadButton as a}from"./gamepad-button.js";import{GamepadEvent as o}from"./gamepad-event.js";import{Gamepad as s}from"./gamepad.js";import{ManetteHapticActuator as c}from"./haptic-actuator.js";var GamepadManager=class{_monitor=null;_slots=[,,,,].fill(null);_monitorSignalIds=[];_ManetteModule=null;_initPromise=null;_initialized=!1;_ensureInit(){this._initialized||(this._initPromise||=this._init())}async _init(){try{let e=await import(`gi://Manette`);this._ManetteModule=e.default}catch{this._initialized=!0;return}let e=new this._ManetteModule.Monitor;this._monitor=e;let t=e.iterate(),n=t.next();for(;n[0];){let e=n[1];e&&this._onDeviceConnected(e),n=t.next()}this._monitorSignalIds.push(e.connect(`device-connected`,(e,t)=>{this._onDeviceConnected(t)}),e.connect(`device-disconnected`,(e,t)=>{this._onDeviceDisconnected(t)})),this._initialized=!0}_onDeviceConnected(e){let t=-1;for(let e=0;e<4;e++)if(this._slots[e]===null){t=e;break}if(t===-1)return;let n={device:e,index:t,connected:!0,timestamp:performance.now(),buttons:new Float64Array(17),buttonsPressed:Array(17).fill(!1),axes:new Float64Array(4),hapticActuator:new c(e),signalIds:[]};n.signalIds.push(e.connect(`button-press-event`,(e,t)=>{this._onButtonPress(n,t)}),e.connect(`button-release-event`,(e,t)=>{this._onButtonRelease(n,t)}),e.connect(`absolute-axis-event`,(e,t)=>{this._onAxisChange(n,t)}),e.connect(`hat-axis-event`,(e,t)=>{this._onHatChange(n,t)}),e.connect(`disconnected`,()=>{this._onDeviceDisconnected(e)})),this._slots[t]=n;let r=this._createSnapshot(n);r&&globalThis.dispatchEvent?.(new o(`gamepadconnected`,{gamepad:r}))}_onDeviceDisconnected(e){let t=this._findStateByDevice(e);if(!t)return;for(let n of t.signalIds)e.disconnect(n);t.connected=!1;let n=this._createSnapshot(t);this._slots[t.index]=null,n&&globalThis.dispatchEvent?.(new o(`gamepaddisconnected`,{gamepad:n}))}_onButtonPress(e,t){let[n,i]=t.get_button();if(!n)return;let a=r.get(i);a!==void 0&&(e.buttons[a]=1,e.buttonsPressed[a]=!0,e.timestamp=performance.now())}_onButtonRelease(e,t){let[n,i]=t.get_button();if(!n)return;let a=r.get(i);a!==void 0&&(e.buttons[a]=0,e.buttonsPressed[a]=!1,e.timestamp=performance.now())}_onAxisChange(r,a){let[o,s,c]=a.get_absolute();if(!o)return;let l=e.get(s);if(l!==void 0)r.axes[l]=c;else if(s===t.LEFT_TRIGGER){let e=(c+1)/2;r.buttons[i.LEFT_TRIGGER]=e,r.buttonsPressed[i.LEFT_TRIGGER]=e>n}else if(s===t.RIGHT_TRIGGER){let e=(c+1)/2;r.buttons[i.RIGHT_TRIGGER]=e,r.buttonsPressed[i.RIGHT_TRIGGER]=e>n}r.timestamp=performance.now()}_onHatChange(e,t){let[n,r,a]=t.get_hat();n&&(r===0?(e.buttonsPressed[i.DPAD_LEFT]=a<0,e.buttons[i.DPAD_LEFT]=+(a<0),e.buttonsPressed[i.DPAD_RIGHT]=a>0,e.buttons[i.DPAD_RIGHT]=+(a>0)):r===1&&(e.buttonsPressed[i.DPAD_UP]=a<0,e.buttons[i.DPAD_UP]=+(a<0),e.buttonsPressed[i.DPAD_DOWN]=a>0,e.buttons[i.DPAD_DOWN]=+(a>0)),e.timestamp=performance.now())}_findStateByDevice(e){for(let t of this._slots)if(t&&t.device===e)return t;return null}_createSnapshot(e){let t=[];for(let n=0;n<17;n++)t.push(new a(e.buttonsPressed[n],e.buttonsPressed[n]||e.buttons[n]>0,e.buttons[n]));return new s({id:e.device.get_name()??`Gamepad (${e.device.get_guid()})`,index:e.index,connected:e.connected,timestamp:e.timestamp,mapping:`standard`,axes:Array.from(e.axes),buttons:t,vibrationActuator:e.hapticActuator})}getGamepads(){this._ensureInit();let e=[];for(let t=0;t<4;t++){let n=this._slots[t];e.push(n?this._createSnapshot(n):null)}return e}dispose(){for(let e of this._slots)if(e)for(let t of e.signalIds)e.device.disconnect(t);if(this._slots.fill(null),this._monitor){for(let e of this._monitorSignalIds)this._monitor.disconnect(e);this._monitorSignalIds=[],this._monitor=null}this._initialized=!1,this._initPromise=null}};export{GamepadManager};
1
+ import"./_virtual/_rolldown/runtime.js";import{MANETTE_TO_W3C_AXIS as e,ManetteAxis as t,TRIGGER_PRESS_THRESHOLD as n}from"./axis-mapping.js";import{MANETTE_TO_W3C_BUTTON as r,W3CButton as i}from"./button-mapping.js";import{GamepadButton as a}from"./gamepad-button.js";import{GamepadEvent as o}from"./gamepad-event.js";import{Gamepad as s}from"./gamepad.js";import{ManetteHapticActuator as c}from"./haptic-actuator.js";var GamepadManager=class{_monitor=null;_slots=[,,,,].fill(null);_monitorSignalIds=[];_ManetteModule=null;_initPromise=null;_initialized=!1;_ensureInit(){this._initialized||(this._initPromise||=this._init())}async _init(){try{let e=await import(`gi://Manette`);this._ManetteModule=e.default}catch{this._initialized=!0;return}let e=new this._ManetteModule.Monitor;this._monitor=e;let t=e.iterate(),n=t.next();for(;n[0];){let e=n[1];e&&this._onDeviceConnected(e),n=t.next()}this._monitorSignalIds.push(e.connect(`device-connected`,(e,t)=>{this._onDeviceConnected(t)}),e.connect(`device-disconnected`,(e,t)=>{this._onDeviceDisconnected(t)})),this._initialized=!0}_onDeviceConnected(e){let t=-1;for(let e=0;e<4;e++)if(this._slots[e]===null){t=e;break}if(t===-1)return;let n={device:e,index:t,connected:!0,timestamp:performance.now(),buttons:new Float64Array(17),buttonsPressed:Array(17).fill(!1),axes:new Float64Array(4),hapticActuator:new c(e),signalIds:[]};n.signalIds.push(e.connect(`button-press-event`,(e,t)=>{this._onButtonPress(n,t)}),e.connect(`button-release-event`,(e,t)=>{this._onButtonRelease(n,t)}),e.connect(`absolute-axis-event`,(e,t)=>{this._onAxisChange(n,t)}),e.connect(`hat-axis-event`,(e,t)=>{this._onHatChange(n,t)}),e.connect(`disconnected`,()=>{this._onDeviceDisconnected(e)})),this._slots[t]=n;let r=this._createSnapshot(n);r&&globalThis.dispatchEvent?.(new o(`gamepadconnected`,{gamepad:r}))}_onDeviceDisconnected(e){let t=this._findStateByDevice(e);if(!t)return;for(let n of t.signalIds)e.disconnect(n);t.connected=!1;let n=this._createSnapshot(t);this._slots[t.index]=null,n&&globalThis.dispatchEvent?.(new o(`gamepaddisconnected`,{gamepad:n}))}_onButtonPress(e,t){let[n,i]=t.get_button();if(!n)return;let a=r.get(i);a!==void 0&&(e.buttons[a]=1,e.buttonsPressed[a]=!0,e.timestamp=performance.now())}_onButtonRelease(e,t){let[n,i]=t.get_button();if(!n)return;let a=r.get(i);a!==void 0&&(e.buttons[a]=0,e.buttonsPressed[a]=!1,e.timestamp=performance.now())}_onAxisChange(r,a){let[o,s,c]=a.get_absolute();if(!o)return;let l=e.get(s);if(l!==void 0)r.axes[l]=c;else if(s===t.LEFT_TRIGGER){let e=(c+1)/2;r.buttons[i.LEFT_TRIGGER]=e,r.buttonsPressed[i.LEFT_TRIGGER]=e>n}else if(s===t.RIGHT_TRIGGER){let e=(c+1)/2;r.buttons[i.RIGHT_TRIGGER]=e,r.buttonsPressed[i.RIGHT_TRIGGER]=e>n}r.timestamp=performance.now()}_onHatChange(e,t){let[n,r,a]=t.get_hat();n&&(r===0?(e.buttonsPressed[i.DPAD_LEFT]=a<0,e.buttons[i.DPAD_LEFT]=+(a<0),e.buttonsPressed[i.DPAD_RIGHT]=a>0,e.buttons[i.DPAD_RIGHT]=+(a>0)):r===1&&(e.buttonsPressed[i.DPAD_UP]=a<0,e.buttons[i.DPAD_UP]=+(a<0),e.buttonsPressed[i.DPAD_DOWN]=a>0,e.buttons[i.DPAD_DOWN]=+(a>0)),e.timestamp=performance.now())}_findStateByDevice(e){for(let t of this._slots)if(t&&t.device===e)return t;return null}_createSnapshot(e){let t=[];for(let n=0;n<17;n++)t.push(new a(e.buttonsPressed[n],e.buttonsPressed[n]||e.buttons[n]>0,e.buttons[n]));return new s({id:e.device.get_name()??`Gamepad (${e.device.get_guid()})`,index:e.index,connected:e.connected,timestamp:e.timestamp,mapping:`standard`,axes:Array.from(e.axes),buttons:t,vibrationActuator:e.hapticActuator})}getGamepads(){this._ensureInit();let e=[];for(let t=0;t<4;t++){let n=this._slots[t];e.push(n?this._createSnapshot(n):null)}return e}dispose(){for(let e of this._slots)if(e)for(let t of e.signalIds)e.device.disconnect(t);if(this._slots.fill(null),this._monitor){for(let e of this._monitorSignalIds)this._monitor.disconnect(e);this._monitorSignalIds=[],this._monitor=null}this._initialized=!1,this._initPromise=null}};export{GamepadManager};
@@ -1 +1 @@
1
- var Gamepad=class{id;index;connected;timestamp;mapping;axes;buttons;vibrationActuator;constructor(e){this.id=e.id,this.index=e.index,this.connected=e.connected,this.timestamp=e.timestamp,this.mapping=e.mapping,this.axes=Object.freeze([...e.axes]),this.buttons=Object.freeze(e.buttons),this.vibrationActuator=e.vibrationActuator??null}get[Symbol.toStringTag](){return`Gamepad`}};export{Gamepad};
1
+ import"./_virtual/_rolldown/runtime.js";var Gamepad=class{id;index;connected;timestamp;mapping;axes;buttons;vibrationActuator;constructor(e){this.id=e.id,this.index=e.index,this.connected=e.connected,this.timestamp=e.timestamp,this.mapping=e.mapping,this.axes=Object.freeze([...e.axes]),this.buttons=Object.freeze(e.buttons),this.vibrationActuator=e.vibrationActuator??null}get[Symbol.toStringTag](){return`Gamepad`}};export{Gamepad};
@@ -1 +1 @@
1
- var ManetteHapticActuator=class{effects;_device;constructor(e){this._device=e,this.effects=e.has_rumble()?[`dual-rumble`]:[]}playEffect(e,t){if(e!==`dual-rumble`||!this._device.has_rumble())return Promise.resolve(`complete`);let n=t?.duration??200,r=Math.round((t?.strongMagnitude??1)*65535),i=Math.round((t?.weakMagnitude??1)*65535);return this._device.rumble(r,i,Math.min(n,32767)),Promise.resolve(`complete`)}reset(){return this._device.has_rumble()&&this._device.rumble(0,0,0),Promise.resolve(`complete`)}};export{ManetteHapticActuator};
1
+ import"./_virtual/_rolldown/runtime.js";var ManetteHapticActuator=class{effects;_device;constructor(e){this._device=e,this.effects=e.has_rumble()?[`dual-rumble`]:[]}playEffect(e,t){if(e!==`dual-rumble`||!this._device.has_rumble())return Promise.resolve(`complete`);let n=t?.duration??200,r=Math.round((t?.strongMagnitude??1)*65535),i=Math.round((t?.weakMagnitude??1)*65535);return this._device.rumble(r,i,Math.min(n,32767)),Promise.resolve(`complete`)}reset(){return this._device.has_rumble()&&this._device.rumble(0,0,0),Promise.resolve(`complete`)}};export{ManetteHapticActuator};
@@ -1 +1 @@
1
- import{GamepadEvent as e}from"./gamepad-event.js";import{GamepadManager as t}from"./gamepad-manager.js";const n=new t;globalThis.navigator===void 0&&(globalThis.navigator={}),globalThis.navigator.getGamepads=()=>n.getGamepads(),globalThis.GamepadEvent===void 0&&(globalThis.GamepadEvent=e);
1
+ import"./_virtual/_rolldown/runtime.js";import{GamepadEvent as e}from"./gamepad-event.js";import{GamepadManager as t}from"./gamepad-manager.js";const n=new t;globalThis.navigator===void 0&&(globalThis.navigator={}),globalThis.navigator.getGamepads=()=>n.getGamepads(),globalThis.GamepadEvent===void 0&&(globalThis.GamepadEvent=e);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/gamepad",
3
- "version": "0.3.21",
3
+ "version": "0.4.0",
4
4
  "description": "Gamepad Web API for GJS using libmanette as backend",
5
5
  "type": "module",
6
6
  "module": "lib/esm/index.js",
@@ -36,14 +36,14 @@
36
36
  "controller"
37
37
  ],
38
38
  "dependencies": {
39
- "@gjsify/dom-events": "^0.3.21"
39
+ "@gjsify/dom-events": "^0.4.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@girs/gjs": "4.0.0-rc.14",
43
- "@girs/glib-2.0": "2.88.0-4.0.0-rc.14",
44
- "@girs/manette-0.2": "0.2.13-4.0.0-rc.14",
45
- "@gjsify/cli": "^0.3.21",
46
- "@gjsify/unit": "^0.3.21",
42
+ "@girs/gjs": "4.0.0-rc.15",
43
+ "@girs/glib-2.0": "2.88.0-4.0.0-rc.15",
44
+ "@girs/manette-0.2": "0.2.13-4.0.0-rc.15",
45
+ "@gjsify/cli": "^0.4.0",
46
+ "@gjsify/unit": "^0.4.0",
47
47
  "@types/node": "^25.6.2",
48
48
  "typescript": "^6.0.3"
49
49
  }