Prototype for an out-of-process bevy editor framework.
Basic idea is to have the editor spawn a game process compiled with an integration plugin and communicate using ipc.
Rendering is done by the game process, which is embedded in the editor using a shared texture extracted by the integration plugin.
Separete from the main world of the game process is a "editor world", which is synchronized with the editor process' main world. This world is used to host game-specific editor extensions: custom panels, visualizations, controls, etc. Only entities with SyncEntity marker are synchronized, and only changed components (powered by bevy's change detection) are sent over. Events can be registered for replication, in which case if an EntityEvent is triggered on a replicated entity, it is sent over to the other side.
- Clean up deps
- Write docs
- Rewrite linux vulkan implementation
- Add vulkan implementation for windows
- Add metal implementation for macos
- Clean up
ViewportTargetsimplementation (both editor side and game side)
-
AddAddedRemoteAppEvent<Event>to allow targeting/receive events from secondary processesRemoteAppTriggerinstead - Add a "don't run user startup systems" mode to allow using the project for rendering scenes instead of playing immediately
- Lock framerate to editor's framerate / add synchronization
- Improve system toggling
- Add observer toggling
- Allow inspecting subapps
- Make game spawning non-blocking
- Remove
set_changed_by - Mutate changed components instead of reinserting them
- Map targets for replicated events on remote side instead of local side
- Break loops of replicated events
- Split
ChangedEntities - Replace
SyncChangedEntitiesevent withIpcMsg - Encode
type_pathas index and de/serialize components to an arena instead of individualVec's - Support synchronizing to multiple processes
- Serialize component data to shared memory instead of sending it over ipc
- Improve
replicate_event*by replicating entity observers instead of using global observers - Restore SyncEntities after process restart whenever possible