{
  "version": 3,
  "sources": ["../../../plugins/gamepad/index.js"],
  "sourcesContent": ["/**\n * Gamepad Plugin for Pi.js\n * \n * Provides gamepad input handling including button state tracking, axis handling,\n * and connect/disconnect event management.\n * \n * @module plugins/gamepad\n * @version 1.0.0\n */\n\n\"use strict\";\n\n\n/***************************************************************************************************\n * Module State\n **************************************************************************************************/\n\n\nconst m_gamepads = {};\nconst m_onConnectHandlers = [];\nconst m_onDisconnectHandlers = [];\n\nlet m_isInitialized = false;\nlet m_isStopped = false;\nlet m_isLooping = false;\nlet m_gamepadLoopId = null;\nlet m_axesSensitivity = 0.2;\nlet m_tick = 0;\nlet m_lastGamepadUpdateTick = -1;\n\n\n/***************************************************************************************************\n * Plugin Initialization\n **************************************************************************************************/\n\n\nexport default function gamepadPlugin( pluginApi ) {\n\n\t// Add window blur/focus handlers\n\twindow.addEventListener( \"blur\", onWindowBlur );\n\twindow.addEventListener( \"focus\", onWindowFocus );\n\n\t// Register global commands\n\tpluginApi.addCommand( \"startGamepad\", startGamepad, false, [] );\n\tpluginApi.addCommand( \"stopGamepad\", stopGamepad, false, [] );\n\tpluginApi.addCommand( \"ingamepad\", ingamepad, false, [ \"gamepadIndex\" ] );\n\tpluginApi.addCommand(\n\t\t\"setGamepadSensitivity\", setGamepadSensitivity, false, [ \"sensitivity\" ]\n\t);\n\tpluginApi.addCommand( \"onGamepadConnected\", onGamepadConnected, false, [ \"fn\" ] );\n\tpluginApi.addCommand( \"onGamepadDisconnected\", onGamepadDisconnected, false, [ \"fn\" ] );\n\n\t// Register clearEvents handler\n\tpluginApi.registerClearEvents( \"gamepad\", clearGamepadEvents );\n}\n\n\n/***************************************************************************************************\n * External API Commands\n **************************************************************************************************/\n\n\nfunction startGamepad() {\n\tif( !m_isInitialized ) {\n\t\twindow.addEventListener( \"gamepadconnected\", gamepadConnected );\n\t\twindow.addEventListener( \"gamepaddisconnected\", gamepadDisconnected );\n\t\tm_isInitialized = true;\n\t\t\n\t\t// Scan for already-connected gamepads\n\t\tscanForGamepads();\n\t}\n\n\t// Remove explicit stops\n\tm_isStopped = false;\n\n\tif( !m_isLooping ) {\n\t\tm_isLooping = true;\n\t\tm_gamepadLoopId = requestAnimationFrame( gamepadLoop );\n\t}\n}\n\nfunction stopGamepad() {\n\n\t// Explicitly stop gamepad to prevent autostart when ingamepad is called\n\tm_isStopped = true;\n\tif( m_isLooping ) {\n\t\tm_isLooping = false;\n\t\tif( m_gamepadLoopId ) {\n\t\t\tcancelAnimationFrame( m_gamepadLoopId );\n\t\t\tm_gamepadLoopId = null;\n\t\t}\n\t}\n}\n\nfunction ingamepad( options ) {\n\tconst gamepadIndex = options.gamepadIndex;\n\n\t// If stopped explicitly then return without auto starting\n\tif( m_isStopped ) {\n\t\treturn null;\n\t}\n\tstartGamepad();\n\tupdateGamepads();\n\n\t// If no index specified, return all gamepads\n\tif( gamepadIndex === null || gamepadIndex === undefined ) {\n\t\treturn Object.values( m_gamepads ).sort( ( a, b ) => a.index - b.index );\n\t}\n\n\t// Validate gamepadIndex\n\tif( !Number.isInteger( gamepadIndex ) || gamepadIndex < 0 ) {\n\t\tconst error = new TypeError(\n\t\t\t\"ingamepad: gamepadIndex must be a non-negative integer or null.\"\n\t\t);\n\t\terror.code = \"INVALID_PARAMETERS\";\n\t\tthrow error;\n\t}\n\n\t// Return specific gamepad or undefined if not found\n\treturn m_gamepads[ gamepadIndex ];\n}\n\nfunction setGamepadSensitivity( options ) {\n\tconst sensitivity = options.sensitivity;\n\n\tif( typeof sensitivity !== \"number\" || sensitivity < 0 || sensitivity > 1 ) {\n\t\tconst error = new TypeError(\n\t\t\t\"setGamepadSensitivity: sensitivity must be a number between 0 and 1.\"\n\t\t);\n\t\terror.code = \"INVALID_PARAMETERS\";\n\t\tthrow error;\n\t}\n\n\tif( sensitivity === 1 ) {\n\t\tm_axesSensitivity = 0.99999;\n\t} else {\n\t\tm_axesSensitivity = sensitivity;\n\t}\n}\n\nfunction onGamepadConnected( options ) {\n\tconst fn = options.fn;\n\n\tif( typeof fn !== \"function\" ) {\n\t\tconst error = new TypeError( \"onGamepadConnected: fn must be a function.\" );\n\t\terror.code = \"INVALID_PARAMETERS\";\n\t\tthrow error;\n\t}\n\n\tm_onConnectHandlers.push( fn );\n\tstartGamepad();\n}\n\nfunction onGamepadDisconnected( options ) {\n\tconst fn = options.fn;\n\n\tif( typeof fn !== \"function\" ) {\n\t\tconst error = new TypeError( \"onGamepadDisconnected: fn must be a function.\" );\n\t\terror.code = \"INVALID_PARAMETERS\";\n\t\tthrow error;\n\t}\n\n\tm_onDisconnectHandlers.push( fn );\n\tstartGamepad();\n}\n\n\n/***************************************************************************************************\n * Internal Helper Functions\n **************************************************************************************************/\n\n\nfunction gamepadConnected( e ) {\n\n\tupdateGamepad( e.gamepad );\n\n\t// Trigger connect handlers\n\tconst gamepadData = m_gamepads[ e.gamepad.index ];\n\tfor( const handler of m_onConnectHandlers ) {\n\t\thandler( gamepadData );\n\t}\n}\n\nfunction gamepadDisconnected( e ) {\n\n\t// Trigger disconnect handlers\n\tconst data = {\n\t\t\"index\": e.gamepad.index,\n\t\t\"id\": e.gamepad.id,\n\t\t\"mapping\": e.gamepad.mapping,\n\t\t\"connected\": e.gamepad.connected\n\t};\n\n\tfor( const handler of m_onDisconnectHandlers ) {\n\t\thandler( data );\n\t}\n\n\tdelete m_gamepads[ e.gamepad.index ];\n}\n\nfunction gamepadLoop() {\n\tif( !m_isLooping ) {\n\t\treturn;\n\t}\n\n\tupdateGamepads();\n\n\tm_tick += 1;\n\tm_gamepadLoopId = requestAnimationFrame( gamepadLoop );\n}\n\nfunction scanForGamepads() {\n\tlet gamepads;\n\n\tif( \"getGamepads\" in navigator ) {\n\t\tgamepads = navigator.getGamepads();\n\t} else if( \"webkitGetGamepads\" in navigator ) {\n\t\tgamepads = navigator.webkitGetGamepads();\n\t} else {\n\t\tgamepads = [];\n\t}\n\n\t// Add any gamepads that are already connected but not in our list\n\tfor( let i = 0; i < gamepads.length; i++ ) {\n\t\tif( gamepads[ i ] && !( gamepads[ i ].index in m_gamepads ) ) {\n\t\t\tupdateGamepad( gamepads[ i ] );\n\t\t\t\n\t\t\t// Trigger connect handlers for pre-connected gamepads\n\t\t\tconst gamepadData = m_gamepads[ gamepads[ i ].index ];\n\t\t\tfor( const handler of m_onConnectHandlers ) {\n\t\t\t\thandler( gamepadData );\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction updateGamepads() {\n\tlet gamepads;\n\n\t// Prevent updateGamepads from triggering multiple times in the same loop\n\tif( m_lastGamepadUpdateTick === m_tick ) {\n\t\treturn;\n\t}\n\tm_lastGamepadUpdateTick = m_tick;\n\n\tif( \"getGamepads\" in navigator ) {\n\t\tgamepads = navigator.getGamepads();\n\t} else if( \"webkitGetGamepads\" in navigator ) {\n\t\tgamepads = navigator.webkitGetGamepads();\n\t} else {\n\t\tgamepads = [];\n\t}\n\n\tfor( const gamepad of gamepads ) {\n\t\tif( !gamepad || !gamepad.connected ) {\n\t\t\tcontinue;\n\t\t}\n\t\tupdateGamepad( gamepad );\n\t}\n}\n\nfunction createNewGamepadData( gamepadDataRaw ) {\n\n\t// Create the new gamepad data object\n\tconst newGamepadData = {\n\t\t\"index\": gamepadDataRaw.index,\n\t\t\"id\": gamepadDataRaw.id,\n\t\t\"connected\": gamepadDataRaw.connected,\n\t\t\"mapping\": gamepadDataRaw.mapping,\n\t\t\"timestamp\": gamepadDataRaw.timestamp,\n\t\t\"vibrationActuator\": gamepadDataRaw.vibrationActuator,\n\t\t\"axes\": [],\n\t\t\"lastAxes\": [],\n\t\t\"buttons\": []\n\t};\n\n\t// Attach event listeners with helper functions\n\tnewGamepadData.getButton = function( buttonIndex ) {\n\t\tif( buttonIndex < 0 || buttonIndex >= this.buttons.length ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.buttons[ buttonIndex ];\n\t};\n\tnewGamepadData.getButtonPressed = function( buttonIndex ) {\n\t\tif( buttonIndex < 0 || buttonIndex >= this.buttons.length ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.buttons[ buttonIndex ].pressed;\n\t};\n\tnewGamepadData.getButtonJustPressed = function( buttonIndex ) {\n\t\tif( buttonIndex < 0 || buttonIndex >= this.buttons.length ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.buttons[ buttonIndex ].pressStarted;\n\t};\n\tnewGamepadData.getButtonJustReleased = function( buttonIndex ) {\n\t\tif( buttonIndex < 0 || buttonIndex >= this.buttons.length ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.buttons[ buttonIndex ].pressReleased;\n\t};\n\tnewGamepadData.getAxis = function( axisIndex ) {\n\t\tif( axisIndex < 0 || axisIndex >= this.axes.length ) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.axes[ axisIndex ];\n\t};\n\tnewGamepadData.getAxisChanged = function( axisIndex ) {\n\t\tif( axisIndex < 0 || axisIndex >= this.axes.length ) {\n\t\t\treturn false;\n\t\t}\n\t\tconst current = this.axes[ axisIndex ];\n\t\tconst last = this.lastAxes[ axisIndex ] || 0;\n\t\treturn current !== last;\n\t};\n\n\treturn newGamepadData;\n}\n\nfunction updateGamepad( gamepadRawData ) {\n\tlet gamepadData = m_gamepads[ gamepadRawData.index ];\n\tif( !gamepadData ) {\n\t\tgamepadData = createNewGamepadData( gamepadRawData );\n\t\tm_gamepads[ gamepadRawData.index ] = gamepadData;\n\t}\n\n\t// Update buttons\n\tconst newButtons = [];\n\tfor( let i = 0; i < gamepadRawData.buttons.length; i += 1 ) {\n\t\tconst buttonNew = gamepadRawData.buttons[ i ];\n\t\tconst buttonOld = gamepadData.buttons[ i ] || { \"pressed\": false };\n\t\tnewButtons.push( {\n\t\t\t\"pressed\": buttonNew.pressed,\n\t\t\t\"value\": buttonNew.value,\n\t\t\t\"pressStarted\": !buttonOld.pressed && buttonNew.pressed,\n\t\t\t\"pressReleased\": buttonOld.pressed && !buttonNew.pressed\n\t\t} );\n\t}\n\tgamepadData.buttons = newButtons;\n\n\t// Update Axes\n\tgamepadData.lastAxes = gamepadData.axes.slice();\n\tgamepadData.axes = [];\n\tfor( let i = 0; i < gamepadRawData.axes.length; i++ ) {\n\t\tgamepadData.axes.push( smoothAxis( gamepadRawData.axes[ i ] ) );\n\t}\n\n\t// Update Raw Data\n\tgamepadData.timestamp = gamepadRawData.timestamp;\n\tgamepadData.connected = gamepadRawData.connected;\n\tgamepadData.vibrationActuator = gamepadRawData.vibrationActuator;\n}\n\nfunction smoothAxis( axis ) {\n\tif( Math.abs( axis ) < m_axesSensitivity ) {\n\t\treturn 0;\n\t}\n\taxis = axis - Math.sign( axis ) * m_axesSensitivity;\n\taxis = axis / ( 1 - m_axesSensitivity );\n\treturn axis;\n}\n\nfunction onWindowBlur() {\n\n\t// Pause gamepad loop when window loses focus\n\tif( m_isLooping ) {\n\t\tif( m_gamepadLoopId ) {\n\t\t\tcancelAnimationFrame( m_gamepadLoopId );\n\t\t\tm_gamepadLoopId = null;\n\t\t}\n\t}\n}\n\nfunction onWindowFocus() {\n\n\t// Resume gamepad loop when window regains focus\n\tif( m_isLooping && !m_gamepadLoopId ) {\n\t\tm_gamepadLoopId = requestAnimationFrame( gamepadLoop );\n\t}\n}\n\n/**\n * Clear all gamepad event handlers\n * Called by clearEvents command\n * \n * @param {Object} [screenData] - Screen data (not used for gamepad events)\n * @returns {void}\n */\nfunction clearGamepadEvents( screenData ) {\n\tm_onConnectHandlers.length = 0;\n\tm_onDisconnectHandlers.length = 0;\n}\n\n// Auto-register in IIFE mode (when loaded via <script> tag)\nif( typeof window !== \"undefined\" && window.pi ) {\n\twindow.pi.registerPlugin( {\n\t\t\"name\": \"gamepad\",\n\t\t\"version\": \"1.0.0\",\n\t\t\"description\": \"Gamepad input handling for Pi.js\",\n\t\t\"init\": gamepadPlugin\n\t} );\n}\n"],
  "mappings": "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",
  "names": []
}
