Paginate challenges selection screen.
This commit is contained in:
parent
9dade23e46
commit
0f8b02285e
|
@ -58,5 +58,25 @@
|
||||||
"y" : 680,
|
"y" : 680,
|
||||||
"w" : 250,
|
"w" : 250,
|
||||||
"h": 34
|
"h": 34
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name" : "prev",
|
||||||
|
"group" : "challenges",
|
||||||
|
"type" : "WT_IMG_BUTTON",
|
||||||
|
"x" : 540,
|
||||||
|
"y" : 110,
|
||||||
|
"w" : 150,
|
||||||
|
"h": 34,
|
||||||
|
"texture" : "gfx/widgets/optionsLeft.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name" : "next",
|
||||||
|
"group" : "challenges",
|
||||||
|
"type" : "WT_IMG_BUTTON",
|
||||||
|
"x" : 720,
|
||||||
|
"y" : 110,
|
||||||
|
"w" : 150,
|
||||||
|
"h": 34,
|
||||||
|
"texture" : "gfx/widgets/optionsRight.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -37,21 +37,28 @@ static void unlockChallenges(void);
|
||||||
static void quit(void);
|
static void quit(void);
|
||||||
static void updateChallengeMissionData(void);
|
static void updateChallengeMissionData(void);
|
||||||
static char *listRestrictions(void);
|
static char *listRestrictions(void);
|
||||||
|
static void prevPage(void);
|
||||||
|
static void nextPage(void);
|
||||||
|
|
||||||
static SDL_Texture *background;
|
static SDL_Texture *background;
|
||||||
static SDL_Texture *planetTexture;
|
static SDL_Texture *planetTexture;
|
||||||
static SDL_Texture *challengeIcon;
|
static SDL_Texture *challengeIcon;
|
||||||
static SDL_Texture *challengeIconHighlight;
|
static SDL_Texture *challengeIconHighlight;
|
||||||
static int startIndex;
|
|
||||||
static Widget *start;
|
static Widget *start;
|
||||||
static PointF planet;
|
static PointF planet;
|
||||||
static int show;
|
static int show;
|
||||||
|
static int page;
|
||||||
|
static float maxPages;
|
||||||
static char timeLimit[MAX_DESCRIPTION_LENGTH];
|
static char timeLimit[MAX_DESCRIPTION_LENGTH];
|
||||||
static char restrictions[MAX_DESCRIPTION_LENGTH];
|
static char restrictions[MAX_DESCRIPTION_LENGTH];
|
||||||
static int hasRestrictions;
|
static int hasRestrictions;
|
||||||
|
static Widget *prev;
|
||||||
|
static Widget *next;
|
||||||
|
|
||||||
void initChallengeHome(void)
|
void initChallengeHome(void)
|
||||||
{
|
{
|
||||||
|
Mission *m;
|
||||||
|
|
||||||
startSectionTransition();
|
startSectionTransition();
|
||||||
|
|
||||||
stopMusic();
|
stopMusic();
|
||||||
|
@ -79,8 +86,16 @@ void initChallengeHome(void)
|
||||||
|
|
||||||
planet.x = rand() % SCREEN_WIDTH;
|
planet.x = rand() % SCREEN_WIDTH;
|
||||||
planet.y = rand() % SCREEN_HEIGHT;
|
planet.y = rand() % SCREEN_HEIGHT;
|
||||||
|
|
||||||
startIndex = 0;
|
maxPages = page = 0;
|
||||||
|
|
||||||
|
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
|
||||||
|
{
|
||||||
|
maxPages++;
|
||||||
|
}
|
||||||
|
|
||||||
|
maxPages /= CHALLENGES_PER_PAGE;
|
||||||
|
maxPages = ceil(maxPages);
|
||||||
|
|
||||||
show = SHOW_CHALLENGES;
|
show = SHOW_CHALLENGES;
|
||||||
|
|
||||||
|
@ -97,6 +112,14 @@ void initChallengeHome(void)
|
||||||
|
|
||||||
getWidget("ok", "stats")->action = ok;
|
getWidget("ok", "stats")->action = ok;
|
||||||
getWidget("ok", "trophies")->action = ok;
|
getWidget("ok", "trophies")->action = ok;
|
||||||
|
|
||||||
|
prev = getWidget("prev", "challenges");
|
||||||
|
prev->action = prevPage;
|
||||||
|
prev->visible = 0;
|
||||||
|
|
||||||
|
next = getWidget("next", "challenges");
|
||||||
|
next->action = nextPage;
|
||||||
|
next->visible = 1;
|
||||||
|
|
||||||
/* select first challenge if none chosen */
|
/* select first challenge if none chosen */
|
||||||
if (!game.currentMission)
|
if (!game.currentMission)
|
||||||
|
@ -110,6 +133,22 @@ void initChallengeHome(void)
|
||||||
playMusic("music/main/covert_operations.mp3");
|
playMusic("music/main/covert_operations.mp3");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void nextPage(void)
|
||||||
|
{
|
||||||
|
page = MIN(page + 1, maxPages - 1);
|
||||||
|
|
||||||
|
next->visible = page < maxPages - 1;
|
||||||
|
prev->visible = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void prevPage(void)
|
||||||
|
{
|
||||||
|
page = MAX(0, page - 1);
|
||||||
|
|
||||||
|
next->visible = 1;
|
||||||
|
prev->visible = page > 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void unlockChallenges(void)
|
static void unlockChallenges(void)
|
||||||
{
|
{
|
||||||
Mission *m;
|
Mission *m;
|
||||||
|
@ -173,10 +212,15 @@ static void logic(void)
|
||||||
static void doChallenges(void)
|
static void doChallenges(void)
|
||||||
{
|
{
|
||||||
Mission *c;
|
Mission *c;
|
||||||
|
int i, startIndex, end;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
startIndex = page * CHALLENGES_PER_PAGE;
|
||||||
|
end = startIndex + CHALLENGES_PER_PAGE;
|
||||||
|
|
||||||
for (c = game.challengeMissionHead.next ; c != NULL ; c = c->next)
|
for (c = game.challengeMissionHead.next ; c != NULL ; c = c->next)
|
||||||
{
|
{
|
||||||
if (app.mouse.button[SDL_BUTTON_LEFT] && collision(app.mouse.x, app.mouse.y, 3, 3, c->rect.x, c->rect.y, c->rect.w, c->rect.h))
|
if (i >= startIndex && i < end && app.mouse.button[SDL_BUTTON_LEFT] && collision(app.mouse.x, app.mouse.y, 3, 3, c->rect.x, c->rect.y, c->rect.w, c->rect.h))
|
||||||
{
|
{
|
||||||
if (c->available)
|
if (c->available)
|
||||||
{
|
{
|
||||||
|
@ -191,6 +235,8 @@ static void doChallenges(void)
|
||||||
|
|
||||||
app.mouse.button[SDL_BUTTON_LEFT] = 0;
|
app.mouse.button[SDL_BUTTON_LEFT] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,10 +284,10 @@ static void draw(void)
|
||||||
blit(planetTexture, planet.x, planet.y, 1);
|
blit(planetTexture, planet.x, planet.y, 1);
|
||||||
|
|
||||||
drawStars();
|
drawStars();
|
||||||
|
|
||||||
drawText(SCREEN_WIDTH / 2, 50, 30, TA_CENTER, colors.white, _("Challenges"));
|
drawText(SCREEN_WIDTH / 2, 40, 28, TA_CENTER, colors.white, _("Challenges"));
|
||||||
|
drawText(SCREEN_WIDTH / 2, 83, 16, TA_CENTER, colors.lightGrey, _("Completed : %d / %d"), game.completedChallenges, game.totalChallenges);
|
||||||
drawText(SCREEN_WIDTH / 2, 100, 24, TA_CENTER, colors.white, "%d / %d", game.completedChallenges, game.totalChallenges);
|
drawText(SCREEN_WIDTH / 2, 110, 16, TA_CENTER, colors.lightGrey, _("Page : %d / %d"), page + 1, (int)maxPages);
|
||||||
|
|
||||||
drawChallenges();
|
drawChallenges();
|
||||||
|
|
||||||
|
@ -276,20 +322,22 @@ static void drawChallenges(void)
|
||||||
Mission *m;
|
Mission *m;
|
||||||
Challenge *c;
|
Challenge *c;
|
||||||
SDL_Rect r;
|
SDL_Rect r;
|
||||||
int i, endIndex;
|
int i, start, end;
|
||||||
|
|
||||||
r.x = 135;
|
r.x = 135;
|
||||||
r.y = 165;
|
r.y = 165;
|
||||||
r.w = r.h = 96;
|
r.w = r.h = 96;
|
||||||
|
|
||||||
endIndex = startIndex + MAX_ITEMS;
|
start = page * CHALLENGES_PER_PAGE;
|
||||||
|
end = start + CHALLENGES_PER_PAGE;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
|
for (m = game.challengeMissionHead.next ; m != NULL ; m = m->next)
|
||||||
{
|
{
|
||||||
m->rect = r;
|
m->rect = r;
|
||||||
|
|
||||||
if (i >= startIndex && i <= endIndex)
|
if (i >= start && i < end)
|
||||||
{
|
{
|
||||||
if (game.currentMission == m)
|
if (game.currentMission == m)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../common.h"
|
||||||
|
|
||||||
#define MAX_ITEMS 14
|
#define CHALLENGES_PER_PAGE 14
|
||||||
|
|
||||||
#define SHOW_CHALLENGES 0
|
#define SHOW_CHALLENGES 0
|
||||||
#define SHOW_MENU 1
|
#define SHOW_MENU 1
|
||||||
|
|
Loading…
Reference in New Issue