(svn r20336) -Codechange: rework the HQ updating

This commit is contained in:
rubidium
2010-08-03 08:32:58 +00:00
parent ffedcc6533
commit f812e80002
4 changed files with 28 additions and 30 deletions

View File

@@ -46,8 +46,27 @@
return UnmovableSpec::Get(GetUnmovableType(tile));
}
/**
* Increase the animation stage of a whole structure.
* @param northern The northern tile of the structure.
* @pre GetUnmovableOffset(northern) == 0
*/
void IncreaseAnimationStage(TileIndex northern)
{
assert(GetUnmovableOffset(northern) == 0);
const UnmovableSpec *spec = UnmovableSpec::GetByTile(northern);
TileArea ta(northern, GB(spec->size, 0, 4), GB(spec->size, 4, 4));
TILE_AREA_LOOP(t, ta) {
SetUnmovableAnimationStage(t, GetUnmovableAnimationStage(t) + 1);
MarkTileDirtyByTile(t);
}
}
/** We encode the company HQ size in the animation stage. */
#define GetCompanyHQSize GetUnmovableAnimationStage
/** We encode the company HQ size in the animation stage. */
#define IncreaseCompanyHQSize IncreaseAnimationStage
/**
* Destroy a HQ.
@@ -91,12 +110,9 @@ void UpdateCompanyHQ(Company *c, uint score)
(val++, score < 720) ||
(val++, true);
EnlargeCompanyHQ(tile, val);
MarkTileDirtyByTile(tile);
MarkTileDirtyByTile(tile + TileDiffXY(0, 1));
MarkTileDirtyByTile(tile + TileDiffXY(1, 0));
MarkTileDirtyByTile(tile + TileDiffXY(1, 1));
while (GetCompanyHQSize(tile) < val) {
IncreaseCompanyHQSize(tile);
}
}
extern CommandCost CheckFlatLand(TileArea tile_area, DoCommandFlag flags);