2 releases
0.1.2 | Nov 9, 2023 |
---|---|
0.1.0 | Nov 6, 2023 |
#1028 in Game dev
40 downloads per month
205KB
263 lines
bevy_veilid
Build 2-Player turn-based p2p games with Bevy and Veilid
This plugin makes it bearable to build p2p games with Bevy and Veilid by providing a sane API for encrypted p2p messanging in Bevy context.
https://github.com/stillonearth/bevy_veilid/assets/97428129/4c505eef-1dee-4ab4-b0e7-51262a3b3337
Compatibility
bevy version | veilid version | bevy_veilid version |
---|---|---|
0.11 | 0.2.4 | 0.1.0 |
0.11 | 0.2.5 | 0.1.2 |
๐Features
- Event-Based: read and send event to communicate with other peer
- Turn-Based: no tick synchronization
- Anonymous: each run creates a new persona
๐ฉโ๐ป Usage
Refer to examples/pingpong for basic example.
1. Define a message to send over network
#[derive(Serialize, Deserialize, Debug, Clone, Default, Resource)]
struct SampleMessage {
pub counter: i32,
pub extra: String,
}
2. Attach plugin to bevy
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(VeilidPlugin::<SampleMessage>::default())
.add_systems(
Update,
(
on_ev_veilid_initialized,
handle_ui_state,
on_host_game,
on_join_game,
on_ev_awating_peer,
on_ev_error,
on_ev_veilid_message,
on_ev_connected_peer,
on_ev_change_counter,
),
)
.run();
}
3. Connect to systems
Events
- EventConnectedPeer
- EventError
- EventAwaitingPeer
- EventVeilidInitialized
- EventReceiveMessage
- EventSendMessage
- EventMessageSent
Resources
bevy_veilid
will inject this into bevy
pub enum VeilidPluginStatus {
Initializing,
Initialized,
ConnectedPeer,
AwaitingPeer,
Error,
}
๐ป Under the hood
A full veilid instance will run in background with settings defined in veilid_duplex.
veilid_duplex
manages veilid internals and provides an API to send a message to another peer by refering each other with dht_keys unique for each run.
Examples
Dependencies
~27โ72MB
~1M SLoC