Debug: Add debug zoning overlays for water regions
This commit is contained in:
@@ -3342,6 +3342,7 @@ DEF_CONSOLE_CMD(ConMiscDebug)
|
|||||||
IConsoleHelp(" 8: MDF_ZONING_RS_ANIMATED_TILE");
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -52,6 +52,7 @@ enum MiscDebugFlags {
|
|||||||
MDF_ZONING_RS_ANIMATED_TILE,
|
MDF_ZONING_RS_ANIMATED_TILE,
|
||||||
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;
|
||||||
|
|
||||||
|
@@ -399,3 +399,43 @@ void InitializeWaterRegions()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint GetWaterRegionTileDebugColourIndex(TileIndex tile)
|
||||||
|
{
|
||||||
|
const uint32_t sub_x = TileX(tile) & WATER_REGION_EDGE_MASK;
|
||||||
|
const uint32_t sub_y = TileY(tile) & WATER_REGION_EDGE_MASK;
|
||||||
|
|
||||||
|
auto get_edge_distance = [&](uint32_t sub) -> uint32_t {
|
||||||
|
if (sub > WATER_REGION_EDGE_LENGTH / 2) sub = WATER_REGION_EDGE_MASK - sub;
|
||||||
|
return sub;
|
||||||
|
};
|
||||||
|
uint32_t mode = std::min(get_edge_distance(sub_x), get_edge_distance(sub_y));
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case 0: {
|
||||||
|
const WaterRegion &wr = _water_regions[GetWaterRegionIndex(tile)];
|
||||||
|
if (!wr.IsInitialized()) return 1;
|
||||||
|
|
||||||
|
return 2 + wr.NumberOfPatches();
|
||||||
|
}
|
||||||
|
|
||||||
|
case 1: {
|
||||||
|
const WaterRegion &wr = _water_regions[GetWaterRegionIndex(tile)];
|
||||||
|
if (!wr.IsInitialized()) return 0;
|
||||||
|
|
||||||
|
if (wr.CountPatchLabelOccurence(1) == WATER_REGION_NUMBER_OF_TILES) return 2;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 2: {
|
||||||
|
const WaterRegion &wr = _water_regions[GetWaterRegionIndex(tile)];
|
||||||
|
if (wr.IsInitialized() && wr.HasCrossRegionAqueducts()) return 9;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -287,6 +287,15 @@ SpriteID TileZoneCheckTraceRestrictEvaluation(TileIndex tile, Owner owner)
|
|||||||
if (unlikely(HasBit(_misc_debug_flags, MDF_ZONING_RS_ANIMATED_TILE)) && _animated_tiles.find(tile) != _animated_tiles.end()) {
|
if (unlikely(HasBit(_misc_debug_flags, MDF_ZONING_RS_ANIMATED_TILE)) && _animated_tiles.find(tile) != _animated_tiles.end()) {
|
||||||
return SPR_ZONING_INNER_HIGHLIGHT_YELLOW;
|
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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user