TBTR: Update template veh sprite IDs when loading savegame/GRFs.
This commit is contained in:
@@ -2991,6 +2991,9 @@ bool AfterLoadGame()
|
|||||||
ResetSignalHandlers();
|
ResetSignalHandlers();
|
||||||
|
|
||||||
AfterLoadLinkGraphs();
|
AfterLoadLinkGraphs();
|
||||||
|
|
||||||
|
AfterLoadTemplateVehiclesUpdateImage();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3028,4 +3031,5 @@ void ReloadNewGRFData()
|
|||||||
/* redraw the whole screen */
|
/* redraw the whole screen */
|
||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
CheckTrainsLengths();
|
CheckTrainsLengths();
|
||||||
|
AfterLoadTemplateVehiclesUpdateImage();
|
||||||
}
|
}
|
||||||
|
@@ -48,6 +48,8 @@ void ConnectMultiheadedTrains();
|
|||||||
Engine *GetTempDataEngine(EngineID index);
|
Engine *GetTempDataEngine(EngineID index);
|
||||||
void CopyTempEngineData();
|
void CopyTempEngineData();
|
||||||
|
|
||||||
|
void AfterLoadTemplateVehiclesUpdateImage();
|
||||||
|
|
||||||
extern int32 _saved_scrollpos_x;
|
extern int32 _saved_scrollpos_x;
|
||||||
extern int32 _saved_scrollpos_y;
|
extern int32 _saved_scrollpos_y;
|
||||||
extern ZoomLevelByte _saved_scrollpos_zoom;
|
extern ZoomLevelByte _saved_scrollpos_zoom;
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
#include "../stdafx.h"
|
#include "../stdafx.h"
|
||||||
|
|
||||||
#include "../tbtr_template_vehicle.h"
|
#include "../tbtr_template_vehicle.h"
|
||||||
|
#include "../tbtr_template_vehicle_func.h"
|
||||||
|
#include "../train.h"
|
||||||
|
|
||||||
#include "saveload.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[] = {
|
extern const ChunkHandler _template_vehicle_chunk_handlers[] = {
|
||||||
{'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, NULL, CH_ARRAY | CH_LAST},
|
{'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, NULL, CH_ARRAY | CH_LAST},
|
||||||
};
|
};
|
||||||
|
@@ -92,7 +92,6 @@ public:
|
|||||||
byte spritenum;
|
byte spritenum;
|
||||||
SpriteID cur_image;
|
SpriteID cur_image;
|
||||||
uint32 image_width;
|
uint32 image_width;
|
||||||
const SpriteGroup *sgroup;
|
|
||||||
|
|
||||||
TemplateVehicle(VehicleType type = VEH_INVALID, EngineID e = INVALID_ENGINE, byte B = 0, Owner = _local_company);
|
TemplateVehicle(VehicleType type = VEH_INVALID, EngineID e = INVALID_ENGINE, byte B = 0, Owner = _local_company);
|
||||||
TemplateVehicle(EngineID, RailVehicleInfo*);
|
TemplateVehicle(EngineID, RailVehicleInfo*);
|
||||||
|
@@ -810,8 +810,7 @@ inline void SetupTemplateVehicleFromVirtual(TemplateVehicle *tmp, TemplateVehicl
|
|||||||
|
|
||||||
tmp->spritenum = virt->spritenum;
|
tmp->spritenum = virt->spritenum;
|
||||||
tmp->cur_image = virt->GetImage(DIR_W, EIT_PURCHASE);
|
tmp->cur_image = virt->GetImage(DIR_W, EIT_PURCHASE);
|
||||||
Point *p = new Point();
|
tmp->image_width = virt->GetDisplayImageWidth();
|
||||||
tmp->image_width = virt->GetDisplayImageWidth(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user