Skip to content

stillonearth/bevy_veilid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Peek.2023-11-07.14-08.mp4

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 0.3

📝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

About

Build two-player turn-based p2p games with Bevy and Veilid

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published