Modal message box updates.

This commit is contained in:
Steve 2016-02-23 22:20:07 +00:00
parent 368e9dc592
commit a2a1ec0613
8 changed files with 59 additions and 40 deletions

View File

@ -14,7 +14,7 @@
"group" : "okCancel",
"type" : "WT_BUTTON",
"text" : "OK",
"x" : 490,
"x" : 530,
"y" : 680,
"w" : 150,
"h": 34
@ -24,7 +24,7 @@
"group" : "okCancel",
"type" : "WT_BUTTON",
"text" : "Cancel",
"x" : 790,
"x" : 730,
"y" : 680,
"w" : 150,
"h": 34

View File

@ -64,7 +64,6 @@ extern void resetWaypoints(void);
extern void doPlayerSelect(void);
extern void destroyQuadtree(void);
extern void initQuadtree(Quadtree *root);
extern void completeMission(void);
extern void initEffects(void);
extern void doScript(void);
extern void destroyScript(void);

View File

@ -45,10 +45,9 @@ static void startMission(void);
static void returnFromOptions(void);
static void doStarSystemView(void);
static void updatePandoranAdvance(void);
static void drawFallenView(void);
static void fallenOK(void);
static StarSystem *selectedStarSystem, *fallenStarSystem;
static StarSystem *selectedStarSystem;
static Mission *selectedMission = {0};
static SDL_Texture *background;
static SDL_Texture *starSystemTexture;
@ -121,7 +120,9 @@ void initGalacticMap(void)
static void updatePandoranAdvance(void)
{
StarSystem *starSystem;
StarSystem *starSystem, *fallenStarSystem;
fallenStarSystem = NULL;
for (starSystem = game.starSystemHead.next ; starSystem != NULL ; starSystem = starSystem->next)
{
@ -129,11 +130,14 @@ static void updatePandoranAdvance(void)
{
starSystem->side = SIDE_PANDORAN;
show = SHOW_FALLEN_MESSAGE;
fallenStarSystem = starSystem;
}
}
if (fallenStarSystem)
{
showOKDialog(&fallenOK, "%s has fallen to the Pandorans", fallenStarSystem->name);
}
}
static void logic(void)
@ -339,10 +343,6 @@ static void draw(void)
case SHOW_OPTIONS:
drawOptions();
break;
case SHOW_FALLEN_MESSAGE:
drawFallenView();
break;
}
}
@ -569,29 +569,8 @@ static void drawStarSystemDetail(void)
static void fallenOK(void)
{
show = SHOW_GALAXY;
}
static void drawFallenView(void)
{
SDL_Rect r;
r.w = 800;
r.h = 150;
r.x = (SCREEN_WIDTH / 2) - (r.w / 2);
r.y = (SCREEN_HEIGHT / 2) - (r.h / 2);
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 225);
SDL_RenderFillRect(app.renderer, &r);
SDL_SetRenderDrawColor(app.renderer, 255, 255, 255, 200);
SDL_RenderDrawRect(app.renderer, &r);
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
drawText(SCREEN_WIDTH / 2, r.y + 25, 24, TA_CENTER, colors.white, "%s has fallen to the Pandorans", fallenStarSystem->name);
drawWidgets("fallen");
app.modalDialog.type = MD_NONE;
}
static void handleKeyboard(void)

View File

@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define SHOW_MENU 2
#define SHOW_OPTIONS 3
#define SHOW_STATS 4
#define SHOW_FALLEN_MESSAGE 5
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
extern void initBattle(void);
@ -59,6 +58,7 @@ extern void initStatsDisplay(void);
extern void updateStarSystemMissions(void);
extern StarSystem *getStarSystem(char *name);
extern void setMouse(int x, int y);
extern void showOKDialog(void (*callback)(void), const char *format, ...);
extern App app;
extern Colors colors;

View File

@ -50,9 +50,6 @@ int main(int argc, char *argv[])
lastFrameTime = SDL_GetTicks() + 1000;
expireTextTimer = SDL_GetTicks() + (1000 * 10);
app.modalDialog.type = MD_OK;
STRNCPY(app.modalDialog.message, "This is a longer message. This is a longer message. This is a longer message. This is a longer message. This is a longer message. This is a longer message. This is a longer message. This is a longer message. This is a longer message. ", MAX_DESCRIPTION_LENGTH);
while (1)
{
td += (SDL_GetTicks() - then);

View File

@ -73,7 +73,6 @@ typedef struct {
typedef struct {
int type;
int result;
char message[MAX_DESCRIPTION_LENGTH];
} ModalDialog;
@ -342,6 +341,7 @@ struct Widget {
int currentOption;
int visible;
int enabled;
int isModal;
SDL_Rect rect;
SDL_Texture *texture;
void (*action)(void);

View File

@ -23,12 +23,56 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static Widget *ok;
static Widget *okCancelOK;
static Widget *okCancelCancel;
static char textBuffer[MAX_DESCRIPTION_LENGTH];
void initModalDialog(void)
{
ok = getWidget("ok", "ok");
ok->action = NULL;
ok->isModal = 1;
okCancelOK = getWidget("ok", "okCancel");
okCancelOK->action = NULL;
okCancelOK->isModal = 1;
okCancelCancel = getWidget("cancel", "okCancel");
okCancelCancel->action = NULL;
okCancelCancel->isModal = 1;
}
void showOKDialog(void (*callback)(void), const char *format, ...)
{
va_list args;
memset(&textBuffer, '\0', sizeof(textBuffer));
va_start(args, format);
vsprintf(textBuffer, format, args);
va_end(args);
STRNCPY(app.modalDialog.message, textBuffer, MAX_DESCRIPTION_LENGTH);
app.modalDialog.type = MD_OK;
ok->action = callback;
}
void showOKCancelDialog(void (*okCallback)(void), void (*cancelCallback)(void), const char *format, ...)
{
va_list args;
memset(&textBuffer, '\0', sizeof(textBuffer));
va_start(args, format);
vsprintf(textBuffer, format, args);
va_end(args);
STRNCPY(app.modalDialog.message, textBuffer, MAX_DESCRIPTION_LENGTH);
app.modalDialog.type = MD_OK_CANCEL;
okCancelOK->action = okCallback;
okCancelCancel->action = cancelCallback;
}
void doModalDialog(void)

View File

@ -95,7 +95,7 @@ void drawWidgets(const char *group)
for (w = head.next; w != NULL ; w = w->next)
{
if (w->visible && strcmp(w->group, group) == 0)
if ((app.modalDialog.type == MD_NONE || (app.modalDialog.type != MD_NONE && w->isModal)) && w->visible && strcmp(w->group, group) == 0)
{
if (!mouseOver)
{