(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles

pull/155/head
celestar 18 years ago
parent a2ea99dc66
commit 05b9ec64c4

@ -406,28 +406,26 @@ static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts,
static void DrawTile_Water(TileInfo *ti)
{
// draw water tile
if (ti->map5 == 0) {
DrawGroundSprite(SPR_FLAT_WATER_TILE);
if (ti->z != 0) DrawCanalWater(ti->tile);
return;
}
// draw shore
if (ti->map5 == 1) {
assert(ti->tileh < 16);
DrawGroundSprite(_water_shore_sprites[ti->tileh]);
return;
switch (GetWaterTileType(ti->tile)) {
case WATER_CLEAR:
DrawGroundSprite(SPR_FLAT_WATER_TILE);
if (ti->z != 0) DrawCanalWater(ti->tile);
break;
case WATER_COAST:
assert(ti->tileh < 16);
DrawGroundSprite(_water_shore_sprites[ti->tileh]);
break;
case WATER_LOCK: {
const WaterDrawTileStruct *t = _shiplift_display_seq[ti->map5 & 0xF];
DrawWaterStuff(ti, t, 0, ti->z > t[3].delta_y ? 24 : 0);
} break;
case WATER_DEPOT:
DrawWaterStuff(ti, _shipdepot_display_seq[ti->map5 & 0x7F], PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), 0);
break;
}
// draw shiplift
if ((ti->map5 & 0xF0) == 0x10) {
const WaterDrawTileStruct *t = _shiplift_display_seq[ti->map5 & 0xF];
DrawWaterStuff(ti, t, 0, ti->z > t[3].delta_y ? 24 : 0);
return;
}
DrawWaterStuff(ti, _shipdepot_display_seq[ti->map5 & 0x7F], PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), 0);
}
void DrawShipDepotSprite(int x, int y, int image)
@ -460,16 +458,18 @@ static void GetAcceptedCargo_Water(TileIndex tile, AcceptedCargo ac)
static void GetTileDesc_Water(TileIndex tile, TileDesc *td)
{
if (_m[tile].m5 == 0 && TilePixelHeight(tile) == 0) {
td->str = STR_3804_WATER;
} else if (_m[tile].m5 == 0) {
td->str = STR_LANDINFO_CANAL;
} else if (_m[tile].m5 == 1) {
td->str = STR_3805_COAST_OR_RIVERBANK;
} else if ((_m[tile].m5 & 0xF0) == 0x10) {
td->str = STR_LANDINFO_LOCK;
} else {
td->str = STR_3806_SHIP_DEPOT;
switch (GetWaterTileType(tile)) {
case WATER_CLEAR:
if (TilePixelHeight(tile) == 0) {
td->str = STR_3804_WATER;
} else {
td->str = STR_LANDINFO_CANAL;
}
break;
case WATER_COAST: td->str = STR_3805_COAST_OR_RIVERBANK; break;
case WATER_LOCK : td->str = STR_LANDINFO_LOCK; break;
case WATER_DEPOT: td->str = STR_3806_SHIP_DEPOT; break;
default: assert(0); break;
}
td->owner = GetTileOwner(tile);

@ -3,6 +3,13 @@
#ifndef WATER_MAP_H
#define WATER_MAP_H
typedef enum WaterTileType {
WATER_CLEAR,
WATER_COAST,
WATER_LOCK,
WATER_DEPOT,
} WaterTileType;
typedef enum DepotPart {
DEPOT_NORTH = 0x80,
DEPOT_SOUTH = 0x81,
@ -12,15 +19,28 @@ typedef enum DepotPart {
typedef enum LockPart {
LOCK_MIDDLE = 0x10,
LOCK_LOWER = 0x14,
LOCK_UPPER = 0x18
LOCK_UPPER = 0x18,
LOCK_END = 0x1C
} LockPart;
static inline bool IsClearWaterTile(TileIndex tile)
static inline WaterTileType GetWaterTileType(TileIndex t)
{
if (_m[t].m5 == 0) return WATER_CLEAR;
if (_m[t].m5 == 1) return WATER_COAST;
if (IS_INT_INSIDE(_m[t].m5, LOCK_MIDDLE, LOCK_END)) return WATER_LOCK;
if (IS_INT_INSIDE(_m[t].m5, DEPOT_NORTH, DEPOT_END)) return WATER_DEPOT;
assert(0);
}
static inline bool IsWater(TileIndex t)
{
return GetWaterTileType(t) == WATER_CLEAR;
}
static inline bool IsClearWaterTile(TileIndex t)
{
return
IsTileType(tile, MP_WATER) &&
_m[tile].m5 == 0 &&
GetTileSlope(tile, NULL) == 0;
return IsTileType(t, MP_WATER) && IsWater(t) && GetTileSlope(t, NULL) == 0;
}
static inline TileIndex GetOtherShipDepotTile(TileIndex t)

Loading…
Cancel
Save