Пример #1
0
GfuiMenuScreen::~GfuiMenuScreen()
{
	closeXMLDescriptor();
	if (m_priv->menuHdle)
		GfuiScreenRelease(m_priv->menuHdle);
	delete m_priv;
}
Пример #2
0
// 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];
}
Пример #3
0
void
ReScreenShutdown(void)
{
    if (reScreenHandle) {
	GfuiScreenRelease(reScreenHandle);
	reScreenHandle = 0;
    }
}
Пример #4
0
void
RmScreenShutdown()
{
    if (rmScreenHandle) {
		GfuiScreenRelease(rmScreenHandle);
		rmScreenHandle = 0;
    }
}
Пример #5
0
void
RmShutdownLoadingScreen(void)
{
    if (menuHandle) {
	GfuiScreenRelease(menuHandle);
	menuHandle = 0;
    }
}
Пример #6
0
static void rmtsDeactivate(void *screen)
{
	GfuiScreenRelease(scrHandle);

	GfDirFreeList(CategoryList, rmtsFreeLists, true, true);
	if (screen) {
		GfuiScreenActivate(screen);
	}
}
Пример #7
0
static void
rmChgQualifScreen(void *vprc)
{
    void		*prevScr = rmScrHdle;
    tRaceCall 	*prc = (tRaceCall*)vprc;

    rmQualifResults(prc->prevHdle, prc->info, prc->title, prc->start);
    GfuiScreenRelease(prevScr);
}
Пример #8
0
static void
rmChgStandingScreen(void *vprc)
{
    void		*prevScr = rmScrHdle;
    tRaceCall 	*prc = (tRaceCall*)vprc;

    RmShowStandings(prc->prevHdle, prc->info, prc->start);
    GfuiScreenRelease(prevScr);
}
Пример #9
0
static void
rmChgPracticeScreen(void *vprc)
{
    void		*prevScr = rmScrHdle;
    tRaceCall 	*prc = (tRaceCall*)vprc;

    rmPracticeResults(prc->prevHdle, prc->info, prc->start);
    GfuiScreenRelease(prevScr);
}
Пример #10
0
static void
rmrpDeactivate(void *screen)
{
    GfuiScreenRelease(scrHandle);
    
    if (screen) {
	GfuiScreenActivate(screen);
    }
}
Пример #11
0
static void
rmdsDeactivate(void *screen)
{
    rmFreeDrvList();    
    GfuiScreenRelease(scrHandle);
    
    if (screen) {
	GfuiScreenActivate(screen);
    }
}
Пример #12
0
/** 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;
}
Пример #14
0
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;
}
Пример #15
0
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;
}
Пример #16
0
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;
    }
}
Пример #17
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();
}
Пример #18
0
/** 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);
}
Пример #19
0
/** 
    @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();
}
Пример #20
0
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;
}
Пример #21
0
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);
}
Пример #22
0
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);
}
Пример #23
0
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;
}
Пример #24
0
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);
}
Пример #25
0
/**
 * 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);
}
Пример #26
0
// 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);
}