118 uint16_t num_signals_passed;
120 uint32_t inherited_flags;
124 bool last_signal_was_red;
132 this->base::Set(parent, tile, td, is_choice);
133 this->segment =
nullptr;
134 if (parent ==
nullptr) {
135 this->num_signals_passed = 0;
136 this->flags_u.inherited_flags = 0;
150 this->num_signals_passed = parent->num_signals_passed;
151 this->flags_u.inherited_flags = parent->flags_u.inherited_flags;
152 this->last_red_signal_type = parent->last_red_signal_type;
153 this->last_signal_type = parent->last_signal_type;
155 this->flags_u.flags_s.choice_seen |= is_choice;
160 assert(this->segment !=
nullptr);
161 return this->segment->last_tile;
164 inline Trackdir GetLastTrackdir()
const
166 assert(this->segment !=
nullptr);
167 return this->segment->last_td;
172 assert(this->segment !=
nullptr);
173 this->segment->last_tile = tile;
174 this->segment->last_td = td;
177 template <
class Tbase,
class Tfunc,
class Tpf>
180 typename Tbase::TrackFollower ft(v, yapf.GetCompatibleRailTypes());
182 Trackdir cur_td = this->base::GetTrackdir();
184 while (cur != this->GetLastTile() || cur_td != this->GetLastTrackdir()) {
185 if (!((obj.*func)(cur, cur_td)))
return false;
187 if (!ft.Follow(cur, cur_td))
break;
193 return (obj.*func)(cur, cur_td);
198 this->base::Dump(dmp);
200 dmp.
WriteValue(
"num_signals_passed", this->num_signals_passed);
201 dmp.
WriteValue(
"target_seen", this->flags_u.flags_s.target_seen ?
"Yes" :
"No");
202 dmp.
WriteValue(
"choice_seen", this->flags_u.flags_s.choice_seen ?
"Yes" :
"No");
203 dmp.
WriteValue(
"last_signal_was_red", this->flags_u.flags_s.last_signal_was_red ?
"Yes" :
"No");
204 dmp.
WriteEnumT(
"last_red_signal_type", this->last_red_signal_type);