Add tracerestrict feature reverse behind signal

This commit is contained in:
Jonathan G Rennison
2018-12-05 20:01:09 +00:00
parent a315d39067
commit cd41683b9b
12 changed files with 162 additions and 6 deletions

View File

@@ -293,6 +293,21 @@ public:
inline void PfFollowNode(Node &old_node)
{
TrackFollower F(Yapf().GetVehicle());
if (old_node.flags_u.flags_s.m_reverse_pending && old_node.m_segment->m_end_segment_reason & (ESRB_SAFE_TILE | ESRB_DEPOT | ESRB_DEAD_END)) {
Node *rev_node = &old_node;
while (rev_node && !(rev_node->m_segment->m_end_segment_reason & ESRB_REVERSE)) {
rev_node = rev_node->m_parent;
}
if (rev_node) {
if (F.Follow(rev_node->GetLastTile(), ReverseTrackdir(rev_node->GetLastTrackdir()))) {
Yapf().AddMultipleNodes(&old_node, F, [&](Node &n) {
n.flags_u.flags_s.m_reverse_pending = false;
n.flags_u.flags_s.m_teleport = true;
});
}
return;
}
}
if (F.Follow(old_node.GetLastTile(), old_node.GetLastTrackdir())) {
Yapf().AddMultipleNodes(&old_node, F);
}
@@ -471,6 +486,21 @@ public:
inline void PfFollowNode(Node &old_node)
{
TrackFollower F(Yapf().GetVehicle());
if (old_node.flags_u.flags_s.m_reverse_pending && old_node.m_segment->m_end_segment_reason & (ESRB_SAFE_TILE | ESRB_DEPOT | ESRB_DEAD_END)) {
Node *rev_node = &old_node;
while (rev_node && !(rev_node->m_segment->m_end_segment_reason & ESRB_REVERSE)) {
rev_node = rev_node->m_parent;
}
if (rev_node) {
if (F.Follow(rev_node->GetLastTile(), ReverseTrackdir(rev_node->GetLastTrackdir()))) {
Yapf().AddMultipleNodes(&old_node, F, [&](Node &n) {
n.flags_u.flags_s.m_reverse_pending = false;
n.flags_u.flags_s.m_teleport = true;
});
}
return;
}
}
if (F.Follow(old_node.GetLastTile(), old_node.GetLastTrackdir())) {
Yapf().AddMultipleNodes(&old_node, F);
}