summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2011-02-19 13:16:34 +0000
committerfrosch <frosch@openttd.org>2011-02-19 13:16:34 +0000
commit57dc3ed716b50fa2e0db5fb691fb70c0766826f4 (patch)
tree5a55a7fcfdd5db2ee08dc31052f1da5fcd72efe7
parent72e027e4d6ff168ab9f77d1001f877c55071c59c (diff)
downloadopenttd-57dc3ed716b50fa2e0db5fb691fb70c0766826f4.tar.xz
(svn r22106) -Codechange: Add DrawTileSeqStruct::MakeTerminator(), DrawTileSeqStruct::IsTerminator(), DrawTileSeqStruct::IsParentSprite() to simplify stuff.
-rw-r--r--src/newgrf.cpp6
-rw-r--r--src/sprite.cpp4
-rw-r--r--src/sprite.h22
3 files changed, 25 insertions, 7 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 395212a91..0a70a41d4 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1223,7 +1223,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
DrawTileSeqStruct *dtss = const_cast<DrawTileSeqStruct *>(&dts->seq[seq_count - 1]);
dtss->delta_x = buf->ReadByte();
- if ((byte) dtss->delta_x == 0x80) break;
+ if (dtss->IsTerminator()) break;
dtss->delta_y = buf->ReadByte();
dtss->delta_z = buf->ReadByte();
dtss->size_x = buf->ReadByte();
@@ -3955,7 +3955,7 @@ static void NewSpriteGroup(ByteReader *buf)
if (type > 0) {
seq->delta_z = buf->ReadByte();
- if ((byte)seq->delta_z == 0x80) continue;
+ if (!seq->IsParentSprite()) continue;
}
seq->size_x = buf->ReadByte();
@@ -3964,7 +3964,7 @@ static void NewSpriteGroup(ByteReader *buf)
}
/* Set the terminator value. */
- const_cast<DrawTileSeqStruct *>(group->dts->seq)[i].delta_x = (int8)0x80;
+ const_cast<DrawTileSeqStruct *>(group->dts->seq)[i].MakeTerminator();
break;
}
diff --git a/src/sprite.cpp b/src/sprite.cpp
index df4eec8ef..2e453941a 100644
--- a/src/sprite.cpp
+++ b/src/sprite.cpp
@@ -43,7 +43,7 @@ void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, Transpare
PaletteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, default_palette);
- if ((byte)dtss->delta_z != 0x80) {
+ if (dtss->IsParentSprite()) {
parent_sprite_encountered = true;
AddSortableSpriteToDraw(
image, pal,
@@ -94,7 +94,7 @@ void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32 orig
PaletteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, default_palette);
- if ((byte)dtss->delta_z != 0x80) {
+ if (dtss->IsParentSprite()) {
Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z);
DrawSprite(image, pal, x + pt.x, y + pt.y);
diff --git a/src/sprite.h b/src/sprite.h
index 5d1c7f07b..3e03aee6a 100644
--- a/src/sprite.h
+++ b/src/sprite.h
@@ -27,11 +27,29 @@
struct DrawTileSeqStruct {
int8 delta_x; ///< \c 0x80 is sequence terminator
int8 delta_y;
- int8 delta_z;
+ int8 delta_z; ///< \c 0x80 identifies child sprites
byte size_x;
byte size_y;
byte size_z;
PalSpriteID image;
+
+ /** Make this struct a sequence terminator. */
+ void MakeTerminator()
+ {
+ this->delta_x = (int8)0x80;
+ }
+
+ /** Check whether this is a sequence terminator. */
+ bool IsTerminator() const
+ {
+ return (byte)this->delta_x == 0x80;
+ }
+
+ /** Check whether this is a parent sprite with a boundingbox. */
+ bool IsParentSprite() const
+ {
+ return (byte)this->delta_z != 0x80;
+ }
};
/** Ground palette sprite of a tile, together with its child sprites */
@@ -56,7 +74,7 @@ struct DrawBuildingsTileStruct {
};
/** Iterate through all DrawTileSeqStructs in DrawTileSprites. */
-#define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++)
+#define foreach_draw_tile_seq(idx, list) for (idx = list; !idx->IsTerminator(); idx++)
void DrawCommonTileSeq(const struct TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32 orig_offset, uint32 newgrf_offset, PaletteID default_palette, bool child_offset_is_unsigned);
void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32 orig_offset, uint32 newgrf_offset, PaletteID default_palette, bool child_offset_is_unsigned);