4 releases (2 breaking)

0.4.0 Jul 9, 2024
0.3.0 May 7, 2024
0.1.2 Nov 9, 2023
0.1.0 Nov 6, 2023

#9 in #veilid

Apache-2.0 and maybe GPL-3.0-only

220KB
546 lines

bevy_veilid

Crates.io MIT/Apache 2.0 Crates.io Rust

Build 2-Player turn-based p2p games with Bevy and Veilid

Build p2p turn-based games with anonimity for both clients with help of Veilid.

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
0.12 0.3 0.2
0.13 0.3.2 0.3
0.14 0.3.3 0.4

๐Ÿ“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<SampleMessage>
  • EventSendMessage<SampleMessage>
  • 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

  1. passing message with increment / decriment
  2. checkers on bevy

Dependencies

~37โ€“80MB
~1.5M SLoC