#veilid #bevy #p2p #turnbased

nightly bevy_veilid

Build turn-based p2p games with Veilid

2 releases

0.1.2 Nov 9, 2023
0.1.0 Nov 6, 2023

#932 in Game dev

40 downloads per month

Apache-2.0 and maybe GPL-3.0-only

205KB
263 lines

bevy_veilid

Crates.io MIT/Apache 2.0 Crates.io Rust

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

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

Dependencies

~28โ€“74MB
~1M SLoC