summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_commons.h19
-rw-r--r--src/newgrf_house.cpp1
-rw-r--r--src/newgrf_industrytiles.cpp1
-rw-r--r--src/newgrf_spritegroup.cpp1
-rw-r--r--src/newgrf_spritegroup.h19
5 files changed, 20 insertions, 21 deletions
diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h
index ec669d907..a77da3cd2 100644
--- a/src/newgrf_commons.h
+++ b/src/newgrf_commons.h
@@ -70,6 +70,25 @@ enum TileLayoutFlags {
DECLARE_ENUM_AS_BIT_SET(TileLayoutFlags)
/**
+ * Determines which sprite to use from a spriteset for a specific construction stage.
+ * @param construction_stage Construction stage 0 - 3.
+ * @param num_sprites Number of available sprites to select stage from.
+ * @return Sprite to use
+ */
+static inline uint GetConstructionStageOffset(uint construction_stage, uint num_sprites)
+{
+ assert(num_sprites > 0);
+ if (num_sprites > 4) num_sprites = 4;
+ switch (construction_stage) {
+ case 0: return 0;
+ case 1: return num_sprites > 2 ? 1 : 0;
+ case 2: return num_sprites > 2 ? num_sprites - 2 : 0;
+ case 3: return num_sprites - 1;
+ default: NOT_REACHED();
+ }
+}
+
+/**
* Additional modifiers for items in sprite layouts.
*/
struct TileLayoutRegisters {
diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp
index 29ddb9b50..42a90e20d 100644
--- a/src/newgrf_house.cpp
+++ b/src/newgrf_house.cpp
@@ -476,7 +476,6 @@ void DrawNewHouseTile(TileInfo *ti, HouseID house_id)
/* Limit the building stage to the number of stages supplied. */
const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group;
byte stage = GetHouseBuildingStage(ti->tile);
- stage = tlgroup->GetConstructionStageOffset(stage);
DrawTileLayout(ti, tlgroup, stage, house_id);
}
}
diff --git a/src/newgrf_industrytiles.cpp b/src/newgrf_industrytiles.cpp
index 2aa636712..02bab3130 100644
--- a/src/newgrf_industrytiles.cpp
+++ b/src/newgrf_industrytiles.cpp
@@ -263,7 +263,6 @@ bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const Indus
/* Limit the building stage to the number of stages supplied. */
const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group;
byte stage = GetIndustryConstructionStage(ti->tile);
- stage = tlgroup->GetConstructionStageOffset(stage);
IndustryDrawTileLayout(ti, tlgroup, i->random_colour, stage, gfx);
return true;
}
diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp
index 387366352..80b58c273 100644
--- a/src/newgrf_spritegroup.cpp
+++ b/src/newgrf_spritegroup.cpp
@@ -236,6 +236,7 @@ const SpriteGroup *RealSpriteGroup::Resolve(ResolverObject *object) const
*/
const DrawTileSprites *TileLayoutSpriteGroup::ProcessRegisters(uint8 *stage) const
{
+ if (stage != NULL) *stage = GetConstructionStageOffset(*stage, this->num_building_stages);
if (!this->dts.NeedsPreprocessing()) return &this->dts;
static DrawTileSprites result;
diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h
index 94ec430d4..811547832 100644
--- a/src/newgrf_spritegroup.h
+++ b/src/newgrf_spritegroup.h
@@ -292,25 +292,6 @@ struct TileLayoutSpriteGroup : SpriteGroup {
NewGRFSpriteLayout dts;
const DrawTileSprites *ProcessRegisters(uint8 *stage) const;
-
- /**
- * Determines which sprite to use from a spriteset for a specific construction stage.
- * @param construction_stage Construction stage 0 - 3.
- * @return Sprite to use
- */
- uint GetConstructionStageOffset(uint construction_stage) const
- {
- uint num_sprites = this->num_building_stages;
- assert(num_sprites > 0);
- if (num_sprites > 4) num_sprites = 4;
- switch (construction_stage) {
- case 0: return 0;
- case 1: return num_sprites > 2 ? 1 : 0;
- case 2: return num_sprites > 2 ? num_sprites - 2 : 0;
- case 3: return num_sprites - 1;
- default: NOT_REACHED();
- }
- }
};
struct IndustryProductionSpriteGroup : SpriteGroup {