Industry: Apply anim tile masking when loading prior version saves

This commit is contained in:
Jonathan G Rennison
2022-06-01 01:21:58 +01:00
parent 42e20d3d99
commit af270a63ad
5 changed files with 34 additions and 0 deletions

View File

@@ -459,3 +459,30 @@ void AnalyseIndustryTileSpriteGroups()
}
}
}
void ApplyIndustryTileAnimMasking()
{
for (Industry *ind : Industry::Iterate()) {
const IndustrySpec *spec = GetIndustrySpec(ind->type);
if (ind->selected_layout == 0 || ind->selected_layout > spec->layouts.size()) continue;
uint64 mask = spec->layout_anim_masks[ind->selected_layout - 1];
uint idx = 0;
for (IndustryTileLayoutTile it : spec->layouts[ind->selected_layout - 1]) {
if (it.gfx == 0xFF) continue;
TileIndex tile = AddTileIndexDiffCWrap(ind->location.tile, it.ti);
if (!IsValidTile(tile) || !ind->TileBelongsToIndustry(tile)) break;
IndustryGfx gfx = GetTranslatedIndustryTileID(it.gfx);
if (gfx != GetIndustryGfx(tile)) break;
if (HasBit(mask, idx)) DeleteAnimatedTile(tile);
idx++;
if (idx == 64) break;
}
}
}