feat: add switching to settings and back.

This commit is contained in:
huaqo-games
2025-10-17 22:25:39 +02:00
parent 3d304dcc7e
commit f8132205f6
4 changed files with 55 additions and 16 deletions
+1 -1
View File
@@ -69,7 +69,7 @@ void UpdateApp(App *app){
}break;
case SETTINGS:
{
UpdateSettings(&app->settings, &app->flags);
UpdateSettings(&app->settings, &app->state, &app->flags);
RenderSettings(&app->settings, &app->flags);
}
default: break;
+46 -13
View File
@@ -21,6 +21,7 @@ typedef struct
ImageElement board;
ImageButton playButton;
ImageButton quitButton;
ImageButton settingsButton;
int menuScale;
Background background;
Background midground;
@@ -79,27 +80,52 @@ void InitMenu(MenuState *m)
int buttonHeight = (int)(m->assets.textureAssets[MENU_BIG_BUTTONS_TEX].frameHeight * buttonScaleFactor);
int buttonSpacing = buttonHeight;
Vector2 playButtonNotPressed = {0.0f, 96.0f};
Vector2 quitButtonNotPressed = {0.0f, 0.0f};
Vector2 playButtonHover = {96.0f, 96.0f};
Vector2 quitButtonHover = {96.0f, 0.0f};
Vector2 playButtonPressed = {192.0f, 96.0f};
Vector2 quitButtonPressed = {192.0f, 0.0f};
Rectangle playButtonDestRec = {
.x = windowCenter.x - (buttonWidth / 2),
.y = windowCenter.y - (buttonHeight / 2),
.width = buttonWidth,
.height = buttonHeight};
//Button texture dimensions
float menuButtonWidth = m->assets.textureAssets[MENU_BIG_BUTTONS_TEX].frameWidth;
float menuButtonHeight = m->assets.textureAssets[MENU_BIG_BUTTONS_TEX].frameHeight;
//Quit Button
Vector2 quitButtonNotPressed = {0.0f, 0.0f};
Vector2 quitButtonHover = {menuButtonWidth, 0.0f};
Vector2 quitButtonPressed = {menuButtonWidth * 2, 0.0f};
Rectangle quitButtonDestRec = {
.x = windowCenter.x - (buttonWidth / 2),
.y = windowCenter.y - (buttonHeight / 2) + buttonSpacing,
.width = buttonWidth,
.height = buttonHeight};
.height = buttonHeight
};
m->quitButton = CreateImageButton(NOT_CLICKED, &m->textures[MENU_BIG_BUTTONS_TEX], &m->assets.textureAssets[MENU_BIG_BUTTONS_TEX], &quitButtonNotPressed, &quitButtonPressed, &quitButtonHover, &quitButtonDestRec);
//Play Button
Vector2 playButtonNotPressed = {0.0f, menuButtonHeight};
Vector2 playButtonHover = {menuButtonWidth, menuButtonHeight};
Vector2 playButtonPressed = {menuButtonWidth * 2, menuButtonHeight};
Rectangle playButtonDestRec = {
.x = windowCenter.x - (buttonWidth / 2),
.y = windowCenter.y - (buttonHeight / 2),
.width = buttonWidth,
.height = buttonHeight
};
m->playButton = CreateImageButton(NOT_CLICKED, &m->textures[MENU_BIG_BUTTONS_TEX], &m->assets.textureAssets[MENU_BIG_BUTTONS_TEX], &playButtonNotPressed, &playButtonPressed, &playButtonHover, &playButtonDestRec);
m->quitButton = CreateImageButton(NOT_CLICKED, &m->textures[MENU_BIG_BUTTONS_TEX], &m->assets.textureAssets[MENU_BIG_BUTTONS_TEX], &quitButtonNotPressed, &quitButtonPressed, &quitButtonHover, &quitButtonDestRec);
//Settings Button
Vector2 settingsButtonNotPressed = {0.0f, menuButtonHeight * 2};
Vector2 settingsButtonHover = {menuButtonWidth, menuButtonHeight * 2};
Vector2 settingsButtonPressed = {menuButtonWidth * 2, menuButtonHeight * 2};
Rectangle settingsButtonDestRec = {
.x = windowCenter.x - (buttonWidth / 2),
.y = windowCenter.y - (buttonHeight / 2) + buttonSpacing * 2,
.width = buttonWidth,
.height = buttonHeight
};
m->settingsButton = CreateImageButton(NOT_CLICKED, &m->textures[MENU_BIG_BUTTONS_TEX], &m->assets.textureAssets[MENU_BIG_BUTTONS_TEX], &settingsButtonNotPressed, &settingsButtonPressed, &settingsButtonHover, &settingsButtonDestRec);
}
void UpdateMenu(MenuState *m, State *state, Flags *flags)
@@ -126,11 +152,17 @@ void UpdateMenu(MenuState *m, State *state, Flags *flags)
state->currentView = GAMEPLAY;
}
if (isImageButtonClicked(&m->settingsButton, m->sounds[HOVER_SOUND], m->sounds[CLICK_SOUND]))
{
state->currentView = SETTINGS;
}
if (isImageButtonClicked(&m->quitButton, m->sounds[HOVER_SOUND], m->sounds[CLICK_SOUND]) || (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE)))
{
state->running = false;
}
UpdateBackground(&m->background);
UpdateBackground(&m->midground);
UpdateBackground(&m->foreground);
@@ -148,6 +180,7 @@ void RenderMenu(MenuState *m, Font *font, const char *title, Flags *flags)
renderImageElement(&m->board);
renderImageButton(&m->playButton);
renderImageButton(&m->quitButton);
renderImageButton(&m->settingsButton);
int textWidth = MeasureText(title, font->baseSize);
DrawTextEx(*font, title, (Vector2){GetScreenWidth() / 2 - textWidth / 2, textWidth / 4}, (float)font->baseSize, 2, WHITE);
DrawTexturePro(
+1 -1
View File
@@ -15,7 +15,7 @@ typedef enum
const TextureAsset menuTextureAssets[MENU_TEX_COUNT] = {
{"assets/SproutLandsUI/Spritesheets/Mouse sprites/TriangleMouseicon1.png", 16.0f, 16.0f, 0.0f},
{"assets/SproutLandsUI/Spritesheets/UIBigPlayButtonHover.png", 96.0f, 32.0f, 0.0f},
{"assets/SproutLandsUI/Spritesheets/UIBigPlayButtonHover2.png", 288.0f/3, 96.0f/3, 0.0f},
{"assets/SproutLandsUI/Spritesheets/Settingmenu.png", 128.0f, 144.0f, 0.0f},
{"assets/Clouds/Clouds1/1.png", 576.0f, 324.0f, 0.0f},
{"assets/Clouds/Clouds1/2.png", 576.0f, 324.0f, 0.0f},
+7 -1
View File
@@ -28,7 +28,7 @@ void InitSettings(SettingsState *s)
s->soundtrackOn = initButton("soundtrackOn", standardButtonDimensions, button2Pos);
}
void UpdateSettings(SettingsState *s, Flags *flags)
void UpdateSettings(SettingsState *s, State *state,Flags *flags)
{
ShowCursor();
@@ -39,6 +39,12 @@ void UpdateSettings(SettingsState *s, Flags *flags)
if(isButtonClicked(&s->soundtrackOn)){
flags->soundtrackOn = !flags->soundtrackOn;
}
if (IsKeyPressed(KEY_ESCAPE)){
state->currentView = MENU;
}
}
void RenderSettings(SettingsState *s, Flags *flags)