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)
|
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);
|
||||||
|
|
32
water_map.h
32
water_map.h
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue