Skip to content

Commit 9b5e020

Browse files
authored
[Reviewed] [Gamepad] Fix a conflict with the save-state feature (#1918)
1 parent 279ad92 commit 9b5e020

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

extensions/reviewed/Gamepads.json

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"name": "Gamepads",
1010
"previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/gamepad-variant-outline.svg",
1111
"shortDescription": "Add support for gamepads (or other controllers) to your game, giving access to information such as button presses, axis positions, trigger pressure, etc...",
12-
"version": "0.9.0",
12+
"version": "0.9.1",
1313
"description": [
1414
"Add support for gamepads (or other physical controllers).",
1515
"",
@@ -290,7 +290,27 @@
290290
" }\r",
291291
"}();\r",
292292
"\r",
293-
"function onScenePostEvents() {\r",
293+
"/**\r",
294+
" * @param {gdjs.RuntimeScene} runtimeScene\r",
295+
" */\r",
296+
"function addFrameBeginningTaskIfNeeded(runtimeScene) {\r",
297+
" const taskManager = runtimeScene.getAsyncTasksManager();\r",
298+
" for (const taskWithCallback of taskManager.tasksWithCallback) {\r",
299+
" if (taskWithCallback.asyncTask === frameBeginningTask) {\r",
300+
" return;\r",
301+
" }\r",
302+
" }\r",
303+
" // Async tasks are run before everything.\r",
304+
" // This is a hack to make sure that button states are updated\r",
305+
" // before mapping behavior events.\r",
306+
" taskManager.addTask(frameBeginningTask);\r",
307+
"}\r",
308+
"\r",
309+
"/**\r",
310+
" * @param {gdjs.RuntimeScene} runtimeScene\r",
311+
" */\r",
312+
"function onScenePostEvents(runtimeScene) {\r",
313+
" addFrameBeginningTaskIfNeeded(runtimeScene);\r",
294314
" /** @type {Gamepad[]} */\r",
295315
" const gamepads = navigator.getGamepads ? navigator.getGamepads() : [];\r",
296316
" for (let playerId = 0; playerId < gamepads.length; playerId++) {\r",
@@ -471,6 +491,7 @@
471491
" getGamepad,\r",
472492
" onScenePostEvents,\r",
473493
" frameBeginningTask,\r",
494+
" addFrameBeginningTaskIfNeeded,\r",
474495
"}"
475496
],
476497
"parameterObjects": "",
@@ -489,12 +510,7 @@
489510
"events": [
490511
{
491512
"type": "BuiltinCommonInstructions::JsCode",
492-
"inlineCode": [
493-
"// Async tasks are run before everything.\r",
494-
"// This is a hack to make sure that button states are updated\r",
495-
"// before mapping behavior events.\r",
496-
"runtimeScene.getAsyncTasksManager().addTask(gdjs._extensionController.frameBeginningTask);"
497-
],
513+
"inlineCode": "gdjs._extensionController.addFrameBeginningTaskIfNeeded(runtimeScene);",
498514
"parameterObjects": "",
499515
"useStrict": true,
500516
"eventsSheetExpanded": false
@@ -512,7 +528,7 @@
512528
{
513529
"type": "BuiltinCommonInstructions::JsCode",
514530
"inlineCode": [
515-
"gdjs._extensionController.onScenePostEvents();",
531+
"gdjs._extensionController.onScenePostEvents(runtimeScene);",
516532
""
517533
],
518534
"parameterObjects": "",
@@ -1920,7 +1936,6 @@
19201936
{
19211937
"type": "BuiltinCommonInstructions::JsCode",
19221938
"inlineCode": [
1923-
"",
19241939
"const playerId = eventsFunctionContext.getArgument(\"PlayerId\") - 1;",
19251940
"/** @type {Gamepad[]} */",
19261941
"const gamepads = navigator.getGamepads ? navigator.getGamepads() : [];",

scripts/lib/ExtensionsValidatorExceptions.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,11 @@ const extensionsAllowedProperties = {
263263
javaScriptObjectAllowedProperties: [],
264264
},
265265
Gamepads: {
266-
gdjsAllowedProperties: ['_extensionController', 'AsyncTask'],
266+
gdjsAllowedProperties: [
267+
'_extensionController',
268+
'AsyncTask',
269+
'RuntimeScene',
270+
],
267271
gdjsEvtToolsAllowedProperties: [],
268272
runtimeSceneAllowedProperties: ['getElapsedTime', 'getAsyncTasksManager'],
269273
javaScriptObjectAllowedProperties: [],

0 commit comments

Comments
 (0)