Allow custom signal styles to disable aspect-limited mode

By setting style_lookahead_extra_aspects to 255
This commit is contained in:
Jonathan G Rennison
2023-08-14 23:40:37 +01:00
parent 6ccbd7cce2
commit 1183476182
7 changed files with 24 additions and 11 deletions

View File

@@ -3107,7 +3107,7 @@ DEF_CONSOLE_CMD(ConDumpSignalStyles)
grfid = style.grffile->grfid;
grfs.insert(std::pair<uint32, const GRFFile *>(grfid, style.grffile));
}
IConsolePrintF(CC_DEFAULT, " %2u: GRF: %08X, Local: %2u, Extra aspects: %2u, Flags: %c%c%c%c%c%c%c, %s",
IConsolePrintF(CC_DEFAULT, " %2u: GRF: %08X, Local: %2u, Extra aspects: %3u, Flags: %c%c%c%c%c%c%c, %s",
(uint) (i + 1),
BSWAP32(grfid),
style.grf_local_id,

View File

@@ -4158,7 +4158,7 @@ static ChangeInfoResult SignalsChangeInfo(uint id, int numinfo, int prop, const
case A0RPI_SIGNALS_STYLE_LOOKAHEAD_EXTRA_ASPECTS: {
if (MappedPropertyLengthMismatch(buf, 1, mapping_entry)) break;
uint8 value = std::min<byte>(buf->ReadByte(), NEW_SIGNALS_MAX_EXTRA_ASPECT);
uint8 value = buf->ReadByte();
if (_cur.grffile->current_new_signal_style != nullptr) {
SetBit(_cur.grffile->current_new_signal_style->style_flags, NSSF_LOOKAHEAD_ASPECTS_SET);
_cur.grffile->current_new_signal_style->lookahead_extra_aspects = value;

View File

@@ -52,7 +52,7 @@ extern const GRFFeatureInfo _grf_feature_list[] = {
GRFFeatureInfo("action0_signals_restricted_signals", 2),
GRFFeatureInfo("action0_signals_recolour", 1),
GRFFeatureInfo("action0_signals_extra_aspects", 1),
GRFFeatureInfo("action0_signals_style", 1),
GRFFeatureInfo("action0_signals_style", 2),
GRFFeatureInfo("varaction2_signals_signal_context", 1),
GRFFeatureInfo("varaction2_signals_signal_side", 1),
GRFFeatureInfo("varaction2_signals_signal_vertical_clearance", 1),

View File

@@ -1133,6 +1133,10 @@ int AdvanceTrainReservationLookaheadEnd(const Train *v, int lookahead_end_positi
/* Signal is within visual range */
uint8 style = item.data_aux >> 8;
uint8 max_aspect = (style == 0) ? _extra_aspects : _new_signal_styles[style - 1].lookahead_extra_aspects;
if (max_aspect == 0xFF) {
/* This signal has unlimited lookahead */
return v->lookahead->reservation_end_position + 1;
}
if (!HasBit(item.data_aux, TRSLAI_NEXT_ONLY)) allow_skip_no_aspect_inc = true;
max_aspect += ((HasBit(item.data_aux, TRSLAI_NO_ASPECT_INC) && allow_skip_no_aspect_inc) ? 1 : 2);
if (max_aspect > known_signals_ahead) known_signals_ahead = max_aspect;

View File

@@ -1804,7 +1804,9 @@ static bool DetermineExtraAspectsVariable()
_new_signal_styles[i].lookahead_extra_aspects = 0;
SetBit(_signal_style_masks.next_only, i + 1);
} else if (HasBit(_new_signal_styles[i].style_flags, NSSF_LOOKAHEAD_ASPECTS_SET)) {
_new_signal_styles[i].lookahead_extra_aspects = std::min<uint8>(_new_signal_styles[i].lookahead_extra_aspects, _new_signal_styles[i].grffile->new_signal_extra_aspects);
if (_new_signal_styles[i].lookahead_extra_aspects != 255) {
_new_signal_styles[i].lookahead_extra_aspects = std::min<uint8>(_new_signal_styles[i].lookahead_extra_aspects, _new_signal_styles[i].grffile->new_signal_extra_aspects);
}
} else {
_new_signal_styles[i].lookahead_extra_aspects = _new_signal_styles[i].grffile->new_signal_extra_aspects;
}