Allow custom signal styles to disable aspect-limited mode
By setting style_lookahead_extra_aspects to 255
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user