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
master
Christian Ohm 2010-03-01 19:03:13 +00:00 committed by Git SVN Gateway
parent 867ff725d2
commit 7cee2b251a
1 changed files with 49 additions and 45 deletions

View File

@ -67,50 +67,68 @@ typedef struct _star
PIELIGHT colour; PIELIGHT colour;
} STAR; } STAR;
#define MAX_STARS 20
static STAR stars[MAX_STARS]; // quick hack for loading stuff
static BOOL firstcall = false; static BOOL firstcall = false;
static UDWORD loadScreenCallNo=0; static UDWORD loadScreenCallNo=0;
static BOOL bPlayerHasLost = false; static BOOL bPlayerHasLost = false;
static BOOL bPlayerHasWon = false; static BOOL bPlayerHasWon = false;
static UBYTE scriptWinLoseVideo = PLAY_NONE; static UBYTE scriptWinLoseVideo = PLAY_NONE;
void startCreditsScreen ( void );
void runCreditsScreen ( void ); void runCreditsScreen ( void );
static UDWORD lastTick = 0;
static UDWORD lastChange = 0; static UDWORD lastChange = 0;
extern char iptoconnect[PATH_MAX]; // holds our ip/hostname from the command line 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. 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; STAR s;
colour.byte.r = colour.byte.g = colour.byte.b = 150 + rand() % 100; s.xPos = rand() % barRightX;
colour.byte.a = 255; s.speed = (rand() % 30 + 6) * pie_GetVideoBufferWidth() / 640.0;
return colour; s.colour = pal_Grey(150 + rand() % 100);
return s;
} }
static void initStars(void) static void setupLoadingScreen(void)
{ {
unsigned int i; 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] = newStar();
stars[i].speed = rand() % 30 + 6; // always move
stars[i].colour = randColour();
} }
} }
// ////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////
// Initialise frontend globals and statics. // Initialise frontend globals and statics.
// //
BOOL frontendInitVars(void) BOOL frontendInitVars(void)
{ {
firstcall = true; firstcall = true;
initStars(); setupLoadingScreen();
return true; return true;
} }
@ -274,58 +292,44 @@ TITLECODE titleLoop(void)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Loading Screen. // Loading Screen.
//loadbar update //loadbar update
void loadingScreenCallback(void) void loadingScreenCallback(void)
{ {
const PIELIGHT loadingbar_background = pal_RGBA(0, 0, 0, 24);
const uint32_t currTick = SDL_GetTicks();
unsigned int i; unsigned int i;
UDWORD topX,topY,botX,botY;
UDWORD currTick;
PIELIGHT colour;
currTick = SDL_GetTicks();
if (currTick - lastTick < 50) if (currTick - lastTick < 50)
{ {
return; return;
} }
lastTick = currTick; 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; /* Draw the black rectangle at the bottom, with a two pixel border */
topY = 450+D_H-1; pie_UniTransBoxFill(barLeftX - 2, barLeftY - 2, barRightX + 2, barRightY + 2, loadingbar_background);
botX = 630+D_W;
botY = 470+D_H+1;
colour.byte.a = 24;
pie_UniTransBoxFill(topX, topY, botX, botY, colour);
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].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(topX, topY, botX, botY, 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_ScreenFlip(CLEAR_OFF_AND_NO_BUFFER_DOWNLOAD);//loading callback // dont clear. pie_ScreenFlip(CLEAR_OFF_AND_NO_BUFFER_DOWNLOAD);//loading callback // dont clear.
audio_Update(); audio_Update();
} }
// fill buffers with the static screen // fill buffers with the static screen
void initLoadingScreen( BOOL drawbdrop ) void initLoadingScreen( BOOL drawbdrop )
{ {