git repos / blockattack-game

commit c4ae70b7

Poul Sander · 2025-12-14 15:05
c4ae70b7fef57d66dd214a17bbab0351e7b95de8 patch · browse files
parent 517ed88664f464bfef86a37a0870fdb716445e13

Make the volume buttons light up once pressed

Changed files

M source/code/MenuSystem.cpp before
M source/code/MenuSystem.h before
M source/code/menudef.cpp before
diff --git a/source/code/MenuSystem.cpp b/source/code/MenuSystem.cpp index 191df06..0018569 100644 --- a/source/code/MenuSystem.cpp +++ b/source/code/MenuSystem.cpp
@@ -137,23 +137,36 @@ void ButtonWithAdjustment::drawToScreen(SDL_Renderer* target) const {
// Draw left adjustment button (down arrow)
int adjustSize = getAdjustButtonSize();
int leftX = x - adjustSize - 10;
- int leftY = y + (standardButton.ysize - adjustSize) / 2; // Vertically center the small button
- globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), leftX, leftY, adjustSize, adjustSize, &globalData.logicalResize);
- standardButton.getLabel("\u25c0", false)->Draw(globalData.screen, leftX+adjustSize/2, leftY+adjustSize/2,
+ int leftY = y;
+ Uint32 currentTime = SDL_GetTicks();
+ bool leftMarked = (currentTime - leftButtonMarkTime) < MARK_DURATION;
+ if (leftMarked) {
+ globalData.spriteHolder->GetSprite("menu_marked").DrawScaled(globalData.screen, SDL_GetTicks(), leftX, leftY, adjustSize, adjustSize, &globalData.logicalResize);
+ }
+ else {
+ globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), leftX, leftY, adjustSize, adjustSize, &globalData.logicalResize);
+ }
+ standardButton.getLabel("\u25c0", leftMarked)->Draw(globalData.screen, leftX+adjustSize/2, leftY+adjustSize/2,
sago::SagoTextField::Alignment::center, sago::SagoTextField::VerticalAlignment::center, &globalData.logicalResize);
// Draw right adjustment button (up arrow)
int rightX = x + standardButton.xsize + 10;
- int rightY = y + (standardButton.ysize - adjustSize) / 2; // Vertically center the small button
- globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), rightX, rightY, adjustSize, adjustSize, &globalData.logicalResize);
- standardButton.getLabel("\u25b6", false)->Draw(globalData.screen, rightX+adjustSize/2, rightY+adjustSize/2,
+ int rightY = y;
+ bool rightMarked = (currentTime - rightButtonMarkTime) < MARK_DURATION;
+ if (rightMarked) {
+ globalData.spriteHolder->GetSprite("menu_marked").DrawScaled(globalData.screen, SDL_GetTicks(), rightX, rightY, adjustSize, adjustSize, &globalData.logicalResize);
+ }
+ else {
+ globalData.spriteHolder->GetSprite("menu_unmarked").DrawScaled(globalData.screen, SDL_GetTicks(), rightX, rightY, adjustSize, adjustSize, &globalData.logicalResize);
+ }
+ standardButton.getLabel("\u25b6", rightMarked)->Draw(globalData.screen, rightX+adjustSize/2, rightY+adjustSize/2,
sago::SagoTextField::Alignment::center, sago::SagoTextField::VerticalAlignment::center, &globalData.logicalResize);
}
bool ButtonWithAdjustment::isClickedAdjustLeft(int mx, int my) const {
int adjustSize = getAdjustButtonSize();
int leftX = x - adjustSize - 10;
- int leftY = y + (standardButton.ysize - adjustSize) / 2;
+ int leftY = y;
if (mx >= leftX && my >= leftY && mx <= leftX + adjustSize && my <= leftY + adjustSize) {
return true;
}
@@ -163,7 +176,7 @@ bool ButtonWithAdjustment::isClickedAdjustLeft(int mx, int my) const {
bool ButtonWithAdjustment::isClickedAdjustRight(int mx, int my) const {
int adjustSize = getAdjustButtonSize();
int rightX = x + standardButton.xsize + 10;
- int rightY = y + (standardButton.ysize - adjustSize) / 2;
+ int rightY = y;
if (mx >= rightX && my >= rightY && mx <= rightX + adjustSize && my <= rightY + adjustSize) {
return true;
}
diff --git a/source/code/MenuSystem.h b/source/code/MenuSystem.h index 5defe0c..4dfd78e 100644 --- a/source/code/MenuSystem.h +++ b/source/code/MenuSystem.h
@@ -112,7 +112,11 @@ public:
return adjustSize + 10 + standardButton.xsize + 10 + adjustSize;
};
- int getAdjustButtonSize() const { return standardButton.ysize / 2; };
+ int getAdjustButtonSize() const { return standardButton.ysize; };
+
+ mutable Uint32 leftButtonMarkTime = 0;
+ mutable Uint32 rightButtonMarkTime = 0;
+ static const Uint32 MARK_DURATION = 200; // milliseconds
};
diff --git a/source/code/menudef.cpp b/source/code/menudef.cpp index 58eb7bf..a412362 100644 --- a/source/code/menudef.cpp +++ b/source/code/menudef.cpp
@@ -249,6 +249,7 @@ void Button_soundVolume::doLeft() {
newValue = 0;
}
Config::getInstance()->setInt("volume_sound", newValue);
+ leftButtonMarkTime = SDL_GetTicks();
}
void Button_soundVolume::doRight() {
@@ -258,6 +259,7 @@ void Button_soundVolume::doRight() {
newValue = MIX_MAX_VOLUME;
}
Config::getInstance()->setInt("volume_sound", newValue);
+ rightButtonMarkTime = SDL_GetTicks();
}
const std::string& Button_soundVolume::getLabel() const {
@@ -297,6 +299,7 @@ void Button_musicVolume::doLeft() {
newValue = 0;
}
Config::getInstance()->setInt("volume_music", newValue);
+ leftButtonMarkTime = SDL_GetTicks();
}
void Button_musicVolume::doRight() {
@@ -306,6 +309,7 @@ void Button_musicVolume::doRight() {
newValue = MIX_MAX_VOLUME;
}
Config::getInstance()->setInt("volume_music", newValue);
+ rightButtonMarkTime = SDL_GetTicks();
}
const std::string& Button_musicVolume::getLabel() const {