(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is

no limit to the amount of names.
-Fix: NewGRF engines could not be renamed.
This commit is contained in:
peter1138
2008-01-12 19:58:06 +00:00
parent a222fe2e86
commit ab8382c0db
38 changed files with 250 additions and 298 deletions

View File

@@ -54,6 +54,12 @@ void SetupEngines()
do e->type = VEH_ROAD; while (++e < &_engines[SHIP_ENGINES_INDEX]);
do e->type = VEH_SHIP; while (++e < &_engines[AIRCRAFT_ENGINES_INDEX]);
do e->type = VEH_AIRCRAFT; while (++e < &_engines[TOTAL_NUM_ENGINES]);
/* Set up default engine names */
for (EngineID engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
EngineInfo *ei = &_engine_info[engine];
ei->string_id = STR_8000_KIRBY_PAUL_TANK_STEAM + engine;
}
}
@@ -61,13 +67,10 @@ void ShowEnginePreviewWindow(EngineID engine);
void DeleteCustomEngineNames()
{
uint i;
StringID old;
for (i = 0; i != TOTAL_NUM_ENGINES; i++) {
old = _engine_name_strings[i];
_engine_name_strings[i] = i + STR_8000_KIRBY_PAUL_TANK_STEAM;
DeleteName(old);
Engine *e;
FOR_ALL_ENGINES(e) {
free(e->name);
e->name = NULL;
}
_vehicle_design_names &= ~1;
@@ -79,18 +82,6 @@ void LoadCustomEngineNames()
DEBUG(misc, 1, "LoadCustomEngineNames: not done");
}
static void SetupEngineNames()
{
StringID *name;
for (name = _engine_name_strings; name != endof(_engine_name_strings); name++)
*name = STR_SV_EMPTY;
DeleteCustomEngineNames();
LoadCustomEngineNames();
}
static void CalcEngineReliability(Engine *e)
{
uint age = e->age;
@@ -134,8 +125,6 @@ void StartupEngines()
/* Aging of vehicles stops, so account for that when starting late */
const Date aging_date = min(_date, ConvertYMDToDate(YEAR_ENGINE_AGING_STOPS, 0, 1));
SetupEngineNames();
for (e = _engines, ei = _engine_info; e != endof(_engines); e++, ei++) {
uint32 r;
@@ -402,23 +391,16 @@ static bool IsUniqueEngineName(const char *name)
*/
CommandCost CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
if (!IsEngineIndex(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
if (!IsUniqueEngineName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
str = AllocateName(_cmd_text, 0);
if (str == 0) return CMD_ERROR;
if (flags & DC_EXEC) {
StringID old_str = _engine_name_strings[p1];
_engine_name_strings[p1] = str;
DeleteName(old_str);
Engine *e = GetEngine(p1);
free(e->name);
e->name = strdup(_cmd_text);
_vehicle_design_names |= 3;
MarkWholeScreenDirty();
} else {
DeleteName(str);
}
return CommandCost();
@@ -637,6 +619,7 @@ static const SaveLoad _engine_desc[] = {
SLE_VAR(Engine, preview_wait, SLE_UINT8),
SLE_CONDNULL(1, 0, 44),
SLE_VAR(Engine, player_avail, SLE_UINT8),
SLE_CONDSTR(Engine, name, SLE_STR, 0, 84, SL_MAX_VERSION),
/* reserve extra space in savegame here. (currently 16 bytes) */
SLE_CONDNULL(16, 2, SL_MAX_VERSION),
@@ -662,14 +645,21 @@ static void Load_ENGN()
}
}
static void LoadSave_ENGS()
static void Load_ENGS()
{
SlArray(_engine_name_strings, lengthof(_engine_name_strings), SLE_STRINGID);
StringID names[TOTAL_NUM_ENGINES];
SlArray(names, lengthof(names), SLE_STRINGID);
for (EngineID engine = 0; engine < lengthof(names); engine++) {
Engine *e = GetEngine(engine);
e->name = CopyFromOldName(names[engine]);
}
}
extern const ChunkHandler _engine_chunk_handlers[] = {
{ 'ENGN', Save_ENGN, Load_ENGN, CH_ARRAY },
{ 'ENGS', LoadSave_ENGS, LoadSave_ENGS, CH_RIFF },
{ 'ENGS', NULL, Load_ENGS, CH_RIFF },
{ 'ERNW', Save_ERNW, Load_ERNW, CH_ARRAY | CH_LAST},
};
@@ -678,4 +668,10 @@ void InitializeEngines()
/* Clean the engine renew pool and create 1 block in it */
_EngineRenew_pool.CleanPool();
_EngineRenew_pool.AddBlockToPool();
Engine *e;
FOR_ALL_ENGINES(e) {
free(e->name);
e->name = NULL;
}
}