diff --git a/Libraries/SDLLib b/Libraries/SDLLib index 726c56c..7fdd7dc 160000 --- a/Libraries/SDLLib +++ b/Libraries/SDLLib @@ -1 +1 @@ -Subproject commit 726c56c1a2ed4065c2efaaf2a283aa3c7af75cb7 +Subproject commit 7fdd7dc872270ebd375e7571dbb83a3e9b16de82 diff --git a/include/appstates/MainMenuState.hpp b/include/appstates/MainMenuState.hpp index b2d9364..ae5eb52 100644 --- a/include/appstates/MainMenuState.hpp +++ b/include/appstates/MainMenuState.hpp @@ -104,6 +104,9 @@ class MainMenuState final : public BaseState /// @brief Silently checks for an update in the background. void check_for_update(); + /// @brief Plays the little boot sound. + void play_boot_sound(); + /// @brief Pushes the target state to the vector. void push_target_state(); diff --git a/include/ui/PopMessageManager.hpp b/include/ui/PopMessageManager.hpp index 6841ad9..3e93bc2 100644 --- a/include/ui/PopMessageManager.hpp +++ b/include/ui/PopMessageManager.hpp @@ -1,4 +1,5 @@ #pragma once +#include "sdl.hpp" #include "sys/sys.hpp" #include "ui/DialogBox.hpp" #include "ui/PopMessage.hpp" @@ -35,7 +36,7 @@ namespace ui private: // Only one instance allowed. - PopMessageManager() = default; + PopMessageManager(); // Returns the only instance. static PopMessageManager &get_instance() @@ -54,5 +55,11 @@ namespace ui std::mutex m_messageMutex{}; std::mutex m_queueMutex{}; + + /// @brief The little chirp that's played when messages pop. + sdl::SharedSound m_popSound{}; + + /// @brief Loads the pop message sound into memory. + void initialize_pop_sound(); }; } // namespace ui diff --git a/romfs/Sound/PopMessage.wav b/romfs/Sound/PopMessage.wav new file mode 100644 index 0000000..558a545 Binary files /dev/null and b/romfs/Sound/PopMessage.wav differ diff --git a/source/appstates/MainMenuState.cpp b/source/appstates/MainMenuState.cpp index 1104e9b..4d7bc17 100644 --- a/source/appstates/MainMenuState.cpp +++ b/source/appstates/MainMenuState.cpp @@ -35,6 +35,7 @@ MainMenuState::MainMenuState() MainMenuState::initialize_view_states(); MainMenuState::initialize_data_struct(); MainMenuState::check_for_update(); + MainMenuState::play_boot_sound(); } void MainMenuState::update() @@ -136,6 +137,15 @@ void MainMenuState::initialize_data_struct() void MainMenuState::check_for_update() { sys::threadpool::push_job(tasks::update::check_for_update, m_dataStruct); } +void MainMenuState::play_boot_sound() +{ + // static constexpr std::string_view BOOT_NAME = "BootSound"; + // static constexpr const char *BOOT_PATH = "romfs:/Sound/Boot.wav"; + + // sdl::SharedSound bootSound = sdl::SoundManager::load(BOOT_NAME, BOOT_PATH); + // bootSound->play(); +} + void MainMenuState::push_target_state() { const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; diff --git a/source/ui/Menu.cpp b/source/ui/Menu.cpp index ddabd2a..94650e6 100644 --- a/source/ui/Menu.cpp +++ b/source/ui/Menu.cpp @@ -115,9 +115,9 @@ bool ui::Menu::is_empty() const noexcept { return m_options.empty(); } void ui::Menu::calculate_alignments() noexcept { - m_optionHeight = std::floor(static_cast(m_fontSize) * 1.8f); + m_optionHeight = std::round(static_cast(m_fontSize) * 1.8f); m_maxDisplayOptions = (m_renderTargetHeight - m_originalY) / m_optionHeight; - m_scrollLength = std::floor(static_cast(m_maxDisplayOptions) / 2.0f); + m_scrollLength = std::round(static_cast(m_maxDisplayOptions) / 2.0f); m_textY = (m_optionHeight / 2) - (m_fontSize / 2); } diff --git a/source/ui/PopMessageManager.cpp b/source/ui/PopMessageManager.cpp index 044f2e9..c1d296c 100644 --- a/source/ui/PopMessageManager.cpp +++ b/source/ui/PopMessageManager.cpp @@ -8,6 +8,8 @@ #include +ui::PopMessageManager::PopMessageManager() { PopMessageManager::initialize_pop_sound(); } + void ui::PopMessageManager::update() { static constexpr double COORD_INIT_Y = 594.0f; @@ -65,6 +67,7 @@ void ui::PopMessageManager::push_message(int displayTicks, std::string_view mess std::mutex &messageMutex = manager.m_messageMutex; auto &messageQueue = manager.m_messageQueue; auto &messages = manager.m_messages; + auto &popSound = manager.m_popSound; { std::lock_guard messageGuard{messageMutex}; @@ -79,6 +82,7 @@ void ui::PopMessageManager::push_message(int displayTicks, std::string_view mess std::lock_guard queueGuard(queueMutex); auto queuePair = std::make_pair(displayTicks, std::string{message}); messageQueue.push_back(std::move(queuePair)); + popSound->play(); } void ui::PopMessageManager::push_message(int displayTicks, std::string &message) @@ -88,6 +92,7 @@ void ui::PopMessageManager::push_message(int displayTicks, std::string &message) std::mutex &messageMutex = manager.m_messageMutex; auto &messageQueue = manager.m_messageQueue; auto &messages = manager.m_messages; + auto &popSound = manager.m_popSound; { std::lock_guard messageGuard{messageMutex}; @@ -102,4 +107,15 @@ void ui::PopMessageManager::push_message(int displayTicks, std::string &message) std::lock_guard queueGuard(queueMutex); auto queuePair = std::make_pair(displayTicks, std::move(message)); messageQueue.push_back(std::move(queuePair)); + popSound->play(); } + +void ui::PopMessageManager::initialize_pop_sound() +{ + static constexpr std::string_view POP_NAME = "PopSound"; + static constexpr const char *POP_PATH = "romfs:/Sound/PopMessage.wav"; + + if (m_popSound) { return; } + + m_popSound = sdl::SoundManager::load(POP_NAME, POP_PATH); +} \ No newline at end of file