- ported the statistics screen.

This commit is contained in:
Christoph Oelckers 2020-10-29 23:20:29 +01:00
parent 0e051a9d96
commit 18e37577bc
4 changed files with 97 additions and 23 deletions

View file

@ -3,6 +3,9 @@
#include "screenjob.h" #include "screenjob.h"
#include "raze_music.h" #include "raze_music.h"
#include "raze_sound.h" #include "raze_sound.h"
#include "v_draw.h"
#include "v_font.h"
#include "mapinfo.h"
BEGIN_WH_NS BEGIN_WH_NS
@ -31,30 +34,88 @@ void IntroMovie(const CompletionFunc& completion)
void showStatisticsScreen() static const char* ratings[] = { "poor", "average", "good", "perfect" };
/*
inited = false;
if (init("stairs.smk"))
inited = true;
*/
class DStatisticsScreen : public DScreenJob
{ {
#if 0
gStatisticsScreen.show(plr, new Runnable(){ boolean inited = false;
@Override int bonus, rating;
public void run() {
mapon++; public:
spritesound(S_CHAINDOOR1, &sprite[plr.spritenum]); DStatisticsScreen(PLAYER& plr)
playertorch = 0; {
spritesound(S_WARP, &sprite[plr.spritenum]); if (kills > killcnt)
loadnewlevel(mapon); kills = killcnt;
int killp = (kills * 100) / (killcnt + 1);
if (treasuresfound > treasurescnt)
treasuresfound = treasurescnt;
int treap = (treasuresfound * 100) / (treasurescnt + 1);
rating = (killp + treap) / 2;
if (rating >= 95) {
rating = 3;
} }
}); else if (rating >= 70)
#endif rating = 2;
else if (rating >= 40)
rating = 1;
else rating = 0;
bonus = rating * 500;
plr.score += bonus;
}
void drawText(int x, int y, const char* text)
{
DrawText(twod, SmallFont, CR_UNTRANSLATED, x, y, text, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE);
}
int Frame(uint64_t nsclock, bool skiprequest) override
{
if (nsclock == 0) SND_Sound(S_CHAINDOOR1);
DrawTexture(twod, tileGetTexture(VMAINBLANK), 0, 0, DTA_Fullscreen, FSMode_ScaleToFit43, TAG_DONE);
drawText(10, 13, currentLevel->DisplayName());
drawText(10, 31, GStrings("Level conquered"));
drawText(10, 64, GStrings("Enemies killed"));
drawText(160 + 48 + 14, 64, FStringf("%d %s %d", kills, GStrings("TXT_OF"), killcnt));
drawText(10, 64 + 18, GStrings("Treasures found"));
drawText(160 + 48 + 14, 64 + 18, FStringf("%d %s %d", treasuresfound, GStrings("TXT_OF"), treasurescnt));
drawText(10, 64 + 2 * 18, GStrings("Experience gained"));
drawText(160 + 48 + 14, 64 + 2 * 18, FStringf("%s", (expgained + bonus)));
drawText(10, 64 + 3 * 18, GStrings("Rating"));
drawText(160 + 48 + 14, 64 + 3 * 18, FStringf("%d", GStrings(ratings[rating])));
drawText(10, 64 + 4 * 18, GStrings("Bonus"));
drawText(160 + 48 + 14, 64 + 4 * 18, FStringf("%d", bonus));
return skiprequest ? -1 : 1;
}
};
void showStatisticsScreen(CompletionFunc completion)
{
JobDesc job = { Create<DStatisticsScreen>(player[pyrn]), nullptr };
RunScreenJob(&job, 1, completion, true, false);
} }
void startWh2Ending() void startWh2Ending(CompletionFunc completion)
{ {
#if 0 JobDesc jobs[3];
if (gCutsceneScreen.init("ending1.smk")) jobs[0] = { PlayVideo("smk/ending1.smk", nullptr) };
if (gCutsceneScreen.init("ending2.smk")) jobs[1] = { PlayVideo("smk/ending2.smk", nullptr) };
if (gCutsceneScreen.init("ending3.smk")) jobs[2] = { PlayVideo("smk/ending3.smk", nullptr) };
game.changeScreen(gMenuScreen); RunScreenJob(jobs, 3, completion, true, false);
#endif
} }
void showVictoryScreen() void showVictoryScreen()
@ -62,6 +123,8 @@ void showVictoryScreen()
//game.changeScreen(gVictoryScreen); //game.changeScreen(gVictoryScreen);
} }
#if 0 #if 0
void orbpic(PLAYER& plr, int currentorb) { void orbpic(PLAYER& plr, int currentorb) {
if (plr.orbammo[currentorb] < 0) if (plr.orbammo[currentorb] < 0)

View file

@ -1,5 +1,6 @@
#include "ns.h" #include "ns.h"
#include "wh.h" #include "wh.h"
#include "gamestate.h"
BEGIN_WH_NS BEGIN_WH_NS
@ -581,7 +582,9 @@ void InitItems()
{ {
if (isWh2()) { if (isWh2()) {
startWh2Ending(); startWh2Ending([](bool) {
gameaction = ga_mainmenu;
});
return; return;
} }
plr.treasure[THORNEDSKULL] = 1; plr.treasure[THORNEDSKULL] = 1;

View file

@ -501,8 +501,8 @@ void analyzesprites(PLAYER& plr, int dasmoothratio);
void precacheTiles(); void precacheTiles();
void startWh2Ending(); void startWh2Ending(CompletionFunc);
void showStatisticsScreen(); void showStatisticsScreen(CompletionFunc);
void showVictoryScreen(); void showVictoryScreen();
void InitNames(); void InitNames();

View file

@ -462,7 +462,15 @@ void teleporter() {
justteleported = true; justteleported = true;
if(isWh2()) { if(isWh2()) {
showStatisticsScreen(); auto pplr = &plr;
showStatisticsScreen([=](bool)
{
mapon++;
spritesound(S_CHAINDOOR1, &sprite[pplr->spritenum]);
playertorch = 0;
spritesound(S_WARP, &sprite[pplr->spritenum]);
loadnewlevel(mapon);
});
break; break;
} }