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;} |