//Score.cpp implementation #include #include #include "comconst.h" #include "score.h" #include "arena.h" #include "worm.h" #define TIM 0x80150000 #define PUNEROT 0x801c1000 #define MINDISTANCE -3000 #define MAXDISTANCE -350 #define SPEED 3 #define ANGLESPEED 30 #define SCOREOFF 20 int CScoreboard::mDigitX[11]={0, 19, 30, 50, 66, 85, 101, 119, 135, 152, 169}; int CScoreboard::mDigitY[11]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int CScoreboard::mDigitW[11]={19, 11, 20, 16, 19, 16, 18, 16, 16, 17, 20}; int CScoreboard::mDigitH[11]={25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}; CScoreboard::CScoreboard() { mBox.attribute=0; mBox.x=SCREENW-XOFFSET; mBox.y=0-YOFFSET; mBox.w=SWIDTH-SCREENW; mBox.h=SHEIGHT; mBox.r=64; mBox.g=32; mBox.b=32; GsIMAGE im; RECT rect; GsGetTimInfo((unsigned long*)(TIM + 4), &im); rect.x=im.px; rect.y=im.py; rect.h=im.ph; rect.w=im.pw; LoadImage(&rect, im.pixel); DrawSync(0); int tpage=GetTPage(0, 0, rect.x, rect.y); for (int g=0; gattribute=0; mDigits[g][h]->tpage=tpage; mDigits[g][h]->cx=CWorm::mCx[g]; mDigits[g][h]->cy=CWorm::mCy[g]; mDigits[g][h]->r=128; mDigits[g][h]->g=128; mDigits[g][h]->b=128; mDigits[g][h]->mx=0; mDigits[g][h]->my=0; mDigits[g][h]->scalex=2*ONE; mDigits[g][h]->scaley=2*ONE; mDigits[g][h]->rotate=0; } } //Set up 3D image GsMapModelingData((u_long*)(PUNEROT+4)); GsLinkObject4((unsigned long)(((u_long*)PUNEROT)+3), &mObj, 0); mObj.coord2=WORLD; mDirection=SPEED; mDistance=MINDISTANCE; mAngle=0; } CScoreboard::~CScoreboard() { for (int g=0; gcoord=mTransformMatrix; mObj.coord2->super=WORLD; mObj.coord2->flg=0; GsGetLs(mObj.coord2, &mCoordMatrix); GsSetLsMatrix(&mCoordMatrix); GsSortObject4(&mObj, orderingTable, 14-OT_LENGTH, (u_long*)getScratchAddr(0)); mAngle+=ANGLESPEED; mAngle%=ONE; mDistance=mDistance+mDirection; if ((mDistance > MAXDISTANCE) && (mDirection >0) || (mDistance < MINDISTANCE) && (mDirection <0)) { mDirection =- mDirection; } //Actual Scores for (int g=0; gmWormIn[g]) { int colour=arena->mWorms[g]->GetColour(); int score=arena->mWorms[g]->GetScore() % 100; if (score>9) { mDigits[colour][0]->x=(((SWIDTH-SCOREOFF)-2*mDigitW[score%10])- 2*mDigitW[score/10])-XOFFSET; mDigits[colour][0]->y=(2*g*40)+SCOREOFF-YOFFSET; mDigits[colour][0]->u=mDigitX[score/10]; mDigits[colour][0]->v=mDigitY[score/10]; mDigits[colour][0]->h=mDigitH[score/10]; mDigits[colour][0]->w=mDigitW[score/10]; GsSortSprite(mDigits[colour][0], orderingTable, 0); } mDigits[colour][1]->x=((SWIDTH-SCOREOFF)-2*mDigitW[score%10])-XOFFSET; mDigits[colour][1]->y=(2*g*40)+SCOREOFF-YOFFSET; mDigits[colour][1]->u=mDigitX[score%10]; mDigits[colour][1]->v=mDigitY[score%10]; mDigits[colour][1]->h=mDigitH[score%10]; mDigits[colour][1]->w=mDigitW[score%10]; GsSortSprite(mDigits[colour][1], orderingTable, 0); } } }