Show start and cancel widgets on mission info.

This commit is contained in:
Steve 2018-02-18 07:59:14 +00:00
parent 17ee7642e9
commit bd6b6d752a
5 changed files with 108 additions and 28 deletions

View File

@ -38,6 +38,9 @@ static void options(void);
static void stats(void); static void stats(void);
static void trophies(void); static void trophies(void);
static void quit(void); static void quit(void);
static void doCursor(void);
static void doMissionSelect(void);
static void doMissionInfo(void);
static HubMission hubMissionHead; static HubMission hubMissionHead;
static HubMission *hubMissionTail; static HubMission *hubMissionTail;
@ -61,11 +64,15 @@ void initHub(void)
HubMission *mission, *teeka; HubMission *mission, *teeka;
Tuple *t; Tuple *t;
startSectionTransition();
memset(&hubMissionHead, 0, sizeof(HubMission)); memset(&hubMissionHead, 0, sizeof(HubMission));
hubMissionTail = &hubMissionHead; hubMissionTail = &hubMissionHead;
memset(&keySprites, 0, sizeof(Sprite*) * MAX_KEY_TYPES); memset(&keySprites, 0, sizeof(Sprite*) * MAX_KEY_TYPES);
loadMusic("music/61321__mansardian__news-background.ogg");
atlasTexture = getTexture("gfx/atlas/atlas.png"); atlasTexture = getTexture("gfx/atlas/atlas.png");
worldMap = getImageFromAtlas("gfx/hub/worldMap.jpg"); worldMap = getImageFromAtlas("gfx/hub/worldMap.jpg");
alert = getImageFromAtlas("gfx/hub/alert.png"); alert = getImageFromAtlas("gfx/hub/alert.png");
@ -161,47 +168,34 @@ void initHub(void)
app.delegate.logic = &logic; app.delegate.logic = &logic;
app.delegate.draw = &draw; app.delegate.draw = &draw;
playMusic(1);
endSectionTransition();
} }
static void logic(void) static void logic(void)
{ {
HubMission *m;
blipValue += 0.1; blipValue += 0.1;
blipSize = 64 + (sin(blipValue) * 16); blipSize = 64 + (sin(blipValue) * 16);
animateSprites(); animateSprites();
doCursor();
if (selectedMission == NULL) if (selectedMission == NULL)
{ {
if (app.keyboard[SDL_SCANCODE_ESCAPE]) doMissionSelect();
{
showWidgetGroup("hub");
showingWidgets = 1;
}
else if (isControl(CONTROL_FIRE) || app.mouse.button[SDL_BUTTON_LEFT])
{
m = getMissionAt(cursor.x, cursor.y);
if (m != NULL)
{
selectedMission = m;
app.mouse.button[SDL_BUTTON_LEFT] = 0;
clearControl(CONTROL_FIRE);
showWidgetGroup("mission");
}
}
} }
else else
{ {
if (app.keyboard[SDL_SCANCODE_ESCAPE]) doMissionInfo();
{
cancel();
} }
} }
static void doCursor(void)
{
if (app.mouse.dx != 0 || app.mouse.dy != 0) if (app.mouse.dx != 0 || app.mouse.dy != 0)
{ {
cursor.x = app.mouse.x; cursor.x = app.mouse.x;
@ -229,6 +223,49 @@ static void logic(void)
} }
} }
static void doMissionSelect(void)
{
HubMission *m;
if (app.keyboard[SDL_SCANCODE_ESCAPE])
{
showWidgetGroup("hub");
showingWidgets = 1;
}
else if (isControl(CONTROL_FIRE) || app.mouse.button[SDL_BUTTON_LEFT])
{
m = getMissionAt(cursor.x, cursor.y);
if (m != NULL)
{
selectedMission = m;
app.mouse.button[SDL_BUTTON_LEFT] = 0;
clearControl(CONTROL_FIRE);
showWidgetGroup("mission");
}
}
}
static void doMissionInfo(void)
{
Widget *w;
w = selectWidgetAt(cursor.x, cursor.y);
if ((w != NULL) && (isControl(CONTROL_FIRE) || app.mouse.button[SDL_BUTTON_LEFT]))
{
w->action();
app.mouse.button[SDL_BUTTON_LEFT] = 0;
clearControl(CONTROL_FIRE);
}
if (app.keyboard[SDL_SCANCODE_ESCAPE])
{
cancel();
}
}
static void draw(void) static void draw(void)
{ {
blitRectScaled(atlasTexture->texture, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, &worldMap->rect, 0); blitRectScaled(atlasTexture->texture, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, &worldMap->rect, 0);
@ -240,6 +277,8 @@ static void draw(void)
if (selectedMission != NULL) if (selectedMission != NULL)
{ {
drawMissionInfo(); drawMissionInfo();
drawWidgets();
} }
blitRect(atlasTexture->texture, cursor.x, cursor.y, getCurrentFrame(cursorSpr), 1); blitRect(atlasTexture->texture, cursor.x, cursor.y, getCurrentFrame(cursorSpr), 1);
@ -265,6 +304,9 @@ static void drawMissions(void)
blitRectScaled(atlasTexture->texture, mission->x, mission->y, blipSize, blipSize, &alert->rect, 1); blitRectScaled(atlasTexture->texture, mission->x, mission->y, blipSize, blipSize, &alert->rect, 1);
drawText(mission->x, mission->y - 32, 18, TA_CENTER, colors.white, mission->name); drawText(mission->x, mission->y - 32, 18, TA_CENTER, colors.white, mission->name);
break; break;
default:
break;
} }
} }
@ -308,12 +350,14 @@ static void drawMissionInfo(void)
drawText(x + 15, y + 100, 22, TA_LEFT, colors.white, selectedMission->description); drawText(x + 15, y + 100, 22, TA_LEFT, colors.white, selectedMission->description);
limitTextWidth(0); limitTextWidth(0);
drawText(SCREEN_WIDTH / 2, y + h - 165, 24, TA_CENTER, colors.white, "Keys");
size = 65; size = 65;
mid = size / 2; mid = size / 2;
y = (((SCREEN_HEIGHT - h) / 2) + h) - 100; y = (((SCREEN_HEIGHT - h) / 2) + h) - 225;
drawText(SCREEN_WIDTH / 2, y, 24, TA_CENTER, colors.white, "Keys");
y += 64;
x = ((SCREEN_WIDTH - w) / 2) + 30; x = ((SCREEN_WIDTH - w) / 2) + 30;
@ -471,6 +515,8 @@ static void startMission(void)
STRNCPY(game.worldId, selectedMission->id, MAX_NAME_LENGTH); STRNCPY(game.worldId, selectedMission->id, MAX_NAME_LENGTH);
saveGame(); saveGame();
stopMusic();
} }
static void cancel(void) static void cancel(void)

