fix(wasm): request permission for media autoplay if needed
This commit is contained in:
parent
32c67d46d5
commit
53bf4b1aef
14 changed files with 44 additions and 467 deletions
|
|
@ -4,8 +4,7 @@ pub struct AudioSystemPlugin;
|
|||
|
||||
impl Plugin for AudioSystemPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app
|
||||
.init_resource::<AudioAssets>()
|
||||
app.init_resource::<AudioAssets>()
|
||||
.add_startup_system(load_audio);
|
||||
}
|
||||
}
|
||||
|
|
@ -23,27 +22,27 @@ pub fn play_audio(
|
|||
color: Vec4,
|
||||
volume: f32,
|
||||
) {
|
||||
for i in 0 .. 3 {
|
||||
for i in 0..3 {
|
||||
audio.play_with_settings(
|
||||
audio_set[i].clone(),
|
||||
PlaybackSettings::ONCE.with_volume(color[i] * volume)
|
||||
PlaybackSettings::ONCE.with_volume(color[i] * volume),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn load_audio(
|
||||
mut audio_assets: ResMut<AudioAssets>,
|
||||
asset_server: Res<AssetServer>,
|
||||
) {
|
||||
fn load_audio(mut audio_assets: ResMut<AudioAssets>, asset_server: Res<AssetServer>) {
|
||||
audio_assets.notes[0] = asset_server.load::<AudioSource, &str>("sound/notes/a5.ogg");
|
||||
audio_assets.notes[1] = asset_server.load::<AudioSource, &str>("sound/notes/cs6.ogg");
|
||||
audio_assets.notes[2] = asset_server.load::<AudioSource, &str>("sound/notes/e6.ogg");
|
||||
|
||||
audio_assets.reverb_notes[0] = asset_server.load::<AudioSource, &str>("sound/reverb_notes/a5.ogg");
|
||||
audio_assets.reverb_notes[1] = asset_server.load::<AudioSource, &str>("sound/reverb_notes/cs6.ogg");
|
||||
audio_assets.reverb_notes[2] = asset_server.load::<AudioSource, &str>("sound/reverb_notes/e6.ogg");
|
||||
audio_assets.reverb_notes[0] =
|
||||
asset_server.load::<AudioSource, &str>("sound/reverb_notes/a5.ogg");
|
||||
audio_assets.reverb_notes[1] =
|
||||
asset_server.load::<AudioSource, &str>("sound/reverb_notes/cs6.ogg");
|
||||
audio_assets.reverb_notes[2] =
|
||||
asset_server.load::<AudioSource, &str>("sound/reverb_notes/e6.ogg");
|
||||
|
||||
audio_assets.warp_notes[0] = asset_server.load::<AudioSource, &str>("sound/warp_notes/a5.ogg");
|
||||
audio_assets.warp_notes[1] = asset_server.load::<AudioSource, &str>("sound/warp_notes/cs6.ogg");
|
||||
audio_assets.warp_notes[2] = asset_server.load::<AudioSource, &str>("sound/warp_notes/e6.ogg");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
42
src/game.rs
42
src/game.rs
|
|
@ -2,8 +2,8 @@
|
|||
#![allow(clippy::too_many_arguments)]
|
||||
|
||||
pub use crate::filters::*;
|
||||
use crate::{AppState, audio_system};
|
||||
use crate::levels;
|
||||
use crate::{audio_system, AppState};
|
||||
|
||||
use bevy::{
|
||||
ecs::system::EntityCommands,
|
||||
|
|
@ -337,7 +337,7 @@ fn char_char_collision_event_system(
|
|||
c1_player.is_some() || c2_player.is_some(),
|
||||
);
|
||||
|
||||
audio_system::play_audio(&audio_assets.warp_notes, &audio, new_color.into(), 1.0);
|
||||
audio_system::play_audio(&audio_assets.warp_notes, &audio, new_color, 1.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -364,7 +364,7 @@ fn char_platform_collision_event_system(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CollisionEvent::Stopped(e1, e2, flags) => {
|
||||
if *flags == CollisionEventFlags::SENSOR {
|
||||
if let (Ok(mut platform_count), Ok(_)) =
|
||||
|
|
@ -412,25 +412,14 @@ fn collision_event_system(
|
|||
}
|
||||
}
|
||||
} else if *flags == CollisionEventFlags::SENSOR {
|
||||
if let (Ok((mut c_color, _c_transform, mut c_material, c_player)), Ok(filter)) = (
|
||||
if let (Ok((mut c_color, _c_transform, mut c_material, _c_player)), Ok(filter)) = (
|
||||
character_query.get_mut(*e1),
|
||||
pass_through_filter_query.get(*e2),
|
||||
) {
|
||||
c_color.0 = filter.apply(c_color.0);
|
||||
*c_material = materials.add(ColorMaterial::from(c_color.0));
|
||||
|
||||
if c_player.is_some() {
|
||||
audio
|
||||
.send(AudioMsg::Color([
|
||||
c_color.0.r(),
|
||||
c_color.0.g(),
|
||||
c_color.0.b(),
|
||||
]))
|
||||
.ok();
|
||||
audio.send(AudioMsg::Switch).ok();
|
||||
}
|
||||
} else if let (
|
||||
Ok((mut c_color, _c_transform, mut c_material, c_player)),
|
||||
Ok((mut c_color, _c_transform, mut c_material, _c_player)),
|
||||
Ok(filter),
|
||||
) = (
|
||||
character_query.get_mut(*e2),
|
||||
|
|
@ -438,17 +427,6 @@ fn collision_event_system(
|
|||
) {
|
||||
c_color.0 = filter.apply(c_color.0);
|
||||
*c_material = materials.add(ColorMaterial::from(c_color.0));
|
||||
|
||||
if c_player.is_some() {
|
||||
audio
|
||||
.send(AudioMsg::Color([
|
||||
c_color.0.r(),
|
||||
c_color.0.g(),
|
||||
c_color.0.b(),
|
||||
]))
|
||||
.ok();
|
||||
audio.send(AudioMsg::Switch).ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -568,8 +546,8 @@ fn camera_system(
|
|||
time: Res<Time>,
|
||||
mut zoom_timer: ResMut<levels::ZoomTimer>,
|
||||
) {
|
||||
fn lerp(x: f32, y: f32, t: f32,) -> f32 {
|
||||
return ((y - x) * t) + x;
|
||||
fn lerp(x: f32, y: f32, t: f32) -> f32 {
|
||||
((y - x) * t) + x
|
||||
}
|
||||
|
||||
const MARGIN: f32 = 300.0;
|
||||
|
|
@ -637,7 +615,11 @@ fn level_keyboard_system(
|
|||
commands.entity(entity).despawn_recursive();
|
||||
}
|
||||
if app_state.replace(AppState::Game).is_err() {
|
||||
crate::levels::setup_level(&mut level_startup_event, &mut camera_query, &mut zoom_timer);
|
||||
crate::levels::setup_level(
|
||||
&mut level_startup_event,
|
||||
&mut camera_query,
|
||||
&mut zoom_timer,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,9 +14,7 @@ pub struct ZoomTimer(pub Timer);
|
|||
|
||||
impl Default for ZoomTimer {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
0: Timer::new(Duration::new(2, 0), false),
|
||||
}
|
||||
Self(Timer::new(Duration::new(2, 0), false))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod editor;
|
||||
|
||||
mod audio_system;
|
||||
mod filters;
|
||||
mod game;
|
||||
mod levels;
|
||||
mod menu;
|
||||
mod particle_effect;
|
||||
mod audio_system;
|
||||
|
||||
use bevy::{
|
||||
asset::{Asset, HandleId, LoadState},
|
||||
|
|
@ -65,7 +65,6 @@ fn main() {
|
|||
title: "Lux synthesĕ".into(),
|
||||
..Default::default()
|
||||
})
|
||||
.insert_resource(audio_event_sender)
|
||||
.insert_resource(UseEditor(use_editor))
|
||||
.add_state(AppState::Loading)
|
||||
.insert_resource(game::FirstLevel(first_level))
|
||||
|
|
|
|||
16
src/menu.rs
16
src/menu.rs
|
|
@ -20,22 +20,6 @@ impl Plugin for MenuPlugin {
|
|||
|
||||
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||
let font = asset_server.get_handle("UacariLegacy-Thin.ttf");
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
commands
|
||||
.spawn_bundle(Text2dBundle {
|
||||
text: Text::from_section(
|
||||
"Note:\nAudio is NOT available in the WASM build.",
|
||||
TextStyle {
|
||||
font: font.clone(),
|
||||
font_size: 24.0,
|
||||
color: Color::rgba(1., 0.4, 0.4, 1.),
|
||||
},
|
||||
)
|
||||
.with_alignment(TextAlignment::CENTER),
|
||||
transform: Transform::from_xyz(0., -128.0, 0.),
|
||||
..Default::default()
|
||||
})
|
||||
.insert(Menu);
|
||||
commands
|
||||
.spawn_bundle(Text2dBundle {
|
||||
text: Text::from_section(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue