Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds live reloading! You can use the
--watch
or-w
command line flag to watch files in the source folder for changes. The watching uses efficient native APIs (inotify, FSEvent, IOCP).When a file is changed, the
lovr.filechanged
event will be called with the file path and the type of change (create, delete, modify, rename). The default implementation oflovr.filechanged
will simply calllovr.event.restart
to reload the project, but projects can override the callback to filter paths or add more fine-grained reloading logic (like hotswapping assets without doing a full restart).This is still an early version of the design. Some stuff I'm still thinking about:
lovr.filesystem.watch/unwatch
methods, but these will only watch the source if it's a folder. It might be cool to add support for watching custom paths, but the interactions with the virtual filesystem are kinda complicated.t.filesystem.watch
was a conf.lua option (useful on Android where there isn't a CLI).When lovr restarts after the first event, if it reads main.lua between events 2 and 3 then it won't find any data there. I'm not sure how to handle this yet. Debouncing is possible but it's hard to integrate into the default callback. Maybe just a
lovr.timer.sleep(.005)
? It's awful, but could work well.