#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
#![no_std]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
use bevy_app::PreUpdate;
use bevy_ecs::prelude::NonSend;
#[cfg(feature = "client")]
pub mod client;
#[cfg(all(feature = "server", not(target_family = "wasm")))]
pub mod server;
#[derive(thiserror::Error, Debug)]
pub enum SteamError {}
pub mod prelude {
pub use crate::SteamAppExt;
pub use crate::SteamError;
pub use aeronet_steam::SessionConfig;
pub use aeronet_steam::SteamworksClient;
pub use aeronet_steam::steamworks;
pub use aeronet_steam::steamworks::SteamId;
#[cfg(feature = "client")]
pub mod client {
pub use crate::client::{SteamClientIo, SteamClientPlugin};
pub use aeronet_steam::client::ConnectTarget;
}
#[cfg(all(feature = "server", not(target_family = "wasm")))]
pub mod server {
pub use crate::server::{SteamServerIo, SteamServerPlugin};
pub use aeronet_steam::server::ListenTarget;
}
}
pub trait SteamAppExt {
fn add_steam_resources(&mut self, app_id: u32) -> &mut Self;
}
impl SteamAppExt for bevy_app::App {
fn add_steam_resources(&mut self, app_id: u32) -> &mut Self {
let (steam, steam_single) =
prelude::steamworks::Client::init_app(app_id).expect("failed to initialize steam");
steam.networking_utils().init_relay_network_access();
self.insert_resource(prelude::SteamworksClient(steam))
.insert_non_send_resource(steam_single)
.add_systems(
PreUpdate,
|steam: NonSend<prelude::steamworks::SingleClient>| {
steam.run_callbacks();
},
);
self
}
}