diff --git a/docs/changelog.txt b/docs/changelog.txt index d3484c86a6..ff76e3d6b7 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -67,6 +67,7 @@ Template for new versions: ## Misc Improvements - All places where units are listed in DFHack tools now show the translated English name in addition to the native name. In particular, this makes units searchable by English name in `gui/sitemap`. +- `dig`: ASCII overlay now displays priority of digging designations ## Documentation diff --git a/docs/plugins/dig.rst b/docs/plugins/dig.rst index 0a6007f598..d8d9c4ff40 100644 --- a/docs/plugins/dig.rst +++ b/docs/plugins/dig.rst @@ -197,13 +197,13 @@ Overlay This tool also provides three overlays that are managed by the `overlay` framework. -asciicarve -~~~~~~~~~~ +asciidesignated +~~~~~~~~~~~~~~~ -The ``dig.asciicarve`` overlay makes carving designations visible in ASCII -mode. It highlights tiles that are designated for smoothing, engraving, track -carving, or fortification carving. The designations blink (slowly) so you can -still see what is underneath them. +The ``dig.asciidesignated`` overlay makes designations visible in ASCII mode. +It highlights tiles that are designated for digging, smoothing, engraving, +track carving, or fortification carving. The designations blink (slowly) so you +can still see what is underneath them. Due to the limitations of the ASCII mode screen buffer, the designation highlights may show through other interface elements that overlap the diff --git a/plugins/dig.cpp b/plugins/dig.cpp index bc9089a654..8bdcca59d6 100644 --- a/plugins/dig.cpp +++ b/plugins/dig.cpp @@ -2388,6 +2388,10 @@ static bool is_designated_for_track_carving(const designation &designation) { return occ.bits.carve_track_east || occ.bits.carve_track_north || occ.bits.carve_track_south || occ.bits.carve_track_west; } +static bool is_designated_for_digging(const designation &designation) { + return designation.td.bits.dig != df::tile_dig_designation::No; +} + static char get_track_char(const designation &designation) { const df::tile_occupancy &occ = designation.to; if (occ.bits.carve_track_east && occ.bits.carve_track_north && occ.bits.carve_track_south && occ.bits.carve_track_west) @@ -2444,8 +2448,8 @@ static char get_tile_char(const df::coord &pos, char desig_char, bool draw_prior } } -static void paintScreenCarve() { - TRACE(log).print("entering paintScreenCarve\n"); +static void paintScreenDesignated() { + TRACE(log).print("entering paintScreenDesignated\n"); if (Screen::inGraphicsMode() || blink(500)) return; @@ -2461,11 +2465,6 @@ static void paintScreenCarve() { if (!Maps::isValidTilePos(map_pos)) continue; - if (!Maps::isTileVisible(map_pos)) { - TRACE(log).print("skipping hidden tile\n"); - continue; - } - TRACE(log).print("scanning map tile at (%d, %d, %d) screen offset (%d, %d)\n", map_pos.x, map_pos.y, map_pos.z, x, y); @@ -2486,8 +2485,14 @@ static void paintScreenCarve() { else if (is_designated_for_track_carving(des)) { cur_tile.ch = get_tile_char(map_pos, get_track_char(des), draw_priority); // directional track } + else if (is_designated_for_digging(des)) { + static char empty_char = (char)0x00; + cur_tile.ch = get_tile_char(map_pos, empty_char, draw_priority); + if (cur_tile.ch == empty_char) + continue; + } else { - TRACE(log).print("skipping tile with no carving designation\n"); + TRACE(log).print("skipping tile with no designation\n"); continue; } @@ -2515,6 +2520,6 @@ DFHACK_PLUGIN_LUA_FUNCTIONS{ DFHACK_LUA_FUNCTION(toggleCurLevelWarmDig), DFHACK_LUA_FUNCTION(toggleCurLevelDampDig), DFHACK_LUA_FUNCTION(paintScreenWarmDamp), - DFHACK_LUA_FUNCTION(paintScreenCarve), + DFHACK_LUA_FUNCTION(paintScreenDesignated), DFHACK_LUA_END }; diff --git a/plugins/lua/dig.lua b/plugins/lua/dig.lua index b988e9d42e..babdb3b7ab 100644 --- a/plugins/lua/dig.lua +++ b/plugins/lua/dig.lua @@ -348,13 +348,18 @@ function WarmDampOverlay:onRenderFrame(dc, rect) end -- -------------------------------- --- CarveOverlay +-- DesignatedOverlay -- -CarveOverlay = defclass(CarveOverlay, overlay.OverlayWidget) -CarveOverlay.ATTRS{ +DesignatedOverlay = defclass(DesignatedOverlay, overlay.OverlayWidget) +DesignatedOverlay.ATTRS{ desc='Makes existing carving designations visible when in ASCII mode.', viewscreens={ + 'dwarfmode/Designate/DIG_DIG', + 'dwarfmode/Designate/DIG_REMOVE_STAIRS_RAMPS', + 'dwarfmode/Designate/DIG_STAIR_UPDOWN', + 'dwarfmode/Designate/DIG_RAMP', + 'dwarfmode/Designate/DIG_CHANNEL', 'dwarfmode/Designate/SMOOTH', 'dwarfmode/Designate/ENGRAVE', 'dwarfmode/Designate/TRACK', @@ -365,8 +370,8 @@ CarveOverlay.ATTRS{ frame={w=0, h=0}, } -function CarveOverlay:onRenderFrame() - paintScreenCarve() +function DesignatedOverlay:onRenderFrame() + paintScreenDesignated() end -- -------------------------------- @@ -374,7 +379,7 @@ end -- OVERLAY_WIDGETS = { - asciicarve=CarveOverlay, + asciidesignated=DesignatedOverlay, warmdamp=WarmDampOverlay, warmdamptoolbar=WarmDampToolbarOverlay, }