mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r20338) -Codechange: unify the unmovable tile drawing
This commit is contained in:
parent
3bfe26c69d
commit
fbde46c028
|
@ -9,59 +9,82 @@
|
|||
|
||||
/** @file unmovable_land.h Sprites to use and how to display them for unmovable tiles. */
|
||||
|
||||
static const DrawTileSeqStruct _draw_tile_transmitterlighthouse_data[] = {
|
||||
{ 7, 7, 0, 2, 2, 70, {SPR_UNMOVABLE_TRANSMITTER, PAL_NONE}},
|
||||
{ 4, 4, 0, 7, 7, 61, {SPR_UNMOVABLE_LIGHTHOUSE, PAL_NONE}},
|
||||
};
|
||||
|
||||
#define TILE_SEQ_LINE(sz, img) { 0, 0, 0, 16, 16, sz, {img, PAL_NONE} },
|
||||
#define TILE_SEQ_END() { (int8)0x80, 0, 0, 0, 0, 0, {0, 0} }
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_nothing[] = {
|
||||
static const DrawTileSeqStruct _unmovable_nothing[] = {
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_8[] = {
|
||||
static const DrawTileSeqStruct _unmovable_transmitter_seq[] = {
|
||||
{ 7, 7, 0, 2, 2, 70, {SPR_UNMOVABLE_TRANSMITTER, PAL_NONE}},
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_lighthouse_seq[] = {
|
||||
{ 4, 4, 0, 7, 7, 61, {SPR_UNMOVABLE_LIGHTHOUSE, PAL_NONE}},
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_statue_seq[] = {
|
||||
{ 0, 0, 0, 16, 16, 25, {SPR_STATUE_COMPANY | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE}},
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_owned_land_seq[] = {
|
||||
{ 8, 8, 0, 1, 1, 6, {SPR_BOUGHT_LAND | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE}},
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSprites _unmovables[] = {
|
||||
{ { SPR_FLAT_2_THIRD_GRASS_TILE, PAL_NONE }, _unmovable_transmitter_seq },
|
||||
{ { SPR_FLAT_2_THIRD_GRASS_TILE, PAL_NONE }, _unmovable_lighthouse_seq },
|
||||
{ { SPR_CONCRETE_GROUND, PAL_NONE }, _unmovable_statue_seq },
|
||||
{ { SPR_FLAT_BARE_LAND, PAL_NONE }, _unmovable_owned_land_seq },
|
||||
};
|
||||
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_hq_medium_north[] = {
|
||||
TILE_SEQ_LINE(20, SPR_MEDIUMHQ_NORTH_WALL | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_9[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_medium_east[] = {
|
||||
TILE_SEQ_LINE(20, SPR_MEDIUMHQ_EAST_WALL | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_10[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_medium_west[] = {
|
||||
TILE_SEQ_LINE(20, SPR_MEDIUMHQ_WEST_WALL | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_12[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_large_north[] = {
|
||||
TILE_SEQ_LINE(50, SPR_LARGEHQ_NORTH_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_13[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_large_east[] = {
|
||||
TILE_SEQ_LINE(50, SPR_LARGEHQ_EAST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_14[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_large_west[] = {
|
||||
TILE_SEQ_LINE(50, SPR_LARGEHQ_WEST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_16[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_huge_north[] = {
|
||||
TILE_SEQ_LINE(60, SPR_HUGEHQ_NORTH_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_17[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_huge_east[] = {
|
||||
TILE_SEQ_LINE(60, SPR_HUGEHQ_EAST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
||||
static const DrawTileSeqStruct _unmovable_display_datas_18[] = {
|
||||
static const DrawTileSeqStruct _unmovable_hq_huge_west[] = {
|
||||
TILE_SEQ_LINE(60, SPR_HUGEHQ_WEST_BUILD | (1 << PALETTE_MODIFIER_COLOUR))
|
||||
TILE_SEQ_END()
|
||||
};
|
||||
|
@ -71,39 +94,40 @@ static const DrawTileSeqStruct _unmovable_display_datas_18[] = {
|
|||
|
||||
#define TILE_SPRITE_LINE(img, dtss) { {img | (1 << PALETTE_MODIFIER_COLOUR), PAL_NONE}, dtss },
|
||||
|
||||
static const DrawTileSprites _unmovable_display_datas[] = {
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_NORTH, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_EAST, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_WEST, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_SOUTH, _unmovable_display_nothing)
|
||||
static const DrawTileSprites _unmovable_hq[] = {
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_NORTH, _unmovable_nothing)
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_EAST, _unmovable_nothing)
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_WEST, _unmovable_nothing)
|
||||
TILE_SPRITE_LINE(SPR_TINYHQ_SOUTH, _unmovable_nothing)
|
||||
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_NORTH, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_EAST, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_WEST, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_SOUTH, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_NORTH, _unmovable_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_EAST, _unmovable_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_WEST, _unmovable_nothing)
|
||||
TILE_SPRITE_LINE(SPR_SMALLHQ_SOUTH, _unmovable_nothing)
|
||||
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_NORTH, _unmovable_display_datas_8)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_EAST, _unmovable_display_datas_9)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_WEST, _unmovable_display_datas_10)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_SOUTH, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_NORTH, _unmovable_hq_medium_north)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_EAST, _unmovable_hq_medium_east)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_WEST, _unmovable_hq_medium_west)
|
||||
TILE_SPRITE_LINE(SPR_MEDIUMHQ_SOUTH, _unmovable_nothing)
|
||||
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_NORTH_GROUND, _unmovable_display_datas_12)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_EAST_GROUND, _unmovable_display_datas_13)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_WEST_GROUND, _unmovable_display_datas_14)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_SOUTH, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_NORTH_GROUND, _unmovable_hq_large_north)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_EAST_GROUND, _unmovable_hq_large_east)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_WEST_GROUND, _unmovable_hq_large_west)
|
||||
TILE_SPRITE_LINE(SPR_LARGEHQ_SOUTH, _unmovable_nothing)
|
||||
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_NORTH_GROUND, _unmovable_display_datas_16)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_EAST_GROUND, _unmovable_display_datas_17)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_WEST_GROUND, _unmovable_display_datas_18)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_SOUTH, _unmovable_display_nothing)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_NORTH_GROUND, _unmovable_hq_huge_north)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_EAST_GROUND, _unmovable_hq_huge_east)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_WEST_GROUND, _unmovable_hq_huge_west)
|
||||
TILE_SPRITE_LINE(SPR_HUGEHQ_SOUTH, _unmovable_nothing)
|
||||
};
|
||||
|
||||
#undef TILE_SPRITE_LINE
|
||||
|
||||
/** Specification of the original unmovable structures. */
|
||||
static const UnmovableSpec _original_unmovable[] = {
|
||||
{STR_LAI_UNMOVABLE_DESCRIPTION_TRANSMITTER, 0x11, 1, 1},
|
||||
{STR_LAI_UNMOVABLE_DESCRIPTION_LIGHTHOUSE, 0x11, 1, 1},
|
||||
{STR_TOWN_BUILDING_NAME_STATUE_1, 0x11, 1, 1},
|
||||
{STR_LAI_UNMOVABLE_DESCRIPTION_COMPANY_OWNED_LAND, 0x11, 10, 2},
|
||||
{STR_LAI_UNMOVABLE_DESCRIPTION_COMPANY_HEADQUARTERS, 0x22, 1, 1},
|
||||
{ STR_LAI_UNMOVABLE_DESCRIPTION_TRANSMITTER, 0x11, 1, 1 },
|
||||
{ STR_LAI_UNMOVABLE_DESCRIPTION_LIGHTHOUSE, 0x11, 1, 1 },
|
||||
{ STR_TOWN_BUILDING_NAME_STATUE_1, 0x11, 1, 1 },
|
||||
{ STR_LAI_UNMOVABLE_DESCRIPTION_COMPANY_OWNED_LAND, 0x11, 10, 2 },
|
||||
{ STR_LAI_UNMOVABLE_DESCRIPTION_COMPANY_HEADQUARTERS, 0x22, 1, 1 },
|
||||
};
|
||||
|
|
|
@ -244,67 +244,36 @@ static Foundation GetFoundation_Unmovable(TileIndex tile, Slope tileh);
|
|||
|
||||
static void DrawTile_Unmovable(TileInfo *ti)
|
||||
{
|
||||
DrawFoundation(ti, GetFoundation_Unmovable(ti->tile, ti->tileh));
|
||||
switch (GetUnmovableType(ti->tile)) {
|
||||
default: NOT_REACHED();
|
||||
case UNMOVABLE_TRANSMITTER:
|
||||
case UNMOVABLE_LIGHTHOUSE: {
|
||||
const DrawTileSeqStruct *dtu = &_draw_tile_transmitterlighthouse_data[GetUnmovableType(ti->tile)];
|
||||
UnmovableType type = GetUnmovableType(ti->tile);
|
||||
if (type != UNMOVABLE_OWNED_LAND) DrawFoundation(ti, GetFoundation_Unmovable(ti->tile, ti->tileh));
|
||||
|
||||
DrawClearLandTile(ti, 2);
|
||||
const DrawTileSprites *dts = NULL;
|
||||
Owner to = GetTileOwner(ti->tile);
|
||||
PaletteID palette = to == OWNER_NONE ? PAL_NONE : COMPANY_SPRITE_COLOUR(to);
|
||||
|
||||
if (IsInvisibilitySet(TO_STRUCTURES)) break;
|
||||
if (type == UNMOVABLE_HQ) {
|
||||
uint8 offset = GetUnmovableOffset(ti->tile);
|
||||
dts = &_unmovable_hq[GetCompanyHQSize(ti->tile) << 2 | GB(offset, 4, 1) | GB(offset, 0, 1) << 1];
|
||||
} else {
|
||||
dts = &_unmovables[type];
|
||||
}
|
||||
|
||||
DrawGroundSprite(dts->ground.sprite, palette);
|
||||
|
||||
if (!IsInvisibilitySet(TO_STRUCTURES)) {
|
||||
const DrawTileSeqStruct *dtss;
|
||||
foreach_draw_tile_seq(dtss, dts->seq) {
|
||||
AddSortableSpriteToDraw(
|
||||
dtu->image.sprite, PAL_NONE, ti->x | dtu->delta_x, ti->y | dtu->delta_y,
|
||||
dtu->size_x, dtu->size_y, dtu->size_z, ti->z,
|
||||
dtss->image.sprite, palette,
|
||||
ti->x + dtss->delta_x, ti->y + dtss->delta_y,
|
||||
dtss->size_x, dtss->size_y,
|
||||
dtss->size_z, ti->z + dtss->delta_z,
|
||||
IsTransparencySet(TO_STRUCTURES)
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case UNMOVABLE_STATUE:
|
||||
DrawGroundSprite(SPR_CONCRETE_GROUND, PAL_NONE);
|
||||
|
||||
if (IsInvisibilitySet(TO_STRUCTURES)) break;
|
||||
|
||||
AddSortableSpriteToDraw(SPR_STATUE_COMPANY, COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile)), ti->x, ti->y, 16, 16, 25, ti->z, IsTransparencySet(TO_STRUCTURES));
|
||||
break;
|
||||
|
||||
case UNMOVABLE_OWNED_LAND:
|
||||
DrawClearLandTile(ti, 0);
|
||||
|
||||
AddSortableSpriteToDraw(
|
||||
SPR_BOUGHT_LAND, COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile)),
|
||||
ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSlopeZ(ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2)
|
||||
);
|
||||
DrawBridgeMiddle(ti);
|
||||
break;
|
||||
|
||||
case UNMOVABLE_HQ: {
|
||||
assert(IsCompanyHQ(ti->tile));
|
||||
|
||||
PaletteID palette = COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile));
|
||||
|
||||
uint8 offset = GetUnmovableOffset(ti->tile);
|
||||
const DrawTileSprites *t = &_unmovable_display_datas[GetCompanyHQSize(ti->tile) << 2 | GB(offset, 4, 1) | GB(offset, 0, 1) << 1];
|
||||
DrawGroundSprite(t->ground.sprite, palette);
|
||||
|
||||
if (IsInvisibilitySet(TO_STRUCTURES)) break;
|
||||
|
||||
const DrawTileSeqStruct *dtss;
|
||||
foreach_draw_tile_seq(dtss, t->seq) {
|
||||
AddSortableSpriteToDraw(
|
||||
dtss->image.sprite, palette,
|
||||
ti->x + dtss->delta_x, ti->y + dtss->delta_y,
|
||||
dtss->size_x, dtss->size_y,
|
||||
dtss->size_z, ti->z + dtss->delta_z,
|
||||
IsTransparencySet(TO_STRUCTURES)
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (type == UNMOVABLE_OWNED_LAND) DrawBridgeMiddle(ti);
|
||||
}
|
||||
|
||||
static uint GetSlopeZ_Unmovable(TileIndex tile, uint x, uint y)
|
||||
|
|
Loading…
Reference in New Issue