summaryrefslogtreecommitdiff
path: root/src/newgrf.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2011-05-14 17:25:45 +0000
committerfrosch <frosch@openttd.org>2011-05-14 17:25:45 +0000
commit7415b9cca278e86db5ba00b84aa535057279ef37 (patch)
tree9f01e323319a68661a0ebcd8d846fdf52c70e0d3 /src/newgrf.cpp
parent3183cb79079a20739e68966de2c0c0356e3c67b1 (diff)
downloadopenttd-7415b9cca278e86db5ba00b84aa535057279ef37.tar.xz
(svn r22456) -Codechange: Derive NewGRFSpriteLayout from DrawTileSprites for spritelayouts allocated on the heap, and make use of constructors and destructors.
Diffstat (limited to 'src/newgrf.cpp')
-rw-r--r--src/newgrf.cpp35
1 files changed, 13 insertions, 22 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index e837ba078..0b89b81e0 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1222,19 +1222,16 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
case 0x09: // Define sprite layout
statspec->tiles = buf->ReadExtendedByte();
- statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles);
+ statspec->renderdata = new NewGRFSpriteLayout[statspec->tiles];
for (uint t = 0; t < statspec->tiles; t++) {
- DrawTileSprites *dts = &statspec->renderdata[t];
- uint seq_count = 0;
+ NewGRFSpriteLayout *dts = &statspec->renderdata[t];
- dts->seq = NULL;
dts->ground.sprite = buf->ReadWord();
dts->ground.pal = buf->ReadWord();
if (dts->ground.sprite == 0 && dts->ground.pal == 0) {
extern const DrawTileSprites _station_display_datas_rail[8];
- dts->ground = _station_display_datas_rail[t % 8].ground;
- dts->seq = CopyDrawTileSeqStruct(_station_display_datas_rail[t % 8].seq);
+ dts->Clone(&_station_display_datas_rail[t % 8]);
continue;
}
if (HasBit(dts->ground.pal, 15)) {
@@ -1245,10 +1242,12 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
MapSpriteMappingRecolour(&dts->ground);
+ static SmallVector<DrawTileSeqStruct, 8> tmp_layout;
+ tmp_layout.Clear();
for (;;) {
/* no relative bounding box support */
- dts->seq = ReallocT(const_cast<DrawTileSeqStruct *>(dts->seq), ++seq_count);
- DrawTileSeqStruct *dtss = const_cast<DrawTileSeqStruct *>(&dts->seq[seq_count - 1]);
+ DrawTileSeqStruct *dtss = tmp_layout.Append();
+ MemSetT(dtss, 0);
dtss->delta_x = buf->ReadByte();
if (dtss->IsTerminator()) break;
@@ -1269,6 +1268,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
MapSpriteMappingRecolour(&dtss->image);
}
+ dts->Clone(tmp_layout.Begin());
}
break;
@@ -1282,10 +1282,9 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
}
statspec->tiles = srcstatspec->tiles;
- statspec->renderdata = MallocT<DrawTileSprites>(statspec->tiles);
+ statspec->renderdata = new NewGRFSpriteLayout[statspec->tiles];
for (uint t = 0; t < statspec->tiles; t++) {
- statspec->renderdata[t].ground = srcstatspec->renderdata[t].ground;
- statspec->renderdata[t].seq = CopyDrawTileSeqStruct(srcstatspec->renderdata[t].seq);
+ statspec->renderdata[t].Clone(&srcstatspec->renderdata[t]);
}
break;
}
@@ -3947,7 +3946,7 @@ static void NewSpriteGroup(ByteReader *buf)
act_group = group;
/* num_building_stages should be 1, if we are only using non-custom sprites */
group->num_building_stages = max((uint8)1, num_spriteset_ents);
- group->dts = CallocT<DrawTileSprites>(1);
+ group->dts = new NewGRFSpriteLayout();
/* Groundsprite */
group->dts->ground.sprite = buf->ReadWord();
@@ -3972,8 +3971,7 @@ static void NewSpriteGroup(ByteReader *buf)
}
}
- group->dts->seq = CallocT<DrawTileSeqStruct>(num_building_sprites + 1);
-
+ group->dts->Allocate(num_building_sprites);
for (i = 0; i < num_building_sprites; i++) {
DrawTileSeqStruct *seq = const_cast<DrawTileSeqStruct*>(&group->dts->seq[i]);
@@ -4009,10 +4007,6 @@ static void NewSpriteGroup(ByteReader *buf)
seq->size_y = buf->ReadByte();
seq->size_z = buf->ReadByte();
}
-
- /* Set the terminator value. */
- const_cast<DrawTileSeqStruct *>(group->dts->seq)[i].MakeTerminator();
-
break;
}
@@ -7063,10 +7057,7 @@ static void ResetCustomStations()
if (stations[i] == NULL) continue;
StationSpec *statspec = stations[i];
- for (uint t = 0; t < statspec->tiles; t++) {
- free((void*)statspec->renderdata[t].seq);
- }
- free(statspec->renderdata);
+ delete[] statspec->renderdata;
/* Release platforms and layouts */
if (!statspec->copied_layouts) {