(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

This commit is contained in:
celestar 2006-03-31 18:36:13 +00:00
parent 949758e109
commit 736983a06d
2 changed files with 55 additions and 35 deletions

View File

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

View File

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