Debug: Use zoning dropdown for debug zoning modes
Control visibility using misc_debug 2, instead of controlling debug modes themselves using misc_debug
This commit is contained in:
@@ -3337,12 +3337,9 @@ DEF_CONSOLE_CMD(ConMiscDebug)
|
|||||||
if (argc < 1 || argc > 2) {
|
if (argc < 1 || argc > 2) {
|
||||||
IConsoleHelp("Debug: misc flags. Usage: 'misc_debug [<flags>]'");
|
IConsoleHelp("Debug: misc flags. Usage: 'misc_debug [<flags>]'");
|
||||||
IConsoleHelp(" 1: MDF_OVERHEAT_BREAKDOWN_OPEN_WIN");
|
IConsoleHelp(" 1: MDF_OVERHEAT_BREAKDOWN_OPEN_WIN");
|
||||||
IConsoleHelp(" 2: MDF_ZONING_RS_WATER_FLOOD_STATE");
|
IConsoleHelp(" 2: MDF_ZONING_DEBUG_MODES");
|
||||||
IConsoleHelp(" 4: MDF_ZONING_RS_TROPIC_ZONE");
|
|
||||||
IConsoleHelp(" 8: MDF_ZONING_RS_ANIMATED_TILE");
|
|
||||||
IConsoleHelp(" 10: MDF_NEWGRF_SG_SAVE_RAW");
|
IConsoleHelp(" 10: MDF_NEWGRF_SG_SAVE_RAW");
|
||||||
IConsoleHelp(" 20: MDF_SPECIAL_CMDS");
|
IConsoleHelp(" 20: MDF_SPECIAL_CMDS");
|
||||||
IConsoleHelp(" 40: MDF_ZONING_RS_WATER_REGION");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -49,12 +49,11 @@ inline bool HasGrfOptimiserFlag(NewGRFOptimiserFlags flag)
|
|||||||
|
|
||||||
enum MiscDebugFlags {
|
enum MiscDebugFlags {
|
||||||
MDF_OVERHEAT_BREAKDOWN_OPEN_WIN,
|
MDF_OVERHEAT_BREAKDOWN_OPEN_WIN,
|
||||||
MDF_ZONING_RS_WATER_FLOOD_STATE,
|
MDF_ZONING_DEBUG_MODES,
|
||||||
MDF_ZONING_RS_TROPIC_ZONE,
|
MDF_UNUSED1,
|
||||||
MDF_ZONING_RS_ANIMATED_TILE,
|
MDF_UNUSED2,
|
||||||
MDF_NEWGRF_SG_SAVE_RAW,
|
MDF_NEWGRF_SG_SAVE_RAW,
|
||||||
MDF_SPECIAL_CMDS,
|
MDF_SPECIAL_CMDS,
|
||||||
MDF_ZONING_RS_WATER_REGION,
|
|
||||||
};
|
};
|
||||||
extern uint32_t _misc_debug_flags;
|
extern uint32_t _misc_debug_flags;
|
||||||
|
|
||||||
|
@@ -378,7 +378,7 @@ flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH
|
|||||||
var = _zoning.inner
|
var = _zoning.inner
|
||||||
def = 0
|
def = 0
|
||||||
min = 0
|
min = 0
|
||||||
max = ZEM_END - 1
|
max = ZEM_LAST_NORMAL_MODE
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
[SDTG_VAR]
|
[SDTG_VAR]
|
||||||
@@ -388,7 +388,7 @@ flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH
|
|||||||
var = _zoning.outer
|
var = _zoning.outer
|
||||||
def = 0
|
def = 0
|
||||||
min = 0
|
min = 0
|
||||||
max = ZEM_END - 1
|
max = ZEM_LAST_NORMAL_MODE
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
[SDTG_VAR]
|
[SDTG_VAR]
|
||||||
|
@@ -29,7 +29,12 @@ enum ZoningEvaluationMode : uint8_t {
|
|||||||
ZEM_3x3_GRID, ///< Show 3x3 town road grid
|
ZEM_3x3_GRID, ///< Show 3x3 town road grid
|
||||||
ZEM_ONE_WAY_ROAD, ///< Show one way roads
|
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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -26,7 +26,6 @@
|
|||||||
#include "zoning.h"
|
#include "zoning.h"
|
||||||
#include "viewport_func.h"
|
#include "viewport_func.h"
|
||||||
#include "road_map.h"
|
#include "road_map.h"
|
||||||
#include "debug_settings.h"
|
|
||||||
#include "animated_tile.h"
|
#include "animated_tile.h"
|
||||||
#include "3rdparty/cpp-btree/btree_set.h"
|
#include "3rdparty/cpp-btree/btree_set.h"
|
||||||
|
|
||||||
@@ -271,31 +270,6 @@ SpriteID TileZoneCheckTraceRestrictEvaluation(TileIndex tile, Owner owner)
|
|||||||
if (IsTunnelBridgeWithSignalSimulation(tile) && IsTunnelBridgeRestrictedSignal(tile)) {
|
if (IsTunnelBridgeWithSignalSimulation(tile) && IsTunnelBridgeRestrictedSignal(tile)) {
|
||||||
return SPR_ZONING_INNER_HIGHLIGHT_RED;
|
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<SpriteID>(SPR_ZONING_INNER_HIGHLIGHT_RED + colour_index - 1, SPR_ZONING_INNER_HIGHLIGHT_YELLOW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ZONING_INVALID_SPRITE_ID;
|
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<SpriteID>(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
|
* General evaluation function; calls all the other functions depending on
|
||||||
* evaluation mode.
|
* evaluation mode.
|
||||||
@@ -376,6 +389,12 @@ SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, ZoningEvaluatio
|
|||||||
case ZEM_2x2_GRID: return TileZoneCheckRoadGridEvaluation(tile, 3);
|
case ZEM_2x2_GRID: return TileZoneCheckRoadGridEvaluation(tile, 3);
|
||||||
case ZEM_3x3_GRID: return TileZoneCheckRoadGridEvaluation(tile, 4);
|
case ZEM_3x3_GRID: return TileZoneCheckRoadGridEvaluation(tile, 4);
|
||||||
case ZEM_ONE_WAY_ROAD: return TileZoneCheckOneWayRoadEvaluation(tile);
|
case ZEM_ONE_WAY_ROAD: return TileZoneCheckOneWayRoadEvaluation(tile);
|
||||||
|
|
||||||
|
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;
|
default: return ZONING_INVALID_SPRITE_ID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#include "core/geometry_func.hpp"
|
#include "core/geometry_func.hpp"
|
||||||
#include "core/random_func.hpp"
|
#include "core/random_func.hpp"
|
||||||
#include "zoning.h"
|
#include "zoning.h"
|
||||||
|
#include "debug_settings.h"
|
||||||
|
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
|
|
||||||
@@ -34,8 +35,11 @@ enum ZoningToolbarWidgets {
|
|||||||
struct ZoningModeInfo {
|
struct ZoningModeInfo {
|
||||||
ZoningEvaluationMode mode;
|
ZoningEvaluationMode mode;
|
||||||
StringID str;
|
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<ZoningModeInfo> _zone_modes = {
|
static const std::initializer_list<ZoningModeInfo> _zone_modes = {
|
||||||
@@ -50,6 +54,11 @@ static const std::initializer_list<ZoningModeInfo> _zone_modes = {
|
|||||||
ZoningModeInfo(ZEM_2x2_GRID, STR_ZONING_2x2_GRID),
|
ZoningModeInfo(ZEM_2x2_GRID, STR_ZONING_2x2_GRID),
|
||||||
ZoningModeInfo(ZEM_3x3_GRID, STR_ZONING_3x3_GRID),
|
ZoningModeInfo(ZEM_3x3_GRID, STR_ZONING_3x3_GRID),
|
||||||
ZoningModeInfo(ZEM_ONE_WAY_ROAD, STR_ZONING_ONE_WAY_ROAD),
|
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)
|
static const ZoningModeInfo &ZoningEvaluationModeToInfo(ZoningEvaluationMode ev_mode)
|
||||||
@@ -69,6 +78,11 @@ struct ZoningWindow : public Window {
|
|||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool IsDebugEnabled()
|
||||||
|
{
|
||||||
|
return HasBit(_misc_debug_flags, MDF_ZONING_DEBUG_MODES);
|
||||||
|
}
|
||||||
|
|
||||||
void OnPaint() override
|
void OnPaint() override
|
||||||
{
|
{
|
||||||
this->DrawWidgets();
|
this->DrawWidgets();
|
||||||
@@ -78,6 +92,8 @@ struct ZoningWindow : public Window {
|
|||||||
{
|
{
|
||||||
DropDownList list;
|
DropDownList list;
|
||||||
for (const ZoningModeInfo &info : _zone_modes) {
|
for (const ZoningModeInfo &info : _zone_modes) {
|
||||||
|
if (info.debug && !IsDebugEnabled()) continue;
|
||||||
|
SetDParamStr(0, info.param);
|
||||||
list.push_back(std::make_unique<DropDownListStringItem>(info.str, info.mode, false));
|
list.push_back(std::make_unique<DropDownListStringItem>(info.str, info.mode, false));
|
||||||
}
|
}
|
||||||
ShowDropDownList(this, std::move(list), current, widget);
|
ShowDropDownList(this, std::move(list), current, widget);
|
||||||
@@ -117,6 +133,7 @@ struct ZoningWindow : public Window {
|
|||||||
case ZTW_INNER_DROPDOWN: {
|
case ZTW_INNER_DROPDOWN: {
|
||||||
const ZoningModeInfo &info = ZoningEvaluationModeToInfo(widget == ZTW_OUTER_DROPDOWN ? _zoning.outer : _zoning.inner);
|
const ZoningModeInfo &info = ZoningEvaluationModeToInfo(widget == ZTW_OUTER_DROPDOWN ? _zoning.outer : _zoning.inner);
|
||||||
SetDParam(0, info.str);
|
SetDParam(0, info.str);
|
||||||
|
SetDParamStr(1, info.param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,6 +145,7 @@ struct ZoningWindow : public Window {
|
|||||||
case ZTW_OUTER_DROPDOWN:
|
case ZTW_OUTER_DROPDOWN:
|
||||||
case ZTW_INNER_DROPDOWN:
|
case ZTW_INNER_DROPDOWN:
|
||||||
for (const ZoningModeInfo &info : _zone_modes) {
|
for (const ZoningModeInfo &info : _zone_modes) {
|
||||||
|
SetDParamStr(0, info.param);
|
||||||
*size = maxdim(*size, GetStringBoundingBox(info.str));
|
*size = maxdim(*size, GetStringBoundingBox(info.str));
|
||||||
}
|
}
|
||||||
break;
|
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),
|
NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_ZONING_INNER, STR_ZONING_INNER_INFO), SetResize(1, 0), SetPadding(1, 6, 1, 6),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(NWID_VERTICAL, COLOUR_GREY), SetPadding(5, 0, 5, 0), SetPIP(0, 5, 0),
|
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_OUTER_DROPDOWN), SetDataTip(STR_JUST_STRING1, 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_INNER_DROPDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 0),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer()
|
EndContainer()
|
||||||
|
Reference in New Issue
Block a user