yapf/yapf_node_rail.hpp
changeset 3978 bfd412e43038
parent 3900 4984308f9125
equal deleted inserted replaced
3977:edb5b94e2094 3978:bfd412e43038
    68 	typedef CYapfRailSegment CachedData;
    68 	typedef CYapfRailSegment CachedData;
    69 
    69 
    70 	CYapfRailSegment *m_segment;
    70 	CYapfRailSegment *m_segment;
    71 	uint16            m_num_signals_passed;
    71 	uint16            m_num_signals_passed;
    72 	union {
    72 	union {
    73 		byte            m_inherited_flags;
    73 		uint32          m_inherited_flags;
    74 		struct {
    74 		struct {
    75 			bool          m_targed_seen : 1;
    75 			bool          m_targed_seen : 1;
       
    76 			bool          m_choice_seen : 1;
    76 			bool          m_last_signal_was_red : 1;
    77 			bool          m_last_signal_was_red : 1;
    77 		} flags_s;
    78 		} flags_s;
    78 	} flags_u;
    79 	} flags_u;
    79 	SignalType        m_last_red_signal_type;
    80 	SignalType        m_last_red_signal_type;
    80 
    81 
    81 	FORCEINLINE void Set(CYapfRailNodeT* parent, TileIndex tile, Trackdir td)
    82 	FORCEINLINE void Set(CYapfRailNodeT* parent, TileIndex tile, Trackdir td, bool is_choice)
    82 	{
    83 	{
    83 		base::Set(parent, tile, td);
    84 		base::Set(parent, tile, td, is_choice);
    84 		m_segment = NULL;
    85 		m_segment = NULL;
    85 		if (parent == NULL) {
    86 		if (parent == NULL) {
    86 			m_num_signals_passed      = 0;
    87 			m_num_signals_passed      = 0;
    87 			flags_u.m_inherited_flags = 0;
    88 			flags_u.m_inherited_flags = 0;
    88 			m_last_red_signal_type    = SIGTYPE_NORMAL;
    89 			m_last_red_signal_type    = SIGTYPE_NORMAL;
    89 		} else {
    90 		} else {
    90 			m_num_signals_passed      = parent->m_num_signals_passed;
    91 			m_num_signals_passed      = parent->m_num_signals_passed;
    91 			flags_u.m_inherited_flags = parent->flags_u.m_inherited_flags;
    92 			flags_u.m_inherited_flags = parent->flags_u.m_inherited_flags;
    92 			m_last_red_signal_type    = parent->m_last_red_signal_type;
    93 			m_last_red_signal_type    = parent->m_last_red_signal_type;
    93 		}
    94 		}
       
    95 		flags_u.flags_s.m_choice_seen |= is_choice;
    94 	}
    96 	}
    95 
    97 
    96 	FORCEINLINE TileIndex GetLastTile() const {assert(m_segment != NULL); return m_segment->m_last_tile;}
    98 	FORCEINLINE TileIndex GetLastTile() const {assert(m_segment != NULL); return m_segment->m_last_tile;}
    97 	FORCEINLINE Trackdir GetLastTrackdir() const {assert(m_segment != NULL); return m_segment->m_last_td;}
    99 	FORCEINLINE Trackdir GetLastTrackdir() const {assert(m_segment != NULL); return m_segment->m_last_td;}
    98 	FORCEINLINE void SetLastTileTrackdir(TileIndex tile, Trackdir td) {assert(m_segment != NULL); m_segment->m_last_tile = tile; m_segment->m_last_td = td;}
   100 	FORCEINLINE void SetLastTileTrackdir(TileIndex tile, Trackdir td) {assert(m_segment != NULL); m_segment->m_last_tile = tile; m_segment->m_last_td = td;}