mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
(svn r20351) -Codechange: Uncouple water lock and depot drawing.
This commit is contained in:
parent
80eea10a48
commit
80943c5ec7
@ -573,30 +573,22 @@ struct LocksDrawTileStruct {
|
||||
|
||||
#include "table/water_land.h"
|
||||
|
||||
static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts,
|
||||
PaletteID palette, uint base, bool draw_ground)
|
||||
/**
|
||||
* Draw a build sprite sequence for water tiles.
|
||||
* If buildings are invisible, nothing will be drawn.
|
||||
* @param ti Tile info.
|
||||
* @param wdts Sprite sequence to draw.
|
||||
* @param base Base sprite.
|
||||
* @param offset Additional sprite offset.
|
||||
* @param palette Palette to use.
|
||||
*/
|
||||
static void DrawWaterTileStruct(const TileInfo *ti, const WaterDrawTileStruct *wdts, SpriteID base, uint offset, PaletteID palette)
|
||||
{
|
||||
SpriteID water_base = GetCanalSprite(CF_WATERSLOPE, ti->tile);
|
||||
SpriteID locks_base = GetCanalSprite(CF_LOCKS, ti->tile);
|
||||
|
||||
/* If no custom graphics, use defaults */
|
||||
if (water_base == 0) water_base = SPR_CANALS_BASE;
|
||||
if (locks_base == 0) {
|
||||
locks_base = SPR_LOCK_BASE;
|
||||
} else {
|
||||
/* If using custom graphics, ignore the variation on height */
|
||||
base = 0;
|
||||
}
|
||||
|
||||
SpriteID image = wdts++->image;
|
||||
if (image < 4) image += water_base;
|
||||
if (draw_ground) DrawGroundSprite(image, PAL_NONE);
|
||||
|
||||
/* End now if buildings are invisible */
|
||||
/* Don't draw if buildings are invisible. */
|
||||
if (IsInvisibilitySet(TO_BUILDINGS)) return;
|
||||
|
||||
for (; wdts->delta_x != 0x80; wdts++) {
|
||||
AddSortableSpriteToDraw(wdts->image + base + ((wdts->image < 24) ? locks_base : 0), palette,
|
||||
AddSortableSpriteToDraw(base + wdts->image + offset, palette,
|
||||
ti->x + wdts->delta_x, ti->y + wdts->delta_y,
|
||||
wdts->size_x, wdts->size_y,
|
||||
wdts->size_z, ti->z + wdts->delta_z,
|
||||
@ -604,6 +596,40 @@ static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts,
|
||||
}
|
||||
}
|
||||
|
||||
/** Draw a lock tile. */
|
||||
static void DrawWaterLock(const TileInfo *ti)
|
||||
{
|
||||
const WaterDrawTileStruct *wdts = _lock_display_seq[GetSection(ti->tile)];
|
||||
|
||||
/* Draw ground sprite. */
|
||||
SpriteID water_base = GetCanalSprite(CF_WATERSLOPE, ti->tile);
|
||||
if (water_base == 0) water_base = SPR_CANALS_BASE;
|
||||
|
||||
SpriteID image = wdts++->image;
|
||||
if (image < 4) image += water_base;
|
||||
DrawGroundSprite(image, PAL_NONE);
|
||||
|
||||
/* Draw structures. */
|
||||
uint zoffs = 0;
|
||||
SpriteID base = GetCanalSprite(CF_LOCKS, ti->tile);
|
||||
|
||||
if (base == 0) {
|
||||
/* If no custom graphics, use defaults. */
|
||||
base = SPR_LOCK_BASE;
|
||||
zoffs = ti->z > wdts[3].delta_y ? 24 : 0;
|
||||
}
|
||||
|
||||
DrawWaterTileStruct(ti, wdts, base, zoffs, PAL_NONE);
|
||||
}
|
||||
|
||||
/** Draw a ship depot tile. */
|
||||
static void DrawWaterDepot(const TileInfo *ti)
|
||||
{
|
||||
DrawWaterClassGround(ti);
|
||||
/* Skip first entry in _shipdepot_display_seq as this is the ground sprite. */
|
||||
DrawWaterTileStruct(ti, _shipdepot_display_seq[GetSection(ti->tile)] + 1, 0, 0, COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile)));
|
||||
}
|
||||
|
||||
static void DrawRiverWater(const TileInfo *ti)
|
||||
{
|
||||
SpriteID image = SPR_FLAT_WATER_TILE;
|
||||
@ -677,15 +703,12 @@ static void DrawTile_Water(TileInfo *ti)
|
||||
break;
|
||||
}
|
||||
|
||||
case WATER_TILE_LOCK: {
|
||||
const WaterDrawTileStruct *t = _lock_display_seq[GetSection(ti->tile)];
|
||||
DrawWaterStuff(ti, t, 0, ti->z > t[3].delta_y ? 24 : 0, true);
|
||||
case WATER_TILE_LOCK:
|
||||
DrawWaterLock(ti);
|
||||
break;
|
||||
}
|
||||
|
||||
case WATER_TILE_DEPOT:
|
||||
DrawWaterClassGround(ti);
|
||||
DrawWaterStuff(ti, _shipdepot_display_seq[GetSection(ti->tile)], COMPANY_SPRITE_COLOUR(GetTileOwner(ti->tile)), 0, false);
|
||||
DrawWaterDepot(ti);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user