You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Most OSes have a screen-lock or sleep feature that activates when the user does not provide input for some time. When using a gamepad the OS does not recognise this input. It would be great to have a single cross-platform function in Defos to prevent this behaviour across macOS, Windows, and Linux.
Proposed solution
Tell the OS not to allow sleeping while the game is active. Co-pilot reckons these OS functions are how to do it:
The Windows and Linux ones appear to reset the idle timer, whereas the macOS one sets your requested assertion off/on. In order to present a consistent API to defos users, it might make sense to have them call a single function periodically and define a short time (20s or something) that if not called it will turn off the macOS one, and for Windows and Linux it can just pass on the call to reset the idle timer. This way it's the game developer's responsibility to keep calling it periodically while receiving gamepad input, then stop calling it to allow the system to sleep if the user really has gone away.
The text was updated successfully, but these errors were encountered:
Hrm... I wonder if this is something Defold should do directly, and automatically, rather than in an extension 🤔? It's not something that really should need any developer-interaction, and the engine knows when there are inputs, etc.
Hrm... I wonder if this is something Defold should do directly, and automatically, rather than in an extension 🤔? It's not something that really should need any developer-interaction, and the engine knows when there are inputs, etc.
Yes, this feels like something which should be available as a game.project option in desktop builds of Defold.
Description
Most OSes have a screen-lock or sleep feature that activates when the user does not provide input for some time. When using a gamepad the OS does not recognise this input. It would be great to have a single cross-platform function in Defos to prevent this behaviour across macOS, Windows, and Linux.
Proposed solution
Tell the OS not to allow sleeping while the game is active. Co-pilot reckons these OS functions are how to do it:
Implementation research:
IOPMAssertionCreateWithName
while using this assertion type. Suggest the assertion name come from window title also set by defos or default project name from Defold.SetThreadExecutionState
. Probably with theES_DISPLAY_REQUIRED
flag, but maybe theES_SYSTEM_REQUIRED
one - not sure.XScreenSaverSuspend
withsuspend
set tofalse
to reset the timer.The Windows and Linux ones appear to reset the idle timer, whereas the macOS one sets your requested assertion off/on. In order to present a consistent API to defos users, it might make sense to have them call a single function periodically and define a short time (20s or something) that if not called it will turn off the macOS one, and for Windows and Linux it can just pass on the call to reset the idle timer. This way it's the game developer's responsibility to keep calling it periodically while receiving gamepad input, then stop calling it to allow the system to sleep if the user really has gone away.
The text was updated successfully, but these errors were encountered: