Add UI opacity slider to settings window

Adds an Interface section with a UI Opacity slider (20-100%) that controls the transparency of all ImGui UI elements via the global style alpha.
This commit is contained in:
Kelsi 2026-02-06 20:19:39 -08:00
parent 7054699d21
commit 4e2cf0af8e
2 changed files with 23 additions and 0 deletions

View file

@ -75,6 +75,10 @@ private:
int pendingSfxVolume = 100;
float pendingMouseSensitivity = 0.2f;
bool pendingInvertMouse = false;
int pendingUiOpacity = 100;
// UI element transparency (0.0 = fully transparent, 1.0 = fully opaque)
float uiOpacity_ = 1.0f;
/**
* Render player info window

View file

@ -54,6 +54,10 @@ GameScreen::GameScreen() {
}
void GameScreen::render(game::GameHandler& gameHandler) {
// Apply UI transparency setting
float prevAlpha = ImGui::GetStyle().Alpha;
ImGui::GetStyle().Alpha = uiOpacity_;
// Process targeting input before UI windows
processTargetInput(gameHandler);
@ -222,6 +226,9 @@ void GameScreen::render(game::GameHandler& gameHandler) {
renderer->clearSelectionCircle();
}
}
// Restore previous alpha
ImGui::GetStyle().Alpha = prevAlpha;
}
void GameScreen::renderPlayerInfo(game::GameHandler& gameHandler) {
@ -2612,6 +2619,7 @@ void GameScreen::renderSettingsWindow() {
}
}
}
pendingUiOpacity = static_cast<int>(uiOpacity_ * 100.0f + 0.5f);
settingsInit = true;
}
@ -2678,7 +2686,18 @@ void GameScreen::renderSettingsWindow() {
ImGui::Separator();
ImGui::Spacing();
ImGui::Text("Interface");
ImGui::SliderInt("UI Opacity", &pendingUiOpacity, 20, 100, "%d%%");
if (ImGui::Button("Restore Interface Defaults", ImVec2(-1, 0))) {
pendingUiOpacity = 100;
}
ImGui::Spacing();
ImGui::Separator();
ImGui::Spacing();
if (ImGui::Button("Apply", ImVec2(-1, 0))) {
uiOpacity_ = static_cast<float>(pendingUiOpacity) / 100.0f;
window->setVsync(pendingVsync);
window->setFullscreen(pendingFullscreen);
window->applyResolution(kResolutions[pendingResIndex][0], kResolutions[pendingResIndex][1]);