Fix evaluation of PBS entry signal conditional after reserve through.
This commit is contained in:
@@ -192,9 +192,9 @@ private:
|
|||||||
{
|
{
|
||||||
const Node *node = static_cast<const Node *>(node_ptr);
|
const Node *node = static_cast<const Node *>(node_ptr);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
TileIndex last_signal_tile = node->m_segment->m_last_signal_tile;
|
TileIndex last_signal_tile = node->m_last_non_reserve_through_signal_tile;
|
||||||
if (last_signal_tile != INVALID_TILE) {
|
if (last_signal_tile != INVALID_TILE) {
|
||||||
Trackdir last_signal_trackdir = node->m_segment->m_last_signal_td;
|
Trackdir last_signal_trackdir = node->m_last_non_reserve_through_signal_td;
|
||||||
if (HasPbsSignalOnTrackdir(last_signal_tile, last_signal_trackdir)) {
|
if (HasPbsSignalOnTrackdir(last_signal_tile, last_signal_trackdir)) {
|
||||||
return last_signal_tile;
|
return last_signal_tile;
|
||||||
} else {
|
} else {
|
||||||
@@ -347,14 +347,18 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_reserve_through = false;
|
||||||
if (ShouldCheckTraceRestrict(n, tile)) {
|
if (ShouldCheckTraceRestrict(n, tile)) {
|
||||||
TraceRestrictProgramResult out;
|
TraceRestrictProgramResult out;
|
||||||
bool is_reserve_through = false;
|
|
||||||
if (ExecuteTraceRestrict(n, tile, trackdir, cost, out, &is_reserve_through)) {
|
if (ExecuteTraceRestrict(n, tile, trackdir, cost, out, &is_reserve_through)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (is_reserve_through) n.m_num_signals_res_through_passed++;
|
if (is_reserve_through) n.m_num_signals_res_through_passed++;
|
||||||
}
|
}
|
||||||
|
if (!is_reserve_through) {
|
||||||
|
n.m_last_non_reserve_through_signal_tile = tile;
|
||||||
|
n.m_last_non_reserve_through_signal_td = trackdir;
|
||||||
|
}
|
||||||
|
|
||||||
n.m_num_signals_passed++;
|
n.m_num_signals_passed++;
|
||||||
n.m_segment->m_last_signal_tile = tile;
|
n.m_segment->m_last_signal_tile = tile;
|
||||||
|
@@ -129,6 +129,8 @@ struct CYapfRailNodeT
|
|||||||
CYapfRailSegment *m_segment;
|
CYapfRailSegment *m_segment;
|
||||||
uint16 m_num_signals_passed;
|
uint16 m_num_signals_passed;
|
||||||
uint16 m_num_signals_res_through_passed;
|
uint16 m_num_signals_res_through_passed;
|
||||||
|
TileIndex m_last_non_reserve_through_signal_tile;
|
||||||
|
Trackdir m_last_non_reserve_through_signal_td;
|
||||||
union {
|
union {
|
||||||
uint32 m_inherited_flags;
|
uint32 m_inherited_flags;
|
||||||
struct {
|
struct {
|
||||||
@@ -147,6 +149,8 @@ struct CYapfRailNodeT
|
|||||||
if (parent == NULL) {
|
if (parent == NULL) {
|
||||||
m_num_signals_passed = 0;
|
m_num_signals_passed = 0;
|
||||||
m_num_signals_res_through_passed = 0;
|
m_num_signals_res_through_passed = 0;
|
||||||
|
m_last_non_reserve_through_signal_tile = INVALID_TILE;
|
||||||
|
m_last_non_reserve_through_signal_td = INVALID_TRACKDIR;
|
||||||
flags_u.m_inherited_flags = 0;
|
flags_u.m_inherited_flags = 0;
|
||||||
m_last_red_signal_type = SIGTYPE_NORMAL;
|
m_last_red_signal_type = SIGTYPE_NORMAL;
|
||||||
/* We use PBS as initial signal type because if we are in
|
/* We use PBS as initial signal type because if we are in
|
||||||
@@ -163,6 +167,8 @@ struct CYapfRailNodeT
|
|||||||
} else {
|
} else {
|
||||||
m_num_signals_passed = parent->m_num_signals_passed;
|
m_num_signals_passed = parent->m_num_signals_passed;
|
||||||
m_num_signals_res_through_passed = parent->m_num_signals_res_through_passed;
|
m_num_signals_res_through_passed = parent->m_num_signals_res_through_passed;
|
||||||
|
m_last_non_reserve_through_signal_tile = parent->m_last_non_reserve_through_signal_tile;
|
||||||
|
m_last_non_reserve_through_signal_td = parent->m_last_non_reserve_through_signal_td;
|
||||||
flags_u.m_inherited_flags = parent->flags_u.m_inherited_flags;
|
flags_u.m_inherited_flags = parent->flags_u.m_inherited_flags;
|
||||||
m_last_red_signal_type = parent->m_last_red_signal_type;
|
m_last_red_signal_type = parent->m_last_red_signal_type;
|
||||||
m_last_signal_type = parent->m_last_signal_type;
|
m_last_signal_type = parent->m_last_signal_type;
|
||||||
|
Reference in New Issue
Block a user