From b5d0c1d4937919a476038a0a4b9c91c062d355b2 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 22 Jun 2022 17:57:20 +0100 Subject: [PATCH] Debug: Show signalled tunnel/bridge info in debug window --- src/newgrf_debug_gui.cpp | 3 +-- src/table/newgrf_debug_data.h | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index e69d14a1cf..008b567d42 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -1171,8 +1171,7 @@ GrfSpecFeature GetGrfSpecFeature(TileIndex tile) } case MP_TUNNELBRIDGE: { - extern std::vector _new_signals_grfs; - if (IsTunnelBridgeWithSignalSimulation(tile) && !_new_signals_grfs.empty()) return GSF_SIGNALS; + if (IsTunnelBridgeWithSignalSimulation(tile)) return GSF_SIGNALS; return GSF_INVALID; } diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 5254f5b558..e7c6ee3f80 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -889,6 +889,28 @@ void DumpTileSignalsInfo(char *buffer, const char *last, uint index, NIExtraInfo } } +void DumpTunnelBridgeSignalsInfo(char *buffer, const char *last, uint index, NIExtraInfoOutput &output) +{ + if (IsTunnelBridgeSignalSimulationEntrance(index)) { + char *b = buffer; + const SignalState state = GetTunnelBridgeEntranceSignalState(index); + b += seprintf(b, last, " Entrance: state: %d", state); + if (_extra_aspects > 0 && state == SIGNAL_STATE_GREEN) b += seprintf(b, last, ", aspect: %d", GetTunnelBridgeEntranceSignalAspect(index)); + output.print(buffer); + } + if (IsTunnelBridgeSignalSimulationExit(index)) { + char *b = buffer; + const SignalState state = GetTunnelBridgeExitSignalState(index); + b += seprintf(b, last, " Exit: state: %d", state); + if (_extra_aspects > 0 && state == SIGNAL_STATE_GREEN) b += seprintf(b, last, ", aspect: %d", GetTunnelBridgeExitSignalAspect(index)); + output.print(buffer); + } + TileIndex end = GetOtherTunnelBridgeEnd(index); + extern uint GetTunnelBridgeSignalSimulationSignalCount(TileIndex begin, TileIndex end); + seprintf(buffer, last, " Spacing: %d, total signals: %d", GetTunnelBridgeSignalSimulationSpacing(index), GetTunnelBridgeSignalSimulationSignalCount(index, end)); + output.print(buffer); +} + static const NIVariable _niv_signals[] = { NIV(0x40, "terrain type"), NIV(A2VRI_SIGNALS_SIGNAL_RESTRICTION_INFO, "restriction info"), @@ -898,7 +920,8 @@ static const NIVariable _niv_signals[] = { }; class NIHSignals : public NIHelper { - bool IsInspectable(uint index) const override { return !_new_signals_grfs.empty(); } + bool IsInspectable(uint index) const override { return true; } + bool ShowExtraInfoOnly(uint index) const override { return _new_signals_grfs.empty(); } bool ShowSpriteDumpButton(uint index) const override { return true; } uint GetParent(uint index) const override { return UINT32_MAX; } const void *GetInstance(uint index)const override { return nullptr; } @@ -936,6 +959,10 @@ class NIHSignals : public NIHelper { output.print("Signals:"); DumpTileSignalsInfo(buffer, lastof(buffer), index, output); } + if (IsTunnelBridgeWithSignalSimulation(index)) { + output.print("Signals:"); + DumpTunnelBridgeSignalsInfo(buffer, lastof(buffer), index, output); + } } /* virtual */ void SpriteDump(uint index, DumpSpriteGroupPrinter print) const override