- Rename `macros` crate to `libmarathon-macros` for better discoverability on crates.io
- Update all imports from `macros::` to `libmarathon_macros::`
- Add crates.io metadata (description, license, repository, homepage, etc.)
- Bump version to 0.1.1
- Add version requirement for libmarathon-macros dependency
this commit includes a whole lotta fuck yeah, a whole lotta we fuckin
got this, and a lot of "please change the future."
i hope it works.
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
- marathonctl now supports spawn/delete entity commands
- Fixed session state bug (was transitioning to Left every 5s)
- Fixed entity broadcast to detect Added<NetworkedEntity>
- Added AppCommandQueue pattern for app-level control commands
References: #131, #132
Added --db-path and --control-socket arguments to app binary to enable
running multiple instances simultaneously.
Updated marathonctl to use clap with --socket argument for targeting
different instances.
Enables multi-client testing with isolated databases and control sockets.
Refs #131, #132
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
Implemented headless mode using MinimalPlugins and ScheduleRunnerPlugin
to enable running the app without rendering, controlled via Unix socket.
Changes:
- Added conditional compilation based on 'headless' feature flag
- Use MinimalPlugins with 60 FPS ScheduleRunner in headless mode
- Skip rendering plugins (Camera, Rendering, DebugUI, SessionUI)
- Made cube mesh/material assets optional for headless spawning
- Direct NetworkingPlugin + PersistencePlugin instead of MarathonPlugin
- Use app.run() instead of platform executor in headless mode
This enables:
- Running multiple instances for multi-client testing
- Automated testing via marathonctl without GUI overhead
- Background server instances for development
- CI/CD integration for networking tests
Refs #131, #132
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
The session UI panel was not updating when networking started via
control socket because poll_engine_events used commands.insert_resource
which queued updates until end of schedule. The UI could run before
the command was applied.
Fixed by:
- Initialize CurrentSession at startup in offline state (session.rs)
- Use direct ResMut mutation in poll_engine_events (engine_bridge.rs)
- Check session.state instead of resource existence (session_ui.rs)
This ensures Bevy's change detection triggers immediately when engine
events update the session state.
Refs #131, #132
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
now the entire networking and persistence stack is zero-copy with
single-allocation, single-copy reads.
Closes#128
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>