mirror of https://github.com/OpenTTD/OpenTTD
(svn r22923) -Codechange: Move application of the construction stage into TileLayoutSpriteGroup::ProcessRegisters().
parent
b4d7919f8a
commit
de27360549
|
@ -69,6 +69,25 @@ enum TileLayoutFlags {
|
||||||
};
|
};
|
||||||
DECLARE_ENUM_AS_BIT_SET(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.
|
* Additional modifiers for items in sprite layouts.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -476,7 +476,6 @@ void DrawNewHouseTile(TileInfo *ti, HouseID house_id)
|
||||||
/* Limit the building stage to the number of stages supplied. */
|
/* Limit the building stage to the number of stages supplied. */
|
||||||
const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group;
|
const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group;
|
||||||
byte stage = GetHouseBuildingStage(ti->tile);
|
byte stage = GetHouseBuildingStage(ti->tile);
|
||||||
stage = tlgroup->GetConstructionStageOffset(stage);
|
|
||||||
DrawTileLayout(ti, tlgroup, stage, house_id);
|
DrawTileLayout(ti, tlgroup, stage, house_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,7 +263,6 @@ bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const Indus
|
||||||
/* Limit the building stage to the number of stages supplied. */
|
/* Limit the building stage to the number of stages supplied. */
|
||||||
const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group;
|
const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group;
|
||||||
byte stage = GetIndustryConstructionStage(ti->tile);
|
byte stage = GetIndustryConstructionStage(ti->tile);
|
||||||
stage = tlgroup->GetConstructionStageOffset(stage);
|
|
||||||
IndustryDrawTileLayout(ti, tlgroup, i->random_colour, stage, gfx);
|
IndustryDrawTileLayout(ti, tlgroup, i->random_colour, stage, gfx);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,6 +236,7 @@ const SpriteGroup *RealSpriteGroup::Resolve(ResolverObject *object) const
|
||||||
*/
|
*/
|
||||||
const DrawTileSprites *TileLayoutSpriteGroup::ProcessRegisters(uint8 *stage) 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;
|
if (!this->dts.NeedsPreprocessing()) return &this->dts;
|
||||||
|
|
||||||
static DrawTileSprites result;
|
static DrawTileSprites result;
|
||||||
|
|
|
@ -292,25 +292,6 @@ struct TileLayoutSpriteGroup : SpriteGroup {
|
||||||
NewGRFSpriteLayout dts;
|
NewGRFSpriteLayout dts;
|
||||||
|
|
||||||
const DrawTileSprites *ProcessRegisters(uint8 *stage) const;
|
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 {
|
struct IndustryProductionSpriteGroup : SpriteGroup {
|
||||||
|
|
Loading…
Reference in New Issue