rubidium@9723: /* $Id$ */ rubidium@9723: rubidium@9723: /** @file tunnelbridge_map.h Functions that have tunnels and bridges in common */ rubidium@9723: rubidium@9723: #ifndef TUNNELBRIDGE_MAP_H rubidium@9723: #define TUNNELBRIDGE_MAP_H rubidium@9723: rubidium@9723: #include "direction_func.h" rubidium@9723: #include "core/bitmath_func.hpp" rubidium@9723: #include "tile_map.h" rubidium@9723: #include "bridge_map.h" rubidium@9723: #include "tunnel_map.h" rubidium@10455: #include "transport_type.h" rubidium@9723: rubidium@9723: rubidium@9723: /** glx@9732: * Get the direction pointing to the other end. glx@9732: * glx@9732: * Tunnel: Get the direction facing into the tunnel rubidium@9723: * Bridge: Get the direction pointing onto the bridge rubidium@9723: * @param t The tile to analyze rubidium@9723: * @pre IsTileType(t, MP_TUNNELBRIDGE) rubidium@9723: * @return the above mentionned direction rubidium@9723: */ rubidium@9723: static inline DiagDirection GetTunnelBridgeDirection(TileIndex t) rubidium@9723: { rubidium@9723: assert(IsTileType(t, MP_TUNNELBRIDGE)); rubidium@9723: return (DiagDirection)GB(_m[t].m5, 0, 2); rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Tunnel: Get the transport type of the tunnel (road or rail) rubidium@9723: * Bridge: Get the transport type of the bridge's ramp rubidium@9723: * @param t The tile to analyze rubidium@9723: * @pre IsTileType(t, MP_TUNNELBRIDGE) rubidium@9723: * @return the transport type in the tunnel/bridge rubidium@9723: */ rubidium@9723: static inline TransportType GetTunnelBridgeTransportType(TileIndex t) rubidium@9723: { rubidium@9723: assert(IsTileType(t, MP_TUNNELBRIDGE)); rubidium@9723: return (TransportType)GB(_m[t].m5, 2, 2); rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Tunnel: Is this tunnel entrance in a snowy or desert area? rubidium@9723: * Bridge: Does the bridge ramp lie in a snow or desert area? rubidium@9723: * @param t The tile to analyze rubidium@9723: * @pre IsTileType(t, MP_TUNNELBRIDGE) rubidium@9723: * @return true if and only if the tile is in a snowy/desert area rubidium@9723: */ rubidium@9723: static inline bool HasTunnelBridgeSnowOrDesert(TileIndex t) rubidium@9723: { rubidium@9723: assert(IsTileType(t, MP_TUNNELBRIDGE)); rubidium@9723: return HasBit(_m[t].m4, 7); rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Tunnel: Places this tunnel entrance in a snowy or desert area, or takes it out of there. rubidium@9723: * Bridge: Sets whether the bridge ramp lies in a snow or desert area. rubidium@9723: * @param t the tunnel entrance / bridge ramp tile rubidium@9723: * @param snow_or_desert is the entrance/ramp in snow or desert (true), when rubidium@9723: * not in snow and not in desert false rubidium@9723: * @pre IsTileType(t, MP_TUNNELBRIDGE) rubidium@9723: */ rubidium@9723: static inline void SetTunnelBridgeSnowOrDesert(TileIndex t, bool snow_or_desert) rubidium@9723: { rubidium@9723: assert(IsTileType(t, MP_TUNNELBRIDGE)); rubidium@9723: SB(_m[t].m4, 7, 1, snow_or_desert); rubidium@9723: } rubidium@9723: rubidium@9723: /** rubidium@9723: * Determines type of the wormhole and returns its other end rubidium@9723: * @param t one end rubidium@9723: * @pre IsTileType(t, MP_TUNNELBRIDGE) rubidium@9723: * @return other end rubidium@9723: */ rubidium@9723: static inline TileIndex GetOtherTunnelBridgeEnd(TileIndex t) rubidium@9723: { rubidium@9723: assert(IsTileType(t, MP_TUNNELBRIDGE)); rubidium@9723: return IsTunnel(t) ? GetOtherTunnelEnd(t) : GetOtherBridgeEnd(t); rubidium@9723: } rubidium@9723: rubidium@9723: #endif /* TUNNELBRIDGE_MAP_H */