119 uint16_t num_signals_passed;
121 uint32_t inherited_flags;
125 bool last_signal_was_red;
133 this->base::Set(parent, tile, td, is_choice);
134 this->segment =
nullptr;
135 if (parent ==
nullptr) {
136 this->num_signals_passed = 0;
137 this->flags_u.inherited_flags = 0;
151 this->num_signals_passed = parent->num_signals_passed;
152 this->flags_u.inherited_flags = parent->flags_u.inherited_flags;
153 this->last_red_signal_type = parent->last_red_signal_type;
154 this->last_signal_type = parent->last_signal_type;
156 this->flags_u.flags_s.choice_seen |= is_choice;
161 assert(this->segment !=
nullptr);
162 return this->segment->last_tile;
165 inline Trackdir GetLastTrackdir()
const
167 assert(this->segment !=
nullptr);
168 return this->segment->last_td;
173 assert(this->segment !=
nullptr);
174 this->segment->last_tile = tile;
175 this->segment->last_td = td;
178 template <
class Tbase,
class Tfunc,
class Tpf>
181 typename Tbase::TrackFollower ft(v, yapf.GetCompatibleRailTypes());
183 Trackdir cur_td = this->base::GetTrackdir();
185 while (cur != this->GetLastTile() || cur_td != this->GetLastTrackdir()) {
186 if (!((obj.*func)(cur, cur_td)))
return false;
188 if (!ft.Follow(cur, cur_td))
break;
194 return (obj.*func)(cur, cur_td);
199 this->base::Dump(dmp);
201 dmp.
WriteValue(
"num_signals_passed", this->num_signals_passed);
202 dmp.
WriteValue(
"target_seen", this->flags_u.flags_s.target_seen ?
"Yes" :
"No");
203 dmp.
WriteValue(
"choice_seen", this->flags_u.flags_s.choice_seen ?
"Yes" :
"No");
204 dmp.
WriteValue(
"last_signal_was_red", this->flags_u.flags_s.last_signal_was_red ?
"Yes" :
"No");
205 dmp.
WriteEnumT(
"last_red_signal_type", this->last_red_signal_type);