void cGrBoard::grDispDebug(float fps, tCarElt *car) { char buf[256]; int x, y; tRoadCam *curCam; curCam = car->_trkPos.seg->cam; x = Winx + Winw - 100; y = Winy + Winh - 30; sprintf(buf, "FPS: %.1f", fps); GfuiPrintString(buf, grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); return; y -= 15; sprintf(buf, "Seg: %s", car->_trkPos.seg->name); GfuiPrintString(buf, grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); y -= 15; if (curCam) { sprintf(buf, "Cam: %s", curCam->name); GfuiPrintString(buf, grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); y -= 15; } }
void grWriteTime(float *color, int font, int x, int y, tdble sec, int sgn) { char buf[256]; char* sign; if (sec < 0.0) { sec = -sec; sign = "-"; } else { if (sgn) { sign = "+"; } else { sign = " "; } } int h = (int)(sec / 3600.0); sec -= 3600 * h; int m = (int)(sec / 60.0); sec -= 60 * m; int s = (int)(sec); sec -= s; int c = (int)floor((sec) * 100.0); if (h) { (void)sprintf(buf, "%s%2.2d:%2.2d:%2.2d:%2.2d", sign,h,m,s,c); } else if (m) { (void)sprintf(buf, " %s%2.2d:%2.2d:%2.2d", sign,m,s,c); } else { (void)sprintf(buf, " %s%2.2d:%2.2d", sign,s,c); } GfuiPrintString(buf, color, font, x, y, GFUI_ALIGN_HR_VB); }
void cGrBoard::grDrawGauge(tdble X1, tdble Y1, tdble H, float *clr1, float *clr2, tdble val, const char *title) { tdble curH; curH = MIN(val, 1.0); curH = MAX(curH, 0.0); curH *= H; #define THNSSBG 2.0 #define THNSSFG 2.0 glBegin(GL_QUADS); glColor4fv(grBlack); glVertex2f(X1 - (THNSSBG + THNSSFG), Y1 - THNSSBG); glVertex2f(X1 + (THNSSBG + THNSSFG), Y1 - THNSSBG); glVertex2f(X1 + (THNSSBG + THNSSFG), Y1 + H + THNSSBG); glVertex2f(X1 - (THNSSBG + THNSSFG), Y1 + H + THNSSBG); glColor4fv(clr2); glVertex2f(X1 - THNSSFG, Y1 + curH); glVertex2f(X1 + THNSSFG, Y1 + curH); glVertex2f(X1 + THNSSFG, Y1 + H); glVertex2f(X1 - THNSSFG, Y1 + H); glColor4fv(clr1); glVertex2f(X1 - THNSSFG, Y1); glVertex2f(X1 + THNSSFG, Y1); glVertex2f(X1 + THNSSFG, Y1 + curH); glVertex2f(X1 - THNSSFG, Y1 + curH); glEnd(); GfuiPrintString(title, grBlue, GFUI_FONT_MEDIUM, (int)X1, (int)(Y1 - THNSSBG - GfuiFontHeight(GFUI_FONT_MEDIUM)), GFUI_ALIGN_HC_VB); }
void cGrBoard::grDispCounterBoard(tCarElt *car) { int x, y; char buf[256]; grDispEngineLeds (car, Winx + Winw / 2, Winy + MAX(GfuiFontHeight(GFUI_FONT_BIG_C), GfuiFontHeight(GFUI_FONT_DIGIT)), ALIGN_CENTER, 1); x = Winx + Winw/2; y = Winy; sprintf(buf, " kph %s", gearStr[car->_gear+car->_gearOffset]); GfuiPrintString(buf, grBlue, GFUI_FONT_BIG_C, x, y, GFUI_ALIGN_HL_VB); x = Winx + Winw/2; sprintf(buf, "%3d", abs((int)(car->_speed_x * 3.6))); GfuiPrintString(buf, grBlue, GFUI_FONT_DIGIT, x, y, GFUI_ALIGN_HR_VB); }
void cGrBoard::grDispArcade(tCarElt *car, tSituation *s) { int x, y; int dy; char buf[256]; float *clr; #define XM 15 #define YM 10 x = XM; dy = GfuiFontHeight(GFUI_FONT_BIG_C); y = Winy + Winh - YM - dy; sprintf(buf, "%d/%d", car->_pos, s->_ncars); GfuiPrintString(buf, grDefaultClr, GFUI_FONT_BIG_C, x, y, GFUI_ALIGN_HL_VB); dy = GfuiFontHeight(GFUI_FONT_LARGE_C); y -= dy; GfuiPrintString("Time:", grDefaultClr, GFUI_FONT_LARGE_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(grDefaultClr, GFUI_FONT_LARGE_C, x + 150, y, car->_curLapTime, 0); y -= dy; GfuiPrintString("Best:", grDefaultClr, GFUI_FONT_LARGE_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(grDefaultClr, GFUI_FONT_LARGE_C, x + 150, y, car->_bestLapTime, 0); x = Winx + Winw - XM; y = Winy + Winh - YM - dy; sprintf(buf, "Lap: %d/%d", car->_laps, s->_totLaps); GfuiPrintString(buf, grDefaultClr, GFUI_FONT_LARGE_C, x, y, GFUI_ALIGN_HR_VB); x = Winx + Winw / 2; sprintf(buf, "%s", car->_name); GfuiPrintString(buf, grDefaultClr, GFUI_FONT_LARGE_C, x, y, GFUI_ALIGN_HC_VB); if (car->_fuel < 5.0) { clr = grRed; } else { clr = grWhite; } grDrawGauge(XM, 20.0, 80.0, clr, grBlack, car->_fuel / car->_tank, "F"); grDrawGauge(XM + 15, 20.0, 80.0, grRed, grGreen, (tdble)(car->_dammage) / grMaxDammage, "D"); x = Winx + Winw - XM; dy = GfuiFontHeight(GFUI_FONT_LARGE_C); y = YM + dy; sprintf(buf, "%3d km/h", abs((int)(car->_speed_x * 3.6))); GfuiPrintString(buf, grDefaultClr, GFUI_FONT_BIG_C, x, y, GFUI_ALIGN_HR_VB); y = YM; sprintf(buf, "%s", gearStr[car->_gear+car->_gearOffset]); GfuiPrintString(buf, grDefaultClr, GFUI_FONT_LARGE_C, x, y, GFUI_ALIGN_HR_VB); grDispEngineLeds (car, Winx + Winw - XM, YM + dy + GfuiFontHeight (GFUI_FONT_BIG_C), ALIGN_RIGHT, 0); }
void cGrBoard::grDispCounterBoard2(tCarElt *car) { int index; tgrCarInstrument *curInst; tdble val; char buf[32]; index = car->index; /* current car's index */ curInst = &(grCarInfo[index].instrument[0]); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ; glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBindTexture(GL_TEXTURE_2D, curInst->texture->getTextureHandle()); glCallList(curInst->CounterList); glBindTexture(GL_TEXTURE_2D, 0); val = (*(curInst->monitored) - curInst->minValue) / curInst->maxValue; if (val > 1.0) { val = 1.0; } else if (val < 0.0) { val = 0.0; } val = curInst->minAngle + val * curInst->maxAngle; RELAXATION(val, curInst->prevVal, 30); glPushMatrix(); glTranslatef(curInst->needleXCenter, curInst->needleYCenter, 0); glRotatef(val, 0, 0, 1); glCallList(curInst->needleList); glPopMatrix(); GfuiPrintString((char*)(gearStr[car->_gear+car->_gearOffset]), grRed, GFUI_FONT_LARGE_C, (int)curInst->digitXCenter, (int)(curInst->digitYCenter), GFUI_ALIGN_HC_VB); curInst = &(grCarInfo[index].instrument[1]); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ; glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBindTexture(GL_TEXTURE_2D, curInst->texture->getTextureHandle()); glCallList(curInst->CounterList); glBindTexture(GL_TEXTURE_2D, 0); val = (*(curInst->monitored) - curInst->minValue) / curInst->maxValue; if (val > 1.0) { val = 1.0; } else if (val < 0.0) { val = 0.0; } val = curInst->minAngle + val * curInst->maxAngle; RELAXATION(val, curInst->prevVal, 30); glPushMatrix(); glTranslatef(curInst->needleXCenter, curInst->needleYCenter, 0); glRotatef(val, 0, 0, 1); glCallList(curInst->needleList); glPopMatrix(); if (curInst->digital) { // Do not add "%3d" or something, because the digital font DOES NOT SUPPORT BLANKS!!!! sprintf(buf, "%d", abs((int)(car->_speed_x * 3.6))); GfuiPrintString(buf, grBlue, GFUI_FONT_DIGIT, (int)curInst->digitXCenter, (int)(curInst->digitYCenter), GFUI_ALIGN_HC_VB); } if (counterFlag == 1){ grDispMisc(car); } }
void cGrBoard::grDispLeaderBoard(tCarElt *car, tSituation *s) { int x, x2, y, i, j; char buf[256]; int maxi = MIN(leaderNb, s->_ncars); float *clr; int dy; int drawCurrent; int drawLaps = leaderFlag - 1; int current = 0; for (i = 0; i < s->_ncars; i++) { if (car == s->cars[i]) { current = i; break; } } x = Winx + 5; x2 = Winx + 170; y = Winy + 10; dy = GfuiFontHeight(GFUI_FONT_SMALL_C); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ; glBegin(GL_QUADS); glColor4f(0.1, 0.1, 0.1, 0.8); glVertex2f(x, Winy + 5); glVertex2f(Winx + 180, Winy + 5); glVertex2f(Winx + 180, y + dy * (maxi + drawLaps)); glVertex2f(x, y + dy * (maxi + drawLaps)); glEnd(); glDisable(GL_BLEND); if (current + 1 > maxi) { drawCurrent = 1; } else { drawCurrent = 0; } for (j = maxi; j > 0; j--) { if (drawCurrent) { i = current + 1; drawCurrent = 0; } else { i = j; } if (i == current + 1) { clr = grCarInfo[car->index].iconColor; drawCurrent = 0; } else { clr = grWhite; } sprintf(buf, "%3d: %s", i, s->cars[i-1]->_name); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); if (s->cars[i-1]->_state & RM_CAR_STATE_DNF) { GfuiPrintString(" out", grRed, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); } else if (s->cars[i-1]->_timeBehindLeader == 0) { if (i != 1) { GfuiPrintString(" --:--", clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); } else { grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, s->cars[i-1]->_curTime, 0); } } else { if (i == 1) { grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, s->cars[i-1]->_curTime, 0); } else { if (s->cars[i-1]->_lapsBehindLeader == 0) { grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, s->cars[i-1]->_timeBehindLeader, 1); } else { if (s->cars[i-1]->_lapsBehindLeader > 1) { sprintf(buf, "+%3d Laps", s->cars[i-1]->_lapsBehindLeader); } else { sprintf(buf, "+%3d Lap", s->cars[i-1]->_lapsBehindLeader); } GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); } } } y += dy; } if (drawLaps) { GfuiPrintString(" Lap:", grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); sprintf(buf, "%d / %d", s->cars[0]->_laps, s->_totLaps); GfuiPrintString(buf, grWhite, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); } }
void cGrBoard::grDispCarBoard2(tCarElt *car, tSituation *s) { int x, x2, x3, y; char buf[256]; float *clr; int dy, dy2, dx; int lines, i; x = 10; x2 = 110; x3 = 170; dy = GfuiFontHeight(GFUI_FONT_MEDIUM_C); dy2 = GfuiFontHeight(GFUI_FONT_SMALL_C); y = Winy + Winh - dy - 5; sprintf(buf, "%d/%d - %s", car->_pos, s->_ncars, car->_name); dx = GfuiFontWidth(GFUI_FONT_MEDIUM_C, buf); dx = MAX(dx, (x3-x)); lines = 6; for (i = 0; i < 4; i++) { if (car->ctrl.msg[i]) { lines++; } } glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ; glBegin(GL_QUADS); glColor4f(0.1, 0.1, 0.1, 0.8); glVertex2f(x-5, y + dy); glVertex2f(x+dx+5, y + dy); glVertex2f(x+dx+5, y-5 - dy2 * lines); glVertex2f(x-5, y-5 - dy2 * lines); glEnd(); glDisable(GL_BLEND); GfuiPrintString(buf, grCarInfo[car->index].iconColor, GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB); y -= dy; dy = GfuiFontHeight(GFUI_FONT_SMALL_C); GfuiPrintString("Fuel:", grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); if (car->_fuel < 5.0) { clr = grRed; } else { clr = grWhite; } sprintf(buf, "%.1f l", car->_fuel); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); y -= dy; clr = grWhite; GfuiPrintString("Laps:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); sprintf(buf, "%d / %d", car->_laps, s->_totLaps); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); y -= dy; GfuiPrintString("Best:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_bestLapTime, 0); grWriteTime(clr, GFUI_FONT_SMALL_C, x3, y, car->_deltaBestLapTime, 1); y -= dy; GfuiPrintString("Time:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_curLapTime, 0); y -= dy; if (car->_pos != 1) { sprintf(buf, "<- %s", s->cars[car->_pos - 2]->_name); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); if (s->cars[car->_pos - 2]->_laps == car->_laps) { grWriteTime(clr, GFUI_FONT_SMALL_C, x3, y, s->cars[car->_pos - 2]->_curTime-car->_curTime, 1); } else { GfuiPrintString(" --:--", clr, GFUI_FONT_SMALL_C, x3, y, GFUI_ALIGN_HR_VB); } } else { GfuiPrintString("<- ", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); GfuiPrintString(" --:--", clr, GFUI_FONT_SMALL_C, x3, y, GFUI_ALIGN_HR_VB); } y -= dy; if (car->_pos != s->_ncars) { sprintf(buf, "-> %s", s->cars[car->_pos]->_name); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); if (s->cars[car->_pos]->_laps == car->_laps) { grWriteTime(clr, GFUI_FONT_SMALL_C, x3, y, s->cars[car->_pos]->_curTime-car->_curTime, 1); } else { GfuiPrintString(" --:--", clr, GFUI_FONT_SMALL_C, x3, y, GFUI_ALIGN_HR_VB); } } else { GfuiPrintString("-> ", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); GfuiPrintString(" --:--", clr, GFUI_FONT_SMALL_C, x3, y, GFUI_ALIGN_HR_VB); } y -= dy; for (i = 0; i < 4; i++) { if (car->ctrl.msg[i]) { GfuiPrintString(car->ctrl.msg[i], car->ctrl.msgColor, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); y -= dy; } } }
void cGrBoard::grDispCarBoard1(tCarElt *car, tSituation *s) { int x, x2, y; char buf[256]; float *clr; int dy, dy2, dx; x = 10; x2 = 110; dy = GfuiFontHeight(GFUI_FONT_MEDIUM_C); dy2 = GfuiFontHeight(GFUI_FONT_SMALL_C); y = Winy + Winh - dy - 5; sprintf(buf, "%d/%d - %s", car->_pos, s->_ncars, car->_name); dx = GfuiFontWidth(GFUI_FONT_MEDIUM_C, buf); dx = MAX(dx, (x2-x)); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ; glBegin(GL_QUADS); glColor4f(0.1, 0.1, 0.1, 0.8); glVertex2f(x-5, y + dy); glVertex2f(x+dx+5, y + dy); glVertex2f(x+dx+5, y-5 - dy2 * 8 /* lines */); glVertex2f(x-5, y-5 - dy2 * 8 /* lines */); glEnd(); glDisable(GL_BLEND); GfuiPrintString(buf, grCarInfo[car->index].iconColor, GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB); y -= dy; dy = GfuiFontHeight(GFUI_FONT_SMALL_C); GfuiPrintString("Fuel:", grWhite, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); if (car->_fuel < 5.0) { clr = grRed; } else { clr = grWhite; } sprintf(buf, "%.1f l", car->_fuel); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); y -= dy; if (car->_state & RM_CAR_STATE_BROKEN) { clr = grRed; } else { clr = grWhite; } GfuiPrintString("Damage:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); sprintf(buf, "%d", car->_dammage); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); y -= dy; clr = grWhite; GfuiPrintString("Laps:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); sprintf(buf, "%d / %d", car->_laps, s->_totLaps); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); y -= dy; GfuiPrintString("Total:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, s->currentTime, 0); y -= dy; GfuiPrintString("Curr:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_curLapTime, 0); y -= dy; GfuiPrintString("Last:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_lastLapTime, 0); y -= dy; GfuiPrintString("Best:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); grWriteTime(clr, GFUI_FONT_SMALL_C, x2, y, car->_bestLapTime, 0); y -= dy; GfuiPrintString("Top Speed:", clr, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB); sprintf(buf, "%d", (int)(car->_topSpeed * 3.6)); GfuiPrintString(buf, clr, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HR_VB); y -= dy; }