Separate out device/context creation into separate system so it can be configured by other systems.

This commit is contained in:
Nolan Darilek 2022-04-26 09:31:51 -05:00
parent 52709cba18
commit 763e1c361f

View File

@ -166,6 +166,13 @@ fn buffer_creation(
} }
} }
#[derive(Default, Deref, DerefMut)]
pub struct GlobalEffects(Vec<AuxEffectSlot>);
#[derive(Component, Clone, Copy, Debug, Default, Reflect)]
#[reflect(Component)]
pub struct Listener;
#[derive(Clone, Copy, Debug, PartialEq, Reflect)] #[derive(Clone, Copy, Debug, PartialEq, Reflect)]
pub enum SoundState { pub enum SoundState {
Stopped, Stopped,
@ -241,12 +248,19 @@ impl Sound {
} }
} }
#[derive(Component, Clone, Copy, Debug, Default, Reflect)] fn setup(mut commands: Commands, config: Res<OpenAlConfig>) {
#[reflect(Component)] let al = Alto::load_default().expect("Could not load alto");
pub struct Listener; let device = al.open(None).expect("Could not open device");
let mut context_attrs = ContextAttrs::default();
#[derive(Default, Deref, DerefMut)] if config.soft_hrtf {
pub struct GlobalEffects(Vec<AuxEffectSlot>); context_attrs.soft_hrtf = Some(true);
}
let context = device
.new_context(Some(context_attrs))
.expect("Could not create context");
commands.insert_resource(device);
commands.insert_resource(context);
}
fn update_listener( fn update_listener(
context: ResMut<Context>, context: ResMut<Context>,
@ -420,6 +434,7 @@ pub struct OpenAlPlugin;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, SystemLabel)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, SystemLabel)]
pub enum OpenAlSystem { pub enum OpenAlSystem {
Setup,
UpdateListener, UpdateListener,
UpdateSourceProperties, UpdateSourceProperties,
UpdateSourceState, UpdateSourceState,
@ -430,23 +445,12 @@ impl Plugin for OpenAlPlugin {
if !app.world.contains_resource::<OpenAlConfig>() { if !app.world.contains_resource::<OpenAlConfig>() {
app.insert_resource(OpenAlConfig::default()); app.insert_resource(OpenAlConfig::default());
} }
let config = *app.world.get_resource::<OpenAlConfig>().unwrap();
let al = Alto::load_default().expect("Could not load alto");
let device = al.open(None).expect("Could not open device");
let mut context_attrs = ContextAttrs::default();
if config.soft_hrtf {
context_attrs.soft_hrtf = Some(true);
}
let context = device
.new_context(Some(context_attrs))
.expect("Could not create context");
app.add_asset::<Buffer>() app.add_asset::<Buffer>()
.init_asset_loader::<BufferAssetLoader>() .init_asset_loader::<BufferAssetLoader>()
.insert_non_send_resource(device)
.insert_resource(context)
.insert_resource(Buffers::default()) .insert_resource(Buffers::default())
.insert_resource(GlobalEffects::default()) .insert_resource(GlobalEffects::default())
.register_type::<Listener>() .register_type::<Listener>()
.add_startup_system(setup.label(OpenAlSystem::Setup))
.add_system(buffer_creation) .add_system(buffer_creation)
.add_system_to_stage( .add_system_to_stage(
CoreStage::PostUpdate, CoreStage::PostUpdate,