Trophy integration updates.
|
@ -12,49 +12,49 @@
|
|||
"value" : "TROPHY_BRONZE"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_10",
|
||||
"id" : "_CAMPAIGN_10",
|
||||
"title" : "1st Lieutenant",
|
||||
"description" : "Complete 10%% of all missions",
|
||||
"value" : "TROPHY_BRONZE"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_20",
|
||||
"id" : "_CAMPAIGN_20",
|
||||
"title" : "Lieutenant Commander",
|
||||
"description" : "Complete 20%% of all missions",
|
||||
"value" : "TROPHY_BRONZE"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_40",
|
||||
"id" : "_CAMPAIGN_40",
|
||||
"title" : "Commander",
|
||||
"description" : "Complete 40%% of all missions",
|
||||
"value" : "TROPHY_BRONZE"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_50",
|
||||
"id" : "_CAMPAIGN_50",
|
||||
"title" : "Captain",
|
||||
"description" : "Complete 50%% of all missions",
|
||||
"value" : "TROPHY_SILVER"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_60",
|
||||
"id" : "_CAMPAIGN_60",
|
||||
"title" : "Commodore",
|
||||
"description" : "Complete 60%% of all missions",
|
||||
"value" : "TROPHY_SILVER"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_80",
|
||||
"id" : "_CAMPAIGN_80",
|
||||
"title" : "Rear Admiral",
|
||||
"description" : "Complete 80%% of all missions",
|
||||
"value" : "TROPHY_SILVER"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_90",
|
||||
"id" : "_CAMPAIGN_90",
|
||||
"title" : "Admiral",
|
||||
"description" : "Complete 90%% of all missions",
|
||||
"value" : "TROPHY_GOLD"
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_100",
|
||||
"id" : "_CAMPAIGN_100",
|
||||
"title" : "Fleet Admiral",
|
||||
"description" : "Complete all campaign missions",
|
||||
"value" : "TROPHY_GOLD"
|
||||
|
@ -94,8 +94,8 @@
|
|||
"hidden" : 1
|
||||
},
|
||||
{
|
||||
"id" : "CAMPAIGN_MACE",
|
||||
"title" : "Going out with a bang.",
|
||||
"id" : "_CAMPAIGN_MACE",
|
||||
"title" : "Going out with a bang",
|
||||
"description" : "Complete all missions at Mace",
|
||||
"value" : "TROPHY_SILVER",
|
||||
"hidden" : 1
|
||||
|
@ -145,19 +145,19 @@
|
|||
"value" : "TROPHY_SILVER"
|
||||
},
|
||||
{
|
||||
"id" : "CHALLENGE_25",
|
||||
"id" : "_CHALLENGE_25",
|
||||
"title" : "",
|
||||
"description" : "Complete 25%% of all challenges",
|
||||
"value" : "TROPHY_BRONZE"
|
||||
},
|
||||
{
|
||||
"id" : "CHALLENGE_50",
|
||||
"id" : "_CHALLENGE_50",
|
||||
"title" : "",
|
||||
"description" : "Complete 50%% of all challenges",
|
||||
"value" : "TROPHY_SILVER"
|
||||
},
|
||||
{
|
||||
"id" : "CHALLENGE_100",
|
||||
"id" : "_CHALLENGE_100",
|
||||
"title" : "",
|
||||
"description" : "Complete 100%% of all challenges",
|
||||
"value" : "TROPHY_GOLD"
|
||||
|
@ -221,7 +221,7 @@
|
|||
},
|
||||
{
|
||||
"id" : "ATAF_DESTROYED",
|
||||
"title" : "Almost indestructable. Almost.",
|
||||
"title" : "Almost indestructable. Almost",
|
||||
"description" : "Be destroyed while piloting an ATAF",
|
||||
"value" : "TROPHY_BRONZE",
|
||||
"hidden" : 1
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"type" : "WT_BUTTON",
|
||||
"text" : "Campaign",
|
||||
"x" : -1,
|
||||
"y" : 225,
|
||||
"y" : 200,
|
||||
"w" : 200,
|
||||
"h": 34
|
||||
},
|
||||
|
@ -15,7 +15,17 @@
|
|||
"type" : "WT_BUTTON",
|
||||
"text" : "Challenges",
|
||||
"x" : -1,
|
||||
"y" : 325,
|
||||
"y" : 290,
|
||||
"w" : 200,
|
||||
"h": 34
|
||||
},
|
||||
{
|
||||
"name" : "trophies",
|
||||
"group" : "title",
|
||||
"type" : "WT_BUTTON",
|
||||
"text" : "Trophies",
|
||||
"x" : -1,
|
||||
"y" : 380,
|
||||
"w" : 200,
|
||||
"h": 34
|
||||
},
|
||||
|
@ -25,7 +35,7 @@
|
|||
"type" : "WT_BUTTON",
|
||||
"text" : "Stats",
|
||||
"x" : -1,
|
||||
"y" : 425,
|
||||
"y" : 470,
|
||||
"w" : 200,
|
||||
"h": 34
|
||||
},
|
||||
|
@ -35,7 +45,7 @@
|
|||
"type" : "WT_BUTTON",
|
||||
"text" : "Options",
|
||||
"x" : -1,
|
||||
"y" : 525,
|
||||
"y" : 560,
|
||||
"w" : 200,
|
||||
"h": 34
|
||||
},
|
||||
|
@ -45,7 +55,7 @@
|
|||
"type" : "WT_BUTTON",
|
||||
"text" : "Quit",
|
||||
"x" : -1,
|
||||
"y" : 625,
|
||||
"y" : 650,
|
||||
"w" : 200,
|
||||
"h": 34
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
[
|
||||
{
|
||||
"name" : "ok",
|
||||
"group" : "trophies",
|
||||
"type" : "WT_BUTTON",
|
||||
"text" : "OK",
|
||||
"x" : -1,
|
||||
"y" : 665,
|
||||
"w" : 150,
|
||||
"h": 34
|
||||
},
|
||||
{
|
||||
"name" : "prev",
|
||||
"group" : "trophies",
|
||||
"type" : "WT_IMG_BUTTON",
|
||||
"x" : 540,
|
||||
"y" : 110,
|
||||
"w" : 150,
|
||||
"h": 34,
|
||||
"texture" : "gfx/widgets/optionsLeft.png"
|
||||
},
|
||||
{
|
||||
"name" : "next",
|
||||
"group" : "trophies",
|
||||
"type" : "WT_IMG_BUTTON",
|
||||
"x" : 720,
|
||||
"y" : 110,
|
||||
"w" : 150,
|
||||
"h": 34,
|
||||
"texture" : "gfx/widgets/optionsRight.png"
|
||||
}
|
||||
]
|
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 8.3 KiB |
|
@ -160,7 +160,7 @@ static void logic(void)
|
|||
break;
|
||||
}
|
||||
|
||||
doTrophies();
|
||||
doTrophyAlerts();
|
||||
|
||||
doWidgets();
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ extern void playMusic(char *filename);
|
|||
extern char *timeToString(long millis, int showHours);
|
||||
extern char *getChallengeDescription(Challenge *c);
|
||||
extern void clearInput(void);
|
||||
extern void doTrophies(void);
|
||||
extern void doTrophyAlerts(void);
|
||||
extern void drawTrophyAlert(void);
|
||||
extern void awardStatsTrophies(void);
|
||||
extern void awardChallengeTrophies(void);
|
||||
|
|
|
@ -367,5 +367,6 @@ enum
|
|||
TROPHY_SILVER,
|
||||
TROPHY_GOLD,
|
||||
TROPHY_PLATINUM,
|
||||
TROPHY_UNEARNED,
|
||||
TROPHY_MAX
|
||||
};
|
||||
|
|
|
@ -176,7 +176,7 @@ static void logic(void)
|
|||
|
||||
doWidgets();
|
||||
|
||||
doTrophies();
|
||||
doTrophyAlerts();
|
||||
}
|
||||
|
||||
static void doStarSystems(void)
|
||||
|
|
|
@ -60,7 +60,7 @@ extern StarSystem *getStarSystem(char *name);
|
|||
extern void showOKDialog(void (*callback)(void), const char *format, ...);
|
||||
extern char *getTranslatedString(char *string);
|
||||
extern void clearInput(void);
|
||||
extern void doTrophies(void);
|
||||
extern void doTrophyAlerts(void);
|
||||
extern void drawTrophyAlert(void);
|
||||
extern void awardCampaignTrophies(void);
|
||||
extern void awardStatsTrophies(void);
|
||||
|
|
|
@ -28,8 +28,9 @@ static void doFighters(void);
|
|||
static void drawFighters(void);
|
||||
static void campaign(void);
|
||||
static void challenges(void);
|
||||
static void trophies(void);
|
||||
static void stats(void);
|
||||
static void statsOK(void);
|
||||
static void ok(void);
|
||||
static void options(void);
|
||||
static void quit(void);
|
||||
static void returnFromOptions(void);
|
||||
|
@ -78,11 +79,13 @@ void initTitle(void)
|
|||
|
||||
getWidget("campaign", "title")->action = campaign;
|
||||
getWidget("challenges", "title")->action = challenges;
|
||||
getWidget("trophies", "title")->action = trophies;
|
||||
getWidget("stats", "title")->action = stats;
|
||||
getWidget("options", "title")->action = options;
|
||||
getWidget("quit", "title")->action = quit;
|
||||
|
||||
getWidget("ok", "stats")->action = statsOK;
|
||||
getWidget("ok", "stats")->action = ok;
|
||||
getWidget("ok", "trophies")->action = ok;
|
||||
|
||||
show = SHOW_TITLE;
|
||||
|
||||
|
@ -128,6 +131,8 @@ static void logic(void)
|
|||
|
||||
doEffects();
|
||||
|
||||
doTrophies();
|
||||
|
||||
doWidgets();
|
||||
}
|
||||
|
||||
|
@ -190,6 +195,10 @@ static void draw(void)
|
|||
case SHOW_OPTIONS:
|
||||
drawOptions();
|
||||
break;
|
||||
|
||||
case SHOW_TROPHIES:
|
||||
drawTrophies();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -226,6 +235,15 @@ static void challenges(void)
|
|||
initChallengeHome();
|
||||
}
|
||||
|
||||
static void trophies(void)
|
||||
{
|
||||
selectWidget("ok", "trophies");
|
||||
|
||||
show = SHOW_TROPHIES;
|
||||
|
||||
initTrophyDisplay();
|
||||
}
|
||||
|
||||
static void options(void)
|
||||
{
|
||||
selectWidget("ok", "options");
|
||||
|
@ -244,7 +262,7 @@ static void stats(void)
|
|||
initStatsDisplay();
|
||||
}
|
||||
|
||||
static void statsOK(void)
|
||||
static void ok(void)
|
||||
{
|
||||
selectWidget("stats", "title");
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#define SHOW_TITLE 0
|
||||
#define SHOW_STATS 1
|
||||
#define SHOW_OPTIONS 2
|
||||
#define SHOW_TROPHIES 3
|
||||
|
||||
#define NUM_FIGHTERS 12
|
||||
|
||||
|
@ -56,6 +57,9 @@ extern void selectWidget(const char *name, const char *group);
|
|||
extern void drawStats(void);
|
||||
extern void updateAllMissions(void);
|
||||
extern void clearInput(void);
|
||||
extern void initTrophyDisplay(void);
|
||||
extern void drawTrophies(void);
|
||||
extern void doTrophies(void);
|
||||
|
||||
extern App app;
|
||||
extern Battle battle;
|
||||
|
|
|
@ -20,15 +20,29 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "trophies.h"
|
||||
|
||||
static void prevPage(void);
|
||||
static void nextPage(void);
|
||||
static void loadTrophyData(char *filename);
|
||||
static void resetAlert(void);
|
||||
static void awardCraftTrophy(void);
|
||||
static void setSparkleColor(Trophy *t);
|
||||
static void nextAlert(void);
|
||||
|
||||
static Trophy *alertTrophy;
|
||||
static SDL_Texture *trophyIcons[TROPHY_MAX];
|
||||
static SDL_Texture *sparkle;
|
||||
static SDL_Texture *alertSphere;
|
||||
static SDL_Rect alertRect;
|
||||
static float alertDX;
|
||||
static int alertTimer;
|
||||
static int page;
|
||||
static int awarded;
|
||||
static int total;
|
||||
static int boxWidth;
|
||||
static float sparkleAngle;
|
||||
static float maxPages;
|
||||
static Widget *prev;
|
||||
static Widget *next;
|
||||
|
||||
void initTrophies(void)
|
||||
{
|
||||
|
@ -38,10 +52,155 @@ void initTrophies(void)
|
|||
trophyIcons[TROPHY_SILVER] = getTexture("gfx/trophies/silver.png");
|
||||
trophyIcons[TROPHY_GOLD] = getTexture("gfx/trophies/gold.png");
|
||||
trophyIcons[TROPHY_PLATINUM] = getTexture("gfx/trophies/platinum.png");
|
||||
trophyIcons[TROPHY_UNEARNED] = getTexture("gfx/trophies/unearned.png");
|
||||
sparkle = getTexture("gfx/trophies/sparkle.png");
|
||||
alertSphere = getTexture("gfx/trophies/alertSphere.png");
|
||||
|
||||
alertRect.h = 90;
|
||||
alertRect.y = 10;
|
||||
|
||||
resetAlert();
|
||||
}
|
||||
|
||||
void initTrophyDisplay(void)
|
||||
{
|
||||
int w, h;
|
||||
Trophy *t;
|
||||
|
||||
boxWidth = total = awarded = 0;
|
||||
|
||||
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
|
||||
{
|
||||
total++;
|
||||
|
||||
if (t->awarded)
|
||||
{
|
||||
awarded++;
|
||||
|
||||
STRNCPY(t->awardDateStr, timeToDate(t->awardDate), MAX_NAME_LENGTH);
|
||||
}
|
||||
|
||||
textSize(t->description, 18, &w, &h);
|
||||
|
||||
boxWidth = MAX(boxWidth, w);
|
||||
}
|
||||
|
||||
boxWidth += 125;
|
||||
|
||||
page = 0;
|
||||
|
||||
maxPages = total;
|
||||
maxPages /= TROPHIES_PER_PAGE;
|
||||
maxPages = ceil(maxPages);
|
||||
|
||||
prev = getWidget("prev", "trophies");
|
||||
prev->action = prevPage;
|
||||
prev->visible = 0;
|
||||
|
||||
next = getWidget("next", "trophies");
|
||||
next->action = nextPage;
|
||||
|
||||
sparkleAngle = 0;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void doTrophies(void)
|
||||
{
|
||||
sparkleAngle += 0.25;
|
||||
if (sparkleAngle >= 360)
|
||||
{
|
||||
sparkleAngle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void drawTrophies(void)
|
||||
{
|
||||
Trophy *t;
|
||||
SDL_Rect r;
|
||||
int start, i, x, y;
|
||||
|
||||
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
|
||||
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 128);
|
||||
SDL_RenderFillRect(app.renderer, NULL);
|
||||
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
|
||||
|
||||
r.w = boxWidth;
|
||||
r.h = 650;
|
||||
r.x = (SCREEN_WIDTH / 2) - r.w / 2;
|
||||
r.y = (SCREEN_HEIGHT / 2) - r.h / 2;
|
||||
|
||||
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, 0);
|
||||
SDL_RenderFillRect(app.renderer, &r);
|
||||
SDL_SetRenderDrawColor(app.renderer, 200, 200, 200, 255);
|
||||
SDL_RenderDrawRect(app.renderer, &r);
|
||||
|
||||
drawText(SCREEN_WIDTH / 2, 40, 28, TA_CENTER, colors.white, _("Trophies"));
|
||||
drawText(SCREEN_WIDTH / 2, 83, 16, TA_CENTER, colors.lightGrey, _("Awarded : %d / %d"), awarded, total);
|
||||
drawText(SCREEN_WIDTH / 2, 110, 16, TA_CENTER, colors.lightGrey, _("Page : %d / %d"), page + 1, (int)maxPages);
|
||||
|
||||
SDL_SetRenderDrawColor(app.renderer, 128, 128, 128, 255);
|
||||
SDL_RenderDrawLine(app.renderer, r.x, 150, r.x + r.w, 150);
|
||||
|
||||
x = r.x + 15;
|
||||
y = 180;
|
||||
start = page * TROPHIES_PER_PAGE;
|
||||
i = 0;
|
||||
|
||||
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
|
||||
{
|
||||
if (i >= start && i < start + TROPHIES_PER_PAGE)
|
||||
{
|
||||
if (t->awarded)
|
||||
{
|
||||
setSparkleColor(t);
|
||||
blitRotated(sparkle, x + 32, y + 32, sparkleAngle);
|
||||
blitRotated(sparkle, x + 32, y + 32, -sparkleAngle);
|
||||
|
||||
blitScaled(trophyIcons[t->value], x, y, 64, 64);
|
||||
drawText(x + 85, y - 10, 20, TA_LEFT, colors.white, t->title);
|
||||
drawText(x + 85, y + 20, 18, TA_LEFT, colors.lightGrey, t->description);
|
||||
drawText(x + 85, y + 48, 18, TA_LEFT, colors.yellow, t->awardDateStr);
|
||||
}
|
||||
else
|
||||
{
|
||||
blitScaled(trophyIcons[TROPHY_UNEARNED], x, y, 64, 64);
|
||||
|
||||
if (!t->hidden)
|
||||
{
|
||||
drawText(x + 85, y - 10, 20, TA_LEFT, colors.white, t->title);
|
||||
drawText(x + 85, y + 20, 18, TA_LEFT, colors.lightGrey, t->description);
|
||||
drawText(x + 85, y + 48, 18, TA_LEFT, colors.lightGrey, "-");
|
||||
}
|
||||
else
|
||||
{
|
||||
drawText(x + 85, y + 20, 20, TA_LEFT, colors.darkGrey, _("[Hidden]"));
|
||||
}
|
||||
}
|
||||
|
||||
y += 120;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
drawWidgets("trophies");
|
||||
}
|
||||
|
||||
void awardTrophy(char *id)
|
||||
{
|
||||
Trophy *t;
|
||||
|
@ -57,20 +216,14 @@ void awardTrophy(char *id)
|
|||
}
|
||||
}
|
||||
|
||||
void doTrophies(void)
|
||||
void doTrophyAlerts(void)
|
||||
{
|
||||
Trophy *t;
|
||||
|
||||
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
|
||||
if (!alertTrophy)
|
||||
{
|
||||
if (t->notify)
|
||||
{
|
||||
if (alertTrophy != t)
|
||||
{
|
||||
alertTrophy = t;
|
||||
playSound(SND_TROPHY);
|
||||
nextAlert();
|
||||
}
|
||||
|
||||
else if (alertTrophy)
|
||||
{
|
||||
alertRect.x += alertDX;
|
||||
|
||||
if (alertRect.x > -150)
|
||||
|
@ -82,28 +235,53 @@ void doTrophies(void)
|
|||
|
||||
if (alertTimer <= 0)
|
||||
{
|
||||
t->notify = 0;
|
||||
alertTrophy->notify = 0;
|
||||
resetAlert();
|
||||
}
|
||||
|
||||
return;
|
||||
/* do the sparkle rotation */
|
||||
doTrophies();
|
||||
}
|
||||
}
|
||||
|
||||
static void nextAlert(void)
|
||||
{
|
||||
int h;
|
||||
Trophy *t;
|
||||
|
||||
for (t = game.trophyHead.next ; t != NULL ; t = t->next)
|
||||
{
|
||||
if (t->notify)
|
||||
{
|
||||
if (!alertTrophy || t->awardDate < alertTrophy->awardDate)
|
||||
{
|
||||
alertTrophy = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (alertTrophy)
|
||||
{
|
||||
playSound(SND_TROPHY);
|
||||
|
||||
textSize(t->title, 30, &alertRect.w, &h);
|
||||
alertRect.w += 125;
|
||||
alertRect.w = MAX(alertRect.w, 500);
|
||||
alertRect.x = -alertRect.w;
|
||||
}
|
||||
}
|
||||
|
||||
static void resetAlert(void)
|
||||
{
|
||||
alertRect.w = 500;
|
||||
alertRect.h = 90;
|
||||
alertRect.x = -alertRect.w;
|
||||
alertRect.y = 10;
|
||||
|
||||
alertDX = 12;
|
||||
alertTimer = FPS * 3;
|
||||
alertTrophy = NULL;
|
||||
}
|
||||
|
||||
void drawTrophyAlert(void)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
if (alertTrophy)
|
||||
{
|
||||
SDL_SetRenderDrawColor(app.renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
|
||||
|
@ -115,12 +293,16 @@ void drawTrophyAlert(void)
|
|||
drawText(alertRect.x + 15, alertRect.y + 5, 30, TA_LEFT, colors.white, alertTrophy->title);
|
||||
drawText(alertRect.x + 15, alertRect.y + 45, 20, TA_LEFT, colors.white, alertTrophy->shortDescription);
|
||||
|
||||
blitScaled(trophyIcons[alertTrophy->value], alertRect.x + alertRect.w - 64, alertRect.y + 16, 48, 48);
|
||||
}
|
||||
}
|
||||
setSparkleColor(alertTrophy);
|
||||
|
||||
void drawTrophies(void)
|
||||
{
|
||||
x = alertRect.x + alertRect.w - 72;
|
||||
y = alertRect.y + 20;
|
||||
|
||||
blit(alertSphere, x + 24, y + 24, 1);
|
||||
blitRotated(sparkle, x + 24, y + 24, sparkleAngle);
|
||||
blitRotated(sparkle, x + 24, y + 24, -sparkleAngle);
|
||||
blitScaled(trophyIcons[alertTrophy->value], x, y, 48, 48);
|
||||
}
|
||||
}
|
||||
|
||||
Trophy *getTrophy(char *id)
|
||||
|
@ -272,3 +454,25 @@ static void awardCraftTrophy(void)
|
|||
|
||||
awardTrophy(trophyId);
|
||||
}
|
||||
|
||||
static void setSparkleColor(Trophy *t)
|
||||
{
|
||||
switch (t->value)
|
||||
{
|
||||
case TROPHY_BRONZE:
|
||||
SDL_SetTextureColorMod(sparkle, 255, 128, 0);
|
||||
break;
|
||||
|
||||
case TROPHY_SILVER:
|
||||
SDL_SetTextureColorMod(sparkle, 192, 192, 192);
|
||||
break;
|
||||
|
||||
case TROPHY_GOLD:
|
||||
SDL_SetTextureColorMod(sparkle, 255, 255, 0);
|
||||
break;
|
||||
|
||||
case TROPHY_PLATINUM:
|
||||
SDL_SetTextureColorMod(sparkle, 0, 128, 255);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
*/
|
||||
|
||||
#define SHORT_DESCRIPTION_LENGTH 40
|
||||
#define TROPHIES_PER_PAGE 4
|
||||
|
||||
#include "../common.h"
|
||||
#include "../json/cJSON.h"
|
||||
|
@ -30,10 +31,16 @@ extern char *readFile(char *filename);
|
|||
extern int getJSONValue(cJSON *node, char *name, int defValue);
|
||||
extern int getPercent(float current, float total);
|
||||
extern void drawText(int x, int y, int size, int align, SDL_Color c, const char *format, ...);
|
||||
extern void blit(SDL_Texture *texture, int x, int y, int centered);
|
||||
extern void blitRotated(SDL_Texture *texture, int x, int y, float angle);
|
||||
extern void blitScaled(SDL_Texture *t, int x, int y, int w, int h);
|
||||
extern char *getTranslatedString(char *string);
|
||||
extern SDL_Texture *getTexture(char *filename);
|
||||
extern void playSound(int id);
|
||||
extern Widget *getWidget(const char *name, const char *group);
|
||||
extern void drawWidgets(char *groupName);
|
||||
extern char *timeToDate(long millis);
|
||||
extern void textSize(char *text, int size, int *w, int *h);
|
||||
|
||||
extern App app;
|
||||
extern Colors colors;
|
||||
|
|
|
@ -371,6 +371,7 @@ struct Trophy {
|
|||
char title[MAX_DESCRIPTION_LENGTH];
|
||||
char description[MAX_DESCRIPTION_LENGTH];
|
||||
char shortDescription[MAX_DESCRIPTION_LENGTH];
|
||||
char awardDateStr[MAX_NAME_LENGTH];
|
||||
int value;
|
||||
int hidden;
|
||||
int stat;
|
||||
|
|
|
@ -128,6 +128,19 @@ char *timeToString(long millis, int showHours)
|
|||
return TIME;
|
||||
}
|
||||
|
||||
char *timeToDate(long millis)
|
||||
{
|
||||
static char DATE[MAX_NAME_LENGTH];
|
||||
|
||||
struct tm *timeinfo;
|
||||
|
||||
timeinfo = localtime(&millis);
|
||||
|
||||
strftime(DATE, MAX_NAME_LENGTH, "%d %b %Y, %H:%M", timeinfo);
|
||||
|
||||
return DATE;
|
||||
}
|
||||
|
||||
char *getJSONValueStr(cJSON *node, char *name, char *defValue)
|
||||
{
|
||||
cJSON *child;
|
||||
|
|
|
@ -20,3 +20,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "../common.h"
|
||||
#include "../json/cJSON.h"
|
||||
#include "time.h"
|
||||
|
|