View File

@ -42,6 +42,13 @@ extern void saveGame(void);
extern void hideAllWidgets(void); extern void hideAllWidgets(void);
extern void showWidgetGroup(char *group); extern void showWidgetGroup(char *group);
extern Widget *getWidget(char *name, char *group); extern Widget *getWidget(char *name, char *group);
extern void drawWidgets(void);
extern Widget *selectWidgetAt(int x, int y);
extern void loadMusic(char *filename);
extern void playMusic(int loop);
extern void stopMusic(void);
extern void startSectionTransition(void);
extern void endSectionTransition(void);
extern App app; extern App app;
extern Colors colors; extern Colors colors;

View File

@ -341,7 +341,6 @@ typedef struct {
int winHeight; int winHeight;
float scaleX; float scaleX;
float scaleY; float scaleY;
int hideMouse;
Mouse mouse; Mouse mouse;
SDL_Joystick *joypad; SDL_Joystick *joypad;
int keyboard[MAX_KEYBOARD_KEYS]; int keyboard[MAX_KEYBOARD_KEYS];

View File

@ -182,6 +182,33 @@ Widget *getWidget(char *name, char *group)
return NULL; return NULL;
} }
Widget *selectWidgetAt(int x, int y)
{
Widget *w;
int i;
for (i = 0 ; i < numWidgets ; i++)
{
w = &widgets[i];
if (w->visible && collision(w->x, w->y, w->w, w->h, x, y, 1, 1))
{
if (w != selectedWidget)
{
playSound(SND_MENU_NAV, 0);
}
widgetIndex = i;
selectedWidget = w;
return w;
}
}
selectedWidget = NULL;
return NULL;
}
void hideAllWidgets(void) void hideAllWidgets(void)
{ {
int i; int i;

View File

@ -31,6 +31,7 @@ extern float limit(float i, float a, float b);
extern void playSound(int snd, int ch); extern void playSound(int snd, int ch);
extern int isControl(int type); extern int isControl(int type);
extern void clearControl(int type); extern void clearControl(int type);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern App app; extern App app;
extern Colors colors; extern Colors colors;