|
|
|
@ -27,6 +27,7 @@ impl Plugin for AudioPlugin {
|
|
|
|
audio_trigger.run_if(on_event::<AudioEvent>()),
|
|
|
|
audio_trigger.run_if(on_event::<AudioEvent>()),
|
|
|
|
control_volume.run_if(resource_changed::<AudioVolume>),
|
|
|
|
control_volume.run_if(resource_changed::<AudioVolume>),
|
|
|
|
toggle_volume.run_if(just_pressed(KeyCode::KeyM)),
|
|
|
|
toggle_volume.run_if(just_pressed(KeyCode::KeyM)),
|
|
|
|
|
|
|
|
set_intensity.run_if(in_state(GameState::Play).and_then(resource_exists::<tweak::GameTweaks>.and_then(resource_changed::<game::Board>))),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -145,3 +146,35 @@ fn toggle_volume(mut vol: ResMut<AudioVolume>) {
|
|
|
|
fn control_volume(vol: Res<AudioVolume>, query: Query<&AudioSource>) {
|
|
|
|
fn control_volume(vol: Res<AudioVolume>, query: Query<&AudioSource>) {
|
|
|
|
query.iter().for_each(|aud_src| aud_src.set_volume(vol.0));
|
|
|
|
query.iter().for_each(|aud_src| aud_src.set_volume(vol.0));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn set_intensity(
|
|
|
|
|
|
|
|
mut query: Query<(&mut AudioSource, &AudioEvent)>,
|
|
|
|
|
|
|
|
board: Res<game::Board>,
|
|
|
|
|
|
|
|
tweaks_file: Res<tweak::GameTweaks>,
|
|
|
|
|
|
|
|
tweaks: Res<Assets<Tweaks>>,
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
let tweak = tweaks
|
|
|
|
|
|
|
|
.get(tweaks_file.handle.clone())
|
|
|
|
|
|
|
|
.expect("Load tweakfile");
|
|
|
|
|
|
|
|
let value = {
|
|
|
|
|
|
|
|
let intensity_min = tweak.get::<f32>("audio_music_intensity_min").unwrap();
|
|
|
|
|
|
|
|
let intensity_max = tweak.get::<f32>("audio_music_intensity_max").unwrap();
|
|
|
|
|
|
|
|
let intensity_range = intensity_max - intensity_min;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let count_side_a = board.on(Side::A).len();
|
|
|
|
|
|
|
|
let count_side_b = board.on(Side::B).len();
|
|
|
|
|
|
|
|
let min_side = count_side_a.min(count_side_b);
|
|
|
|
|
|
|
|
let max_side_size = 16;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let intensity_ratio = ((max_side_size as f32) - (min_side as f32)) / (max_side_size as f32);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(intensity_ratio * intensity_range) + intensity_min
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query.iter_mut()
|
|
|
|
|
|
|
|
.filter(|(_, event)| **event == AudioEvent::MainMusic)
|
|
|
|
|
|
|
|
.for_each(|(mut source, _)| {
|
|
|
|
|
|
|
|
info!("Setting music intensity to {:?}", value);
|
|
|
|
|
|
|
|
source.event_instance.set_parameter_by_name("Intensity", value, true).expect("Set intensity parameter");
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|