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::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 RmRaceParamMenu(void *vrp) { int y, x, x2, dy, dx; const int BUFSIZE = 1024; char buf[BUFSIZE]; rp = (tRmRaceParam*)vrp; snprintf(buf, BUFSIZE, "%s Options", rp->title); scrHandle = GfuiMenuScreenCreate(buf); GfuiScreenAddBgImg(scrHandle, "data/img/splash-raceopt.png"); x = 80; x2 = 240; y = 380; dx = 200; dy = GfuiFontHeight(GFUI_FONT_LARGE) + 5; if (rp->confMask & RM_CONF_RACE_LEN) { GfuiLabelCreate(scrHandle, "Race Distance (km):", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0); rmrpDistance = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", 0); if (rmrpDistance == 0) { strcpy(buf, "---"); rmrpLaps = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_LAPS, NULL, 25); } else { snprintf(buf, BUFSIZE, "%d", rmrpDistance); rmrpLaps = 0; } rmrpDistId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C, x + dx, y, 0, 8, NULL, (tfuiCallback)NULL, rmrpUpdDist); y -= dy; GfuiLabelCreate(scrHandle, "Laps:", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0); if (rmrpLaps == 0) { strcpy(buf, "---"); } else { snprintf(buf, BUFSIZE, "%d", rmrpLaps); } rmrpLapsId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C, x + dx, y, 0, 8, NULL, (tfuiCallback)NULL, rmrpUpdLaps); y -= dy; } if (rp->confMask & RM_CONF_DISP_MODE) { GfuiLabelCreate(scrHandle, "Display:", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0); GfuiGrButtonCreate(scrHandle, "data/img/arrow-left.png", "data/img/arrow-left.png", "data/img/arrow-left.png", "data/img/arrow-left-pushed.png", x2, y, GFUI_ALIGN_HL_VB, 1, (void*)0, rmChangeDisplayMode, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiGrButtonCreate(scrHandle, "data/img/arrow-right.png", "data/img/arrow-right.png", "data/img/arrow-right.png", "data/img/arrow-right-pushed.png", x2 + 150, y, GFUI_ALIGN_HL_VB, 1, (void*)1, rmChangeDisplayMode, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); if (!strcmp(GfParmGetStr(rp->param, rp->title, RM_ATTR_DISPMODE, RM_VAL_VISIBLE), RM_VAL_INVISIBLE)) { rmCurDispMode = 1; } else { rmCurDispMode = 0; } rmDispModeEditId = GfuiLabelCreate(scrHandle, rmCurDispModeList[rmCurDispMode], GFUI_FONT_MEDIUM_C, x2 + 35, y, GFUI_ALIGN_HL_VB, 20); y -= dy; } GfuiButtonCreate(scrHandle, "Accept", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmrpValidate, NULL, NULL, NULL); GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, rp->prevScreen, rmrpDeactivate, NULL, NULL, NULL); rmrpAddKeys(); GfuiScreenActivate(scrHandle); }
/** Interactive Drivers list selection @param vs Pointer on tRmDrvSelect structure (cast to void) @warning The race manager params are modified but not saved. */ void RmDriversSelect(void *vs) { tModList *list; tModList *curmod; char dname[256]; char *sp; char *cardllname; int i, index; tDrvElt *curDrv; int nCars, robotIdx; void *robhdle; struct stat st; char *carName; void *carhdle; int human; #define B_BASE 380 #define B_HT 30 ds = (tRmDrvSelect*)vs; GF_TAILQ_INIT(&DrvList); scrHandle = GfuiScreenCreateEx((float*)NULL, NULL, rmdsActivate, NULL, (tfuiCallback)NULL, 1); GfuiScreenAddBgImg(scrHandle, "data/img/splash-qrdrv.png"); GfuiTitleCreate(scrHandle, "Select Drivers", sizeof("Select Drivers")); GfuiLabelCreate(scrHandle, "Selected", GFUI_FONT_LARGE, 120, 400, GFUI_ALIGN_HC_VB, 0); GfuiLabelCreate(scrHandle, "Not Selected", GFUI_FONT_LARGE, 496, 400, GFUI_ALIGN_HC_VB, 0); selectedScrollList = GfuiScrollListCreate(scrHandle, GFUI_FONT_MEDIUM_C, 20, 80, GFUI_ALIGN_HL_VB, 200, 310, GFUI_SB_RIGHT, NULL, rmdsClickOnDriver); unselectedScrollList = GfuiScrollListCreate(scrHandle, GFUI_FONT_MEDIUM_C, 396, 80, GFUI_ALIGN_HL_VB, 200, 310, GFUI_SB_RIGHT, NULL, rmdsClickOnDriver); GfuiButtonCreate(scrHandle, "Accept", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmdsSelect, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, ds->prevScreen, rmdsDeactivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Move Up", GFUI_FONT_MEDIUM, 320, B_BASE, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, (void*)-1, rmMove, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Move Down", GFUI_FONT_MEDIUM, 320, B_BASE - B_HT, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, (void*)1, rmMove, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "(De)Select", GFUI_FONT_MEDIUM, 320, B_BASE - 2 * B_HT, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, (void*)0, rmSelectDeselect, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Set Focus", GFUI_FONT_MEDIUM, 320, B_BASE - 3 * B_HT, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmdsSetFocus, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); list = (tModList *)NULL; sprintf(buf, "%sdrivers", GetLibDir ()); GfModInfoDir(CAR_IDENT, buf, 1, &list); curmod = list; if (curmod != NULL) { do { curmod = curmod->next; for (i = 0; i < MAX_MOD_ITF; i++) { if (curmod->modInfo[i].name) { sp = strrchr(curmod->sopath, '/'); if (sp == NULL) { sp = curmod->sopath; } else { sp++; } strcpy(dname, sp); dname[strlen(dname) - strlen(DLLEXT) - 1] = 0; /* cut .so or .dll */ sprintf(buf, "%sdrivers/%s/%s.xml", GetLocalDir(), dname, dname); robhdle = GfParmReadFile(buf, GFPARM_RMODE_STD); if (!robhdle) { sprintf(buf, "drivers/%s/%s.xml", dname, dname); robhdle = GfParmReadFile(buf, GFPARM_RMODE_STD); } sprintf(path, "%s/%s/%d", ROB_SECT_ROBOTS, ROB_LIST_INDEX, curmod->modInfo[i].index); carName = GfParmGetStr(robhdle, path, ROB_ATTR_CAR, ""); if (strcmp(GfParmGetStr(robhdle, path, ROB_ATTR_TYPE, ROB_VAL_ROBOT), ROB_VAL_ROBOT)) { human = 1; } else { human = 0; } sprintf(path, "cars/%s/%s.xml", carName, carName); if (!stat(path, &st)) { carhdle = GfParmReadFile(path, GFPARM_RMODE_STD); if (carhdle) { curDrv = (tDrvElt*)calloc(1, sizeof(tDrvElt)); curDrv->index = curmod->modInfo[i].index; curDrv->dname = strdup(dname); curDrv->name = strdup(curmod->modInfo[i].name); curDrv->car = carhdle; if (human) { curDrv->human = 1; GF_TAILQ_INSERT_HEAD(&DrvList, curDrv, link); } else { curDrv->human = 0; GF_TAILQ_INSERT_TAIL(&DrvList, curDrv, link); } } else { GfOut("Driver %s not selected because car %s is not readable\n", curmod->modInfo[i].name, carName); } } else { GfOut("Driver %s not selected because car %s is not present\n", curmod->modInfo[i].name, carName); } GfParmReleaseHandle(robhdle); } } } while (curmod != list); } nbSelectedDrivers = 0; nbMaxSelectedDrivers = (int)GfParmGetNum(ds->param, RM_SECT_DRIVERS, RM_ATTR_MAXNUM, NULL, 0); nCars = GfParmGetEltNb(ds->param, RM_SECT_DRIVERS); index = 1; for (i = 1; i < nCars+1; i++) { sprintf(dname, "%s/%d", RM_SECT_DRIVERS, i); cardllname = GfParmGetStr(ds->param, dname, RM_ATTR_MODULE, ""); robotIdx = (int)GfParmGetNum(ds->param, dname, RM_ATTR_IDX, (char*)NULL, 0); curDrv = GF_TAILQ_FIRST(&DrvList); if (curDrv != NULL) { do { if ((curDrv->index == robotIdx) && (strcmp(curDrv->dname, cardllname) == 0)) { if (nbSelectedDrivers < nbMaxSelectedDrivers) { GfuiScrollListInsertElement(scrHandle, selectedScrollList, curDrv->name, index, (void*)curDrv); curDrv->sel = index++; nbSelectedDrivers++; } break; } } while ((curDrv = GF_TAILQ_NEXT(curDrv, link)) != NULL); } } curDrv = GF_TAILQ_FIRST(&DrvList); if (curDrv != NULL) { do { if (curDrv->sel == 0) { GfuiScrollListInsertElement(scrHandle, unselectedScrollList, curDrv->name, 1000, (void*)curDrv); } } while ((curDrv = GF_TAILQ_NEXT(curDrv, link)) != NULL); } GfuiLabelCreate(scrHandle, "Focused:", GFUI_FONT_MEDIUM, 320, B_BASE - 5 * B_HT, GFUI_ALIGN_HC_VB, 0); cardllname = GfParmGetStr(ds->param, RM_SECT_DRIVERS, RM_ATTR_FOCUSED, ""); robotIdx = (int)GfParmGetNum(ds->param, RM_SECT_DRIVERS, RM_ATTR_FOCUSEDIDX, (char*)NULL, 0); curDrv = GF_TAILQ_FIRST(&DrvList); if (curDrv != NULL) { do { if ((curDrv->index == robotIdx) && (strcmp(curDrv->dname, cardllname) == 0)) { break; } } while ((curDrv = GF_TAILQ_NEXT(curDrv, link)) != NULL); } if (curDrv == NULL) { curDrv = GF_TAILQ_FIRST(&DrvList); } if (curDrv == NULL) { FocDrvLabelId = GfuiLabelCreate(scrHandle, "", GFUI_FONT_MEDIUM_C, 320, B_BASE - 5 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); } else { FocDrvLabelId = GfuiLabelCreate(scrHandle, curDrv->name, GFUI_FONT_MEDIUM_C, 320, B_BASE - 5 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); } /* Picked Driver Info */ GfuiLabelCreate(scrHandle, "Driver:", GFUI_FONT_MEDIUM, 320, B_BASE - 7 * B_HT, GFUI_ALIGN_HC_VB, 0); PickDrvNameLabelId = GfuiLabelCreateEx(scrHandle, "", aColor, GFUI_FONT_MEDIUM_C, 320, B_BASE - 7 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); GfuiLabelCreate(scrHandle, "Car:", GFUI_FONT_MEDIUM, 320, B_BASE - 8 * B_HT, GFUI_ALIGN_HC_VB, 0); PickDrvCarLabelId = GfuiLabelCreateEx(scrHandle, "", aColor, GFUI_FONT_MEDIUM_C, 320, B_BASE - 8 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); GfuiLabelCreate(scrHandle, "Category:", GFUI_FONT_MEDIUM, 320, B_BASE - 9 * B_HT, GFUI_ALIGN_HC_VB, 0); PickDrvCategoryLabelId = GfuiLabelCreateEx(scrHandle, "", aColor, GFUI_FONT_MEDIUM_C, 320, B_BASE - 9 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); GfuiMenuDefaultKeysAdd(scrHandle); rmdsAddKeys(); GfuiScreenActivate(scrHandle); }
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; }