#![cfg_attr(docsrs, feature(doc_cfg))]
#![no_std]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
use bevy_app::PreUpdate;
use bevy_ecs::prelude::Res;
#[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 =
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))
.add_systems(PreUpdate, |steam: Res<prelude::SteamworksClient>| {
steam.run_callbacks();
});
self
}
}