fixed pause screen overlay
This commit is contained in:
@ -431,6 +431,8 @@ void GameRenderer::renderPlayingState(
|
||||
// Pause overlay (skip when visuals are suppressed, e.g., countdown)
|
||||
if (!suppressPauseVisuals && game->isPaused() && !showExitConfirmPopup) {
|
||||
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
|
||||
|
||||
// Draw blur effect around the grid (keep in logical coordinates)
|
||||
for (int i = -4; i <= 4; ++i) {
|
||||
float spread = static_cast<float>(std::abs(i));
|
||||
Uint8 alpha = Uint8(std::max(8.f, 32.f - spread * 4.f));
|
||||
@ -443,14 +445,41 @@ void GameRenderer::renderPlayingState(
|
||||
};
|
||||
SDL_RenderFillRect(renderer, &blurRect);
|
||||
}
|
||||
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
|
||||
|
||||
// Switch to window coordinates for the full-screen overlay and text
|
||||
SDL_Rect oldViewport;
|
||||
SDL_GetRenderViewport(renderer, &oldViewport);
|
||||
float oldScaleX, oldScaleY;
|
||||
SDL_GetRenderScale(renderer, &oldScaleX, &oldScaleY);
|
||||
|
||||
SDL_SetRenderViewport(renderer, nullptr);
|
||||
SDL_SetRenderScale(renderer, 1.0f, 1.0f);
|
||||
|
||||
// Draw full screen overlay
|
||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 180);
|
||||
SDL_FRect pauseOverlay{0, 0, logicalW, logicalH};
|
||||
SDL_FRect pauseOverlay{0, 0, winW, winH};
|
||||
SDL_RenderFillRect(renderer, &pauseOverlay);
|
||||
|
||||
pixelFont->draw(renderer, logicalW * 0.5f - 80, logicalH * 0.5f - 20, "PAUSED", 2.0f, {255, 255, 255, 255});
|
||||
pixelFont->draw(renderer, logicalW * 0.5f - 120, logicalH * 0.5f + 30, "Press P to resume", 0.8f, {200, 200, 220, 255});
|
||||
// Draw centered text
|
||||
// Note: We multiply font scale by logicalScale to maintain consistent size
|
||||
// since we reset the renderer scale to 1.0
|
||||
const char* pausedText = "PAUSED";
|
||||
float pausedScale = 2.0f * logicalScale;
|
||||
int pW = 0, pH = 0;
|
||||
pixelFont->measure(pausedText, pausedScale, pW, pH);
|
||||
pixelFont->draw(renderer, (winW - pW) * 0.5f, (winH - pH) * 0.5f - (20 * logicalScale), pausedText, pausedScale, {255, 255, 255, 255});
|
||||
|
||||
const char* resumeText = "Press P to resume";
|
||||
float resumeScale = 0.8f * logicalScale;
|
||||
int rW = 0, rH = 0;
|
||||
pixelFont->measure(resumeText, resumeScale, rW, rH);
|
||||
pixelFont->draw(renderer, (winW - rW) * 0.5f, (winH - pH) * 0.5f + (40 * logicalScale), resumeText, resumeScale, {200, 200, 220, 255});
|
||||
|
||||
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
|
||||
|
||||
// Restore previous render state
|
||||
SDL_SetRenderViewport(renderer, &oldViewport);
|
||||
SDL_SetRenderScale(renderer, oldScaleX, oldScaleY);
|
||||
}
|
||||
|
||||
// Exit confirmation popup styled like other retro panels
|
||||
|
||||
Reference in New Issue
Block a user