tron@2186: /* $Id$ */ tron@2186: rubidium@8138: /** @file signal_func.h Functions related to signals. */ celestar@2274: rubidium@8138: #ifndef SIGNAL_FUNC_H rubidium@8138: #define SIGNAL_FUNC_H celestar@2254: rubidium@8138: #include "track_type.h" smatz@8238: #include "tile_type.h" smatz@8238: #include "direction_type.h" smatz@8238: #include "track_type.h" smatz@8300: #include "player_type.h" matthijs@1942: matthijs@1942: /** matthijs@1942: * Maps a trackdir to the bit that stores its status in the map arrays, in the matthijs@1942: * direction along with the trackdir. matthijs@1942: */ rubidium@6162: static inline byte SignalAlongTrackdir(Trackdir trackdir) rubidium@6162: { rubidium@6162: extern const byte _signal_along_trackdir[TRACKDIR_END]; rubidium@6162: return _signal_along_trackdir[trackdir]; rubidium@6162: } matthijs@1942: matthijs@1942: /** matthijs@1942: * Maps a trackdir to the bit that stores its status in the map arrays, in the matthijs@1942: * direction against the trackdir. matthijs@1942: */ rubidium@6162: static inline byte SignalAgainstTrackdir(Trackdir trackdir) rubidium@6162: { matthijs@1948: extern const byte _signal_against_trackdir[TRACKDIR_END]; matthijs@1948: return _signal_against_trackdir[trackdir]; matthijs@1948: } matthijs@1942: matthijs@1942: /** matthijs@1942: * Maps a Track to the bits that store the status of the two signals that can matthijs@1942: * be present on the given track. matthijs@1942: */ rubidium@6162: static inline byte SignalOnTrack(Track track) rubidium@6162: { matthijs@1948: extern const byte _signal_on_track[TRACK_END]; matthijs@1948: return _signal_on_track[track]; matthijs@1948: } matthijs@1942: smatz@9222: /** State of the signal segment */ smatz@9222: enum SigSegState { smatz@9222: SIGSEG_FREE, ///< Free and has no pre-signal exits or at least one green exit smatz@9222: SIGSEG_FULL, ///< Occupied by a train rubidium@9818: SIGSEG_PBS, ///< Segment is a PBS segment smatz@9222: }; smatz@9222: smatz@9222: SigSegState UpdateSignalsOnSegment(TileIndex tile, DiagDirection side, Owner owner); smatz@8300: void SetSignalsOnBothDir(TileIndex tile, Track track, Owner owner); smatz@8306: void AddTrackToSignalBuffer(TileIndex tile, Track track, Owner owner); smatz@8306: void AddSideToSignalBuffer(TileIndex tile, DiagDirection side, Owner owner); smatz@8306: void UpdateSignalsInBuffer(); smatz@8238: rubidium@8138: #endif /* SIGNAL_FUNC_H */