diff --git a/include/GUI/Slider.h b/include/GUI/Slider.h index 48815de..de53245 100644 --- a/include/GUI/Slider.h +++ b/include/GUI/Slider.h @@ -28,7 +28,11 @@ public: } float Percentage() const { return m_Percentage; } - void SetPercentage(const float percentage) { m_Percentage = percentage; } + void SetPercentage(const float percentage) + { + m_Percentage = percentage; + m_SliderButton->X = percentage * (Width - m_SliderButton->Width); + } void SetTextureHover(std::string resourceName) { @@ -43,7 +47,7 @@ public: m_SliderButton->SetTexturePressed(resourceName); } - void CenterSlider() + void AlignVertically() { m_SliderButton->Y = (Height / 2) - (m_SliderButton->Height / 2); } diff --git a/include/Game/MainMenuOptions.h b/include/Game/MainMenuOptions.h index 2ac81e7..476fa4a 100644 --- a/include/Game/MainMenuOptions.h +++ b/include/Game/MainMenuOptions.h @@ -4,6 +4,8 @@ #include "GUI/TextureFrame.h" #include "GUI/Button.h" #include "GUI/Slider.h" +#include "GUI/ESliderUpdate.h" +#include "Sound/EMasterVolume.h" namespace dd { @@ -27,21 +29,52 @@ public: m_TitleSFX->SetTexture("Textures/GUI/Menu/OptionsSFXTitle.png"); m_SFXSlider = new GUI::Slider(this, "MainMenuOptionsSFXSlider"); m_SFXSlider->X = 66; - m_SFXSlider->SetTop(m_TitleSFX->Bottom()); + m_SFXSlider->SetTop(m_TitleSFX->Bottom() + 10); m_SFXSlider->SetTexture("Textures/GUI/Menu/SliderBackground.png"); m_SFXSlider->SetTextureReleased("Textures/GUI/Menu/SliderHandle.png"); - m_SFXSlider->CenterSlider(); + m_SFXSlider->AlignVertically(); + m_SFXSlider->SetPercentage(1.f); m_TitleBGM = new GUI::TextureFrame(this, "MainMenuOptionsBGMTitle"); - m_TitleBGM->SetTop(m_TitleSFX->Bottom()); + m_TitleBGM->SetTop(m_SFXSlider->Bottom() + 20); m_TitleBGM->SetTexture("Textures/GUI/Menu/OptionsBGMTitle.png"); + m_BGMSlider = new GUI::Slider(this, "MainMenuOptionsBGMSlider"); + m_BGMSlider->X = 66; + m_BGMSlider->SetTop(m_TitleBGM->Bottom() + 10); + m_BGMSlider->SetTexture("Textures/GUI/Menu/SliderBackground.png"); + m_BGMSlider->SetTextureReleased("Textures/GUI/Menu/SliderHandle.png"); + m_BGMSlider->AlignVertically(); + m_BGMSlider->SetPercentage(1.f); + + EVENT_SUBSCRIBE_MEMBER(m_ESliderUpdate, &MainMenuOptions::OnSliderUpdate); } private: - TextureFrame* m_Title; - TextureFrame* m_TitleSFX; - Slider* m_SFXSlider; - TextureFrame* m_TitleBGM; + TextureFrame* m_Title = nullptr; + TextureFrame* m_TitleSFX = nullptr; + Slider* m_SFXSlider = nullptr; + Slider* m_BGMSlider = nullptr; + TextureFrame* m_TitleBGM = nullptr; + + EventRelay m_ESliderUpdate; + bool OnSliderUpdate(const Events::SliderUpdate& event) + { + if (event.Slider == m_SFXSlider) { + Events::MasterVolume e; + e.isAmbient = false; + e.gain = event.Percentage; + EventBroker->Publish(e); + } + + if (event.Slider == m_BGMSlider) { + Events::MasterVolume e; + e.isAmbient = true; + e.gain = event.Percentage; + EventBroker->Publish(e); + } + + return true; + } }; }