@gjsify/gamepad 0.3.20 → 0.3.21

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.
@@ -1 +1 @@
1
- var e=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{e as GamepadButton};
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 +1 @@
1
- import{Event as e}from"@gjsify/dom-events";var t=class extends e{gamepad;constructor(e,t){super(e,t),this.gamepad=t.gamepad}get[Symbol.toStringTag](){return`GamepadEvent`}};export{t as GamepadEvent};
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 +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 l=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{l as GamepadManager};
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 +1 @@
1
- var e=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{e as Gamepad};
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 +1 @@
1
- var e=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{e as ManetteHapticActuator};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/gamepad",
3
- "version": "0.3.20",
3
+ "version": "0.3.21",
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.20"
39
+ "@gjsify/dom-events": "^0.3.21"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@girs/gjs": "4.0.0-rc.14",
43
43
  "@girs/glib-2.0": "2.88.0-4.0.0-rc.14",
44
44
  "@girs/manette-0.2": "0.2.13-4.0.0-rc.14",
45
- "@gjsify/cli": "^0.3.20",
46
- "@gjsify/unit": "^0.3.20",
45
+ "@gjsify/cli": "^0.3.21",
46
+ "@gjsify/unit": "^0.3.21",
47
47
  "@types/node": "^25.6.2",
48
48
  "typescript": "^6.0.3"
49
49
  }