PurpleKingdomGames / indigo

An FP game engine for Scala.
https://indigoengine.io/
MIT License
641 stars 60 forks source link

Consider adding Hot-Reloading #720

Open davesmith00000 opened 7 months ago

davesmith00000 commented 7 months ago

@megri has made an interesting gist showing how you might use the electron-reloader module with Indigo.

https://gist.github.com/megri/9b82e3fc0cbf9b87f1c36ef477129300

Two things:

  1. We could bake a solution like that into the plugin, and provide a new flag in IndigoOptions to enabled / disable hot reloading.
  2. We could also look at making a SubSystem that works in a similar way to Tyrian's HotReloading functionality, in order to load / restore game state to local storage. That way if the browser or electron reloader kicked in, the game would carry on where you left off.
megri commented 7 months ago

Some things I learned while playing with this thing:

megri commented 7 months ago

I believe the best UX would be attained by replacing electron-reloader with something more tailored to Indigo and use a worker to steer the updates uni-directionally.

megri commented 7 months ago

I put together a POC where mill drives the reloading all by itself and it's less glitchy than using electron-reloader: At the moment it triggers a win.reload() when game-code changes and recreates the process entirely when index.js is updated.

The catch is that it does this by pushing data to the Electron-process through stdin, which as far as I understand does not work for Windows. Now looking for a platform-independent method of doing IPC.