mirror of https://github.com/OpenTTD/OpenTTD.git
(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:
parent
949758e109
commit
736983a06d
58
water_cmd.c
58
water_cmd.c
|
@ -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;
|
||||
}
|
||||
switch (GetWaterTileType(ti->tile)) {
|
||||
case WATER_CLEAR:
|
||||
DrawGroundSprite(SPR_FLAT_WATER_TILE);
|
||||
if (ti->z != 0) DrawCanalWater(ti->tile);
|
||||
break;
|
||||
|
||||
// draw shore
|
||||
if (ti->map5 == 1) {
|
||||
assert(ti->tileh < 16);
|
||||
DrawGroundSprite(_water_shore_sprites[ti->tileh]);
|
||||
return;
|
||||
}
|
||||
case WATER_COAST:
|
||||
assert(ti->tileh < 16);
|
||||
DrawGroundSprite(_water_shore_sprites[ti->tileh]);
|
||||
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;
|
||||
}
|
||||
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;
|
||||
|
||||
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)
|
||||
|
@ -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);
|
||||
|
|
32
water_map.h
32
water_map.h
|
@ -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)
|
||||
{
|
||||
return
|
||||
IsTileType(tile, MP_WATER) &&
|
||||
_m[tile].m5 == 0 &&
|
||||
GetTileSlope(tile, NULL) == 0;
|
||||
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(t, MP_WATER) && IsWater(t) && GetTileSlope(t, NULL) == 0;
|
||||
}
|
||||
|
||||
static inline TileIndex GetOtherShipDepotTile(TileIndex t)
|
||||
|
|
Loading…
Reference in New Issue