Re #139 (D30) Fixed new human drivers created in Player COnfig menu not selectable in Driver Select menu (forced default = sc-lynx-220 car in human.xml)

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@2713 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: c2eb9f82af94cfbf8438ebd17dfca18679f6eea3
Former-commit-id: 95c4d2631a56248e4f4277bc6392ee002c6f6c55
This commit is contained in:
pouillot 2010-08-29 22:26:07 +00:00
parent b4034d92e5
commit c07b1d215a

View file

@ -31,10 +31,10 @@
#include "playerconfig.h" #include "playerconfig.h"
static const int MAX_PLAYER_NAME_LEN = 16; static const char *PlayerNamePrompt = "-- Enter name --";
static const char *PLAYER_NAME_PROMPT = "-- Enter name --"; static const char *NoPlayer = "-- No one --";
static const char *NO_PLAYER = "-- No one --"; static const char *HumanDriverModuleName = "human";
static const char *HumanDriverModuleName = "human"; static const char *DefaultCarName = "sc-lynx-220";
static const char *SkillLevelString[] = { ROB_VAL_ROOKIE, ROB_VAL_AMATEUR, ROB_VAL_SEMI_PRO, ROB_VAL_PRO }; static const char *SkillLevelString[] = { ROB_VAL_ROOKIE, ROB_VAL_AMATEUR, ROB_VAL_SEMI_PRO, ROB_VAL_PRO };
static const int NbSkillLevels = sizeof(SkillLevelString) / sizeof(SkillLevelString[0]); static const int NbSkillLevels = sizeof(SkillLevelString) / sizeof(SkillLevelString[0]);
@ -73,7 +73,8 @@ struct tPlayerInfo
public: public:
tPlayerInfo(const char *name = HumanDriverModuleName, const char *dispname = 0, tPlayerInfo(const char *name = HumanDriverModuleName, const char *dispname = 0,
int racenumber = 0, int skilllevel = 0, float *color = 0, const char *defcarname = 0, int racenumber = 0, int skilllevel = 0,
float *color = 0,
tGearChangeMode gearchangemode = GEAR_MODE_AUTO, int autoreverse = 0, tGearChangeMode gearchangemode = GEAR_MODE_AUTO, int autoreverse = 0,
int nbpitstops = 0) int nbpitstops = 0)
{ {
@ -81,6 +82,8 @@ public:
setName(name); setName(name);
_info.dispname = 0; _info.dispname = 0;
setDispName(dispname); setDispName(dispname);
_defcarname = 0;
setDefaultCarName(defcarname);
_racenumber = racenumber; _racenumber = racenumber;
_gearchangemode = gearchangemode; _gearchangemode = gearchangemode;
_nbpitstops = nbpitstops; _nbpitstops = nbpitstops;
@ -98,6 +101,8 @@ public:
setName(src._info.name); setName(src._info.name);
_info.dispname = 0; _info.dispname = 0;
setDispName(src._info.dispname); setDispName(src._info.dispname);
_defcarname = 0;
setDefaultCarName(src._defcarname);
_racenumber = src._racenumber; _racenumber = src._racenumber;
_gearchangemode = src._gearchangemode; _gearchangemode = src._gearchangemode;
_nbpitstops = src._nbpitstops; _nbpitstops = src._nbpitstops;
@ -111,6 +116,7 @@ public:
const char *name() const { return _info.name; }; const char *name() const { return _info.name; };
const char *dispName() const { return _info.dispname; } const char *dispName() const { return _info.dispname; }
const char *defaultCarName() const { return _defcarname; }
int raceNumber() const { return _racenumber; } int raceNumber() const { return _racenumber; }
tGearChangeMode gearChangeMode() const { return _gearchangemode; } tGearChangeMode gearChangeMode() const { return _gearchangemode; }
int nbPitStops() const { return _nbpitstops; } int nbPitStops() const { return _nbpitstops; }
@ -132,10 +138,19 @@ public:
if (_info.dispname) if (_info.dispname)
delete[] _info.dispname; delete[] _info.dispname;
if (!dispname || strlen(dispname) == 0) if (!dispname || strlen(dispname) == 0)
dispname = NO_PLAYER; dispname = NoPlayer;
_info.dispname = new char[strlen(dispname)+1]; _info.dispname = new char[strlen(dispname)+1];
strcpy(_info.dispname, dispname); // Can't use strdup : free crashes in destructor !? strcpy(_info.dispname, dispname); // Can't use strdup : free crashes in destructor !?
} }
void setDefaultCarName(const char *defcarname)
{
if (_defcarname)
delete[] _defcarname;
if (!defcarname || strlen(defcarname) == 0)
defcarname = DefaultCarName;
_defcarname = new char[strlen(defcarname)+1];
strcpy(_defcarname, defcarname); // Can't use strdup : free crashes in destructor !?
}
void setRaceNumber(int raceNumber) { _racenumber = raceNumber; } void setRaceNumber(int raceNumber) { _racenumber = raceNumber; }
void setGearChangeMode(tGearChangeMode gearChangeMode) { _gearchangemode = gearChangeMode; } void setGearChangeMode(tGearChangeMode gearChangeMode) { _gearchangemode = gearChangeMode; }
void setNbPitStops(int nbPitStops) { _nbpitstops = nbPitStops; } void setNbPitStops(int nbPitStops) { _nbpitstops = nbPitStops; }
@ -148,6 +163,8 @@ public:
delete[] _info.dispname; delete[] _info.dispname;
if (_info.name) if (_info.name)
delete[] _info.name; delete[] _info.name;
if (_defcarname)
delete[] _defcarname;
} }
// Gear change mode enum to string conversion // Gear change mode enum to string conversion
@ -169,6 +186,7 @@ public:
private: private:
tInfo _info; tInfo _info;
char* _defcarname;
int _racenumber; int _racenumber;
tGearChangeMode _gearchangemode; tGearChangeMode _gearchangemode;
int _nbpitstops; int _nbpitstops;
@ -221,10 +239,10 @@ refreshEditVal(void)
} else { } else {
if (strcmp((*CurrPlayer)->dispName(), NO_PLAYER)) { if (strcmp((*CurrPlayer)->dispName(), NoPlayer)) {
GfuiEditboxSetString(ScrHandle, NameEditId, (*CurrPlayer)->dispName()); GfuiEditboxSetString(ScrHandle, NameEditId, (*CurrPlayer)->dispName());
} else { } else {
GfuiEditboxSetString(ScrHandle, NameEditId, PLAYER_NAME_PROMPT); GfuiEditboxSetString(ScrHandle, NameEditId, PlayerNamePrompt);
} }
GfuiEnable(ScrHandle, NameEditId, GFUI_ENABLE); GfuiEnable(ScrHandle, NameEditId, GFUI_ENABLE);
@ -302,6 +320,7 @@ PutPlayerSettings(unsigned index)
// Human driver params // Human driver params
sprintf(drvSectionPath, "%s/%s/%u", ROB_SECT_ROBOTS, ROB_LIST_INDEX, index); sprintf(drvSectionPath, "%s/%s/%u", ROB_SECT_ROBOTS, ROB_LIST_INDEX, index);
GfParmSetStr(PlayerHdle, drvSectionPath, ROB_ATTR_NAME, player->dispName()); GfParmSetStr(PlayerHdle, drvSectionPath, ROB_ATTR_NAME, player->dispName());
GfParmSetStr(PlayerHdle, drvSectionPath, ROB_ATTR_CAR, player->defaultCarName());
GfParmSetNum(PlayerHdle, drvSectionPath, ROB_ATTR_RACENUM, (char*)NULL, player->raceNumber()); GfParmSetNum(PlayerHdle, drvSectionPath, ROB_ATTR_RACENUM, (char*)NULL, player->raceNumber());
GfParmSetNum(PlayerHdle, drvSectionPath, ROB_ATTR_RED, (char*)NULL, player->color(0)); GfParmSetNum(PlayerHdle, drvSectionPath, ROB_ATTR_RED, (char*)NULL, player->color(0));
GfParmSetNum(PlayerHdle, drvSectionPath, ROB_ATTR_GREEN, (char*)NULL, player->color(1)); GfParmSetNum(PlayerHdle, drvSectionPath, ROB_ATTR_GREEN, (char*)NULL, player->color(1));
@ -485,7 +504,7 @@ ConfControls(void * /* dummy */ )
} }
} }
/* Load human driver (=player) info list (PlayersInfo) from preferences and human drivers files ; /* Load human driver (= player) info list (PlayersInfo) from preferences and human drivers files ;
load associated scroll list */ load associated scroll list */
static int static int
GenPlayerList(void) GenPlayerList(void)
@ -494,6 +513,7 @@ GenPlayerList(void)
int i; int i;
int j; int j;
const char *driver; const char *driver;
const char *defaultCar;
int skilllevel; int skilllevel;
const char *str; const char *str;
int racenumber; int racenumber;
@ -526,6 +546,7 @@ GenPlayerList(void)
break; break;
} }
} }
defaultCar = GfParmGetStr(PlayerHdle, sstring, ROB_ATTR_CAR, 0);
racenumber = (int)GfParmGetNum(PlayerHdle, sstring, ROB_ATTR_RACENUM, (char*)NULL, 0); racenumber = (int)GfParmGetNum(PlayerHdle, sstring, ROB_ATTR_RACENUM, (char*)NULL, 0);
color[0] = (float)GfParmGetNum(PlayerHdle, sstring, ROB_ATTR_RED, (char*)NULL, 1.0); color[0] = (float)GfParmGetNum(PlayerHdle, sstring, ROB_ATTR_RED, (char*)NULL, 1.0);
color[1] = (float)GfParmGetNum(PlayerHdle, sstring, ROB_ATTR_GREEN, (char*)NULL, 1.0);; color[1] = (float)GfParmGetNum(PlayerHdle, sstring, ROB_ATTR_GREEN, (char*)NULL, 1.0);;
@ -533,6 +554,7 @@ GenPlayerList(void)
color[3] = 1.0; color[3] = 1.0;
PlayersInfo.push_back(new tPlayerInfo(HumanDriverModuleName, // Driver module name PlayersInfo.push_back(new tPlayerInfo(HumanDriverModuleName, // Driver module name
driver, // Player (display) name driver, // Player (display) name
defaultCar, // Default car name.
racenumber, // Race number racenumber, // Race number
skilllevel, // skill level skilllevel, // skill level
color)); // Colors color)); // Colors
@ -631,7 +653,7 @@ ChangeName(void * /* dummy */)
if (CurrPlayer != PlayersInfo.end()) { if (CurrPlayer != PlayersInfo.end()) {
val = GfuiEditboxGetString(ScrHandle, NameEditId); val = GfuiEditboxGetString(ScrHandle, NameEditId);
(*CurrPlayer)->setDispName(strcmp(val, PLAYER_NAME_PROMPT) ? val : NO_PLAYER); (*CurrPlayer)->setDispName(strcmp(val, PlayerNamePrompt) ? val : NoPlayer);
} }
UpdtScrollList(); UpdtScrollList();