mirror of https://github.com/OpenTTD/OpenTTD
(svn r22731) -Fix: [NewGRF] The construction stage sprites were incorrectly selected in cases other than 1 or 4 sprites per set.
parent
68068b6eff
commit
d10168f211
|
@ -476,7 +476,7 @@ 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 = Clamp(stage - 4 + tlgroup->num_building_stages, 0, tlgroup->num_building_stages - 1);
|
||||
stage = tlgroup->GetConstructionStageOffset(stage);
|
||||
DrawTileLayout(ti, tlgroup, stage, house_id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -263,7 +263,7 @@ 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 = Clamp(stage - 4 + tlgroup->num_building_stages, 0, tlgroup->num_building_stages - 1);
|
||||
stage = tlgroup->GetConstructionStageOffset(stage);
|
||||
IndustryDrawTileLayout(ti, tlgroup, i->random_colour, stage, gfx);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -292,6 +292,25 @@ 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 {
|
||||
|
|
Loading…
Reference in New Issue