This crate provides a Bevy plugin for integrating with the Steamworks SDK.
Add the following to your Cargo.toml
:
[dependencies]
bevy-steamworks = "0.12"
The steamworks crate comes bundled with the redistributable dynamic libraries of a compatible version of the SDK. Currently it's v158a.
If you wish to enable serde support add the following:
[dependencies]
bevy-steamworks = { version = "0.12", features = ["serde"] }
To add the plugin to your app, simply add the SteamworksPlugin
to your
App
. This will require the AppId
provided to you by Valve for initialization.
use bevy::prelude::*;
use bevy_steamworks::*;
fn main() {
// Use the demo Steam AppId for SpaceWar
App::new()
// it is important to add the plugin before `RenderPlugin` that comes with `DefaultPlugins`
.add_plugins(SteamworksPlugin::init_app(480).unwrap())
.add_plugins(DefaultPlugins)
.run()
}
The plugin adds Client
as a Bevy ECS resource, which can be
accessed like any other resource in Bevy. The client implements Send
and Sync
and can be used to make requests via the SDK from any of Bevy's threads.
The plugin will automatically call SingleClient::run_callbacks
on the Bevy
every tick in the First
schedule, so there is no need to run it manually.
All callbacks are forwarded as Events
and can be listened to in a
Bevy idiomatic way:
use bevy::prelude::*;
use bevy_steamworks::*;
fn steam_system(steam_client: Res<Client>) {
for friend in steam_client.friends().get_friends(FriendFlags::IMMEDIATE) {
println!("Friend: {:?} - {}({:?})", friend.id(), friend.name(), friend.state());
}
}
fn main() {
// Use the demo Steam AppId for SpaceWar
App::new()
// it is important to add the plugin before `RenderPlugin` that comes with `DefaultPlugins`
.add_plugins(SteamworksPlugin::init_app(480).unwrap())
.add_plugins(DefaultPlugins)
.add_systems(Startup, steam_system)
.run()
}
Bevy Version | bevy_steamworks |
---|---|
0.14 | 0.12 |
0.13 | 0.10, 0.11 |
0.12 | 0.9 |
0.11 | 0.8 |
0.10 | 0.7 |
0.9 | 0.6 |
0.8 | 0.5 |
0.7 | 0.4 |
0.6 | 0.2, 0.3 |
0.5 | 0.1 |