added helper menu
This commit is contained in:
@ -20,6 +20,7 @@
|
||||
#include "../GlobalState.h"
|
||||
#include "../../graphics/renderers/RenderManager.h"
|
||||
#include "../../graphics/ui/Font.h"
|
||||
#include "../../graphics/ui/HelpOverlay.h"
|
||||
#include "../../graphics/effects/Starfield3D.h"
|
||||
#include "../../graphics/effects/Starfield.h"
|
||||
#include "../../graphics/renderers/GameRenderer.h"
|
||||
@ -351,9 +352,26 @@ bool ApplicationManager::initializeManagers() {
|
||||
consume = true;
|
||||
}
|
||||
|
||||
// N: Play a test sound effect
|
||||
if (!consume && sc == SDL_SCANCODE_N) {
|
||||
SoundEffectManager::instance().playSound("lets_go", 1.0f);
|
||||
if (!consume && sc == SDL_SCANCODE_H) {
|
||||
AppState currentState = m_stateManager ? m_stateManager->getState() : AppState::Loading;
|
||||
if (currentState != AppState::Loading) {
|
||||
m_showHelpOverlay = !m_showHelpOverlay;
|
||||
if (currentState == AppState::Playing && m_game) {
|
||||
if (m_showHelpOverlay) {
|
||||
if (!m_game->isPaused()) {
|
||||
m_game->setPaused(true);
|
||||
m_helpOverlayPausedGame = true;
|
||||
} else {
|
||||
m_helpOverlayPausedGame = false;
|
||||
}
|
||||
} else if (m_helpOverlayPausedGame) {
|
||||
m_game->setPaused(false);
|
||||
m_helpOverlayPausedGame = false;
|
||||
}
|
||||
} else if (!m_showHelpOverlay) {
|
||||
m_helpOverlayPausedGame = false;
|
||||
}
|
||||
}
|
||||
consume = true;
|
||||
}
|
||||
}
|
||||
@ -370,6 +388,7 @@ bool ApplicationManager::initializeManagers() {
|
||||
|
||||
m_inputManager->registerMouseButtonHandler([this](int button, bool pressed, float x, float y){
|
||||
if (!m_stateManager) return;
|
||||
if (m_showHelpOverlay) return;
|
||||
SDL_Event ev{};
|
||||
ev.type = pressed ? SDL_EVENT_MOUSE_BUTTON_DOWN : SDL_EVENT_MOUSE_BUTTON_UP;
|
||||
ev.button.button = button;
|
||||
@ -380,6 +399,7 @@ bool ApplicationManager::initializeManagers() {
|
||||
|
||||
m_inputManager->registerMouseMotionHandler([this](float x, float y, float dx, float dy){
|
||||
if (!m_stateManager) return;
|
||||
if (m_showHelpOverlay) return;
|
||||
SDL_Event ev{};
|
||||
ev.type = SDL_EVENT_MOUSE_MOTION;
|
||||
ev.motion.x = int(x);
|
||||
@ -594,6 +614,7 @@ bool ApplicationManager::initializeGame() {
|
||||
m_stateContext.startLevelSelection = &m_startLevelSelection;
|
||||
m_stateContext.hoveredButton = &m_hoveredButton;
|
||||
m_stateContext.showSettingsPopup = &m_showSettingsPopup;
|
||||
m_stateContext.showHelpOverlay = &m_showHelpOverlay;
|
||||
m_stateContext.showExitConfirmPopup = &m_showExitConfirmPopup;
|
||||
m_stateContext.exitPopupSelectedButton = &m_exitPopupSelectedButton;
|
||||
m_stateContext.playerName = &m_playerName;
|
||||
@ -1336,6 +1357,41 @@ void ApplicationManager::setupStateHandlers() {
|
||||
m_stateManager->registerRenderHandler(AppState::Playing, debugOverlay);
|
||||
m_stateManager->registerRenderHandler(AppState::GameOver, debugOverlay);
|
||||
}
|
||||
|
||||
auto helpOverlayRender = [this](RenderManager& renderer) {
|
||||
if (!m_showHelpOverlay || !m_stateContext.pixelFont) {
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_Renderer* sdlRenderer = renderer.getSDLRenderer();
|
||||
if (!sdlRenderer) {
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_Rect logicalVP = renderer.getLogicalViewport();
|
||||
float logicalScale = renderer.getLogicalScale();
|
||||
SDL_SetRenderViewport(sdlRenderer, &logicalVP);
|
||||
SDL_SetRenderScale(sdlRenderer, logicalScale, logicalScale);
|
||||
HelpOverlay::Render(
|
||||
sdlRenderer,
|
||||
*m_stateContext.pixelFont,
|
||||
static_cast<float>(Config::Logical::WIDTH),
|
||||
static_cast<float>(Config::Logical::HEIGHT),
|
||||
0.0f,
|
||||
0.0f
|
||||
);
|
||||
SDL_SetRenderViewport(sdlRenderer, nullptr);
|
||||
SDL_SetRenderScale(sdlRenderer, 1.0f, 1.0f);
|
||||
};
|
||||
|
||||
if (m_stateManager) {
|
||||
m_stateManager->registerRenderHandler(AppState::Loading, helpOverlayRender);
|
||||
m_stateManager->registerRenderHandler(AppState::Menu, helpOverlayRender);
|
||||
m_stateManager->registerRenderHandler(AppState::Options, helpOverlayRender);
|
||||
m_stateManager->registerRenderHandler(AppState::LevelSelector, helpOverlayRender);
|
||||
m_stateManager->registerRenderHandler(AppState::Playing, helpOverlayRender);
|
||||
m_stateManager->registerRenderHandler(AppState::GameOver, helpOverlayRender);
|
||||
}
|
||||
}
|
||||
|
||||
void ApplicationManager::processEvents() {
|
||||
|
||||
@ -94,6 +94,7 @@ private:
|
||||
int m_startLevelSelection = 0;
|
||||
int m_hoveredButton = -1;
|
||||
bool m_showSettingsPopup = false;
|
||||
bool m_showHelpOverlay = false;
|
||||
bool m_showExitConfirmPopup = false;
|
||||
int m_exitPopupSelectedButton = 1; // 0 = YES, 1 = NO
|
||||
bool m_isFullscreen = false;
|
||||
@ -140,6 +141,7 @@ private:
|
||||
|
||||
// Animation state
|
||||
float m_logoAnimCounter = 0.0f;
|
||||
bool m_helpOverlayPausedGame = false;
|
||||
|
||||
// Gameplay background (per-level) with fade, mirroring main.cpp behavior
|
||||
SDL_Texture* m_levelBackgroundTex = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user