From 0d87786af4f4908baad14acfb83d2ed7ca1281ae Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 15 Feb 2018 22:56:22 +0000 Subject: [PATCH] More widget work. --- sound/146721__fins__menu-click.ogg | Bin 0 -> 4674 bytes src/defs.h | 5 ++- src/structs.h | 1 - src/system/sound.c | 7 ++- src/system/widgets.c | 15 +++++-- src/system/widgets.h | 1 + src/world/world.c | 67 +++++++++++++++++++++++------ src/world/world.h | 3 ++ 8 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 sound/146721__fins__menu-click.ogg diff --git a/sound/146721__fins__menu-click.ogg b/sound/146721__fins__menu-click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8bd7aedf20dc9340b3b1da9e86624841e1e45e20 GIT binary patch literal 4674 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, w->y, w->w, w->h, 0, 64, 0, 255); + drawRect(w->x, w->y, w->w, w->h, 0, 0, 0, 255); drawOutlineRect(w->x, w->y, w->w, w->h, 0, 128, 0, 255); - drawText(w->x + w->w / 2, w->y + 2, 24, TA_CENTER, colors.white, w->label); } else { drawRect(w->x, w->y, w->w, w->h, 0, 128, 0, 255); drawOutlineRect(w->x, w->y, w->w, w->h, 0, 255, 0, 255); - drawText(w->x + w->w / 2, w->y + 2, 24, TA_CENTER, colors.yellow, w->label); } + drawText(w->x + w->w / 2, w->y + 2, 24, TA_CENTER, colors.white, w->label); break; case WT_SLIDER: @@ -129,6 +130,8 @@ void drawWidgets(void) static void selectWidget(int dir) { + int oldWidgetIndex = widgetIndex; + do { widgetIndex += dir; @@ -146,6 +149,11 @@ static void selectWidget(int dir) selectedWidget = &widgets[widgetIndex]; } while (!selectedWidget->enabled && !selectedWidget->visible); + + if (oldWidgetIndex != widgetIndex) + { + playSound(SND_MENU_NAV, 0); + } } Widget *getWidget(char *name, char *group) @@ -197,6 +205,7 @@ void showWidgetGroup(char *group) if (selectedWidget == NULL) { selectedWidget = w; + widgetIndex = i; } w->visible = 1; diff --git a/src/system/widgets.h b/src/system/widgets.h index 6f12dce..8478661 100644 --- a/src/system/widgets.h +++ b/src/system/widgets.h @@ -28,6 +28,7 @@ extern void drawText(int x, int y, int size, int align, SDL_Color c, const char extern void drawRect(int x, int y, int w, int h, int r, int g, int b, int a); extern void drawOutlineRect(int x, int y, int w, int h, int r, int g, int b, int a); extern float limit(float i, float a, float b); +extern void playSound(int snd, int ch); extern App app; extern Colors colors; diff --git a/src/world/world.c b/src/world/world.c index 077b73e..e6e35db 100644 --- a/src/world/world.c +++ b/src/world/world.c @@ -36,6 +36,10 @@ static void spawnEnemies(void); static int canAdd(Unit *u, int mx, int my); static void startMission(void); static void drawInGameWidgets(void); +static void handleWidgets(void); +static void resume(void); +static void options(void); +static void quit(void); static Texture *background; static int observationIndex; @@ -68,6 +72,10 @@ void initWorld(void) world.state = WS_START; observationIndex = 0; + + getWidget("resume", "gamePaused")->action = resume; + getWidget("options", "gamePaused")->action = options; + getWidget("quit", "gamePaused")->action = quit; if (world.missionType == MT_BOSS) { @@ -90,10 +98,6 @@ void initWorld(void) app.delegate.logic = logic; app.delegate.draw = draw; - showWidgetGroup("gamePaused"); - - showingWidgets = 1; - startMission(); } @@ -259,7 +263,7 @@ static void doWorldInProgress(void) doPlayer(); - if (!world.showingInfoMessage) + if (!showingWidgets) { doBob(); @@ -296,16 +300,38 @@ static void doWorldInProgress(void) initRadar(); clearControl(CONTROL_MAP); } - } - - if (world.observationTimer > 0) - { - if (--world.observationTimer == FPS * 1.5) + + if (app.keyboard[SDL_SCANCODE_ESCAPE]) { - world.entityToTrack = world.entitiesToObserve[0]; - - world.state = WS_OBSERVING; + app.keyboard[SDL_SCANCODE_ESCAPE] = 0; + showWidgetGroup("gamePaused"); + playSound(SND_MENU_BACK, 0); + showingWidgets = 1; } + + if (world.observationTimer > 0) + { + if (--world.observationTimer == FPS * 1.5) + { + world.entityToTrack = world.entitiesToObserve[0]; + + world.state = WS_OBSERVING; + } + } + } + else + { + handleWidgets(); + } +} + +static void handleWidgets(void) +{ + doWidgets(); + + if (app.keyboard[SDL_SCANCODE_ESCAPE]) + { + resume(); } } @@ -616,3 +642,18 @@ void exitRadar(void) endSectionTransition(); } + +static void resume(void) +{ + app.keyboard[SDL_SCANCODE_ESCAPE] = 0; + hideAllWidgets(); + showingWidgets = 0; +} + +static void options(void) +{ +} + +static void quit(void) +{ +} diff --git a/src/world/world.h b/src/world/world.h index 19d0964..c9a14eb 100644 --- a/src/world/world.h +++ b/src/world/world.h @@ -76,6 +76,9 @@ extern void drawWidgets(void); extern void showWidgetGroup(char *group); extern void drawRect(int x, int y, int w, int h, int r, int g, int b, int a); extern void drawOutlineRect(int x, int y, int w, int h, int r, int g, int b, int a); +extern void hideAllWidgets(void); +extern void doWidgets(void); +extern Widget *getWidget(char *name, char *group); extern App app; extern Colors colors;