From 7cee2b251a1b7f5b8181b5f7193b47e370187894 Mon Sep 17 00:00:00 2001 From: Christian Ohm Date: Mon, 1 Mar 2010 19:03:13 +0000 Subject: [PATCH] Clean up loadingScreenCallback. Now settings can be changed easily, and the bar adjusts to the screen resolution. Closes #1645. git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@10079 4a71c877-e1ca-e34f-864e-861f7616d084 --- src/wrappers.c | 94 ++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/src/wrappers.c b/src/wrappers.c index 44c2a6a71..733ace4ec 100644 --- a/src/wrappers.c +++ b/src/wrappers.c @@ -67,50 +67,68 @@ typedef struct _star PIELIGHT colour; } STAR; -#define MAX_STARS 20 -static STAR stars[MAX_STARS]; // quick hack for loading stuff - static BOOL firstcall = false; static UDWORD loadScreenCallNo=0; static BOOL bPlayerHasLost = false; static BOOL bPlayerHasWon = false; static UBYTE scriptWinLoseVideo = PLAY_NONE; -void startCreditsScreen ( void ); void runCreditsScreen ( void ); -static UDWORD lastTick = 0; static UDWORD lastChange = 0; extern char iptoconnect[PATH_MAX]; // holds our ip/hostname from the command line BOOL hostlaunch = false; // used to detect if we are hosting a game via command line option. -static PIELIGHT randColour(void) +static uint32_t lastTick = 0; +static int barLeftX, barLeftY, barRightX, barRightY, boxWidth, boxHeight, starsNum, starHeight; +static STAR *stars; + +static STAR newStar(void) { - PIELIGHT colour; - colour.byte.r = colour.byte.g = colour.byte.b = 150 + rand() % 100; - colour.byte.a = 255; - return colour; + STAR s; + s.xPos = rand() % barRightX; + s.speed = (rand() % 30 + 6) * pie_GetVideoBufferWidth() / 640.0; + s.colour = pal_Grey(150 + rand() % 100); + return s; } -static void initStars(void) +static void setupLoadingScreen(void) { unsigned int i; + int w = pie_GetVideoBufferWidth(); + int h = pie_GetVideoBufferHeight(); + int offset; - for(i = 0; i < MAX_STARS; ++i) + boxHeight = h / 40.0; + offset = boxHeight; + boxWidth = w - 2.0 * offset; + + barRightX = w - offset; + barRightY = h - offset; + + barLeftX = barRightX - boxWidth; + barLeftY = barRightY - boxHeight; + + starsNum = boxWidth / boxHeight; + starHeight = 2.0 * h / 640.0; + + stars = (STAR *)malloc(sizeof(STAR) * starsNum); + + for (i = 0; i < starsNum; ++i) { - stars[i].xPos = (UWORD)(rand()%598); // scatter them - stars[i].speed = rand() % 30 + 6; // always move - stars[i].colour = randColour(); + stars[i] = newStar(); } } + + // ////////////////////////////////////////////////////////////////// // Initialise frontend globals and statics. // BOOL frontendInitVars(void) { firstcall = true; - initStars(); + setupLoadingScreen(); return true; } @@ -274,58 +292,44 @@ TITLECODE titleLoop(void) //////////////////////////////////////////////////////////////////////////////// // Loading Screen. - - - //loadbar update void loadingScreenCallback(void) { + const PIELIGHT loadingbar_background = pal_RGBA(0, 0, 0, 24); + const uint32_t currTick = SDL_GetTicks(); unsigned int i; - UDWORD topX,topY,botX,botY; - UDWORD currTick; - PIELIGHT colour; - currTick = SDL_GetTicks(); if (currTick - lastTick < 50) { return; } lastTick = currTick; - colour.byte.r = 1; - colour.byte.g = 1; - colour.byte.b = 1; - colour.byte.a = 32; - pie_UniTransBoxFill(1, 1, 2, 2, colour); - /* Draw the black rectangle at the bottom */ - topX = 10+D_W; - topY = 450+D_H-1; - botX = 630+D_W; - botY = 470+D_H+1; - colour.byte.a = 24; - pie_UniTransBoxFill(topX, topY, botX, botY, colour); + /* Draw the black rectangle at the bottom, with a two pixel border */ + pie_UniTransBoxFill(barLeftX - 2, barLeftY - 2, barRightX + 2, barRightY + 2, loadingbar_background); - for(i = 1; i < MAX_STARS; ++i) + for (i = 1; i < starsNum; ++i) { - if(stars[i].xPos + stars[i].speed >=598) + stars[i].xPos = stars[i].xPos + stars[i].speed; + if (stars[i].xPos >= barRightX) { + stars[i] = newStar(); stars[i].xPos = 1; - stars[i].colour = randColour(); } - else { - stars[i].xPos = (UWORD)(stars[i].xPos + stars[i].speed); - } + const int topX = barLeftX + stars[i].xPos; + const int topY = barLeftY + i * (boxHeight - starHeight) / starsNum; + const int botX = MIN(topX + stars[i].speed, barRightX); + const int botY = topY + starHeight; - colour = stars[i].colour; - pie_UniTransBoxFill(10 + stars[i].xPos + D_W, 450 + i + D_H, 10 + stars[i].xPos + stars[i].speed + D_W, 450 + i + 2 + D_H, colour); - } + pie_UniTransBoxFill(topX, topY, botX, botY, stars[i].colour); + } + } pie_ScreenFlip(CLEAR_OFF_AND_NO_BUFFER_DOWNLOAD);//loading callback // dont clear. audio_Update(); } - // fill buffers with the static screen void initLoadingScreen( BOOL drawbdrop ) {