GfuiMenuScreen::~GfuiMenuScreen() { closeXMLDescriptor(); if (m_priv->menuHdle) GfuiScreenRelease(m_priv->menuHdle); delete m_priv; }
// Simpler front-end function for creating and activating the menu. static void* rmStopRaceMenu(const char *buttonRole1, void *screen1, const char *buttonRole2, void *screen2, const char *buttonRole3 = 0, void *screen3 = 0, const char *buttonRole4 = 0, void *screen4 = 0, const char *buttonRole5 = 0, void *screen5 = 0) { const tButtonDesc aButtons[5] = { { buttonRole1, screen1 }, { buttonRole2, screen2 }, { buttonRole3, screen3 }, { buttonRole4, screen4 }, { buttonRole5, screen5 } }; int nButtons = 2; if (buttonRole3 && screen3) { nButtons++; if (buttonRole4 && screen4) { nButtons++; if (buttonRole5 && screen5) nButtons++; } } if (QuitHdle[nButtons-1]) GfuiScreenRelease(QuitHdle[nButtons-1]); QuitHdle[nButtons-1] = rmStopRaceMenu(aButtons, nButtons, nButtons-1); return QuitHdle[nButtons-1]; }
void ReScreenShutdown(void) { if (reScreenHandle) { GfuiScreenRelease(reScreenHandle); reScreenHandle = 0; } }
void RmScreenShutdown() { if (rmScreenHandle) { GfuiScreenRelease(rmScreenHandle); rmScreenHandle = 0; } }
void RmShutdownLoadingScreen(void) { if (menuHandle) { GfuiScreenRelease(menuHandle); menuHandle = 0; } }
static void rmtsDeactivate(void *screen) { GfuiScreenRelease(scrHandle); GfDirFreeList(CategoryList, rmtsFreeLists, true, true); if (screen) { GfuiScreenActivate(screen); } }
static void rmChgQualifScreen(void *vprc) { void *prevScr = rmScrHdle; tRaceCall *prc = (tRaceCall*)vprc; rmQualifResults(prc->prevHdle, prc->info, prc->title, prc->start); GfuiScreenRelease(prevScr); }
static void rmChgStandingScreen(void *vprc) { void *prevScr = rmScrHdle; tRaceCall *prc = (tRaceCall*)vprc; RmShowStandings(prc->prevHdle, prc->info, prc->start); GfuiScreenRelease(prevScr); }
static void rmChgPracticeScreen(void *vprc) { void *prevScr = rmScrHdle; tRaceCall *prc = (tRaceCall*)vprc; rmPracticeResults(prc->prevHdle, prc->info, prc->start); GfuiScreenRelease(prevScr); }
static void rmrpDeactivate(void *screen) { GfuiScreenRelease(scrHandle); if (screen) { GfuiScreenActivate(screen); } }
static void rmdsDeactivate(void *screen) { rmFreeDrvList(); GfuiScreenRelease(scrHandle); if (screen) { GfuiScreenActivate(screen); } }
/** Activate a screen and make it current plus release the current screen. @ingroup gui @param screen Screen to activate @warning The current screen at the call time is deactivated. */ void GfuiScreenReplace(void *screen) { tGfuiScreen *oldScreen = GfuiScreen; if (oldScreen) { GfuiScreenRelease(oldScreen); } GfuiScreenActivate(screen); }
int ReRacemanMenu(void) { char *str; void *params = ReInfo->params; if (racemanMenuHdle) { GfuiScreenRelease(racemanMenuHdle); } racemanMenuHdle = GfuiScreenCreateEx(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0); if (str) { GfuiScreenAddBgImg(racemanMenuHdle, str); } GfuiMenuDefaultKeysAdd(racemanMenuHdle); str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, 0); if (str) { GfuiTitleCreate(racemanMenuHdle, str, strlen(str)); } GfuiMenuButtonCreate(racemanMenuHdle, "New Race", "Start a New Race", NULL, ReStartNewRace); GfuiMenuButtonCreate(racemanMenuHdle, "Configure Race", "Configure The Race", NULL, reConfigureMenu); /* GfuiMenuButtonCreate(racemanMenuHdle, */ /* "Configure Players", "Players configuration menu", */ /* TorcsDriverMenuInit(racemanMenuHdle), GfuiScreenActivate); */ if (GfParmGetEltNb(params, RM_SECT_TRACKS) > 1) { GfuiMenuButtonCreate(racemanMenuHdle, "Load", "Load a Previously Saved Game", racemanMenuHdle, reLoadMenu); } GfuiMenuBackQuitButtonCreate(racemanMenuHdle, "Back to Main", "Return to previous Menu", ReInfo->_reMenuScreen, GfuiScreenActivate); GfuiScreenActivate(racemanMenuHdle); return RM_ASYNC | RM_NEXT_STEP; }
int ReNewTrackMenu(void) { void *params = ReInfo->params; void *results = ReInfo->results; if (newTrackMenuHdle) { GfuiScreenRelease(newTrackMenuHdle); } newTrackMenuHdle = GfuiScreenCreateEx(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); const char* str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0); if (str) { GfuiScreenAddBgImg(newTrackMenuHdle, str); } str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, ""); GfuiTitleCreate(newTrackMenuHdle, str, strlen(str)); GfuiMenuDefaultKeysAdd(newTrackMenuHdle); sprintf(buf, "Race Day #%d/%d on %s", (int)GfParmGetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1), GfParmGetEltNb(params, RM_SECT_TRACKS), ReInfo->track->name); GfuiLabelCreateEx(newTrackMenuHdle, buf, red, GFUI_FONT_MEDIUM_C, 320, 420, GFUI_ALIGN_HC_VB, 50); GfuiMenuButtonCreate(newTrackMenuHdle, "Start Event", "Start The Current Race", NULL, reStateManage); GfuiMenuButtonCreate(newTrackMenuHdle, "Abandon", "Abandon The Race", ReInfo->_reMenuScreen, GfuiScreenActivate); GfuiAddKey(newTrackMenuHdle, 27, "Abandon", ReInfo->_reMenuScreen, GfuiScreenActivate, NULL); GfuiScreenActivate(newTrackMenuHdle); return RM_ASYNC | RM_NEXT_STEP; }
void * ReResScreenInit(void) { int i; int y, dy; static const char *title[3] = {"Practice", "Qualifications", "Race"}; if (reResScreenHdle) { GfuiScreenRelease(reResScreenHdle); } reResScreenHdle = GfuiScreenCreateEx(bgcolor, 0, reResScreenActivate, 0, reResScreenShutdown, 0); GfuiTitleCreate(reResScreenHdle, title[ReInfo->s->_raceType], strlen(title[ReInfo->s->_raceType])); const char* img = GfParmGetStr(ReInfo->params, RM_SECT_HEADER, RM_ATTR_RUNIMG, 0); if (img) { GfuiScreenAddBgImg(reResScreenHdle, img); } reAddResKeys(); reResTitleId = GfuiLabelCreateEx(reResScreenHdle, "", red, GFUI_FONT_LARGE_C, 320, 420, GFUI_ALIGN_HC_VB, 50); y = 400; dy = 378 / LINES; for (i = 0; i < LINES; i++) { FREEZ(reResMsg[i]); reResMsgClr[i] = 0; reResMsgId[i] = GfuiLabelCreateEx(reResScreenHdle, "", white, GFUI_FONT_MEDIUM_C, 20, y, GFUI_ALIGN_HL_VB, 120); y -= dy; } reCurLine = 0; return reResScreenHdle; }
void RmLoadingScreenShutdown(void) { if (HScreen) { for (int i = 0; i < NTextLines; i++) { free(FGColors[i]); if (TextLines[i]) free(TextLines[i]); } freez(FGColors); freez(TextLines); freez(TextLineIds); GfuiScreenRelease(HScreen); HScreen = 0; } }
static void ShowWaitingToConnectScreen() { GfLogTrace("Entering Network Wait Connection menu.\n"); if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback) NULL, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkwaitconnectmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiScreenActivate(racemanMenuHdle); GfuiApp().eventLoop().postRedisplay(); }
/** File selection @param vs Pointer on tRmFileSelect structure (cast to void) @return none */ void RmFileSelect(void *vs) { tFList *FileCur; rmFs = (tRmFileSelect*)vs; if (scrHandle) { GfuiScreenRelease(scrHandle); } scrHandle = GfuiScreenCreateEx((float*)NULL, NULL, rmActivate, NULL, (tfuiCallback)NULL, 1); GfuiScreenAddBgImg(scrHandle, "data/img/splash-filesel.png"); GfuiTitleCreate(scrHandle, rmFs->title, 0); /* Scroll List containing the File list */ fileScrollList = GfuiScrollListCreate(scrHandle, GFUI_FONT_MEDIUM_C, 120, 80, GFUI_ALIGN_HC_VB, 400, 310, GFUI_SB_RIGHT, NULL, rmClickOnFile); FileList = GfDirGetList(rmFs->path); if (FileList == NULL) { GfuiScreenActivate(rmFs->prevScreen); return; } FileSelected = FileList; FileCur = FileList; do { FileCur = FileCur->next; GfuiScrollListInsertElement(scrHandle, fileScrollList, FileCur->name, 1000, (void*)FileCur); } while (FileCur != FileList); /* Bottom buttons */ GfuiButtonCreate(scrHandle, "Select", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmSelect, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmDeactivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); /* Default menu keyboard actions */ GfuiMenuDefaultKeysAdd(scrHandle); GfuiScreenActivate(scrHandle); }
/** @ingroup racemantools @param title Screen title. @param bgimg Optionnal backgrounf image (0 for no img). @return None. */ void RmLoadingScreenStart(char *title, char *bgimg) { int i; int y; if (GfuiScreenIsActive(menuHandle)) { /* Already active */ return; } if (menuHandle) { GfuiScreenRelease(menuHandle); } menuHandle = GfuiScreenCreateEx(black, NULL, NULL, NULL, rmDeativate, 0); GfuiTitleCreate(menuHandle, title, strlen(title)); /* create 20 lines of text */ for (i = 0, y = 400; i < TEXTLINES; i++, y -= 16) { white[i][0] = white[i][1] = white[i][2] = 1.0; white[i][3] = (float)i * 0.0421 + 0.2; rmTextId[i] = GfuiLabelCreateEx(menuHandle, "", white[i], GFUI_FONT_MEDIUM_C, 60, y, GFUI_ALIGN_HL_VB, 100); if (rmTextLines[i]) { /* free old text */ free(rmTextLines[i]); rmTextLines[i] = NULL; } } rmCurText = 0; if (bgimg) { GfuiScreenAddBgImg(menuHandle, bgimg); } GfuiScreenActivate(menuHandle); GfuiDisplay(); }
void * exitMenuInit(void *menu, void *menuHandle) { if (menuHandle) { GfuiScreenRelease(menuHandle); } menuHandle = GfuiMenuScreenCreate("Quit ?"); GfuiScreenAddBgImg(menuHandle, "data/img/splash-quit.png"); GfuiMenuButtonCreate(menuHandle, "No, Back to Game", "Return to TORCS", menu, GfuiScreenActivate); GfuiMenuButtonCreate(menuHandle, "Yes, Let's Quit", "Exit of TORCS", NULL, endofprog); return menuHandle; }
static void NetworkClientConnectMenu(void * /* dummy */) { GfLogTrace("Entering Network Client Connect menu.\n"); LookupPlayerSetup(g_strDriver,g_strCar); if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkclientconnectmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); g_IPEditId = GfuiMenuCreateEditControl(racemanMenuHdle, mparam, "IPAddrEdit", 0, 0, ChangeIP); char namebuf[255]; snprintf(namebuf, sizeof(namebuf), "%s", g_strDriver.c_str()); g_NameId = GfuiMenuCreateEditControl(racemanMenuHdle, mparam, "PlayerNameEdit", 0, 0, ChangeName); GfuiEditboxSetString(racemanMenuHdle, g_NameId, namebuf); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "ConnectButton", 0, RmNetworkClientMenu); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "BackButton", RmRaceSelectMenuHandle, GfuiScreenActivate); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiAddKey(racemanMenuHdle, GFUIK_ESCAPE, "Back to previous menu", RmRaceSelectMenuHandle, 0, GfuiScreenActivate); GfParmReleaseHandle(mparam); GfuiScreenActivate(racemanMenuHdle); }
void RmNetworkClientMenu(void * /* dummy */) { GfLogTrace("Entering Network Client menu.\n"); ShowWaitingToConnectScreen(); if (!NetGetClient()) { NetSetServer(false); NetSetClient(true); NetDriver driver; GetHumanDriver(driver,1); driver.client = true; driver.active = true; strcpy(driver.name,g_strDriver.c_str()); if (!NetGetClient()->ConnectToServer((char*)g_strHostIP.c_str(),SPEEDDREAMSPORT,&driver)) { //failed so back to connect menu NetworkClientConnectMenu(NULL); return; } //NetGetClient()->SendDriverInfoPacket(&driver); } if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)OnActivateNetworkClient, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkclientmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); GfuiMenuDefaultKeysAdd(racemanMenuHdle); RmSetRacemanMenuHandle(racemanMenuHdle); g_trackHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"trackname"); g_lapsHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"lapcountname"); g_catHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"carcatname"); g_OutlineId = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,"outlineimage"); //Show players for (int i = 0; i < MAXNETWORKPLAYERS; i++) { char buf[1024]; sprintf(buf,"ready%i",i); g_readystatus[i] = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,buf); GfuiVisibilitySet(racemanMenuHdle,g_readystatus[i],false); sprintf(buf,"driver%i",i); g_playerNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_playerNames[i],""); sprintf(buf,"car%i",i); g_carNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_carNames[i],""); } g_ReadyCheckboxId = GfuiMenuCreateCheckboxControl(racemanMenuHdle, mparam, "playerreadycheckbox", NULL, onClientPlayerReady); g_CarSetupButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "garage", racemanMenuHdle, rmCarSettingsMenu); g_DisconnectButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "disconnect", NULL,rmNetworkClientDisconnect); GfParmReleaseHandle(mparam); UpdateNetworkPlayers(); GfuiScreenActivate(racemanMenuHdle); GfuiApp().eventLoop().setRecomputeCB(ClientIdle); }
void* RmResScreenInit() { if (rmResScreenHdle) GfuiScreenRelease(rmResScreenHdle); tRmInfo* reInfo = LmRaceEngine().inData(); // Create screen, load menu XML descriptor and create static controls. rmResScreenHdle = GfuiScreenCreate(black, 0, rmResScreenActivate, 0, rmResScreenDeactivate, 0); void *hmenu = GfuiMenuLoad("raceblindscreen.xml"); GfuiMenuCreateStaticControls(rmResScreenHdle, hmenu); // Create variable main title (race session) label. rmResTitleId = GfuiMenuCreateLabelControl(rmResScreenHdle, hmenu, "Title"); // Create background image if any specified. const char* img = GfParmGetStr(reInfo->params, RM_SECT_HEADER, RM_ATTR_RUNIMG, 0); if (img) GfuiScreenAddBgImg(rmResScreenHdle, img); // Create variable subtitle (driver and race name, lap number) label. rmResSubTitleId = GfuiMenuCreateLabelControl(rmResScreenHdle, hmenu, "SubTitle"); // Create table header label. rmResHeaderId = GfuiMenuCreateLabelControl(rmResScreenHdle, hmenu, "Header"); // Get layout properties, except for nMaxResultRows (see below). const int yTopRow = (int)GfuiMenuGetNumProperty(hmenu, "yTopRow", 400); const int yRowShift = (int)GfuiMenuGetNumProperty(hmenu, "yRowShift", 20); // Allocate row info arrays, if not already done. if (!rmResRowLabelId) { // Load nMaxResultRows/colors only the first time (ignore any later change, // otherwize, we'd have to realloc the row info arrays). rmNMaxResRows = (int)GfuiMenuGetNumProperty(hmenu, "nMaxResultRows", 20); const GfuiColor cNormal = GfuiColor::build(GfuiMenuGetStrProperty(hmenu, "rowColorNormal", "0x0000FF")); const GfuiColor cHighlighted = GfuiColor::build(GfuiMenuGetStrProperty(hmenu, "rowColorHighlighted", "0x00FF00")); memcpy(rmColors[0], cNormal.toFloatRGBA(), sizeof(rmColors[0])); memcpy(rmColors[1], cHighlighted.toFloatRGBA(), sizeof(rmColors[1])); rmResRowLabelId = (int*)calloc(rmNMaxResRows, sizeof(int)); rmResRowText = (char**)calloc(rmNMaxResRows, sizeof(char*)); rmResRowColor = (float**)calloc(rmNMaxResRows, sizeof(float*)); } // Create result rows (1 label for each). int y = yTopRow; for (int i = 0; i < rmNMaxResRows; i++) { freez(rmResRowText[i]); rmResRowColor[i] = rmColors[0]; rmResRowLabelId[i] = GfuiMenuCreateLabelControl(rmResScreenHdle, hmenu, "Row", true, // from template "", GFUI_TPL_X, y, GFUI_TPL_FONTID, GFUI_TPL_WIDTH, GFUI_TPL_ALIGN, GFUI_TPL_MAXLEN, rmResRowColor[i]); y -= yRowShift; } // Close menu XML descriptor. GfParmReleaseHandle(hmenu); // Register keyboard shortcuts. GfuiAddKey(rmResScreenHdle, GFUIK_F1, "Help", rmResScreenHdle, GfuiHelpScreen, NULL); GfuiAddKey(rmResScreenHdle, GFUIK_F12, "Screen shot", NULL, GfuiScreenShot, NULL); GfuiAddKey(rmResScreenHdle, GFUIK_ESCAPE, "Stop current race", (void*)RE_STATE_RACE_STOP, rmApplyState, NULL); GfuiAddKey(rmResScreenHdle, 'q', GFUIM_ALT, "Quit game now, save nothing", (void*)RE_STATE_EXIT, rmApplyState, NULL); // Initialize current result row. rmCurRowIndex = 0; return rmResScreenHdle; }
void RmNextEventMenu(void) { char buf[128]; tRmInfo* reInfo = LmRaceEngine().inData(); void *params = reInfo->params; void *results = reInfo->results; int raceNumber; int xx; if (rmScrHandle) { GfuiScreenRelease(rmScrHandle); } GfLogTrace("Entering Next Event menu\n"); // Create screen, load menu XML descriptor and create static controls. rmScrHandle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); void *menuXMLDescHdle = GfuiMenuLoad("racenexteventmenu.xml"); GfuiMenuCreateStaticControls(rmScrHandle, menuXMLDescHdle); // Create background image from race params. const char* pszBGImg = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0); if (pszBGImg) { GfuiScreenAddBgImg(rmScrHandle, pszBGImg); } // Create variable title label from race params. int titleId = GfuiMenuCreateLabelControl(rmScrHandle, menuXMLDescHdle, "TitleLabel"); char pszTitle[128]; if (LmRaceEngine().race()->getManager()->hasSubFiles()) { const char* pszGroup = GfParmGetStr(reInfo->params, RM_SECT_HEADER, RM_ATTR_NAME, "<no group>"); snprintf(pszTitle, sizeof(pszTitle), "%s - %s", reInfo->_reName, pszGroup); } else snprintf(pszTitle, sizeof(pszTitle), "%s", reInfo->_reName); GfuiLabelSetText(rmScrHandle, titleId, pszTitle); // Calculate which race of the series this is raceNumber = 1; for (xx = 1; xx < (int)GfParmGetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1); ++xx) { snprintf(buf, sizeof(buf), "%s/%d", RM_SECT_TRACKS, xx); if (!strcmp( GfParmGetStr(reInfo->params, buf, RM_ATTR_NAME, "free"), "free") == 0) ++raceNumber; } // Create variable subtitle label from race params. snprintf(buf, sizeof(buf), "Race Day #%d/%d at %s", raceNumber, (int)GfParmGetNum(params, RM_SECT_TRACKS, RM_ATTR_NUMBER, NULL, -1 ) >= 0 ? (int)GfParmGetNum(params, RM_SECT_TRACKS, RM_ATTR_NUMBER, NULL, -1 ) : GfParmGetEltNb(params, RM_SECT_TRACKS), reInfo->track->name); int subTitleId = GfuiMenuCreateLabelControl(rmScrHandle, menuXMLDescHdle, "SubTitleLabel"); GfuiLabelSetText(rmScrHandle, subTitleId, buf); // Create Start and Abandon buttons. GfuiMenuCreateButtonControl(rmScrHandle, menuXMLDescHdle, "StartButton", NULL, rmStateManage); GfuiMenuCreateButtonControl(rmScrHandle, menuXMLDescHdle, "AbandonButton", RmRaceSelectMenuHandle, GfuiScreenActivate); // Close menu XML descriptor. GfParmReleaseHandle(menuXMLDescHdle); // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(rmScrHandle); GfuiAddKey(rmScrHandle, GFUIK_RETURN, "Start Event", NULL, rmStateManage, NULL); GfuiAddKey(rmScrHandle, GFUIK_ESCAPE, "Abandon", RmRaceSelectMenuHandle, GfuiScreenActivate, NULL); // Activate screen. GfuiScreenActivate(rmScrHandle); }
/** * This function shows the pit menu and let the user fill in the amount * of fuel he wants and the number of damage he want to repair * * @param car The current car (pitcmd is modified on user decisions) * @param s The current situation (used to calculate the remaining time) * @param callback The function which is called after the user made a decision */ void RmPitMenuStart(tCarElt *car, tSituation *s, tfuiCallback callback) { char buf[128]; rmCar = car; rmCallback = callback; if (menuHandle) GfuiScreenRelease(menuHandle); GfLogInfo("Entering Pit menu\n"); // Create screen, load menu XML descriptor and create static controls. menuHandle = GfuiScreenCreate(NULL, NULL, NULL, NULL, NULL, 1); void *menuXMLDescHdle = GfuiMenuLoad("pitmenu.xml"); GfuiMenuCreateStaticControls(menuHandle, menuXMLDescHdle); // Create variable title label. int titleId = GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "titlelabel"); snprintf(buf, sizeof(buf), "Pit Stop for %s", car->_name); GfuiLabelSetText(menuHandle, titleId, buf); // Create labels for remaining laps and remaining fuel. int remainLapsTimeId = GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remaininglapstimelabel"); if( s->_totTime > 0 && s->_totTime > s->currentTime ) // Timed part of the timed session { GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remainingtimelabel"); if( s->_extraLaps > 0) snprintf(buf, sizeof(buf), "%s + %d laps", GfTime2Str( s->_totTime - s->currentTime, NULL, true, 0 ), s->_extraLaps); else snprintf(buf, sizeof(buf), "%s", GfTime2Str( s->_totTime - s->currentTime, NULL, true, 0 ) ); } else { GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remaininglapslabel"); snprintf(buf, sizeof(buf), "%d", car->_remainingLaps); //Laps tot drive to win the race } GfuiLabelSetText(menuHandle, remainLapsTimeId, buf); int remainFuelId = GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remainingfuellabel"); snprintf(buf, sizeof(buf), "%.1f", car->_fuel); GfuiLabelSetText(menuHandle, remainFuelId, buf); // Create edit boxes for fuel and repair amounts. fuelId = GfuiMenuCreateEditControl(menuHandle, menuXMLDescHdle, "fuelamountedit", NULL, NULL, rmUpdtFuel); snprintf(buf, sizeof(buf), "%.1f", car->pitcmd.fuel); GfuiEditboxSetString(menuHandle, fuelId, buf); repairId = GfuiMenuCreateEditControl(menuHandle, menuXMLDescHdle, "repairamountedit", NULL, NULL, rmUpdtRepair); snprintf(buf, sizeof(buf), "%d", (int)car->pitcmd.repair); GfuiEditboxSetString(menuHandle, repairId, buf); // Create Repair and Stop&Go buttons. GfuiMenuCreateButtonControl(menuHandle, menuXMLDescHdle, "repairbutton", NULL, rmRepair); GfuiMenuCreateButtonControl(menuHandle, menuXMLDescHdle, "stopgobutton", NULL, rmStopAndGo); // Close menu XML descriptor. GfParmReleaseHandle(menuXMLDescHdle); // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(menuHandle); // Activate the created screen. GfuiScreenActivate(menuHandle); }
// Host on-line race menu. void RmNetworkHostMenu(void * /* dummy */) { GfLogTrace("Entering Network Host menu.\n"); if (!NetGetNetwork()) { NetSetServer(true); NetSetClient(false); if (!NetGetServer()->Start(SPEEDDREAMSPORT)) { NetSetServer(false); return; } } if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)OnActivateNetworkHost, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkhostmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); RmSetRacemanMenuHandle(racemanMenuHdle); NetworkRaceInfo(); g_trackHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"trackname"); g_lapsHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"lapcountname"); g_catHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"carcatname"); g_OutlineId = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,"outlineimage"); //Show players for (int i = 0; i < MAXNETWORKPLAYERS; i++) { char buf[1024]; sprintf(buf,"ready%i",i); g_readystatus[i] = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,buf); GfuiVisibilitySet(racemanMenuHdle,g_readystatus[i],false); sprintf(buf,"driver%i",i); g_playerNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_playerNames[i],""); sprintf(buf,"car%i",i); g_carNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_carNames[i],""); } g_ReadyCheckboxId = GfuiMenuCreateCheckboxControl(racemanMenuHdle, mparam, "playerreadycheckbox", NULL, onHostPlayerReady); g_HostSettingsButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "networkhostsettings", racemanMenuHdle, rmNetworkHostSettingsMenu); GfuiEnable(racemanMenuHdle, g_HostSettingsButtonId, GFUI_DISABLE); g_RaceSetupId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "racesetup", racemanMenuHdle, RmConfigureRace); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "start race", NULL, ServerPrepareStartNetworkRace); g_CancelButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "cancel", NULL, rmNetworkServerDisconnect); GfParmReleaseHandle(mparam); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiAddKey(racemanMenuHdle, GFUIK_ESCAPE, "Back to previous menu", 0, 0, rmNetworkServerDisconnect); UpdateNetworkPlayers(); GfuiScreenActivate(racemanMenuHdle); }