/***************************************************************************
file : pitmenu.cpp
created : Mon Apr 24 18:16:37 CEST 2000
copyright : (C) 2000 by Eric Espie
email : torcs@free.fr
version : $Id: pitmenu.cpp,v 1.4 2005/08/11 19:43:35 berniw Exp $
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/** @file
Pit menu command
@ingroup racemantools
@author Eric Espie
@version $Id: pitmenu.cpp,v 1.4 2005/08/11 19:43:35 berniw Exp $
*/
#include
#ifdef WIN32
#include
#endif
#include
#include
static void *menuHandle = NULL;
static int fuelId;
static int repairId;
static tCarElt *rmCar;
static void
rmUpdtFuel(void * /* dummy */)
{
char *val;
char buf[32];
val = GfuiEditboxGetString(menuHandle, fuelId);
rmCar->pitcmd.fuel = (tdble)strtol(val, (char **)NULL, 0);
sprintf(buf, "%f", rmCar->pitcmd.fuel);
GfuiEditboxSetString(menuHandle, fuelId, buf);
}
static void
rmUpdtRepair(void * /* dummy */)
{
char *val;
char buf[32];
val = GfuiEditboxGetString(menuHandle, repairId);
rmCar->pitcmd.repair = strtol(val, (char **)NULL, 0);
sprintf(buf, "%d", rmCar->pitcmd.repair);
GfuiEditboxSetString(menuHandle, repairId, buf);
}
static tfuiCallback rmCallback;
static void *rmUserData;
static void
rmStopAndGo(void * /* dummy */)
{
rmCar->_pitStopType = RM_PIT_STOPANDGO;
rmCallback(rmUserData);
}
static void
rmRepair(void* /* dummy */)
{
rmCar->_pitStopType = RM_PIT_REPAIR;
rmCallback(rmUserData);
}
void
RmPitMenuStart(tCarElt *car, void *userdata, tfuiCallback callback)
{
char buf[256];
int y, x, dy;
rmCar = car;
if (menuHandle) {
GfuiScreenRelease(menuHandle);
}
menuHandle = GfuiMenuScreenCreate("Pit Stop Info");
x = 80;
y = 380;
sprintf(buf, "Driver: %s", car->_name);
GfuiLabelCreate(menuHandle, buf, GFUI_FONT_LARGE_C, x, y, GFUI_ALIGN_HL_VB, 0);
dy = GfuiFontHeight(GFUI_FONT_LARGE_C) + 5;
y -= dy;
sprintf(buf, "Remaining Laps: %d", car->_remainingLaps);
GfuiLabelCreate(menuHandle, buf, GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
y -= dy;
sprintf(buf, "Remaining Fuel: %.1f l", car->_fuel);
GfuiLabelCreate(menuHandle, buf, GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
y -= dy;
GfuiLabelCreate(menuHandle, "Fuel amount (liters):", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
sprintf(buf, "%d", (int)car->pitcmd.fuel);
fuelId = GfuiEditboxCreate(menuHandle, buf, GFUI_FONT_MEDIUM_C,
x + GfuiFontWidth(GFUI_FONT_MEDIUM_C, "Fuel amount (liters):") + 20, y,
0, 10, NULL, (tfuiCallback)NULL, rmUpdtFuel);
y -= dy;
GfuiLabelCreate(menuHandle, "Repair amount:", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
sprintf(buf, "%d", (int)car->pitcmd.repair);
repairId = GfuiEditboxCreate(menuHandle, buf, GFUI_FONT_MEDIUM_C,
x + GfuiFontWidth(GFUI_FONT_MEDIUM_C, "Fuel amount (liters):") + 20, y,
0, 10, NULL, (tfuiCallback)NULL, rmUpdtRepair);
//GfuiMenuBackQuitButtonCreate(menuHandle, "Repair", "Return to race", userdata, callback);
GfuiButtonCreate(menuHandle, "Repair", GFUI_FONT_LARGE, 160, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP,
NULL, rmRepair, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
rmCallback = callback;
rmUserData = userdata;
GfuiButtonCreate(menuHandle, "Stop & Go", GFUI_FONT_LARGE, 480, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP,
NULL, rmStopAndGo, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
GfuiScreenActivate(menuHandle);
}