Merge branch 'develop' into spectate

develop
Myk 2022-10-26 12:30:58 -07:00 committed by GitHub
commit 1e31cc197d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 22 deletions

@ -36,8 +36,11 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
## New Plugins ## New Plugins
## Fixes ## Fixes
- `automaterial`: fix the cursor jumping up a z level when clicking quickly after box select
- `gui/create-item`: prevent materials list filter from intercepting sublist hotkeys - `gui/create-item`: prevent materials list filter from intercepting sublist hotkeys
- `mousequery`: fix the cursor jumping up z levels sometimes when using TWBT
- `tiletypes`: no longer resets dig priority to the default when updating other properties of a tile - `tiletypes`: no longer resets dig priority to the default when updating other properties of a tile
- `automaterial`: fix rendering errors with box boundary markers
## Misc Improvements ## Misc Improvements
- `blueprint`: new ``--smooth`` option for recording all smoothed floors and walls instead of just the ones that require smoothing for later carving - `blueprint`: new ``--smooth`` option for recording all smoothed floors and walls instead of just the ones that require smoothing for later carving

@ -14,6 +14,7 @@
// DF data structure definition headers // DF data structure definition headers
#include "DataDefs.h" #include "DataDefs.h"
#include "Debug.h"
#include "MiscUtils.h" #include "MiscUtils.h"
#include "TileTypes.h" #include "TileTypes.h"
#include "df/build_req_choice_genst.h" #include "df/build_req_choice_genst.h"
@ -52,6 +53,10 @@ REQUIRE_GLOBAL(gps);
REQUIRE_GLOBAL(ui); REQUIRE_GLOBAL(ui);
REQUIRE_GLOBAL(ui_build_selector); REQUIRE_GLOBAL(ui_build_selector);
namespace DFHack {
DBG_DECLARE(automaterial,log,DebugCategory::LINFO);
}
struct MaterialDescriptor struct MaterialDescriptor
{ {
df::item_type item_type; df::item_type item_type;
@ -94,7 +99,7 @@ static bool show_box_selection = true;
static bool hollow_selection = false; static bool hollow_selection = false;
static deque<df::item*> box_select_materials; static deque<df::item*> box_select_materials;
#define SELECTION_IGNORE_TICKS 10 #define SELECTION_IGNORE_TICKS 1
static int ignore_selection = SELECTION_IGNORE_TICKS; static int ignore_selection = SELECTION_IGNORE_TICKS;
static map<int16_t, MaterialDescriptor> last_used_material; static map<int16_t, MaterialDescriptor> last_used_material;
@ -719,7 +724,6 @@ struct jobutils_hook : public df::viewscreen_dwarfmodest
if (box_select_mode == SELECT_FIRST || (!show_box_selection && box_select_mode == SELECT_SECOND)) if (box_select_mode == SELECT_FIRST || (!show_box_selection && box_select_mode == SELECT_SECOND))
{ {
int32_t x, y, z; int32_t x, y, z;
if (!Gui::getCursorCoords(x, y, z)) if (!Gui::getCursorCoords(x, y, z))
return; return;
@ -732,12 +736,13 @@ struct jobutils_hook : public df::viewscreen_dwarfmodest
if (!Gui::getCursorCoords(box_second.x, box_second.y, box_second.z)) if (!Gui::getCursorCoords(box_second.x, box_second.y, box_second.z))
return; return;
int32_t xD = (box_second.x > box_first.x) ? 1 : -1; Gui::DwarfmodeDims dims = Gui::getDwarfmodeViewDims();
int32_t yD = (box_second.y > box_first.y) ? 1 : -1; int32_t startx = std::max((int32_t)vport.x, std::min(box_first.x, box_second.x));
for (int32_t xB = box_first.x; (xD > 0) ? (xB <= box_second.x) : (xB >= box_second.x); xB += xD) int32_t endx = std::min(vport.x + dims.map_x2 - dims.map_x1, std::max(box_first.x, box_second.x));
{ int32_t starty = std::max((int32_t)vport.y, std::min(box_first.y, box_second.y));
for (int32_t yB = box_first.y; (yD > 0) ? (yB <= box_second.y) : (yB >= box_second.y); yB += yD) int32_t endy = std::min(vport.y + dims.map_y2 - dims.map_y1, std::max(box_first.y, box_second.y));
{ for (int32_t yB = starty; yB <= endy; ++yB) {
for (int32_t xB = startx; xB <= endx; ++xB) {
if (hollow_selection && !(xB == box_first.x || xB == box_second.x || yB == box_first.y || yB == box_second.y)) if (hollow_selection && !(xB == box_first.x || xB == box_second.x || yB == box_first.y || yB == box_second.y))
continue; continue;
@ -963,6 +968,11 @@ struct jobutils_hook : public df::viewscreen_dwarfmodest
void move_cursor(df::coord &pos) void move_cursor(df::coord &pos)
{ {
int32_t x, y, z;
Gui::getCursorCoords(x, y, z);
DEBUG(log).print("moving cursor from %d, %d, %d to %d, %d, %d\n",
x, y, z, pos.x, pos.y, pos.z);
Gui::setCursorCoords(pos.x, pos.y, pos.z); Gui::setCursorCoords(pos.x, pos.y, pos.z);
Gui::refreshSidebar(); Gui::refreshSidebar();
} }
@ -1269,9 +1279,13 @@ struct jobutils_hook : public df::viewscreen_dwarfmodest
label << "Selection: " << dX << "x" << dY; label << "Selection: " << dX << "x" << dY;
OutputString(COLOR_WHITE, x, ++y, label.str(), true, left_margin); OutputString(COLOR_WHITE, x, ++y, label.str(), true, left_margin);
int cx = box_first.x; df::coord vport = Gui::getViewportPos();
int cy = box_first.y; int cx = box_first.x - vport.x + 1;
OutputString(COLOR_BROWN, cx, cy, "X", false, 0, 0, true /* map */); int cy = box_first.y - vport.y + 1;
Gui::DwarfmodeDims dims = Gui::getDwarfmodeViewDims();
if (cx >= 1 && cx <= dims.map_x2 && cy >= 1 && cy <= dims.map_y2)
OutputString(COLOR_BROWN, cx, cy, "X", false, 0, 0, true /* map */);
break; break;
} }

@ -56,10 +56,12 @@ static uint32_t scroll_delay = 100;
static bool awaiting_lbut_up, awaiting_rbut_up; static bool awaiting_lbut_up, awaiting_rbut_up;
static enum { None, Left, Right } drag_mode; static enum { None, Left, Right } drag_mode;
static df::coord get_mouse_pos(int32_t &mx, int32_t &my) static df::coord get_mouse_pos(int32_t &mx, int32_t &my, int32_t &depth)
{ {
df::coord pos = Gui::getMousePos(); df::coord pos = Gui::getMousePos();
pos.z -= Gui::getDepthAt(pos.x, pos.y);
depth = Gui::getDepthAt(pos.x, pos.y);
pos.z -= depth;
df::coord vpos = Gui::getViewportPos(); df::coord vpos = Gui::getViewportPos();
mx = pos.x - vpos.x + 1; mx = pos.x - vpos.x + 1;
@ -291,10 +293,10 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest
return false; return false;
} }
bool handleLeft(df::coord &mpos, int32_t mx, int32_t my) bool handleLeft(df::coord &mpos, int32_t mx, int32_t my, int32_t depth)
{ {
if (!(Core::getInstance().getModstate() & DFH_MOD_SHIFT)) if (!(Core::getInstance().getModstate() & DFH_MOD_SHIFT))
mpos.z += Gui::getDepthAt(mx, my); mpos.z += depth;
bool cursor_still_here = (last_clicked_x == mpos.x && last_clicked_y == mpos.y && last_clicked_z == mpos.z); bool cursor_still_here = (last_clicked_x == mpos.x && last_clicked_y == mpos.y && last_clicked_z == mpos.z);
last_clicked_x = mpos.x; last_clicked_x = mpos.x;
@ -444,8 +446,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest
bool handleMouse(const set<df::interface_key> *input) bool handleMouse(const set<df::interface_key> *input)
{ {
int32_t mx, my; int32_t mx, my, depth;
auto mpos = get_mouse_pos(mx, my); auto mpos = get_mouse_pos(mx, my, depth);
if (mpos.x == -30000) if (mpos.x == -30000)
return false; return false;
@ -458,7 +460,7 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest
last_move_pos = mpos; last_move_pos = mpos;
} }
else else
return handleLeft(mpos, mx, my); return handleLeft(mpos, mx, my, depth);
} }
else if (enabler->mouse_rbut) else if (enabler->mouse_rbut)
{ {
@ -531,7 +533,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest
if (mpos.x == x && mpos.y == y && mpos.z == z) if (mpos.x == x && mpos.y == y && mpos.z == z)
return; return;
DEBUG(log).print("moving cursor to %d, %d, %d\n", x, y, z); DEBUG(log).print("moving cursor to %d, %d, %d\n",
mpos.x, mpos.y, mpos.z);
Gui::setCursorCoords(mpos.x, mpos.y, mpos.z); Gui::setCursorCoords(mpos.x, mpos.y, mpos.z);
Gui::refreshSidebar(); Gui::refreshSidebar();
} }
@ -568,8 +571,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest
auto dims = Gui::getDwarfmodeViewDims(); auto dims = Gui::getDwarfmodeViewDims();
int32_t mx, my; int32_t mx, my, depth;
auto mpos = get_mouse_pos(mx, my); auto mpos = get_mouse_pos(mx, my, depth);
bool mpos_valid = mpos.x != -30000 && mpos.y != -30000 && mpos.z != -30000; bool mpos_valid = mpos.x != -30000 && mpos.y != -30000 && mpos.z != -30000;
// Check if in lever binding mode // Check if in lever binding mode
@ -582,7 +585,7 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest
if (awaiting_lbut_up && !enabler->mouse_lbut_down) if (awaiting_lbut_up && !enabler->mouse_lbut_down)
{ {
awaiting_lbut_up = false; awaiting_lbut_up = false;
handleLeft(mpos, mx, my); handleLeft(mpos, mx, my, depth);
} }
if (awaiting_rbut_up && !enabler->mouse_rbut_down) if (awaiting_rbut_up && !enabler->mouse_rbut_down)