From 0cc0401b6630839999c7f511cfcd26733fcc8b5b Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 3 Apr 2022 11:27:58 -0400 Subject: [PATCH] Let buttons play a clicking noise when pressed --- game/dist/assets/audio/button_click.ogg | Bin 0 -> 5021 bytes .../game_logic/src/global_resource_package.rs | 16 +- game/game_logic/src/rendering/event_loop.rs | 14 +- game/game_logic/src/scenes/main_menu.rs | 314 +++++++++++++++--- game/game_logic/src/scenes/mod.rs | 34 +- 5 files changed, 318 insertions(+), 60 deletions(-) create mode 100644 game/dist/assets/audio/button_click.ogg diff --git a/game/dist/assets/audio/button_click.ogg b/game/dist/assets/audio/button_click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8d33b3e7bfd8e3143ac13f70640b63c535516b67 GIT binary patch literal 5021 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 Self { - Self {} + + // Load the button click sound + let button_click_sound = load_sound_from_internal_data("assets/audio/button_click.ogg").unwrap(); + + Self { + button_click_sound + } } } diff --git a/game/game_logic/src/rendering/event_loop.rs b/game/game_logic/src/rendering/event_loop.rs index cf9860ba..eb19f1ae 100644 --- a/game/game_logic/src/rendering/event_loop.rs +++ b/game/game_logic/src/rendering/event_loop.rs @@ -14,6 +14,7 @@ use crate::project_constants::ProjectConstants; use crate::rendering::core_renderer_sm::{PreloadState, RenderBackendStates}; use crate::rendering::screens::sm_failure_screen; use crate::scenes::SceneRenderDelegate; +use raylib::audio::RaylibAudio; use raylib::consts::KeyboardKey; use raylib::prelude::RaylibDraw; use raylib::RaylibBuilder; @@ -42,13 +43,22 @@ pub async fn handle_graphics_blocking( raylib_handle.set_exit_key(None); raylib_handle.set_target_fps(target_frames_per_second); + // Set up audio + debug!("Set up Audio"); + let audio_subsystem = RaylibAudio::init_audio_device(); + audio_subsystem.set_master_volume(0.4); + // Set up the internal screens let mut loading_screen = crate::rendering::screens::loading_screen::LoadingScreen::new(); let mut sm_failure_screen = sm_failure_screen::SmFailureScreen::new(); // Set up the main render delegate - let mut render_delegate = - SceneRenderDelegate::on_game_start(&mut raylib_handle, &raylib_thread, constants); + let mut render_delegate = SceneRenderDelegate::on_game_start( + &mut raylib_handle, + &raylib_thread, + constants, + audio_subsystem, + ); // Handle loading the resources and rendering the loading screen log::trace!("Running event loop"); diff --git a/game/game_logic/src/scenes/main_menu.rs b/game/game_logic/src/scenes/main_menu.rs index 2279962c..37b29ad4 100644 --- a/game/game_logic/src/scenes/main_menu.rs +++ b/game/game_logic/src/scenes/main_menu.rs @@ -49,6 +49,7 @@ impl MainMenu { discord: &DiscordChannel, global_resources: &GlobalResources, constants: &ProjectConstants, + audio_subsystem: &mut RaylibAudio, ) -> MenuStateSignal { // Handle updating discord RPC if !self.has_updated_discord_rpc { @@ -88,7 +89,7 @@ impl MainMenu { //Initial Option placeholder words in the main menu draw.draw_text("Game Title", 100, 90, 60, label_colors); - draw.draw_text("Start Game", 100, 190, 34, label_colors); + draw.draw_text("Start Game", 100, 190, 34, label_colors); draw.draw_text("Credits", 100, 410, 34, label_colors); draw.draw_text("Leaderboard", 100, 470, 34, label_colors); draw.draw_text("Exit", 100, 550, 34, label_colors); @@ -99,6 +100,7 @@ impl MainMenu { draw.draw_text("Start Game", 103, 191, 34, label_shadow_colors); draw.draw_text("Start Game", 100, 190, 34, label_colors); if draw.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); return MenuStateSignal::StartGame; } } @@ -107,6 +109,7 @@ impl MainMenu { draw.draw_text("Credits", 103, 411, 34, label_shadow_colors); draw.draw_text("Credits", 100, 410, 34, label_colors); if draw.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); return MenuStateSignal::DoCredits; } } @@ -114,6 +117,7 @@ impl MainMenu { draw.draw_text("Leaderboard", 103, 471, 34, label_shadow_colors); draw.draw_text("Leaderboard", 100, 470, 34, label_colors); if draw.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); return MenuStateSignal::DoLeaderboard; } } @@ -127,8 +131,24 @@ impl MainMenu { let button_shadow_color = Color::new(123, 201, 244, 255); //Inner pieces of the controller - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 275.0, 235.0, 0, tile_color);//tile1 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 225.0, 185.0, 0, tile_color);//tile2 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 275.0, + 235.0, + 0, + tile_color, + ); //tile1 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 225.0, + 185.0, + 0, + tile_color, + ); //tile2 //- button draw.draw_rectangle(window_width - 133, window_height - 128, 21, 5, button_color); @@ -137,64 +157,188 @@ impl MainMenu { draw.draw_rectangle(window_width - 70, window_height - 128, 21, 5, button_color); //horizontal line //Drawing external ring and internal ring - draw.draw_ring_lines(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 315.0, 45.0, 1, outer_ring_color);//Outer - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 275.0, 85.0, 1, inner_ring_color);//Inner + draw.draw_ring_lines( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 315.0, + 45.0, + 1, + outer_ring_color, + ); //Outer + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 275.0, + 85.0, + 1, + inner_ring_color, + ); //Inner //Tiles shown depending on volume_percentage's value if self.volume_percentage == 1.0 { - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 125.0, 85.0, 0, tile_color);//tile4 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 175.0, 135.0, 0, tile_color);//tile3 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 225.0, 185.0, 0, tile_color);//tile2 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 275.0, 235.0, 0, tile_color);//tile1 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 125.0, + 85.0, + 0, + tile_color, + ); //tile4 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 175.0, + 135.0, + 0, + tile_color, + ); //tile3 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 225.0, + 185.0, + 0, + tile_color, + ); //tile2 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 275.0, + 235.0, + 0, + tile_color, + ); //tile1 } else if self.volume_percentage == 0.75 { - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 175.0, 135.0, 0, tile_color);//tile3 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 225.0, 185.0, 0, tile_color);//tile2 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 275.0, 235.0, 0, tile_color);//tile1 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 175.0, + 135.0, + 0, + tile_color, + ); //tile3 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 225.0, + 185.0, + 0, + tile_color, + ); //tile2 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 275.0, + 235.0, + 0, + tile_color, + ); //tile1 } else if self.volume_percentage == 0.5 { - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 225.0, 185.0, 0, tile_color);//tile2 - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 275.0, 235.0, 0, tile_color);//tile1 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 225.0, + 185.0, + 0, + tile_color, + ); //tile2 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 275.0, + 235.0, + 0, + tile_color, + ); //tile1 } else if self.volume_percentage == 0.25 { - draw.draw_ring(Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), 50.0, 15.0, 275.0, 235.0, 0, tile_color);//tile1 + draw.draw_ring( + Vector2::new((window_width as f32) - 90.0, (window_height as f32) - 140.0), + 50.0, + 15.0, + 275.0, + 235.0, + 0, + tile_color, + ); //tile1 } else if self.volume_percentage == 0.0 { - } //- Button functionality - if mouse_x >= (window_width - 133) && mouse_y >= (window_height - 135) && mouse_x <= (window_width - 112) && mouse_y <= (window_height - 115) { - draw.draw_rectangle(window_width - 130, window_height - 127, 21, 5, button_shadow_color); + if mouse_x >= (window_width - 133) + && mouse_y >= (window_height - 135) + && mouse_x <= (window_width - 112) + && mouse_y <= (window_height - 115) + { + draw.draw_rectangle( + window_width - 130, + window_height - 127, + 21, + 5, + button_shadow_color, + ); draw.draw_rectangle(window_width - 133, window_height - 128, 21, 5, button_color); if draw.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); if self.volume_percentage <= 1.0 && self.volume_percentage > 0.0 { - self.volume_percentage = self.volume_percentage - 0.25 - } else if self.volume_percentage <= 0.0{ + self.volume_percentage = self.volume_percentage - 0.25 + } else if self.volume_percentage <= 0.0 { self.volume_percentage = 0.0; } } } // + Button functionallity - if mouse_x >= (window_width - 70) && mouse_y >= (window_height - 135) && mouse_x <= (window_width - 49) && mouse_y <= (window_height - 115) { - draw.draw_rectangle(window_width - 59, window_height - 134, 5, 20, button_shadow_color);//Vertical Line - draw.draw_rectangle(window_width - 67, window_height - 127, 21, 5, button_shadow_color); + if mouse_x >= (window_width - 70) + && mouse_y >= (window_height - 135) + && mouse_x <= (window_width - 49) + && mouse_y <= (window_height - 115) + { + draw.draw_rectangle( + window_width - 59, + window_height - 134, + 5, + 20, + button_shadow_color, + ); //Vertical Line + draw.draw_rectangle( + window_width - 67, + window_height - 127, + 21, + 5, + button_shadow_color, + ); draw.draw_rectangle(window_width - 62, window_height - 135, 5, 20, button_color); // vertical line draw.draw_rectangle(window_width - 70, window_height - 128, 21, 5, button_color); //horizontal line - + if draw.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); if self.volume_percentage < 1.0 && self.volume_percentage >= 0.0 { - self.volume_percentage = self.volume_percentage + 0.25 - } else if self.volume_percentage <= 0.0{ + self.volume_percentage = self.volume_percentage + 0.25 + } else if self.volume_percentage <= 0.0 { self.volume_percentage = 0.0; } } } - + //Exit button if mouse_x >= 100 && mouse_y >= 550 && mouse_x <= 162 && mouse_y <= 575 { draw.draw_text("Exit", 103, 551, 34, label_shadow_colors); draw.draw_text("Exit", 100, 550, 34, label_colors); if draw.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); return MenuStateSignal::QuitGame; } } @@ -211,7 +355,6 @@ impl MainMenu { global_resources: &GlobalResources, constants: &ProjectConstants, ) -> MenuStateSignal { - //Options Errased, Block of code left for precaution return MenuStateSignal::DoMainMenu; } @@ -223,6 +366,7 @@ impl MainMenu { discord: &DiscordChannel, global_resources: &GlobalResources, constants: &ProjectConstants, + audio_subsystem: &mut RaylibAudio, ) -> MenuStateSignal { //Colors let label_colors = Color::BLACK; @@ -234,7 +378,7 @@ impl MainMenu { //Mouse Position let mouse_x = draw.get_mouse_x(); let mouse_y = draw.get_mouse_y(); - + //TODO Errase in the end Show mouse position draw.draw_text(&mouse_x.to_string(), 20, 5, 20, Color::BLACK); draw.draw_text(&mouse_y.to_string(), 70, 5, 20, Color::BLACK); @@ -243,27 +387,86 @@ impl MainMenu { let window_height = draw.get_screen_height(); let window_width = draw.get_screen_width(); - draw.draw_text("Credits", (window_width/2) - 100, 30, 55, label_colors); + draw.draw_text("Credits", (window_width / 2) - 100, 30, 55, label_colors); - draw.draw_text("Carter Tomlenovich", (window_width/2) - 170, 120, 40, credits_colours); - draw.draw_text("Emilia Firas", (window_width/2) - 170, 160, 40, credits_colours); - draw.draw_text("Emmet Logue", (window_width/2) - 170, 200, 40, credits_colours); - draw.draw_text("Evan Pratten", (window_width/2) - 170, 240, 40, credits_colours); - draw.draw_text("James Nickoli", (window_width/2) - 170, 280, 40, credits_colours); - draw.draw_text("Marcelo Geldres", (window_width/2) - 170, 320, 40, credits_colours); - draw.draw_text("Percy", (window_width/2) - 170, 360, 40, credits_colours); - draw.draw_text("Silas Bartha", (window_width/2) - 170, 400, 40, credits_colours); - draw.draw_text("Taya Armstrong", (window_width/2) - 170, 440, 40, credits_colours); + draw.draw_text( + "Carter Tomlenovich", + (window_width / 2) - 170, + 120, + 40, + credits_colours, + ); + draw.draw_text( + "Emilia Firas", + (window_width / 2) - 170, + 160, + 40, + credits_colours, + ); + draw.draw_text( + "Emmet Logue", + (window_width / 2) - 170, + 200, + 40, + credits_colours, + ); + draw.draw_text( + "Evan Pratten", + (window_width / 2) - 170, + 240, + 40, + credits_colours, + ); + draw.draw_text( + "James Nickoli", + (window_width / 2) - 170, + 280, + 40, + credits_colours, + ); + draw.draw_text( + "Marcelo Geldres", + (window_width / 2) - 170, + 320, + 40, + credits_colours, + ); + draw.draw_text("Percy", (window_width / 2) - 170, 360, 40, credits_colours); + draw.draw_text( + "Silas Bartha", + (window_width / 2) - 170, + 400, + 40, + credits_colours, + ); + draw.draw_text( + "Taya Armstrong", + (window_width / 2) - 170, + 440, + 40, + credits_colours, + ); //Return button variables let button_pos_x = 100; //116 Wide - let button_pos_y = window_height - (window_height/5); //26 height + let button_pos_y = window_height - (window_height / 5); //26 height draw.draw_text("Return", button_pos_x, button_pos_y, 34, label_colors); - if mouse_x >= 100 && mouse_y >= button_pos_y && mouse_x <= 216 && mouse_y <= (window_height - (window_height/5)) + 26 { - draw.draw_text("Return", button_pos_x + 3, button_pos_y + 1, 34, label_shadow_colors); + if mouse_x >= 100 + && mouse_y >= button_pos_y + && mouse_x <= 216 + && mouse_y <= (window_height - (window_height / 5)) + 26 + { + draw.draw_text( + "Return", + button_pos_x + 3, + button_pos_y + 1, + 34, + label_shadow_colors, + ); draw.draw_text("Return", button_pos_x, button_pos_y, 34, label_colors); if draw.is_mouse_button_down(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); return MenuStateSignal::DoMainMenu; //Goes back to main menu } } @@ -278,8 +481,8 @@ impl MainMenu { discord: &DiscordChannel, global_resources: &GlobalResources, constants: &ProjectConstants, + audio_subsystem: &mut RaylibAudio, ) -> MenuStateSignal { - //Colors let label_colors = Color::BLACK; let label_shadow_colors = Color::GRAY; @@ -299,17 +502,34 @@ impl MainMenu { draw.draw_text(&mouse_y.to_string(), 70, 5, 20, Color::BLACK); let window_width = draw.get_screen_width(); - draw.draw_text("Leaderboard", (window_width/2) - 176, 30, 55, label_colors); + draw.draw_text( + "Leaderboard", + (window_width / 2) - 176, + 30, + 55, + label_colors, + ); //Return button variables let button_pos_x = 100; //116 Wide - let button_pos_y = window_height - (window_height/5); //26 height + let button_pos_y = window_height - (window_height / 5); //26 height draw.draw_text("Return", button_pos_x, button_pos_y, 34, label_colors); - if mouse_x >= 100 && mouse_y >= button_pos_y && mouse_x <= 216 && mouse_y <= (window_height - (window_height/5)) + 26 { - draw.draw_text("Return", button_pos_x + 3, button_pos_y + 1, 34, label_shadow_colors); + if mouse_x >= 100 + && mouse_y >= button_pos_y + && mouse_x <= 216 + && mouse_y <= (window_height - (window_height / 5)) + 26 + { + draw.draw_text( + "Return", + button_pos_x + 3, + button_pos_y + 1, + 34, + label_shadow_colors, + ); draw.draw_text("Return", button_pos_x, button_pos_y, 34, label_colors); if draw.is_mouse_button_down(MouseButton::MOUSE_LEFT_BUTTON) { + audio_subsystem.play_sound(&global_resources.button_click_sound); return MenuStateSignal::DoMainMenu; //Goes back to main menu } } diff --git a/game/game_logic/src/scenes/mod.rs b/game/game_logic/src/scenes/mod.rs index c71de971..173f6b94 100644 --- a/game/game_logic/src/scenes/mod.rs +++ b/game/game_logic/src/scenes/mod.rs @@ -37,11 +37,8 @@ impl SceneRenderDelegate { raylib: &mut RaylibHandle, rl_thread: &RaylibThread, constants: &ProjectConstants, + audio_subsystem: RaylibAudio, ) -> Self { - // Set up audio - let audio_subsystem = RaylibAudio::init_audio_device(); - audio_subsystem.set_master_volume(0.4); - // Init some scenes let scene_test_fox = TestFoxScene::new(raylib, rl_thread); let scene_playable = PlayableScene::new(raylib, rl_thread, constants); @@ -68,12 +65,18 @@ impl SceneRenderDelegate { global_resources: &GlobalResources, constants: &ProjectConstants, ) { - // Render the main menu if in it, otherwise, render the game match self.menu_control_signal { MenuStateSignal::StartGame => { self.scene_playable - .render_frame(raylib, rl_thread, &discord, global_resources, constants, &mut self.audio_subsystem) + .render_frame( + raylib, + rl_thread, + &discord, + global_resources, + constants, + &mut self.audio_subsystem, + ) .await; self.scene_playable.update_physics(raylib, constants).await; @@ -86,7 +89,14 @@ impl SceneRenderDelegate { MenuStateSignal::DoMainMenu => { self.menu_control_signal = self .scene_main_menu - .render_main_menu_frame(raylib, rl_thread, discord, global_resources, constants) + .render_main_menu_frame( + raylib, + rl_thread, + discord, + global_resources, + constants, + &mut self.audio_subsystem, + ) .await; // Clear the ingame discord status @@ -101,7 +111,14 @@ impl SceneRenderDelegate { MenuStateSignal::DoCredits => { self.menu_control_signal = self .scene_main_menu - .render_credits_frame(raylib, rl_thread, discord, global_resources, constants) + .render_credits_frame( + raylib, + rl_thread, + discord, + global_resources, + constants, + &mut self.audio_subsystem, + ) .await } MenuStateSignal::DoLeaderboard => { @@ -113,6 +130,7 @@ impl SceneRenderDelegate { discord, global_resources, constants, + &mut self.audio_subsystem, ) .await }