tron@3111: /* $Id$ */ tron@3111: tron@3111: #ifndef WATER_MAP_H tron@3111: #define WATER_MAP_H tron@3111: celestar@3372: typedef enum DepotPart { celestar@3372: DEPOT_NORTH = 0x80, celestar@3373: DEPOT_SOUTH = 0x81, celestar@3373: DEPOT_END = 0x84, celestar@3372: } DepotPart; celestar@3372: celestar@3372: typedef enum LockPart { celestar@3372: LOCK_MIDDLE = 0x10, celestar@3372: LOCK_LOWER = 0x14, celestar@3372: LOCK_UPPER = 0x18 celestar@3372: } LockPart; celestar@3372: celestar@3373: static inline bool IsClearWaterTile(TileIndex tile) celestar@3373: { celestar@3373: return celestar@3373: IsTileType(tile, MP_WATER) && celestar@3373: _m[tile].m5 == 0 && celestar@3373: GetTileSlope(tile, NULL) == 0; celestar@3373: } celestar@3373: celestar@3373: static inline TileIndex GetOtherShipDepotTile(TileIndex t) celestar@3373: { celestar@3373: return t + (HASBIT(_m[t].m5, 0) ? -1 : 1) * (HASBIT(_m[t].m5, 1) ? TileDiffXY(0, 1) : TileDiffXY(1, 0)); celestar@3373: } celestar@3373: celestar@3373: static inline TileIndex IsShipDepot(TileIndex t) celestar@3373: { celestar@3373: return IS_INT_INSIDE(_m[t].m5, DEPOT_NORTH, DEPOT_END); celestar@3373: } celestar@3373: celestar@3373: static inline DiagDirection GetLockDirection(TileIndex t) celestar@3373: { celestar@3373: return (DiagDirection)GB(_m[t].m5, 0, 2); celestar@3373: } celestar@3373: celestar@3373: tron@3111: static inline void MakeWater(TileIndex t) tron@3111: { tron@3111: SetTileType(t, MP_WATER); tron@3111: SetTileOwner(t, OWNER_WATER); tron@3111: _m[t].m2 = 0; tron@3111: _m[t].m3 = 0; tron@3111: _m[t].m4 = 0; tron@3111: _m[t].m5 = 0; tron@3111: } tron@3111: tron@3111: static inline void MakeShore(TileIndex t) tron@3111: { tron@3111: SetTileType(t, MP_WATER); tron@3111: SetTileOwner(t, OWNER_WATER); tron@3111: _m[t].m2 = 0; tron@3111: _m[t].m3 = 0; tron@3111: _m[t].m4 = 0; tron@3111: _m[t].m5 = 1; tron@3111: } tron@3111: celestar@3372: static inline void MakeShipDepot(TileIndex t, Owner o, DepotPart base, Axis a) celestar@3372: { celestar@3372: SetTileType(t, MP_WATER); celestar@3372: SetTileOwner(t, o); celestar@3372: _m[t].m2 = 0; celestar@3372: _m[t].m3 = 0; celestar@3372: _m[t].m4 = 0; celestar@3372: _m[t].m5 = base + a * 2; celestar@3372: } celestar@3372: celestar@3372: static inline void MakeLockTile(TileIndex t, byte section) celestar@3372: { celestar@3372: SetTileType(t, MP_WATER); celestar@3372: SetTileOwner(t, OWNER_WATER); celestar@3372: _m[t].m2 = 0; celestar@3372: _m[t].m3 = 0; celestar@3372: _m[t].m4 = 0; celestar@3372: _m[t].m5 = section; celestar@3372: } celestar@3372: celestar@3372: static inline void MakeLock(TileIndex t, DiagDirection d) celestar@3372: { celestar@3372: TileIndexDiff delta = TileOffsByDir(d); celestar@3372: celestar@3372: MakeLockTile(t, LOCK_MIDDLE + d); celestar@3372: MakeLockTile(t - delta, LOCK_LOWER + d); celestar@3372: MakeLockTile(t + delta, LOCK_UPPER + d); celestar@3372: } celestar@3372: tron@3111: #endif