@gjsify/gamepad 0.4.28 → 0.4.30
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
|
-
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=
|
|
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=Array.from({length:4}).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.from({length: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};
|
package/lib/types/gamepad.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/gamepad",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.30",
|
|
4
4
|
"description": "Gamepad Web API for GJS using libmanette as backend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -39,14 +39,14 @@
|
|
|
39
39
|
"controller"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@gjsify/dom-events": "^0.4.
|
|
42
|
+
"@gjsify/dom-events": "^0.4.30"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@girs/gjs": "4.0.1",
|
|
46
46
|
"@girs/glib-2.0": "2.88.0-4.0.1",
|
|
47
47
|
"@girs/manette-0.2": "0.2.13-4.0.1",
|
|
48
|
-
"@gjsify/cli": "^0.4.
|
|
49
|
-
"@gjsify/unit": "^0.4.
|
|
48
|
+
"@gjsify/cli": "^0.4.30",
|
|
49
|
+
"@gjsify/unit": "^0.4.30",
|
|
50
50
|
"@types/node": "^25.9.1",
|
|
51
51
|
"typescript": "^6.0.3"
|
|
52
52
|
}
|