diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index c3ea9e0d75..d0169fa8df 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -3337,12 +3337,9 @@ DEF_CONSOLE_CMD(ConMiscDebug) if (argc < 1 || argc > 2) { IConsoleHelp("Debug: misc flags. Usage: 'misc_debug []'"); IConsoleHelp(" 1: MDF_OVERHEAT_BREAKDOWN_OPEN_WIN"); - IConsoleHelp(" 2: MDF_ZONING_RS_WATER_FLOOD_STATE"); - IConsoleHelp(" 4: MDF_ZONING_RS_TROPIC_ZONE"); - IConsoleHelp(" 8: MDF_ZONING_RS_ANIMATED_TILE"); + IConsoleHelp(" 2: MDF_ZONING_DEBUG_MODES"); IConsoleHelp(" 10: MDF_NEWGRF_SG_SAVE_RAW"); IConsoleHelp(" 20: MDF_SPECIAL_CMDS"); - IConsoleHelp(" 40: MDF_ZONING_RS_WATER_REGION"); return true; } diff --git a/src/debug_settings.h b/src/debug_settings.h index 47d38453ec..9c08e0decc 100644 --- a/src/debug_settings.h +++ b/src/debug_settings.h @@ -49,12 +49,11 @@ inline bool HasGrfOptimiserFlag(NewGRFOptimiserFlags flag) enum MiscDebugFlags { MDF_OVERHEAT_BREAKDOWN_OPEN_WIN, - MDF_ZONING_RS_WATER_FLOOD_STATE, - MDF_ZONING_RS_TROPIC_ZONE, - MDF_ZONING_RS_ANIMATED_TILE, + MDF_ZONING_DEBUG_MODES, + MDF_UNUSED1, + MDF_UNUSED2, MDF_NEWGRF_SG_SAVE_RAW, MDF_SPECIAL_CMDS, - MDF_ZONING_RS_WATER_REGION, }; extern uint32_t _misc_debug_flags; diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index da425a9aa6..ce28aa57bf 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -378,7 +378,7 @@ flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _zoning.inner def = 0 min = 0 -max = ZEM_END - 1 +max = ZEM_LAST_NORMAL_MODE cat = SC_BASIC [SDTG_VAR] @@ -388,7 +388,7 @@ flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _zoning.outer def = 0 min = 0 -max = ZEM_END - 1 +max = ZEM_LAST_NORMAL_MODE cat = SC_BASIC [SDTG_VAR] diff --git a/src/zoning.h b/src/zoning.h index f43a975240..b1a66ca354 100644 --- a/src/zoning.h +++ b/src/zoning.h @@ -29,7 +29,12 @@ enum ZoningEvaluationMode : uint8_t { ZEM_3x3_GRID, ///< Show 3x3 town road grid ZEM_ONE_WAY_ROAD, ///< Show one way roads - ZEM_END, ///< End marker + ZEM_LAST_NORMAL_MODE = ZEM_ONE_WAY_ROAD, + + ZEM_DBG_WATER_FLOOD, + ZEM_DBG_WATER_REGION, + ZEM_DBG_TROPIC_ZONE, + ZEM_DBG_ANIMATED_TILE, }; /** diff --git a/src/zoning_cmd.cpp b/src/zoning_cmd.cpp index 77693d4eb8..e3714f5ac6 100644 --- a/src/zoning_cmd.cpp +++ b/src/zoning_cmd.cpp @@ -26,7 +26,6 @@ #include "zoning.h" #include "viewport_func.h" #include "road_map.h" -#include "debug_settings.h" #include "animated_tile.h" #include "3rdparty/cpp-btree/btree_set.h" @@ -271,31 +270,6 @@ SpriteID TileZoneCheckTraceRestrictEvaluation(TileIndex tile, Owner owner) if (IsTunnelBridgeWithSignalSimulation(tile) && IsTunnelBridgeRestrictedSignal(tile)) { return SPR_ZONING_INNER_HIGHLIGHT_RED; } - if (unlikely(HasBit(_misc_debug_flags, MDF_ZONING_RS_WATER_FLOOD_STATE)) && IsNonFloodingWaterTile(tile)) { - return SPR_ZONING_INNER_HIGHLIGHT_YELLOW; - } - if (unlikely(HasBit(_misc_debug_flags, MDF_ZONING_RS_TROPIC_ZONE))) { - switch (GetTropicZone(tile)) { - case TROPICZONE_DESERT: - return SPR_ZONING_INNER_HIGHLIGHT_YELLOW; - case TROPICZONE_RAINFOREST: - return SPR_ZONING_INNER_HIGHLIGHT_LIGHT_BLUE; - default: - break; - } - } - if (unlikely(HasBit(_misc_debug_flags, MDF_ZONING_RS_ANIMATED_TILE)) && _animated_tiles.find(tile) != _animated_tiles.end()) { - return SPR_ZONING_INNER_HIGHLIGHT_YELLOW; - } - if (unlikely(HasBit(_misc_debug_flags, MDF_ZONING_RS_WATER_REGION))) { - extern uint GetWaterRegionTileDebugColourIndex(TileIndex tile); - uint colour_index = GetWaterRegionTileDebugColourIndex(tile); - if (colour_index == 0) { - return ZONING_INVALID_SPRITE_ID; - } else { - return std::min(SPR_ZONING_INNER_HIGHLIGHT_RED + colour_index - 1, SPR_ZONING_INNER_HIGHLIGHT_YELLOW); - } - } return ZONING_INVALID_SPRITE_ID; } @@ -351,6 +325,45 @@ inline SpriteID TileZoneCheckOneWayRoadEvaluation(TileIndex tile) } } +inline SpriteID TileZoneDebugWaterFlood(TileIndex tile) +{ + if (IsNonFloodingWaterTile(tile)) { + return SPR_ZONING_INNER_HIGHLIGHT_YELLOW; + } + return ZONING_INVALID_SPRITE_ID; +} + +inline SpriteID TileZoneDebugWaterRegion(TileIndex tile) +{ + extern uint GetWaterRegionTileDebugColourIndex(TileIndex tile); + uint colour_index = GetWaterRegionTileDebugColourIndex(tile); + if (colour_index == 0) { + return ZONING_INVALID_SPRITE_ID; + } else { + return std::min(SPR_ZONING_INNER_HIGHLIGHT_RED + colour_index - 1, SPR_ZONING_INNER_HIGHLIGHT_YELLOW); + } +} + +inline SpriteID TileZoneDebugTropicZone(TileIndex tile) +{ + switch (GetTropicZone(tile)) { + case TROPICZONE_DESERT: + return SPR_ZONING_INNER_HIGHLIGHT_YELLOW; + case TROPICZONE_RAINFOREST: + return SPR_ZONING_INNER_HIGHLIGHT_LIGHT_BLUE; + default: + return ZONING_INVALID_SPRITE_ID; + } +} + +inline SpriteID TileZoneDebugAnimatedTile(TileIndex tile) +{ + if (_animated_tiles.find(tile) != _animated_tiles.end()) { + return SPR_ZONING_INNER_HIGHLIGHT_YELLOW; + } + return ZONING_INVALID_SPRITE_ID; +} + /** * General evaluation function; calls all the other functions depending on * evaluation mode. @@ -376,7 +389,13 @@ SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, ZoningEvaluatio case ZEM_2x2_GRID: return TileZoneCheckRoadGridEvaluation(tile, 3); case ZEM_3x3_GRID: return TileZoneCheckRoadGridEvaluation(tile, 4); case ZEM_ONE_WAY_ROAD: return TileZoneCheckOneWayRoadEvaluation(tile); - default: return ZONING_INVALID_SPRITE_ID; + + case ZEM_DBG_WATER_FLOOD: return TileZoneDebugWaterFlood(tile); + case ZEM_DBG_WATER_REGION: return TileZoneDebugWaterRegion(tile); + case ZEM_DBG_TROPIC_ZONE: return TileZoneDebugTropicZone(tile); + case ZEM_DBG_ANIMATED_TILE: return TileZoneDebugAnimatedTile(tile); + + default: return ZONING_INVALID_SPRITE_ID; } } diff --git a/src/zoning_gui.cpp b/src/zoning_gui.cpp index bc02744c7e..dc0f9deab3 100644 --- a/src/zoning_gui.cpp +++ b/src/zoning_gui.cpp @@ -22,6 +22,7 @@ #include "core/geometry_func.hpp" #include "core/random_func.hpp" #include "zoning.h" +#include "debug_settings.h" #include @@ -34,8 +35,11 @@ enum ZoningToolbarWidgets { struct ZoningModeInfo { ZoningEvaluationMode mode; StringID str; + const char *param; + bool debug; - ZoningModeInfo(ZoningEvaluationMode mode, StringID str) : mode(mode), str(str) {} + ZoningModeInfo(ZoningEvaluationMode mode, StringID str) : mode(mode), str(str), param(""), debug(false) {} + ZoningModeInfo(ZoningEvaluationMode mode, const char *param, bool debug = true) : mode(mode), str(STR_JUST_RAW_STRING), param(param), debug(debug) {} }; static const std::initializer_list _zone_modes = { @@ -50,6 +54,11 @@ static const std::initializer_list _zone_modes = { ZoningModeInfo(ZEM_2x2_GRID, STR_ZONING_2x2_GRID), ZoningModeInfo(ZEM_3x3_GRID, STR_ZONING_3x3_GRID), ZoningModeInfo(ZEM_ONE_WAY_ROAD, STR_ZONING_ONE_WAY_ROAD), + + ZoningModeInfo(ZEM_DBG_WATER_FLOOD, "Debug: Flooding"), + ZoningModeInfo(ZEM_DBG_WATER_REGION, "Debug: Water regions"), + ZoningModeInfo(ZEM_DBG_TROPIC_ZONE, "Debug: Tropic zones"), + ZoningModeInfo(ZEM_DBG_ANIMATED_TILE, "Debug: Animated tiles"), }; static const ZoningModeInfo &ZoningEvaluationModeToInfo(ZoningEvaluationMode ev_mode) @@ -69,6 +78,11 @@ struct ZoningWindow : public Window { this->InvalidateData(); } + static inline bool IsDebugEnabled() + { + return HasBit(_misc_debug_flags, MDF_ZONING_DEBUG_MODES); + } + void OnPaint() override { this->DrawWidgets(); @@ -78,6 +92,8 @@ struct ZoningWindow : public Window { { DropDownList list; for (const ZoningModeInfo &info : _zone_modes) { + if (info.debug && !IsDebugEnabled()) continue; + SetDParamStr(0, info.param); list.push_back(std::make_unique(info.str, info.mode, false)); } ShowDropDownList(this, std::move(list), current, widget); @@ -117,6 +133,7 @@ struct ZoningWindow : public Window { case ZTW_INNER_DROPDOWN: { const ZoningModeInfo &info = ZoningEvaluationModeToInfo(widget == ZTW_OUTER_DROPDOWN ? _zoning.outer : _zoning.inner); SetDParam(0, info.str); + SetDParamStr(1, info.param); break; } } @@ -128,6 +145,7 @@ struct ZoningWindow : public Window { case ZTW_OUTER_DROPDOWN: case ZTW_INNER_DROPDOWN: for (const ZoningModeInfo &info : _zone_modes) { + SetDParamStr(0, info.param); *size = maxdim(*size, GetStringBoundingBox(info.str)); } break; @@ -155,8 +173,8 @@ static const NWidgetPart _nested_zoning_widgets[] = { NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_ZONING_INNER, STR_ZONING_INNER_INFO), SetResize(1, 0), SetPadding(1, 6, 1, 6), EndContainer(), NWidget(NWID_VERTICAL, COLOUR_GREY), SetPadding(5, 0, 5, 0), SetPIP(0, 5, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, ZTW_OUTER_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, ZTW_INNER_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, ZTW_OUTER_DROPDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, ZTW_INNER_DROPDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), EndContainer()