TBTR: Update template veh sprite IDs when loading savegame/GRFs.

This commit is contained in:
Jonathan G Rennison
2016-02-15 23:19:41 +00:00
parent 77ca326997
commit d688039a42
5 changed files with 40 additions and 3 deletions

View File

@@ -2991,6 +2991,9 @@ bool AfterLoadGame()
ResetSignalHandlers();
AfterLoadLinkGraphs();
AfterLoadTemplateVehiclesUpdateImage();
return true;
}
@@ -3028,4 +3031,5 @@ void ReloadNewGRFData()
/* redraw the whole screen */
MarkWholeScreenDirty();
CheckTrainsLengths();
AfterLoadTemplateVehiclesUpdateImage();
}

View File

@@ -48,6 +48,8 @@ void ConnectMultiheadedTrains();
Engine *GetTempDataEngine(EngineID index);
void CopyTempEngineData();
void AfterLoadTemplateVehiclesUpdateImage();
extern int32 _saved_scrollpos_x;
extern int32 _saved_scrollpos_y;
extern ZoomLevelByte _saved_scrollpos_zoom;

View File

@@ -1,6 +1,8 @@
#include "../stdafx.h"
#include "../tbtr_template_vehicle.h"
#include "../tbtr_template_vehicle_func.h"
#include "../train.h"
#include "saveload.h"
@@ -94,6 +96,37 @@ void AfterLoadTemplateVehicles()
}
}
void AfterLoadTemplateVehiclesUpdateImage()
{
TemplateVehicle *tv;
FOR_ALL_TEMPLATES(tv) {
if (tv->Prev() == NULL) {
StringID err;
Train* t = VirtualTrainFromTemplateVehicle(tv, err);
if (t != NULL) {
int tv_len = 0;
for (TemplateVehicle *u = tv; u != NULL; u = u->Next()) {
tv_len++;
}
int t_len = 0;
for (Train *u = t; u != NULL; u = u->Next()) {
t_len++;
}
if (t_len == tv_len) {
Train *v = t;
for (TemplateVehicle *u = tv; u != NULL; u = u->Next(), v = v->Next()) {
u->spritenum = v->spritenum;
u->cur_image = v->GetImage(DIR_W, EIT_PURCHASE);
u->image_width = v->GetDisplayImageWidth();
}
}
delete t;
}
}
}
}
extern const ChunkHandler _template_vehicle_chunk_handlers[] = {
{'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, NULL, CH_ARRAY | CH_LAST},
};

View File

@@ -92,7 +92,6 @@ public:
byte spritenum;
SpriteID cur_image;
uint32 image_width;
const SpriteGroup *sgroup;
TemplateVehicle(VehicleType type = VEH_INVALID, EngineID e = INVALID_ENGINE, byte B = 0, Owner = _local_company);
TemplateVehicle(EngineID, RailVehicleInfo*);

View File

@@ -810,8 +810,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl
tmp->spritenum = virt->spritenum;
tmp->cur_image = virt->GetImage(DIR_W, EIT_PURCHASE);
Point *p = new Point();
tmp->image_width = virt->GetDisplayImageWidth(p);
tmp->image_width = virt->GetDisplayImageWidth();
}
/**