diff --git a/assets/sounds/ion.ogg b/assets/sounds/ion.ogg new file mode 100644 index 0000000..f88fa6f Binary files /dev/null and b/assets/sounds/ion.ogg differ diff --git a/src/actor.rs b/src/actor.rs index bd76880..80e8823 100644 --- a/src/actor.rs +++ b/src/actor.rs @@ -142,7 +142,7 @@ pub struct Vehicle; pub enum EngineType { Monopropellant, Rocket, - //Ion, + Ion, } #[derive(Component)] diff --git a/src/audio.rs b/src/audio.rs index a0e0d5d..d582945 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -10,6 +10,7 @@ const ASSET_CONNECT: &str = "sounds/connect.ogg"; const ASSET_BGM: &str = "music/dead-space-style-ambient-music.ogg"; const ASSET_THRUSTER: &str = "sounds/thruster.ogg"; const ASSET_ROCKET: &str = "sounds/rocket.ogg"; +const ASSET_ION: &str = "sounds/ion.ogg"; //const ASSET_WAKEUP: &str = "sounds/wakeup.ogg"; const ASSET_BIKESTART: &str = "sounds/bikestart.ogg"; @@ -40,6 +41,7 @@ pub enum Sfx { #[derive(Component)] pub struct ComponentBGM; #[derive(Component)] pub struct ComponentThrusterSound; #[derive(Component)] pub struct ComponentRocketSound; +#[derive(Component)] pub struct ComponentIonSound; #[derive(Component)] struct SoundBGM(Handle); #[derive(Resource)] pub struct SoundClick(Handle); #[derive(Resource)] pub struct SoundSwitch(Handle); @@ -94,6 +96,17 @@ pub fn setup( }, }, )); + commands.spawn(( + ComponentIonSound, + AudioBundle { + source: asset_server.load(ASSET_ION), + settings: PlaybackSettings { + mode: PlaybackMode::Loop, + paused: true, + ..default() + }, + }, + )); commands.insert_resource(SoundClick(asset_server.load(ASSET_CLICK))); commands.insert_resource(SoundSwitch(asset_server.load(ASSET_SWITCH))); commands.insert_resource(SoundIncomingMessage(asset_server.load(ASSET_INCOMING_MESSAGE))); diff --git a/src/camera.rs b/src/camera.rs index daaf74d..0a65f49 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -47,6 +47,7 @@ fn run_camera_controller( key_input: Res>, thruster_sound_controller: Query<&AudioSink, With>, rocket_sound_controller: Query<&AudioSink, With>, + ion_sound_controller: Query<&AudioSink, With>, mut q_engine: Query<&mut actor::Engine, With>, mut query: Query<( &mut Transform, @@ -181,5 +182,12 @@ fn run_camera_controller( sink.pause() } } + if let Ok(sink) = ion_sound_controller.get_single() { + if play_thruster_sound && engine.engine_type == actor::EngineType::Ion { + sink.play() + } else { + sink.pause() + } + } } } diff --git a/src/defs.txt b/src/defs.txt index 3c6c20b..3c01abb 100644 --- a/src/defs.txt +++ b/src/defs.txt @@ -81,7 +81,7 @@ actor 10 -30 20 MeteorAceGT scale 5 vehicle yes thrust 70 13.7 9.4 0.5 20 - engine rocket + engine ion actor 10 0 70 suit name Icarus diff --git a/src/world.rs b/src/world.rs index 9d84d00..996671f 100644 --- a/src/world.rs +++ b/src/world.rs @@ -567,6 +567,9 @@ pub fn load_defs( ["engine", "rocket"] => { state.engine_type = actor::EngineType::Rocket; } + ["engine", "ion"] => { + state.engine_type = actor::EngineType::Ion; + } // Parsing chats ["chat", chat_name] => {