(svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.

This commit is contained in:
peter1138 2006-05-03 21:07:44 +00:00
parent 79f0628139
commit b4a254cd43
2 changed files with 16 additions and 1 deletions

View File

@ -805,6 +805,8 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
statspec->tiles = grf_load_extended(&buf);
statspec->renderdata = calloc(statspec->tiles, sizeof(*statspec->renderdata));
statspec->copied_renderdata = false;
for (t = 0; t < statspec->tiles; t++) {
DrawTileSprites *dts = &statspec->renderdata[t];
uint seq_count = 0;
@ -850,6 +852,7 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
statspec->tiles = srcstatspec->tiles;
statspec->renderdata = srcstatspec->renderdata;
statspec->copied_renderdata = true;
}
break;
@ -2475,14 +2478,25 @@ static void InitializeGRFSpecial(void)
static void ResetCustomStations(void)
{
StationSpec *statspec;
GRFFile *file;
uint i;
uint t;
for (file = _first_grffile; file != NULL; file = file->next) {
for (i = 0; i < file->num_stations; i++) {
if (file->stations[i].grfid != file->grfid) continue;
statspec = &file->stations[i];
// TODO: Release renderdata, platforms and layouts
/* Release renderdata, if it wasn't copied from another custom station spec */
if (!statspec->copied_renderdata) {
for (t = 0; t < statspec->tiles; t++) {
free((void*)statspec->renderdata[t].seq);
}
free(statspec->renderdata);
}
// TODO: Release platforms and layouts
}
/* Free and reset the station data */

View File

@ -44,6 +44,7 @@ typedef struct StationSpec {
*/
uint tiles;
DrawTileSprites *renderdata; ///< Array of tile layouts.
bool copied_renderdata;
/** Cargo threshold for choosing between little and lots of cargo
* @note little/lots are equivalent to the moving/loading states for vehicles