/*************************************************************************** file : graphconfig.cpp created : Sun Jun 9 16:30:25 CEST 2002 copyright : (C) 2001 by Eric Espie email : eric.espie@torcs.org version : $Id: graphconfig.cpp,v 1.5 2005/07/21 21:27:14 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 @author Eric Espie @version $Id: graphconfig.cpp,v 1.5 2005/07/21 21:27:14 berniw Exp $ */ #include #include #include #include #include #include "graphconfig.h" static void *scrHandle = NULL; static char buf[1024]; static int FovEditId; static int FovFactorValue = 100; static int SmokeEditId; static int SmokeValue = 300; static int SkidEditId; static int SkidValue = 20; static int LodFactorEditId; static tdble LodFactorValue = 1.0; static void ExitGraphicOptions(void *prevMenu) { GfuiScreenActivate(prevMenu); } static void SaveGraphicOptions(void *prevMenu) { sprintf(buf, "%s%s", GetLocalDir(), GR_PARAM_FILE); void * grHandle = GfParmReadFile(buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT); GfParmSetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_FOVFACT, "%", FovFactorValue); GfParmSetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_SMOKENB, NULL, SmokeValue); GfParmSetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_MAXSTRIPBYWHEEL, NULL, SkidValue); GfParmSetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_LODFACTOR, NULL, LodFactorValue); GfParmWriteFile(NULL, grHandle, "graph"); GfParmReleaseHandle(grHandle); ExitGraphicOptions(prevMenu); } static void ChangeFov(void * /* dummy */) { char *val; val = GfuiEditboxGetString(scrHandle, FovEditId); FovFactorValue = strtol(val, (char **)NULL, 0); sprintf(buf, "%d", FovFactorValue); GfuiEditboxSetString(scrHandle, FovEditId, buf); } static void ChangeLodFactor(void * /* dummy */) { char *val; val = GfuiEditboxGetString(scrHandle, LodFactorEditId); sscanf(val, "%g", &LodFactorValue); sprintf(buf, "%g", LodFactorValue); GfuiEditboxSetString(scrHandle, LodFactorEditId, buf); } static void ChangeSmoke(void * /* dummy */) { char *val; val = GfuiEditboxGetString(scrHandle, SmokeEditId); SmokeValue = strtol(val, (char **)NULL, 0); sprintf(buf, "%d", SmokeValue); GfuiEditboxSetString(scrHandle, SmokeEditId, buf); } static void ChangeSkid(void * /* dummy */) { char *val; val = GfuiEditboxGetString(scrHandle, SkidEditId); SkidValue = strtol(val, (char **)NULL, 0); sprintf(buf, "%d", SkidValue); GfuiEditboxSetString(scrHandle, SkidEditId, buf); } void * GraphMenuInit(void *prevMenu) { int x, y, x2, dy; /* screen already created */ if (scrHandle) { return scrHandle; } scrHandle = GfuiMenuScreenCreate("Graphic Configuration"); GfuiScreenAddBgImg(scrHandle, "data/img/splash-graphconf.png"); sprintf(buf, "%s%s", GetLocalDir(), GR_PARAM_FILE); void * grHandle = GfParmReadFile(buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT); x = 50; x2 = 200; y = 370; dy = 30; GfuiLabelCreate(scrHandle, "Visibility (%):", GFUI_FONT_MEDIUM, x, y, GFUI_ALIGN_HL_VB, 0); FovFactorValue = (int)GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_FOVFACT, "%", 100.0); sprintf(buf, "%d", FovFactorValue); FovEditId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C, x2+10, y, 100, 16, NULL, (tfuiCallback)NULL, ChangeFov); y -= dy; GfuiLabelCreate(scrHandle, "Smoke:", GFUI_FONT_MEDIUM, x, y, GFUI_ALIGN_HL_VB, 0); SmokeValue = (int)GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_SMOKENB, NULL, 300.0); sprintf(buf, "%d", SmokeValue); SmokeEditId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C, x2+10, y, 100, 16, NULL, (tfuiCallback)NULL, ChangeSmoke); y -= dy; GfuiLabelCreate(scrHandle, "Skid Marks:", GFUI_FONT_MEDIUM, x, y, GFUI_ALIGN_HL_VB, 0); SkidValue = (int)GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_MAXSTRIPBYWHEEL, NULL, 20.0); sprintf(buf, "%d", SkidValue); SkidEditId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C, x2+10, y, 100, 16, NULL, (tfuiCallback)NULL, ChangeSkid); y -= dy; GfuiLabelCreate(scrHandle, "LOD factor:", GFUI_FONT_MEDIUM, x, y, GFUI_ALIGN_HL_VB, 0); LodFactorValue = GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_LODFACTOR, NULL, 1.0); sprintf(buf, "%g", LodFactorValue); LodFactorEditId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C, x2+10, y, 100, 16, NULL, (tfuiCallback)NULL, ChangeLodFactor); GfuiButtonCreate(scrHandle, "Accept", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, prevMenu, SaveGraphicOptions, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, prevMenu, GfuiScreenActivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiAddKey(scrHandle, 27, "Cancel", prevMenu, GfuiScreenActivate, NULL); GfParmReleaseHandle(grHandle); return scrHandle; }