From feeefcf14900b795ff5667f5f85bd2e61791af4b Mon Sep 17 00:00:00 2001 From: lethosor Date: Fri, 30 Dec 2022 00:45:00 -0500 Subject: [PATCH 01/20] Add read-only container_identity for std::map --- library/include/DataIdentity.h | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/library/include/DataIdentity.h b/library/include/DataIdentity.h index 711712af7..fd47429b9 100644 --- a/library/include/DataIdentity.h +++ b/library/include/DataIdentity.h @@ -394,6 +394,7 @@ namespace df template class ro_stl_container_identity : public container_identity { + protected: const char *name; public: @@ -419,6 +420,30 @@ namespace df } }; + template + class ro_stl_assoc_container_identity : public ro_stl_container_identity { + type_identity *key_identity; + type_identity *item_identity; + + public: + ro_stl_assoc_container_identity(const char *name, type_identity *key, type_identity *item) + : ro_stl_container_identity(name, item), + key_identity(key), + item_identity(item) + {} + + virtual std::string getFullName(type_identity*) override { + return std::string(ro_stl_assoc_container_identity::name) + "<" + key_identity->getFullName() + ", " + item_identity->getFullName() + ">"; + } + + protected: + virtual void *item_pointer(type_identity *item, void *ptr, int idx) override { + auto iter = (*(T*)ptr).begin(); + for (; idx > 0; idx--) ++iter; + return (void*)&iter->second; + } + }; + class bit_array_identity : public bit_container_identity { public: /* @@ -609,6 +634,10 @@ namespace df static container_identity *get(); }; + template struct identity_traits> { + static container_identity *get(); + }; + template<> struct identity_traits > { static bit_array_identity identity; static bit_container_identity *get() { return &identity; } @@ -679,6 +708,13 @@ namespace df return &identity; } + template + inline container_identity *identity_traits>::get() { + typedef std::map container; + static ro_stl_assoc_container_identity identity("map", identity_traits::get(), identity_traits::get()); + return &identity; + } + template inline bit_container_identity *identity_traits >::get() { static bit_array_identity identity(identity_traits::get()); From 9fd3ef7b4b07ce8444884ae8c899861e4dd2f7d7 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Tue, 3 Jan 2023 14:52:49 -0800 Subject: [PATCH 02/20] correct mouse down behavior without hosing enabler before, we inhibited multiple mouse button down events by overwriting the values in enabler. now we keep state internally and inhibit multiple events on our own. also add events and state tracking for middle mouse button --- library/LuaTools.cpp | 30 +++++++++++++++++++++++++----- library/lua/gui.lua | 2 ++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/library/LuaTools.cpp b/library/LuaTools.cpp index 5b080ce43..084e5a21b 100644 --- a/library/LuaTools.cpp +++ b/library/LuaTools.cpp @@ -131,9 +131,13 @@ void DFHack::Lua::GetVector(lua_State *state, std::vector &pvec) } } +static bool inhibit_l_down = false; +static bool inhibit_r_down = false; +static bool inhibit_m_down = false; + void DFHack::Lua::PushInterfaceKeys(lua_State *L, const std::set &keys) { - lua_createtable(L, 0, keys.size() + 5); + lua_createtable(L, 0, keys.size() + 7); for (auto &key : keys) { @@ -154,23 +158,32 @@ void DFHack::Lua::PushInterfaceKeys(lua_State *L, } if (df::global::enabler) { - if (df::global::enabler->mouse_lbut_down) { + if (!inhibit_l_down && df::global::enabler->mouse_lbut_down) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_L_DOWN"); + inhibit_l_down = true; } - if (df::global::enabler->mouse_rbut_down) { + if (!inhibit_r_down && df::global::enabler->mouse_rbut_down) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_R_DOWN"); + inhibit_r_down = true; + } + if (!inhibit_m_down && df::global::enabler->mouse_mbut_down) { + lua_pushboolean(L, true); + lua_setfield(L, -2, "_MOUSE_M_DOWN"); + inhibit_m_down = true; } if (df::global::enabler->mouse_lbut) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_L"); - df::global::enabler->mouse_lbut_down = 0; } if (df::global::enabler->mouse_rbut) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_R"); - df::global::enabler->mouse_rbut_down = 0; + } + if (df::global::enabler->mouse_mbut) { + lua_pushboolean(L, true); + lua_setfield(L, -2, "_MOUSE_M"); } } } @@ -2134,4 +2147,11 @@ void DFHack::Lua::Core::Reset(color_ostream &out, const char *where) out.printerr("Common lua context stack top left at %d after %s.\n", top, where); lua_settop(State, 0); } + + if (!df::global::enabler->mouse_lbut) + inhibit_l_down = false; + if (!df::global::enabler->mouse_rbut) + inhibit_r_down = false; + if (!df::global::enabler->mouse_mbut) + inhibit_m_down = false; } diff --git a/library/lua/gui.lua b/library/lua/gui.lua index 31631b469..1742ee342 100644 --- a/library/lua/gui.lua +++ b/library/lua/gui.lua @@ -14,8 +14,10 @@ CLEAR_PEN = to_pen{tile=909, ch=32, fg=0, bg=0} local FAKE_INPUT_KEYS = { _MOUSE_L = true, _MOUSE_R = true, + _MOUSE_M = true, _MOUSE_L_DOWN = true, _MOUSE_R_DOWN = true, + _MOUSE_M_DOWN = true, _STRING = true, } From 021b24fa6589171caa672d6a5cb362fa83420cc1 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Tue, 3 Jan 2023 14:56:49 -0800 Subject: [PATCH 03/20] update docs --- docs/dev/Lua API.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/dev/Lua API.rst b/docs/dev/Lua API.rst index e6cd2f9e8..de8f9c0c1 100644 --- a/docs/dev/Lua API.rst +++ b/docs/dev/Lua API.rst @@ -2392,13 +2392,13 @@ Supported callbacks and fields are: ``_STRING`` Maps to an integer in range 0-255. Duplicates a separate "STRING_A???" code for convenience. - ``_MOUSE_L, _MOUSE_R`` - If the left or right mouse button is being pressed. + ``_MOUSE_L, _MOUSE_R, _MOUSE_M`` + If the left, right, and/or middle mouse button is being pressed. - ``_MOUSE_L_DOWN, _MOUSE_R_DOWN`` - If the left or right mouse button was just pressed. + ``_MOUSE_L_DOWN, _MOUSE_R_DOWN, _MOUSE_M_DOWN`` + If the left, right, and/or middle mouse button was just pressed. - If this method is omitted, the screen is dismissed on receival of the ``LEAVESCREEN`` key. + If this method is omitted, the screen is dismissed on reception of the ``LEAVESCREEN`` key. * ``function screen:onGetSelectedUnit()`` * ``function screen:onGetSelectedItem()`` From 9e38101593f47d92bd474bd3aacf3ef5e2ad3ce2 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 12:09:21 -0800 Subject: [PATCH 04/20] enable the overlay by default now that gps->enabler is unharmed upon crossing the Lua boundary --- data/init/dfhack.tools.init | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data/init/dfhack.tools.init b/data/init/dfhack.tools.init index a910a8e34..741298109 100644 --- a/data/init/dfhack.tools.init +++ b/data/init/dfhack.tools.init @@ -78,6 +78,9 @@ # Display DFHack version on title screen #enable title-version +# Allow DFHack tools to overlay functionality and information on the DF screen +enable overlay + # Dwarf Manipulator (simple in-game Dwarf Therapist replacement) #enable manipulator @@ -89,7 +92,6 @@ # Other interface improvement tools #enable \ -# overlay \ # confirm \ # dwarfmonitor \ # mousequery \ From 5d04b9c4cbce49a55276a70b0e1bcc7ebf5b6bf0 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Tue, 3 Jan 2023 01:01:30 -0800 Subject: [PATCH 05/20] add Textures module and load DFHack logo undocumented for now since it's internal. in the future, perhaps this could morph into a dynamic texture loading facility for tools --- data/CMakeLists.txt | 3 + data/art/dfhack.png | Bin 0 -> 1480 bytes docs/changelog.txt | 1 + library/CMakeLists.txt | 2 + library/Core.cpp | 24 +++- library/LuaApi.cpp | 9 ++ library/include/modules/Graphic.h | 22 ++- library/include/modules/Textures.h | 35 +++++ library/modules/Textures.cpp | 208 +++++++++++++++++++++++++++++ 9 files changed, 296 insertions(+), 8 deletions(-) create mode 100644 data/art/dfhack.png create mode 100644 library/include/modules/Textures.h create mode 100644 library/modules/Textures.cpp diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index 412ffa347..8991f1c24 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -10,6 +10,9 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/quickfort/ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/orders/ DESTINATION dfhack-config/orders/library) +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/art/ + DESTINATION "${DFHACK_DATA_DESTINATION}/data/art") + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/examples/ DESTINATION "${DFHACK_DATA_DESTINATION}/examples") diff --git a/data/art/dfhack.png b/data/art/dfhack.png new file mode 100644 index 0000000000000000000000000000000000000000..6f146dc2fa4a8272e9c941b2640a0d80e6d63ce3 GIT binary patch literal 1480 zcmV;(1vmPMP)tWUTKeUsN(Bak0dzVYtgWp?d=7b5-KHg`}S?YKq-rl zkB6wJDERd06K69rG6HdNaj?9+EWBS>SO~|*$6#w~ON+s5iiwGV=;-KQ2Fe)t@Zp1S zhJAf~+!+oG3>iL|sd!KSLJ>dNg(&7 zot+)g%gf8Gyu6&~>FH@M1~>;0wY9Zmn3|d@5A5yjE$fYCK~`24(VLr_th>9L= z{RD$lqtOU~!R^4%(2%f7jYdPd2M-<)zp=5wDk>`E?N#nZcz8I=&CMk`KR;jI&C=3R zq8~kabo~)5E-sQG79Q!M>Eq+WZ9gIh+pYvUf^vhwAipm;CpjQ|8AB|Veo)QxiiSF<3 zho+_`*=}rXjDDrSL|j~4@DnOy0M9TuIGE1L!oorh9DK5~vt|0^~b}K6@init(); @@ -1765,12 +1768,7 @@ bool Core::Init() cerr << "DFHack is running.\n"; - { - auto L = Lua::Core::State; - Lua::StackUnwinder top(L); - Lua::CallLuaModuleFunction(con, L, "script-manager", "reload"); - onStateChange(con, SC_CORE_INITIALIZED); - } + onStateChange(con, SC_CORE_INITIALIZED); return true; } @@ -2138,6 +2136,13 @@ void Core::onStateChange(color_ostream &out, state_change_event event) switch (event) { + case SC_CORE_INITIALIZED: + { + auto L = Lua::Core::State; + Lua::StackUnwinder top(L); + Lua::CallLuaModuleFunction(con, L, "script-manager", "reload"); + } + break; case SC_WORLD_LOADED: case SC_WORLD_UNLOADED: case SC_MAP_LOADED: @@ -2171,6 +2176,10 @@ void Core::onStateChange(color_ostream &out, state_change_event event) evtlog << std::endl; } } + break; + case SC_VIEWSCREEN_CHANGED: + Textures::init(out); + break; default: break; } @@ -2248,6 +2257,7 @@ int Core::Shutdown ( void ) } // invalidate all modules allModules.clear(); + Textures::cleanup(); memset(&(s_mods), 0, sizeof(s_mods)); d.reset(); return -1; diff --git a/library/LuaApi.cpp b/library/LuaApi.cpp index 1352b7f1a..2f1d612b2 100644 --- a/library/LuaApi.cpp +++ b/library/LuaApi.cpp @@ -57,6 +57,7 @@ distribution. #include "modules/Materials.h" #include "modules/Random.h" #include "modules/Screen.h" +#include "modules/Textures.h" #include "modules/Translation.h" #include "modules/Units.h" #include "modules/World.h" @@ -1670,6 +1671,13 @@ static const luaL_Reg dfhack_job_funcs[] = { { NULL, NULL } }; +/***** Textures module *****/ + +static const LuaWrapper::FunctionReg dfhack_textures_module[] = { + WRAPM(Textures, getDfhackLogoTexposStart), + { NULL, NULL } +}; + /***** Units module *****/ static const LuaWrapper::FunctionReg dfhack_units_module[] = { @@ -3357,6 +3365,7 @@ void OpenDFHackApi(lua_State *state) luaL_setfuncs(state, dfhack_funcs, 0); OpenModule(state, "gui", dfhack_gui_module, dfhack_gui_funcs); OpenModule(state, "job", dfhack_job_module, dfhack_job_funcs); + OpenModule(state, "textures", dfhack_textures_module); OpenModule(state, "units", dfhack_units_module, dfhack_units_funcs); OpenModule(state, "items", dfhack_items_module, dfhack_items_funcs); OpenModule(state, "maps", dfhack_maps_module, dfhack_maps_funcs); diff --git a/library/include/modules/Graphic.h b/library/include/modules/Graphic.h index fa2cc30c6..ba5bf98c3 100644 --- a/library/include/modules/Graphic.h +++ b/library/include/modules/Graphic.h @@ -45,9 +45,29 @@ namespace DFHack uint16_t w, h; } DFSDL_Rect; typedef struct + { + void *palette; // SDL_Palette* + uint8_t BitsPerPixel; + uint8_t BytesPerPixel; + uint8_t Rloss; + uint8_t Gloss; + uint8_t Bloss; + uint8_t Aloss; + uint8_t Rshift; + uint8_t Gshift; + uint8_t Bshift; + uint8_t Ashift; + uint32_t Rmask; + uint32_t Gmask; + uint32_t Bmask; + uint32_t Amask; + uint32_t colorkey; + uint8_t alpha; + } DFSDL_PixelFormat; + typedef struct { uint32_t flags; - void* format; // PixelFormat* + DFSDL_PixelFormat* format; int w, h; int pitch; void* pixels; diff --git a/library/include/modules/Textures.h b/library/include/modules/Textures.h new file mode 100644 index 000000000..390bbeed6 --- /dev/null +++ b/library/include/modules/Textures.h @@ -0,0 +1,35 @@ +#pragma once + +#include "Export.h" + +#include "ColorText.h" + +namespace DFHack { + +/** + * The Textures module - loads and provides access to DFHack textures + * \ingroup grp_modules + * \ingroup grp_textures + */ +namespace Textures { + +/** + * Call this on DFHack init and on every viewscreen change so we can reload + * and reindex textures as needed. + */ +void init(DFHack::color_ostream &out); + +/** + * Call this when DFHack is being unloaded. + * + */ +void cleanup(); + +/** + * Get first texpos for the DFHack logo. This texpos and the next 11 make up the + * 4x3 grid of logo textures that can be displayed on the UI layer. + */ +DFHACK_EXPORT long getDfhackLogoTexposStart(); + +} +} diff --git a/library/modules/Textures.cpp b/library/modules/Textures.cpp new file mode 100644 index 000000000..efbd1cdf4 --- /dev/null +++ b/library/modules/Textures.cpp @@ -0,0 +1,208 @@ +#include "Internal.h" + +#include "modules/Textures.h" + +#include "Debug.h" +#include "PluginManager.h" + +#include "df/enabler.h" + +using df::global::enabler; +using namespace DFHack; + +namespace DFHack { + DBG_DECLARE(core, textures, DebugCategory::LINFO); +} + +static bool g_loaded = false; +static long g_num_dfhack_textures = 0; +static long g_dfhack_logo_texpos_start = -1; + +static DFLibrary *g_sdl_handle = nullptr; +static DFLibrary *g_sdl_image_handle = nullptr; +static const std::vector SDL_LIBS { + "SDLreal.dll", + "SDL.framework/Versions/A/SDL", + "SDL.framework/SDL", + "libSDL-1.2.so.0" +}; +static const std::vector SDL_IMAGE_LIBS { + "SDL_image.dll", + "SDL_image.framework/Versions/A/SDL_image", + "SDL_image.framework/SDL_image", + "libSDL_image-1.2.so.0" +}; + +DFSDL_Surface * (*g_IMG_Load)(const char *) = nullptr; +int (*g_SDL_SetAlpha)(DFSDL_Surface *, uint32_t, uint8_t) = nullptr; +DFSDL_Surface * (*g_SDL_CreateRGBSurface)(uint32_t, int, int, int, uint32_t, uint32_t, uint32_t, uint32_t); +int (*g_SDL_UpperBlit)(DFSDL_Surface *, DFSDL_Rect *, DFSDL_Surface *, DFSDL_Rect *); +DFSDL_Surface * (*g_SDL_ConvertSurface)(DFSDL_Surface *, const DFSDL_PixelFormat *, uint32_t); + +void (*g_SDL_FreeSurface)(DFSDL_Surface *); + +// Converts an arbitrary Surface to something like the display format +// (32-bit RGBA), and converts magenta to transparency if convert_magenta is set +// and the source surface didn't already have an alpha channel. +// It also deletes the source surface. +// +// It uses the same pixel format (RGBA, R at lowest address) regardless of +// hardware. +DFSDL_Surface * canonicalize_format(DFSDL_Surface *src) { + DFSDL_PixelFormat fmt; + fmt.palette = NULL; + fmt.BitsPerPixel = 32; + fmt.BytesPerPixel = 4; + fmt.Rloss = fmt.Gloss = fmt.Bloss = fmt.Aloss = 0; +//#if SDL_BYTEORDER == SDL_BIG_ENDIAN +// fmt.Rshift = 24; fmt.Gshift = 16; fmt.Bshift = 8; fmt.Ashift = 0; +//#else + fmt.Rshift = 0; fmt.Gshift = 8; fmt.Bshift = 16; fmt.Ashift = 24; +//#endif + fmt.Rmask = 255 << fmt.Rshift; + fmt.Gmask = 255 << fmt.Gshift; + fmt.Bmask = 255 << fmt.Bshift; + fmt.Amask = 255 << fmt.Ashift; + fmt.colorkey = 0; + fmt.alpha = 255; + + DFSDL_Surface *tgt = g_SDL_ConvertSurface(src, &fmt, 0); // SDL_SWSURFACE + g_SDL_FreeSurface(src); + return tgt; +} + +const uint32_t TILE_WIDTH_PX = 8; +const uint32_t TILE_HEIGHT_PX = 12; + +static size_t load_textures(color_ostream & out, const char * fname, + long *texpos_start) { + if (!g_sdl_handle || !g_sdl_image_handle || !g_IMG_Load || !g_SDL_SetAlpha + || !g_SDL_CreateRGBSurface || !g_SDL_UpperBlit + || !g_SDL_ConvertSurface || !g_SDL_FreeSurface) + return 0; + + DFSDL_Surface *s = g_IMG_Load(fname); + if (!s) { + out.printerr("unable to load textures from '%s'\n", fname); + return 0; + } + + s = canonicalize_format(s); + g_SDL_SetAlpha(s, 0, 255); + int dimx = s->w / TILE_WIDTH_PX; + int dimy = s->h / TILE_HEIGHT_PX; + long count = 0; + for (int y = 0; y < dimy; y++) { + for (int x = 0; x < dimx; x++) { + DFSDL_Surface *tile = g_SDL_CreateRGBSurface(0, // SDL_SWSURFACE + TILE_WIDTH_PX, TILE_HEIGHT_PX, 32, + s->format->Rmask, s->format->Gmask, s->format->Bmask, + s->format->Amask); + g_SDL_SetAlpha(tile, 0,255); + DFSDL_Rect vp; + vp.x = TILE_WIDTH_PX * x; + vp.y = TILE_HEIGHT_PX * y; + vp.w = TILE_WIDTH_PX; + vp.h = TILE_HEIGHT_PX; + g_SDL_UpperBlit(s, &vp, tile, NULL); + if (!count++) + *texpos_start = enabler->textures.raws.size(); + enabler->textures.raws.push_back(tile); + } + } + g_SDL_FreeSurface(s); + + DEBUG(textures,out).print("loaded %zd textures from '%s'\n", count, fname); + return count; +} + +// DFHack could conceivably be loaded at any time, so we need to be able to +// handle loading textures before or after a world is loaded. +// If a world is already loaded, then append our textures to the raws. they'll +// be freed when the world is unloaded and we'll reload when we get to the title +// screen. If it's pre-world, append our textures and then adjust the "init" +// texture count so our textures will no longer be freed when worlds are +// unloaded. +// +void Textures::init(color_ostream &out) { + auto & textures = enabler->textures; + long num_textures = textures.raws.size(); + if (num_textures <= g_dfhack_logo_texpos_start) + g_loaded = false; + + if (g_loaded) + return; + + for (auto &lib_str : SDL_LIBS) { + if ((g_sdl_handle = OpenPlugin(lib_str.c_str()))) + break; + } + for (auto &lib_str : SDL_IMAGE_LIBS) { + if ((g_sdl_image_handle = OpenPlugin(lib_str.c_str()))) + break; + } + + if (!g_sdl_handle) { + out.printerr("Could not find SDL; DFHack textures not loaded.\n"); + } else if (!g_sdl_image_handle) { + out.printerr("Could not find SDL_image; DFHack textures not loaded.\n"); + } else { + #define bind(handle, name) \ + g_##name = (decltype(g_##name))LookupPlugin(handle, #name); \ + if (!g_##name) { \ + out.printerr("Could not find: " #name "; DFHack textures not loaded\n"); \ + } + + bind(g_sdl_image_handle, IMG_Load); + bind(g_sdl_handle, SDL_SetAlpha); + bind(g_sdl_handle, SDL_CreateRGBSurface); + bind(g_sdl_handle, SDL_UpperBlit); + bind(g_sdl_handle, SDL_ConvertSurface); + bind(g_sdl_handle, SDL_FreeSurface); + #undef bind + } + + bool is_pre_world = num_textures == textures.init_texture_size; + + g_num_dfhack_textures = load_textures(out, "hack/data/art/dfhack.png", + &g_dfhack_logo_texpos_start); + + DEBUG(textures,out).print("loaded %zd textures\n", g_num_dfhack_textures); + + if (is_pre_world) + textures.init_texture_size += g_num_dfhack_textures; + + // NOTE: when GL modes are supported, we'll have to re-upload textures here + + g_loaded = true; +} + +// It's ok to leave NULLs in the raws list (according to usage in g_src) +void Textures::cleanup() { + if (!g_loaded) + return; + + auto & textures = enabler->textures; + auto &raws = textures.raws; + size_t texpos_end = g_dfhack_logo_texpos_start + g_num_dfhack_textures; + for (size_t idx = g_dfhack_logo_texpos_start; idx <= texpos_end; ++idx) { + SDL_FreeSurface(raws[idx]); + raws[idx] = NULL; + } + + if (g_dfhack_logo_texpos_start == textures.init_texture_size - g_num_dfhack_textures) + textures.init_texture_size -= g_num_dfhack_textures; + + g_loaded = false; + g_num_dfhack_textures = 0; + g_dfhack_logo_texpos_start = -1; + + if (g_sdl_handle) { + ClosePlugin(g_sdl_handle); + g_sdl_handle = nullptr; + } +} + +long Textures::getDfhackLogoTexposStart() { + return g_dfhack_logo_texpos_start; +} From 8e62a46009750bf018cba9061a126fa0df0c0d28 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Tue, 3 Jan 2023 01:34:58 -0800 Subject: [PATCH 06/20] display new logo for the hotkeys overlay widget --- plugins/lua/hotkeys.lua | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/plugins/lua/hotkeys.lua b/plugins/lua/hotkeys.lua index 999527d0d..bfe55e0a7 100644 --- a/plugins/lua/hotkeys.lua +++ b/plugins/lua/hotkeys.lua @@ -19,7 +19,6 @@ HotspotMenuWidget.ATTRS{ } function HotspotMenuWidget:init() - self:addviews{widgets.Label{text={'!DF!', NEWLINE, '!Ha!', NEWLINE, '!ck!'}}} self.mouseover = false end @@ -41,6 +40,34 @@ function HotspotMenuWidget:overlay_trigger() mouseover=self.mouseover}:show() end +local dscreen = dfhack.screen + +function HotspotMenuWidget:onRenderBody(dc) + local tpos = dfhack.textures.getDfhackLogoTexposStart() + local x, y = dc.x, dc.y + + if tpos == -1 then + dscreen.paintString(COLOR_WHITE, x, y+0, '!DF!') + dscreen.paintString(COLOR_WHITE, x, y+1, '!Ha!') + dscreen.paintString(COLOR_WHITE, x, y+2, '!ck!') + else + dscreen.paintTile(COLOR_WHITE, x+0, y+0, '!', tpos+0) + dscreen.paintTile(COLOR_WHITE, x+1, y+0, 'D', tpos+1) + dscreen.paintTile(COLOR_WHITE, x+2, y+0, 'F', tpos+2) + dscreen.paintTile(COLOR_WHITE, x+3, y+0, '!', tpos+3) + + dscreen.paintTile(COLOR_WHITE, x+0, y+1, '!', tpos+4) + dscreen.paintTile(COLOR_WHITE, x+1, y+1, 'H', tpos+5) + dscreen.paintTile(COLOR_WHITE, x+2, y+1, 'a', tpos+6) + dscreen.paintTile(COLOR_WHITE, x+3, y+1, '!', tpos+7) + + dscreen.paintTile(COLOR_WHITE, x+0, y+2, '!', tpos+8) + dscreen.paintTile(COLOR_WHITE, x+1, y+2, 'c', tpos+9) + dscreen.paintTile(COLOR_WHITE, x+2, y+2, 'k', tpos+10) + dscreen.paintTile(COLOR_WHITE, x+3, y+2, '!', tpos+11) + end +end + -- register the menu hotspot with the overlay OVERLAY_WIDGETS = {menu=HotspotMenuWidget} From 4e51e02924e2c2c183445f6f540856b3365c1c01 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 17:15:32 -0800 Subject: [PATCH 07/20] move SDL shims to a new DFSDL module --- library/CMakeLists.txt | 2 + library/Core.cpp | 7 ++ library/include/modules/DFSDL.h | 92 ++++++++++++++++++++++ library/include/modules/Graphic.h | 54 +------------ library/include/modules/Textures.h | 1 - library/modules/DFSDL.cpp | 120 +++++++++++++++++++++++++++++ library/modules/Textures.cpp | 82 +++----------------- 7 files changed, 233 insertions(+), 125 deletions(-) create mode 100644 library/include/modules/DFSDL.h create mode 100644 library/modules/DFSDL.cpp diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 0edf10c0b..87f869493 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -124,6 +124,7 @@ set(MODULE_HEADERS include/modules/Buildings.h include/modules/Burrows.h include/modules/Constructions.h + include/modules/DFSDL.h include/modules/Designations.h include/modules/EventManager.h include/modules/Filesystem.h @@ -151,6 +152,7 @@ set(MODULE_SOURCES modules/Buildings.cpp modules/Burrows.cpp modules/Constructions.cpp + modules/DFSDL.cpp modules/Designations.cpp modules/EventManager.cpp modules/Filesystem.cpp diff --git a/library/Core.cpp b/library/Core.cpp index 69e033c02..a3979ee2f 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -49,6 +49,7 @@ using namespace std; #include "VersionInfo.h" #include "PluginManager.h" #include "ModuleFactory.h" +#include "modules/DFSDL.h" #include "modules/EventManager.h" #include "modules/Filesystem.h" #include "modules/Gui.h" @@ -1671,6 +1672,11 @@ bool Core::Init() return false; } + cerr << "Binding to SDL.\n"; + if (!DFSDL::init(con)) { + fatal("cannot bind SDL libraries"); + return false; + } cerr << "Initializing textures.\n"; Textures::init(con); // create mutex for syncing with interactive tasks @@ -2258,6 +2264,7 @@ int Core::Shutdown ( void ) // invalidate all modules allModules.clear(); Textures::cleanup(); + DFSDL::cleanup(); memset(&(s_mods), 0, sizeof(s_mods)); d.reset(); return -1; diff --git a/library/include/modules/DFSDL.h b/library/include/modules/DFSDL.h new file mode 100644 index 000000000..b5fd119f7 --- /dev/null +++ b/library/include/modules/DFSDL.h @@ -0,0 +1,92 @@ +#pragma once + +#include "Export.h" +#include "ColorText.h" + +namespace DFHack +{ + // SDL stand-in type definitions + typedef signed short SINT16; + typedef void DFSDL_sem; + + typedef struct + { + int16_t x, y; + uint16_t w, h; + } DFSDL_Rect; + typedef struct + { + void *palette; // SDL_Palette* + uint8_t BitsPerPixel; + uint8_t BytesPerPixel; + uint8_t Rloss; + uint8_t Gloss; + uint8_t Bloss; + uint8_t Aloss; + uint8_t Rshift; + uint8_t Gshift; + uint8_t Bshift; + uint8_t Ashift; + uint32_t Rmask; + uint32_t Gmask; + uint32_t Bmask; + uint32_t Amask; + uint32_t colorkey; + uint8_t alpha; + } DFSDL_PixelFormat; + typedef struct + { + uint32_t flags; + DFSDL_PixelFormat* format; + int w, h; + int pitch; + void* pixels; + void* userdata; // as far as i could see DF doesnt use this + int locked; + void* lock_data; + DFSDL_Rect clip_rect; + void* map; + int refcount; + } DFSDL_Surface; + + // ========= + struct DFTileSurface + { + bool paintOver; // draw over original tile? + DFSDL_Surface* surface; // from where it should be drawn + DFSDL_Rect* rect; // from which coords (NULL to draw whole surface) + DFSDL_Rect* dstResize; // if not NULL dst rect will be resized (x/y/w/h will be added to original dst) + }; + +/** + * The DFSDL module - provides access to SDL functions without actually + * requiring build-time linkage to SDL + * \ingroup grp_modules + * \ingroup grp_dfsdl + */ +namespace DFSDL +{ + +/** + * Call this on DFHack init so we can load the SDL functions. Returns false on + * failure. + */ +bool init(DFHack::color_ostream &out); + +/** + * Call this when DFHack is being unloaded. + */ +void cleanup(); + +DFHACK_EXPORT DFSDL_Surface * DFIMG_Load(const char *file); +DFHACK_EXPORT int DFSDL_SetAlpha(DFSDL_Surface *surface, uint32_t flag, uint8_t alpha); +DFHACK_EXPORT DFSDL_Surface * DFSDL_CreateRGBSurface(uint32_t flags, int width, int height, int depth, uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask); +DFHACK_EXPORT int DFSDL_UpperBlit(DFSDL_Surface *src, const DFSDL_Rect *srcrect, DFSDL_Surface *dst, DFSDL_Rect *dstrect); +DFHACK_EXPORT DFSDL_Surface * DFSDL_ConvertSurface(DFSDL_Surface *src, const DFSDL_PixelFormat *fmt, uint32_t flags); +DFHACK_EXPORT void DFSDL_FreeSurface(DFSDL_Surface *surface); +DFHACK_EXPORT int DFSDL_SemWait(DFSDL_sem *sem); +DFHACK_EXPORT int DFSDL_SemPost(DFSDL_sem *sem); + +} + +} diff --git a/library/include/modules/Graphic.h b/library/include/modules/Graphic.h index ba5bf98c3..22a5d4913 100644 --- a/library/include/modules/Graphic.h +++ b/library/include/modules/Graphic.h @@ -33,62 +33,11 @@ distribution. #include #include "Export.h" #include "Module.h" +#include "DFSDL.h" #include namespace DFHack { - // SDL stuff - typedef signed short SINT16; - typedef struct - { - int16_t x, y; - uint16_t w, h; - } DFSDL_Rect; - typedef struct - { - void *palette; // SDL_Palette* - uint8_t BitsPerPixel; - uint8_t BytesPerPixel; - uint8_t Rloss; - uint8_t Gloss; - uint8_t Bloss; - uint8_t Aloss; - uint8_t Rshift; - uint8_t Gshift; - uint8_t Bshift; - uint8_t Ashift; - uint32_t Rmask; - uint32_t Gmask; - uint32_t Bmask; - uint32_t Amask; - uint32_t colorkey; - uint8_t alpha; - } DFSDL_PixelFormat; - typedef struct - { - uint32_t flags; - DFSDL_PixelFormat* format; - int w, h; - int pitch; - void* pixels; - void* userdata; // as far as i could see DF doesnt use this - int locked; - void* lock_data; - DFSDL_Rect clip_rect; - void* map; - int refcount; - } DFSDL_Surface; - - // ========= - struct DFTileSurface - { - bool paintOver; // draw over original tile? - DFSDL_Surface* surface; // from where it should be drawn - DFSDL_Rect* rect; // from which coords (NULL to draw whole surface) - DFSDL_Rect* dstResize; // if not NULL dst rect will be resized (x/y/w/h will be added to original dst) - }; - - class DFHACK_EXPORT Graphic : public Module { public: @@ -103,7 +52,6 @@ namespace DFHack private: std::vector funcs; }; - } #endif diff --git a/library/include/modules/Textures.h b/library/include/modules/Textures.h index 390bbeed6..2ef172bff 100644 --- a/library/include/modules/Textures.h +++ b/library/include/modules/Textures.h @@ -1,7 +1,6 @@ #pragma once #include "Export.h" - #include "ColorText.h" namespace DFHack { diff --git a/library/modules/DFSDL.cpp b/library/modules/DFSDL.cpp new file mode 100644 index 000000000..a7847fdb5 --- /dev/null +++ b/library/modules/DFSDL.cpp @@ -0,0 +1,120 @@ +#include "Internal.h" + +#include "modules/DFSDL.h" + +#include "Debug.h" +#include "PluginManager.h" + +namespace DFHack { + DBG_DECLARE(core, dfsdl, DebugCategory::LINFO); +} + +using namespace DFHack; + +static DFLibrary *g_sdl_handle = nullptr; +static DFLibrary *g_sdl_image_handle = nullptr; +static const std::vector SDL_LIBS { + "SDLreal.dll", // TODO: change to SDL.dll once we move to dfhooks + "SDL.framework/Versions/A/SDL", + "SDL.framework/SDL", + "libSDL-1.2.so.0" +}; +static const std::vector SDL_IMAGE_LIBS { + "SDL_image.dll", + "SDL_image.framework/Versions/A/SDL_image", + "SDL_image.framework/SDL_image", + "libSDL_image-1.2.so.0" +}; + +DFSDL_Surface * (*g_IMG_Load)(const char *) = nullptr; +int (*g_SDL_SetAlpha)(DFSDL_Surface *, uint32_t, uint8_t) = nullptr; +DFSDL_Surface * (*g_SDL_CreateRGBSurface)(uint32_t, int, int, int, uint32_t, uint32_t, uint32_t, uint32_t); +int (*g_SDL_UpperBlit)(DFSDL_Surface *, const DFSDL_Rect *, DFSDL_Surface *, DFSDL_Rect *); +DFSDL_Surface * (*g_SDL_ConvertSurface)(DFSDL_Surface *, const DFSDL_PixelFormat *, uint32_t); +void (*g_SDL_FreeSurface)(DFSDL_Surface *); +int (*g_SDL_SemWait)(DFSDL_sem *); +int (*g_SDL_SemPost)(DFSDL_sem *); + +bool DFSDL::init(color_ostream &out) { + for (auto &lib_str : SDL_LIBS) { + if ((g_sdl_handle = OpenPlugin(lib_str.c_str()))) + break; + } + if (!g_sdl_handle) { + out.printerr("DFHack could not find SDL\n"); + return false; + } + + for (auto &lib_str : SDL_IMAGE_LIBS) { + if ((g_sdl_image_handle = OpenPlugin(lib_str.c_str()))) + break; + } + if (!g_sdl_image_handle) { + out.printerr("DFHack could not find SDL_image\n"); + return false; + } + + #define bind(handle, name) \ + g_##name = (decltype(g_##name))LookupPlugin(handle, #name); \ + if (!g_##name) { \ + out.printerr("DFHack could not find: " #name "\n"); \ + return false; \ + } + + bind(g_sdl_image_handle, IMG_Load); + bind(g_sdl_handle, SDL_SetAlpha); + bind(g_sdl_handle, SDL_CreateRGBSurface); + bind(g_sdl_handle, SDL_UpperBlit); + bind(g_sdl_handle, SDL_ConvertSurface); + bind(g_sdl_handle, SDL_FreeSurface); + bind(g_sdl_handle, SDL_SemWait); + bind(g_sdl_handle, SDL_SemPost); + #undef bind + + DEBUG(dfsdl,out).print("sdl successfully loaded\n"); + return true; +} + +// It's ok to leave NULLs in the raws list (according to usage in g_src) +void DFSDL::cleanup() { + if (g_sdl_handle) { + ClosePlugin(g_sdl_handle); + g_sdl_handle = nullptr; + } + if (g_sdl_image_handle) { + ClosePlugin(g_sdl_image_handle); + g_sdl_image_handle = nullptr; + } +} + +DFSDL_Surface * DFSDL::DFIMG_Load(const char *file) { + return g_IMG_Load(file); +} + +int DFSDL::DFSDL_SetAlpha(DFSDL_Surface *surface, uint32_t flag, uint8_t alpha) { + return g_SDL_SetAlpha(surface, flag, alpha); +} + +DFSDL_Surface * DFSDL::DFSDL_CreateRGBSurface(uint32_t flags, int width, int height, int depth, uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask) { + return g_SDL_CreateRGBSurface(flags, width, height, depth, Rmask, Gmask, Bmask, Amask); +} + +int DFSDL::DFSDL_UpperBlit(DFSDL_Surface *src, const DFSDL_Rect *srcrect, DFSDL_Surface *dst, DFSDL_Rect *dstrect) { + return g_SDL_UpperBlit(src, srcrect, dst, dstrect); +} + +DFSDL_Surface * DFSDL::DFSDL_ConvertSurface(DFSDL_Surface *src, const DFSDL_PixelFormat *fmt, uint32_t flags) { + return g_SDL_ConvertSurface(src, fmt, flags); +} + +void DFSDL::DFSDL_FreeSurface(DFSDL_Surface *surface) { + g_SDL_FreeSurface(surface); +} + +int DFSDL::DFSDL_SemWait(DFSDL_sem *sem) { + return g_SDL_SemWait(sem); +} + +int DFSDL::DFSDL_SemPost(DFSDL_sem *sem) { + return g_SDL_SemPost(sem); +} diff --git a/library/modules/Textures.cpp b/library/modules/Textures.cpp index efbd1cdf4..32ed6453c 100644 --- a/library/modules/Textures.cpp +++ b/library/modules/Textures.cpp @@ -1,5 +1,6 @@ #include "Internal.h" +#include "modules/DFSDL.h" #include "modules/Textures.h" #include "Debug.h" @@ -9,6 +10,7 @@ using df::global::enabler; using namespace DFHack; +using namespace DFHack::DFSDL; namespace DFHack { DBG_DECLARE(core, textures, DebugCategory::LINFO); @@ -18,29 +20,6 @@ static bool g_loaded = false; static long g_num_dfhack_textures = 0; static long g_dfhack_logo_texpos_start = -1; -static DFLibrary *g_sdl_handle = nullptr; -static DFLibrary *g_sdl_image_handle = nullptr; -static const std::vector SDL_LIBS { - "SDLreal.dll", - "SDL.framework/Versions/A/SDL", - "SDL.framework/SDL", - "libSDL-1.2.so.0" -}; -static const std::vector SDL_IMAGE_LIBS { - "SDL_image.dll", - "SDL_image.framework/Versions/A/SDL_image", - "SDL_image.framework/SDL_image", - "libSDL_image-1.2.so.0" -}; - -DFSDL_Surface * (*g_IMG_Load)(const char *) = nullptr; -int (*g_SDL_SetAlpha)(DFSDL_Surface *, uint32_t, uint8_t) = nullptr; -DFSDL_Surface * (*g_SDL_CreateRGBSurface)(uint32_t, int, int, int, uint32_t, uint32_t, uint32_t, uint32_t); -int (*g_SDL_UpperBlit)(DFSDL_Surface *, DFSDL_Rect *, DFSDL_Surface *, DFSDL_Rect *); -DFSDL_Surface * (*g_SDL_ConvertSurface)(DFSDL_Surface *, const DFSDL_PixelFormat *, uint32_t); - -void (*g_SDL_FreeSurface)(DFSDL_Surface *); - // Converts an arbitrary Surface to something like the display format // (32-bit RGBA), and converts magenta to transparency if convert_magenta is set // and the source surface didn't already have an alpha channel. @@ -66,8 +45,8 @@ DFSDL_Surface * canonicalize_format(DFSDL_Surface *src) { fmt.colorkey = 0; fmt.alpha = 255; - DFSDL_Surface *tgt = g_SDL_ConvertSurface(src, &fmt, 0); // SDL_SWSURFACE - g_SDL_FreeSurface(src); + DFSDL_Surface *tgt = DFSDL_ConvertSurface(src, &fmt, 0); // SDL_SWSURFACE + DFSDL_FreeSurface(src); return tgt; } @@ -76,41 +55,36 @@ const uint32_t TILE_HEIGHT_PX = 12; static size_t load_textures(color_ostream & out, const char * fname, long *texpos_start) { - if (!g_sdl_handle || !g_sdl_image_handle || !g_IMG_Load || !g_SDL_SetAlpha - || !g_SDL_CreateRGBSurface || !g_SDL_UpperBlit - || !g_SDL_ConvertSurface || !g_SDL_FreeSurface) - return 0; - - DFSDL_Surface *s = g_IMG_Load(fname); + DFSDL_Surface *s = DFIMG_Load(fname); if (!s) { out.printerr("unable to load textures from '%s'\n", fname); return 0; } s = canonicalize_format(s); - g_SDL_SetAlpha(s, 0, 255); + DFSDL_SetAlpha(s, 0, 255); int dimx = s->w / TILE_WIDTH_PX; int dimy = s->h / TILE_HEIGHT_PX; long count = 0; for (int y = 0; y < dimy; y++) { for (int x = 0; x < dimx; x++) { - DFSDL_Surface *tile = g_SDL_CreateRGBSurface(0, // SDL_SWSURFACE + DFSDL_Surface *tile = DFSDL_CreateRGBSurface(0, // SDL_SWSURFACE TILE_WIDTH_PX, TILE_HEIGHT_PX, 32, s->format->Rmask, s->format->Gmask, s->format->Bmask, s->format->Amask); - g_SDL_SetAlpha(tile, 0,255); + DFSDL_SetAlpha(tile, 0,255); DFSDL_Rect vp; vp.x = TILE_WIDTH_PX * x; vp.y = TILE_HEIGHT_PX * y; vp.w = TILE_WIDTH_PX; vp.h = TILE_HEIGHT_PX; - g_SDL_UpperBlit(s, &vp, tile, NULL); + DFSDL_UpperBlit(s, &vp, tile, NULL); if (!count++) *texpos_start = enabler->textures.raws.size(); enabler->textures.raws.push_back(tile); } } - g_SDL_FreeSurface(s); + DFSDL_FreeSurface(s); DEBUG(textures,out).print("loaded %zd textures from '%s'\n", count, fname); return count; @@ -133,35 +107,6 @@ void Textures::init(color_ostream &out) { if (g_loaded) return; - for (auto &lib_str : SDL_LIBS) { - if ((g_sdl_handle = OpenPlugin(lib_str.c_str()))) - break; - } - for (auto &lib_str : SDL_IMAGE_LIBS) { - if ((g_sdl_image_handle = OpenPlugin(lib_str.c_str()))) - break; - } - - if (!g_sdl_handle) { - out.printerr("Could not find SDL; DFHack textures not loaded.\n"); - } else if (!g_sdl_image_handle) { - out.printerr("Could not find SDL_image; DFHack textures not loaded.\n"); - } else { - #define bind(handle, name) \ - g_##name = (decltype(g_##name))LookupPlugin(handle, #name); \ - if (!g_##name) { \ - out.printerr("Could not find: " #name "; DFHack textures not loaded\n"); \ - } - - bind(g_sdl_image_handle, IMG_Load); - bind(g_sdl_handle, SDL_SetAlpha); - bind(g_sdl_handle, SDL_CreateRGBSurface); - bind(g_sdl_handle, SDL_UpperBlit); - bind(g_sdl_handle, SDL_ConvertSurface); - bind(g_sdl_handle, SDL_FreeSurface); - #undef bind - } - bool is_pre_world = num_textures == textures.init_texture_size; g_num_dfhack_textures = load_textures(out, "hack/data/art/dfhack.png", @@ -186,7 +131,7 @@ void Textures::cleanup() { auto &raws = textures.raws; size_t texpos_end = g_dfhack_logo_texpos_start + g_num_dfhack_textures; for (size_t idx = g_dfhack_logo_texpos_start; idx <= texpos_end; ++idx) { - SDL_FreeSurface(raws[idx]); + DFSDL_FreeSurface((DFSDL_Surface *)raws[idx]); raws[idx] = NULL; } @@ -196,11 +141,6 @@ void Textures::cleanup() { g_loaded = false; g_num_dfhack_textures = 0; g_dfhack_logo_texpos_start = -1; - - if (g_sdl_handle) { - ClosePlugin(g_sdl_handle); - g_sdl_handle = nullptr; - } } long Textures::getDfhackLogoTexposStart() { From e9a5ec13af4f1f6b5a4905c0d3f916e130a64477 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 17:55:01 -0800 Subject: [PATCH 08/20] update logo image --- data/art/dfhack.png | Bin 1480 -> 1465 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/art/dfhack.png b/data/art/dfhack.png index 6f146dc2fa4a8272e9c941b2640a0d80e6d63ce3..17719f084a45a3b037bab5fd4355d5f76f674fbd 100644 GIT binary patch delta 1447 zcmV;Y1z7sX3%LuBB!7TOL_t(o!|j({NRwe3$A8=Mi(DqfiZHMO3z6s`BM8@uYLG~D z5JdO^QXX`cCuYzWs}4K}%b-A_15YCGEKHCViD*Uy>UO;c@4Fl4 zvsouEopiwi&+}Z@eck`(y8rk8x*wg02!GM^{AK$GU=4uJ=YONGuaBvzDaOagNhXun z?RFJpwOY~Z|BKaRGI8+WL7JMHShHpg0Po+w=k43Kgu`Lx=H`e*BE;iy{CDM)#c35+1V+Ljg49FoKB~R zh$sLeB5iGLnt#C_k4F|47v<*7n;KtVU*GcK^7!#%P0WiIFO+|Fc2*uedL$PvT#!T} zp#^a7-aSo%nVA_85sAfOa^l1ZjsL@k4{E&A>D2gx!Jw>WStQ)DWs7F53eZ_ne^*x*OG`@t7>!1ae|~;`brvp1<8U}MUl55zlz%^!N=ZvgOWrED-ENJqwY62A zJ$oh&heI3=hq&EtNvG2)XBL3huU~5t1OkDql0A9yBrg|6M@Ms#aOE{MHI;h_3JVK0 z6-p!$Swu!(jjx78W$V!NEa9gwfGaj7B5f-Q8^3v?*H$lq%``Dm6QJwfMhbM z?$hZsgM))vev`>WO-)T+0P%SI&wD{I7+kdiE|-hm-rg+#_3PKw#JQFy7K{BkfKQ)3 zX#%`nF93eOpZ4~4jlaIWK4-NuR!~sz`(^~NxPQ3Fz`%eeprfOM+1XhJ1_l@&9?tST zc<>-=R|En9&G@;wx!()X*w~nyKY#wW``2VL$;p!^<>JMQVz=96X=zDBM0`G<^!NA6 z?%lfuki&-$OLcX%8rRd)BOgD0%o3oC=|n{4=jT_I%)-J#3_6Ztu? zyd@tyc8u!kYNe8)P)PB_?RGOXG^FAi8XA;bFSqjYay2GX`jyJ40gyRVBoYY)CLWKg zPWkfXOUA~=sHmt=+qJQ=QT-p}I!`8(N!6&L(dg;`GQ|7(^{XOZC=^mEXn(O-Xl`!i z)TvVd{QC6^v)PQ%XynqROMLnAMdcbF9|z#)&z}m+^z?K#$ZOZGU0beT_wV0lWMqVN zI?dG76h%cvq*5uu;jofgtJTV_Tet9fy&O7ph}zm(EEWqQg57Q>91gR2^JYdzM`>ti zz+$mbQBgr@X({jCy~AuaD` delta 1462 zcmV;n1xfn33&;zQB!7=dL_t(og~eD&NL61L|I}wrXyxovoGA4u*A z7DkGKC=ocI8^K`_feUe=f+#pVbfF?fCFTsJf|PtWUTKeUsN(Bak0dzVYtgWpfKPVaTr@;RMt>5|IS?8eDh%-b`*)ch92^w% zWo2bD?eFg|=+4h#$kHum=RqPgO=8nKvpkXml!q?YV zu)*y`tgfyKIxISf$B!RFad9ym9UXCFat@fAn+pT%@9%TGRLztK3kxGotyT*e>PiQ`eSiCQtugM#$B!Qcd2DPf{aRaF3%bR{ z#XonTv$In$7#$szX-`j2L9f+nubsfb!QomxmxduBAx6{Y`Sa(@*Vp%d`vI2M%ld?b z1a=MdSD?V=!S#`T6+?sfp=lVPQe}jq%{(;zG6I@bHj&K2}PsfX0r) zgtp-y-H5Ott*oqokB^TeI^gO6Mr?a~JKb(DqMtr}3cbC(Fh4&JPEJmcnVAW%U%#f+ z*x1;}D}4F#CA@j_2HM)%Xp+{}R@%v&oPQkn`t>VyOuRK=FPWH_P&&W|;nvm`3kwUQ zbBl_KBAKzSRM9ns6n%dEV-oapK4X)Xph2N1Qj zwPcu@nkoh=jb%YrRu<8lo13h=yPN3k?QMB11UmHa;X^hxH6;e25*Tm@ynjea zz;=qj?L)Y`yVDlW&dyS^YG`O6IUZeeb2HJ>r4$tX1cOwg(FlRT?ZD8`kg!UPMnk#> z4;~P|v9ZA_Dk|jdRqjT3csR?=%_TZNKVRO>($Z3*A3b_>{ShoKE|MV@9_ga#B|Veo)QxiiSF<3ho+_`*=}rXjDDrSM1NddT<{Yr zV*t-EI5?Qj%EH1z4jg>4v$JLT Date: Wed, 4 Jan 2023 10:36:28 -0800 Subject: [PATCH 09/20] move dfhack-config into data --- {dfhack-config => data/dfhack-config}/autonick.txt | 0 {dfhack-config => data/dfhack-config}/dfstatus.lua | 0 {dfhack-config => data/dfhack-config}/dwarfmonitor.json | 0 {dfhack-config => data/dfhack-config}/init/default.dfhack.init | 0 {dfhack-config => data/dfhack-config}/init/default.onLoad.init | 0 {dfhack-config => data/dfhack-config}/init/default.onMapLoad.init | 0 .../dfhack-config}/init/default.onMapUnload.init | 0 {dfhack-config => data/dfhack-config}/init/default.onUnload.init | 0 {dfhack-config => data/dfhack-config}/init/dfhack.init | 0 {dfhack-config => data/dfhack-config}/init/onLoad.init | 0 {dfhack-config => data/dfhack-config}/init/onMapLoad.init | 0 {dfhack-config => data/dfhack-config}/init/onMapUnload.init | 0 {dfhack-config => data/dfhack-config}/init/onUnload.init | 0 {dfhack-config => data/dfhack-config}/overlay.json | 0 {dfhack-config => data/dfhack-config}/quickfort/aliases.txt | 0 {dfhack-config => data/dfhack-config}/quickfort/quickfort.txt | 0 {dfhack-config => data/dfhack-config}/script-paths.txt | 0 {dfhack-config => data/dfhack-config}/scripts/README.md | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename {dfhack-config => data/dfhack-config}/autonick.txt (100%) rename {dfhack-config => data/dfhack-config}/dfstatus.lua (100%) rename {dfhack-config => data/dfhack-config}/dwarfmonitor.json (100%) rename {dfhack-config => data/dfhack-config}/init/default.dfhack.init (100%) rename {dfhack-config => data/dfhack-config}/init/default.onLoad.init (100%) rename {dfhack-config => data/dfhack-config}/init/default.onMapLoad.init (100%) rename {dfhack-config => data/dfhack-config}/init/default.onMapUnload.init (100%) rename {dfhack-config => data/dfhack-config}/init/default.onUnload.init (100%) rename {dfhack-config => data/dfhack-config}/init/dfhack.init (100%) rename {dfhack-config => data/dfhack-config}/init/onLoad.init (100%) rename {dfhack-config => data/dfhack-config}/init/onMapLoad.init (100%) rename {dfhack-config => data/dfhack-config}/init/onMapUnload.init (100%) rename {dfhack-config => data/dfhack-config}/init/onUnload.init (100%) rename {dfhack-config => data/dfhack-config}/overlay.json (100%) rename {dfhack-config => data/dfhack-config}/quickfort/aliases.txt (100%) rename {dfhack-config => data/dfhack-config}/quickfort/quickfort.txt (100%) rename {dfhack-config => data/dfhack-config}/script-paths.txt (100%) rename {dfhack-config => data/dfhack-config}/scripts/README.md (100%) diff --git a/dfhack-config/autonick.txt b/data/dfhack-config/autonick.txt similarity index 100% rename from dfhack-config/autonick.txt rename to data/dfhack-config/autonick.txt diff --git a/dfhack-config/dfstatus.lua b/data/dfhack-config/dfstatus.lua similarity index 100% rename from dfhack-config/dfstatus.lua rename to data/dfhack-config/dfstatus.lua diff --git a/dfhack-config/dwarfmonitor.json b/data/dfhack-config/dwarfmonitor.json similarity index 100% rename from dfhack-config/dwarfmonitor.json rename to data/dfhack-config/dwarfmonitor.json diff --git a/dfhack-config/init/default.dfhack.init b/data/dfhack-config/init/default.dfhack.init similarity index 100% rename from dfhack-config/init/default.dfhack.init rename to data/dfhack-config/init/default.dfhack.init diff --git a/dfhack-config/init/default.onLoad.init b/data/dfhack-config/init/default.onLoad.init similarity index 100% rename from dfhack-config/init/default.onLoad.init rename to data/dfhack-config/init/default.onLoad.init diff --git a/dfhack-config/init/default.onMapLoad.init b/data/dfhack-config/init/default.onMapLoad.init similarity index 100% rename from dfhack-config/init/default.onMapLoad.init rename to data/dfhack-config/init/default.onMapLoad.init diff --git a/dfhack-config/init/default.onMapUnload.init b/data/dfhack-config/init/default.onMapUnload.init similarity index 100% rename from dfhack-config/init/default.onMapUnload.init rename to data/dfhack-config/init/default.onMapUnload.init diff --git a/dfhack-config/init/default.onUnload.init b/data/dfhack-config/init/default.onUnload.init similarity index 100% rename from dfhack-config/init/default.onUnload.init rename to data/dfhack-config/init/default.onUnload.init diff --git a/dfhack-config/init/dfhack.init b/data/dfhack-config/init/dfhack.init similarity index 100% rename from dfhack-config/init/dfhack.init rename to data/dfhack-config/init/dfhack.init diff --git a/dfhack-config/init/onLoad.init b/data/dfhack-config/init/onLoad.init similarity index 100% rename from dfhack-config/init/onLoad.init rename to data/dfhack-config/init/onLoad.init diff --git a/dfhack-config/init/onMapLoad.init b/data/dfhack-config/init/onMapLoad.init similarity index 100% rename from dfhack-config/init/onMapLoad.init rename to data/dfhack-config/init/onMapLoad.init diff --git a/dfhack-config/init/onMapUnload.init b/data/dfhack-config/init/onMapUnload.init similarity index 100% rename from dfhack-config/init/onMapUnload.init rename to data/dfhack-config/init/onMapUnload.init diff --git a/dfhack-config/init/onUnload.init b/data/dfhack-config/init/onUnload.init similarity index 100% rename from dfhack-config/init/onUnload.init rename to data/dfhack-config/init/onUnload.init diff --git a/dfhack-config/overlay.json b/data/dfhack-config/overlay.json similarity index 100% rename from dfhack-config/overlay.json rename to data/dfhack-config/overlay.json diff --git a/dfhack-config/quickfort/aliases.txt b/data/dfhack-config/quickfort/aliases.txt similarity index 100% rename from dfhack-config/quickfort/aliases.txt rename to data/dfhack-config/quickfort/aliases.txt diff --git a/dfhack-config/quickfort/quickfort.txt b/data/dfhack-config/quickfort/quickfort.txt similarity index 100% rename from dfhack-config/quickfort/quickfort.txt rename to data/dfhack-config/quickfort/quickfort.txt diff --git a/dfhack-config/script-paths.txt b/data/dfhack-config/script-paths.txt similarity index 100% rename from dfhack-config/script-paths.txt rename to data/dfhack-config/script-paths.txt diff --git a/dfhack-config/scripts/README.md b/data/dfhack-config/scripts/README.md similarity index 100% rename from dfhack-config/scripts/README.md rename to data/dfhack-config/scripts/README.md From c70c4131bd9c9a19b6e331a3f2b286c102025883 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 11:35:50 -0800 Subject: [PATCH 10/20] don't include dfhack-config/ in release tarball create it at runtime move files around so no dfhack-owned files are in there --- CMakeLists.txt | 2 - data/CMakeLists.txt | 12 ++-- .../init/examples}/onMapLoad_dreamfort.init | 0 data/examples/README.md | 9 --- library/Core.cpp | 63 ++++++++++--------- 5 files changed, 38 insertions(+), 48 deletions(-) rename data/{examples/init => dfhack-config/init/examples}/onMapLoad_dreamfort.init (100%) delete mode 100644 data/examples/README.md diff --git a/CMakeLists.txt b/CMakeLists.txt index 5877f69c6..2b518f809 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -448,8 +448,6 @@ endif() file(WRITE "${CMAKE_BINARY_DIR}/dfhack_setarch.txt" ${DFHACK_SETARCH}) install(FILES "${CMAKE_BINARY_DIR}/dfhack_setarch.txt" DESTINATION "${DFHACK_DATA_DESTINATION}") -install(DIRECTORY dfhack-config/ DESTINATION dfhack-config/default) - # build the plugins if(BUILD_PLUGINS) add_subdirectory(plugins) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index 8991f1c24..8cbd910cb 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -1,23 +1,23 @@ +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dfhack-config/ + DESTINATION "${DFHACK_DATA_DESTINATION}/data/dfhack-config-defaults") + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/init/ DESTINATION "${DFHACK_DATA_DESTINATION}/init") install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/base_command_counts.json - DESTINATION "${DFHACK_DATA_DESTINATION}/data/base_command_counts.json") + DESTINATION "${DFHACK_DATA_DESTINATION}/data") install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/quickfort/ DESTINATION "${DFHACK_DATA_DESTINATION}/data/quickfort") install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/orders/ - DESTINATION dfhack-config/orders/library) + DESTINATION "${DFHACK_DATA_DESTINATION}/data/orders") install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/art/ DESTINATION "${DFHACK_DATA_DESTINATION}/data/art") -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/examples/ - DESTINATION "${DFHACK_DATA_DESTINATION}/examples") - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/professions/ - DESTINATION dfhack-config/professions/library) + DESTINATION "${DFHACK_DATA_DESTINATION}/data/professions") install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/blueprints/ DESTINATION blueprints diff --git a/data/examples/init/onMapLoad_dreamfort.init b/data/dfhack-config/init/examples/onMapLoad_dreamfort.init similarity index 100% rename from data/examples/init/onMapLoad_dreamfort.init rename to data/dfhack-config/init/examples/onMapLoad_dreamfort.init diff --git a/data/examples/README.md b/data/examples/README.md deleted file mode 100644 index fb2b8e3a1..000000000 --- a/data/examples/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# The DFHack Example Configuration File Library - -This folder contains ready-to-use examples of various DFHack configuration -files. You can use them by copying them to appropriate folders where DFHack -and its plugins can find them. You can use them unmodified, or you can -customize them to better suit your preferences. - -For information on each of the files in this library, see the -[DFHack Example Configuration File Guide](https://docs.dfhack.org/en/stable/docs/guides/examples-guide.html). diff --git a/library/Core.cpp b/library/Core.cpp index a3979ee2f..df6ddbe36 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -106,6 +106,9 @@ namespace DFHack { DBG_DECLARE(core,keybinding,DebugCategory::LINFO); DBG_DECLARE(core,script,DebugCategory::LINFO); +static const std::string CONFIG_PATH = "dfhack-config/"; +static const std::string CONFIG_DEFAULTS_PATH = "hack/data/dfhack-config-defaults/"; + class MainThread { public: //! MainThread::suspend keeps the main DF thread suspended from Core::Init to @@ -486,10 +489,10 @@ void Core::getScriptPaths(std::vector *dest) { lock_guard lock(script_path_mutex); dest->clear(); - string df_path = this->p->getPath(); + string df_path = this->p->getPath() + "/"; for (auto it = script_paths[0].begin(); it != script_paths[0].end(); ++it) dest->push_back(*it); - dest->push_back(df_path + "/dfhack-config/scripts"); + dest->push_back(df_path + CONFIG_PATH + "scripts"); if (df::global::world && isWorldLoaded()) { string save = World::ReadWorldFolder(); if (save.size()) @@ -518,7 +521,7 @@ string Core::findScript(string name) bool loadScriptPaths(color_ostream &out, bool silent = false) { using namespace std; - string filename("dfhack-config/script-paths.txt"); + string filename(CONFIG_PATH + "script-paths.txt"); ifstream file(filename); if (!file) { @@ -1311,11 +1314,11 @@ static void run_dfhack_init(color_ostream &out, Core *core) } // load baseline defaults - core->loadScriptFile(out, "dfhack-config/init/default.dfhack.init", false); + core->loadScriptFile(out, CONFIG_PATH + "init/default.dfhack.init", false); // load user overrides std::vector prefixes(1, "dfhack"); - loadScriptFiles(core, out, prefixes, "dfhack-config/init"); + loadScriptFiles(core, out, prefixes, CONFIG_PATH + "init"); } // Load dfhack.init in a dedicated thread (non-interactive console mode) @@ -1331,14 +1334,14 @@ void fInitthread(void * iodata) // A thread function... for the interactive console. void fIOthread(void * iodata) { - static const char * HISTORY_FILE = "dfhack-config/dfhack.history"; + static const std::string HISTORY_FILE = CONFIG_PATH + "dfhack.history"; IODATA * iod = ((IODATA*) iodata); Core * core = iod->core; PluginManager * plug_mgr = ((IODATA*) iodata)->plug_mgr; CommandHistory main_history; - main_history.load(HISTORY_FILE); + main_history.load(HISTORY_FILE.c_str()); Console & con = core->getConsole(); if (plug_mgr == 0) @@ -1379,7 +1382,7 @@ void fIOthread(void * iodata) { // a proper, non-empty command was entered main_history.add(command); - main_history.save(HISTORY_FILE); + main_history.save(HISTORY_FILE.c_str()); } auto rv = core->runCommand(con, command); @@ -1614,46 +1617,44 @@ bool Core::Init() // initialize data defs virtual_identity::Init(this); + // create config directory if it doesn't already exist + if (!Filesystem::mkdir_recursive(CONFIG_PATH)) + con.printerr("Failed to create config directory: '%s'\n", CONFIG_PATH.c_str()); + // copy over default config files if necessary std::map config_files; std::map default_config_files; - if (Filesystem::listdir_recursive("dfhack-config", config_files, 10, false) != 0) - con.printerr("Failed to list directory: dfhack-config"); - else if (Filesystem::listdir_recursive("dfhack-config/default", default_config_files, 10, false) != 0) - con.printerr("Failed to list directory: dfhack-config/default"); + if (Filesystem::listdir_recursive(CONFIG_PATH, config_files, 10, false) != 0) + con.printerr("Failed to list directory: '%s'\n", CONFIG_PATH.c_str()); + else if (Filesystem::listdir_recursive(CONFIG_DEFAULTS_PATH, default_config_files, 10, false) != 0) + con.printerr("Failed to list directory: '%s'\n", CONFIG_DEFAULTS_PATH.c_str()); else { // ensure all config file directories exist before we start copying files - for (auto it = default_config_files.begin(); it != default_config_files.end(); ++it) - { + for (auto &entry : default_config_files) { // skip over files - if (!it->second) + if (!entry.second) continue; - std::string dirname = "dfhack-config/" + it->first; + std::string dirname = CONFIG_PATH + entry.first; if (!Filesystem::mkdir_recursive(dirname)) - { con.printerr("Failed to create config directory: '%s'\n", dirname.c_str()); - } } // copy files from the default tree that don't already exist in the config tree - for (auto it = default_config_files.begin(); it != default_config_files.end(); ++it) - { + for (auto &entry : default_config_files) { // skip over directories - if (it->second) + if (entry.second) continue; - std::string filename = it->first; - if (config_files.find(filename) == config_files.end()) - { - std::string src_file = std::string("dfhack-config/default/") + filename; + std::string filename = entry.first; + if (!config_files.count(filename)) { + std::string src_file = CONFIG_DEFAULTS_PATH + filename; if (!Filesystem::isfile(src_file)) continue; - std::string dest_file = std::string("dfhack-config/") + filename; + std::string dest_file = CONFIG_PATH + filename; std::ifstream src(src_file, std::ios::binary); std::ofstream dest(dest_file, std::ios::binary); - if (!src.good() || !dest.good()) - { - con.printerr("Copy failed: %s\n", filename.c_str()); + if (!src.good() || !dest.good()) { + con.printerr("Copy failed: '%s'\n", filename.c_str()); continue; } dest << src.rdbuf(); @@ -2090,9 +2091,9 @@ void Core::handleLoadAndUnloadScripts(color_ostream& out, state_change_event eve const std::vector& set = i->second; // load baseline defaults - this->loadScriptFile(out, "dfhack-config/init/default." + set[0] + ".init", false); + this->loadScriptFile(out, CONFIG_PATH + "init/default." + set[0] + ".init", false); - loadScriptFiles(this, out, set, "dfhack-config/init"); + loadScriptFiles(this, out, set, CONFIG_PATH + "init"); loadScriptFiles(this, out, set, rawFolder); loadScriptFiles(this, out, set, rawFolder + "objects/"); } From 9cbcd81f630d35bd43b1c180d2b803fd9a37948c Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 21:24:52 -0800 Subject: [PATCH 11/20] fix format strings for vars that were size_t --- library/modules/Textures.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/modules/Textures.cpp b/library/modules/Textures.cpp index 32ed6453c..928329f83 100644 --- a/library/modules/Textures.cpp +++ b/library/modules/Textures.cpp @@ -86,7 +86,7 @@ static size_t load_textures(color_ostream & out, const char * fname, } DFSDL_FreeSurface(s); - DEBUG(textures,out).print("loaded %zd textures from '%s'\n", count, fname); + DEBUG(textures,out).print("loaded %d textures from '%s'\n", count, fname); return count; } @@ -112,7 +112,7 @@ void Textures::init(color_ostream &out) { g_num_dfhack_textures = load_textures(out, "hack/data/art/dfhack.png", &g_dfhack_logo_texpos_start); - DEBUG(textures,out).print("loaded %zd textures\n", g_num_dfhack_textures); + DEBUG(textures,out).print("loaded %d textures\n", g_num_dfhack_textures); if (is_pre_world) textures.init_texture_size += g_num_dfhack_textures; From 412531bf038a758f8fd29800b0bd907b29e34e93 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 21:29:45 -0800 Subject: [PATCH 12/20] really fix the format string this time --- library/modules/Textures.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/modules/Textures.cpp b/library/modules/Textures.cpp index 928329f83..70011b627 100644 --- a/library/modules/Textures.cpp +++ b/library/modules/Textures.cpp @@ -86,7 +86,7 @@ static size_t load_textures(color_ostream & out, const char * fname, } DFSDL_FreeSurface(s); - DEBUG(textures,out).print("loaded %d textures from '%s'\n", count, fname); + DEBUG(textures,out).print("loaded %ld textures from '%s'\n", count, fname); return count; } @@ -112,7 +112,7 @@ void Textures::init(color_ostream &out) { g_num_dfhack_textures = load_textures(out, "hack/data/art/dfhack.png", &g_dfhack_logo_texpos_start); - DEBUG(textures,out).print("loaded %d textures\n", g_num_dfhack_textures); + DEBUG(textures,out).print("loaded %ld textures\n", g_num_dfhack_textures); if (is_pre_world) textures.init_texture_size += g_num_dfhack_textures; From 5e5775f5e353e57d6ccb4f92110b10fc45c7a85a Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 5 Jan 2023 17:11:01 -0800 Subject: [PATCH 13/20] rename globals according to structures update --- library/Core.cpp | 30 +-- library/DataStatics.cpp | 2 +- library/RemoteTools.cpp | 24 +-- library/include/DebugManager.h | 4 +- library/include/RemoteClient.h | 2 +- library/include/modules/Gui.h | 2 +- library/include/modules/Kitchen.h | 2 +- library/modules/Buildings.cpp | 14 +- library/modules/Burrows.cpp | 24 +-- library/modules/EventManager.cpp | 12 +- library/modules/Gui.cpp | 100 ++++----- library/modules/Items.cpp | 12 +- library/modules/Job.cpp | 2 +- library/modules/Kitchen.cpp | 94 ++++----- library/modules/Materials.cpp | 6 +- library/modules/Screen.cpp | 2 +- library/modules/Units.cpp | 20 +- plugins/.gitignore | 1 + plugins/add-spatter.cpp | 4 +- plugins/autochop.cpp | 8 +- plugins/autofarm.cpp | 6 +- plugins/autogems.cpp | 4 +- plugins/autolabor/autohauler.cpp | 6 +- plugins/autolabor/autolabor.cpp | 8 +- plugins/autolabor/joblabormapper.cpp | 2 +- plugins/autolabor/labormanager.cpp | 22 +- plugins/automaterial.cpp | 14 +- plugins/automelt.cpp | 4 +- plugins/autotrade.cpp | 4 +- plugins/buildingplan/buildingplan-planner.cpp | 2 +- plugins/buildingplan/buildingplan.cpp | 14 +- plugins/burrows.cpp | 14 +- plugins/confirm.cpp | 2 +- plugins/createitem.cpp | 6 +- plugins/debug.cpp | 2 +- plugins/devel/kittens.cpp | 8 +- plugins/devel/stockcheck.cpp | 6 +- plugins/devel/stripcaged.cpp | 4 +- plugins/dig-now.cpp | 6 +- plugins/dig.cpp | 6 +- plugins/diggingInvaders/assignJob.cpp | 4 +- plugins/diggingInvaders/diggingInvaders.cpp | 2 +- plugins/dwarfmonitor.cpp | 4 +- plugins/dwarfvet.cpp | 6 +- plugins/embark-assistant/finder_ui.cpp | 198 +++++++++--------- plugins/eventful.cpp | 2 +- plugins/getplants.cpp | 6 +- plugins/jobutils.cpp | 12 +- plugins/manipulator.cpp | 8 +- plugins/misery.cpp | 4 +- plugins/mousequery.cpp | 30 +-- plugins/nestboxes.cpp | 6 +- plugins/power-meter.cpp | 6 +- .../adventure_control.cpp | 12 +- .../remotefortressreader/dwarf_control.cpp | 26 +-- .../remotefortressreader.cpp | 10 +- plugins/rename.cpp | 22 +- plugins/rendermax/renderer_light.cpp | 2 +- plugins/rendermax/rendermax.cpp | 2 +- plugins/search.cpp | 14 +- plugins/siege-engine.cpp | 8 +- plugins/sort.cpp | 12 +- plugins/spectate/pause.cpp | 6 +- plugins/spectate/spectate.cpp | 8 +- plugins/steam-engine.cpp | 8 +- plugins/stockflow.cpp | 8 +- plugins/stockpiles/StockpileSerializer.h | 2 +- plugins/stockpiles/stockpiles.cpp | 20 +- plugins/stocks.cpp | 2 +- plugins/strangemood.cpp | 16 +- plugins/tailor.cpp | 10 +- plugins/trackstop.cpp | 6 +- plugins/tweak/tweak.cpp | 16 +- plugins/tweak/tweaks/block-labors.h | 4 +- plugins/tweak/tweaks/burrow-name-cancel.h | 12 +- plugins/tweak/tweaks/cage-butcher.h | 4 +- plugins/tweak/tweaks/eggs-fertile.h | 10 +- plugins/tweak/tweaks/farm-plot-select.h | 10 +- plugins/tweak/tweaks/hide-priority.h | 12 +- plugins/tweak/tweaks/hotkey-clear.h | 10 +- plugins/tweak/tweaks/max-wheelbarrow.h | 2 +- plugins/tweak/tweaks/shift-8-scroll.h | 4 +- plugins/tweak/tweaks/stable-cursor.h | 4 +- plugins/uicommon.h | 8 +- plugins/workflow.cpp | 8 +- plugins/zone.cpp | 12 +- 86 files changed, 552 insertions(+), 551 deletions(-) create mode 100644 plugins/.gitignore diff --git a/library/Core.cpp b/library/Core.cpp index df6ddbe36..d54218b5c 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -65,8 +65,8 @@ using namespace std; using namespace DFHack; -#include "df/ui.h" -#include "df/ui_sidebar_menus.h" +#include "df/plotinfost.h" +#include "df/gamest.h" #include "df/world.h" #include "df/world_data.h" #include "df/interfacest.h" @@ -1307,7 +1307,7 @@ bool Core::loadScriptFile(color_ostream &out, string fname, bool silent) static void run_dfhack_init(color_ostream &out, Core *core) { CoreSuspender lock; - if (!df::global::world || !df::global::ui || !df::global::gview) + if (!df::global::world || !df::global::plotinfo || !df::global::gview) { out.printerr("Key globals are missing, skipping loading dfhack.init.\n"); return; @@ -1712,10 +1712,10 @@ bool Core::Init() if (!listen.get()) cerr << "TCP listen failed.\n"; - if (df::global::ui_sidebar_menus) + if (df::global::game) { vector args; - const string & raw = df::global::ui_sidebar_menus->command_line.original; + const string & raw = df::global::game->command_line.original; size_t offset = 0; while (offset < raw.size()) { @@ -1879,7 +1879,7 @@ void Core::doUpdate(color_ostream &out) strict_virtual_cast(screen); // save data (do this before updating last_world_data_ptr and triggering unload events) - if ((df::global::ui->main.autosave_request && !d->last_autosave_request) || + if ((df::global::plotinfo->main.autosave_request && !d->last_autosave_request) || (is_load_save && !d->was_load_save && strict_virtual_cast(screen))) { doSaveData(out); @@ -1941,7 +1941,7 @@ void Core::doUpdate(color_ostream &out) // Execute per-frame handlers onUpdate(out); - d->last_autosave_request = df::global::ui->main.autosave_request; + d->last_autosave_request = df::global::plotinfo->main.autosave_request; d->was_load_save = is_load_save; out << std::flush; @@ -2288,14 +2288,14 @@ bool Core::ncurses_wgetch(int in, int & out) /* TODO: understand how this changes for v50 int idx = in - KEY_F(1); // FIXME: copypasta, push into a method! - if(df::global::ui && df::global::gview) + if(df::global::plotinfo && df::global::gview) { df::viewscreen * ws = Gui::getCurViewscreen(); if (strict_virtual_cast(ws) && - df::global::ui->main.mode != ui_sidebar_mode::Hotkeys && - df::global::ui->main.hotkeys[idx].cmd == df::ui_hotkey::T_cmd::None) + df::global::plotinfo->main.mode != ui_sidebar_mode::Hotkeys && + df::global::plotinfo->main.hotkeys[idx].cmd == df::ui_hotkey::T_cmd::None) { - setHotkeyCmd(df::global::ui->main.hotkeys[idx].name); + setHotkeyCmd(df::global::plotinfo->main.hotkeys[idx].name); return false; } else @@ -2422,7 +2422,7 @@ int Core::DFH_SDL_Event(SDL::Event* ev) bool Core::SelectHotkey(int sym, int modifiers) { // Find the topmost viewscreen - if (!df::global::gview || !df::global::ui) + if (!df::global::gview || !df::global::plotinfo) return false; df::viewscreen *screen = &df::global::gview->view; @@ -2477,10 +2477,10 @@ bool Core::SelectHotkey(int sym, int modifiers) idx += 8; if (strict_virtual_cast(screen) && - df::global::ui->main.mode != ui_sidebar_mode::Hotkeys && - df::global::ui->main.hotkeys[idx].cmd == df::ui_hotkey::T_cmd::None) + df::global::plotinfo->main.mode != ui_sidebar_mode::Hotkeys && + df::global::plotinfo->main.hotkeys[idx].cmd == df::ui_hotkey::T_cmd::None) { - cmd = df::global::ui->main.hotkeys[idx].name; + cmd = df::global::plotinfo->main.hotkeys[idx].name; } */ } diff --git a/library/DataStatics.cpp b/library/DataStatics.cpp index 275cae584..fe60e5454 100644 --- a/library/DataStatics.cpp +++ b/library/DataStatics.cpp @@ -6,7 +6,7 @@ #include "df/world.h" #include "df/world_data.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "DataIdentity.h" diff --git a/library/RemoteTools.cpp b/library/RemoteTools.cpp index 1d45a19c0..c8fc810c8 100644 --- a/library/RemoteTools.cpp +++ b/library/RemoteTools.cpp @@ -59,8 +59,8 @@ POSSIBILITY OF SUCH DAMAGE. #include "LuaTools.h" #include "DataDefs.h" -#include "df/ui.h" -#include "df/ui_advmode.h" +#include "df/plotinfost.h" +#include "df/adventurest.h" #include "df/world.h" #include "df/world_data.h" #include "df/unit.h" @@ -375,11 +375,11 @@ static command_result GetDFVersion(color_ostream &stream, static command_result GetWorldInfo(color_ostream &stream, const EmptyMessage *, GetWorldInfoOut *out) { - using df::global::ui; - using df::global::ui_advmode; + using df::global::plotinfo; + using df::global::adventure; using df::global::world; - if (!ui || !world || !Core::getInstance().isWorldLoaded()) + if (!plotinfo || !world || !Core::getInstance().isWorldLoaded()) return CR_NOT_FOUND; df::game_type gt = game_type::DWARF_MAIN; @@ -397,10 +397,10 @@ static command_result GetWorldInfo(color_ostream &stream, case game_type::DWARF_RECLAIM: case game_type::DWARF_UNRETIRE: out->set_mode(GetWorldInfoOut::MODE_DWARF); - out->set_civ_id(ui->civ_id); - out->set_site_id(ui->site_id); - out->set_group_id(ui->group_id); - out->set_race_id(ui->race_id); + out->set_civ_id(plotinfo->civ_id); + out->set_site_id(plotinfo->site_id); + out->set_group_id(plotinfo->group_id); + out->set_race_id(plotinfo->race_id); break; case game_type::ADVENTURE_MAIN: @@ -410,10 +410,10 @@ static command_result GetWorldInfo(color_ostream &stream, if (auto unit = vector_get(world->units.active, 0)) out->set_player_unit_id(unit->id); - if (!ui_advmode) + if (!adventure) break; - if (auto nemesis = vector_get(world->nemesis.all, ui_advmode->player_id)) + if (auto nemesis = vector_get(world->nemesis.all, adventure->player_id)) { if (nemesis->figure) out->set_player_histfig_id(nemesis->figure->id); @@ -613,7 +613,7 @@ static command_result ListUnits(color_ostream &stream, static command_result ListSquads(color_ostream &stream, const ListSquadsIn *in, ListSquadsOut *out) { - auto entity = df::historical_entity::find(df::global::ui->group_id); + auto entity = df::historical_entity::find(df::global::plotinfo->group_id); if (!entity) return CR_NOT_FOUND; diff --git a/library/include/DebugManager.h b/library/include/DebugManager.h index 57de0f279..d910efd4a 100644 --- a/library/include/DebugManager.h +++ b/library/include/DebugManager.h @@ -42,13 +42,13 @@ class DebugCategory; /*! * \brief Container holding all registered runtime debug categories * Singleton DebugManager is a minor extension to std::vector that allows signal - * callbacks to be attached from ui code that manages. + * callbacks to be attached from plotinfo code that manages. * * To avoid parallel plugin unload causing issues access to DebugManager must be * protected by mutex. The access mutex will be taken when * DFHack::DebugCategory::~DebugCategory performs unregister calls to * DFHack::DebugManager. The mutex will protect from memory disappearing while - * ui code is accessing or changing the runtime state. + * plotinfo code is accessing or changing the runtime state. * * Signal emitting happens from a locked contexts. Taking the * DFHack::DebugManager::access_mutex_ in a signal callback will results to a diff --git a/library/include/RemoteClient.h b/library/include/RemoteClient.h index e71b985cd..1948ea754 100644 --- a/library/include/RemoteClient.h +++ b/library/include/RemoteClient.h @@ -46,7 +46,7 @@ namespace DFHack CR_NOT_IMPLEMENTED = -1, // Command not implemented, or plugin not loaded CR_OK = 0, // Success CR_FAILURE = 1, // Failure - CR_WRONG_USAGE = 2, // Wrong arguments or ui state + CR_WRONG_USAGE = 2, // Wrong arguments or plotinfo state CR_NOT_FOUND = 3 // Target object not found (for RPC mainly) }; diff --git a/library/include/modules/Gui.h b/library/include/modules/Gui.h index 3ce2df0eb..33ea32939 100644 --- a/library/include/modules/Gui.h +++ b/library/include/modules/Gui.h @@ -33,7 +33,7 @@ distribution. #include "DataDefs.h" #include "df/init.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/announcement_type.h" #include "df/announcement_flags.h" #include "df/report_init.h" diff --git a/library/include/modules/Kitchen.h b/library/include/modules/Kitchen.h index ec161178e..3fde8edf8 100644 --- a/library/include/modules/Kitchen.h +++ b/library/include/modules/Kitchen.h @@ -75,7 +75,7 @@ DFHACK_EXPORT void clearLimits(); DFHACK_EXPORT std::size_t size(); -// Finds the index of a kitchen exclusion in ui.kitchen.exc_types. Returns -1 if not found. +// Finds the index of a kitchen exclusion in plotinfo.kitchen.exc_types. Returns -1 if not found. DFHACK_EXPORT int findExclusion(df::kitchen_exc_type type, df::item_type item_type, int16_t item_subtype, int16_t mat_type, int32_t mat_index); diff --git a/library/modules/Buildings.cpp b/library/modules/Buildings.cpp index 4ec3f11d7..cd0924a36 100644 --- a/library/modules/Buildings.cpp +++ b/library/modules/Buildings.cpp @@ -81,14 +81,14 @@ using namespace DFHack; #include "df/job_item.h" #include "df/map_block.h" #include "df/tile_occupancy.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/ui_look_list.h" #include "df/unit.h" #include "df/unit_relationship_type.h" #include "df/world.h" using namespace df::enums; -using df::global::ui; +using df::global::plotinfo; using df::global::world; using df::global::d_init; using df::global::building_next_id; @@ -425,7 +425,7 @@ df::building *Buildings::allocInstance(df::coord pos, df::building_type type, in bld->y1 = bld->y2 = bld->centery = pos.y; bld->z = pos.z; - bld->race = ui->race_id; + bld->race = plotinfo->race_id; if (subtype != -1) bld->setSubtype(subtype); @@ -989,7 +989,7 @@ static void linkRooms(df::building *bld) } if (changed) - df::global::ui->equipment.update.bits.buildings = true; + df::global::plotinfo->equipment.update.bits.buildings = true; */ } @@ -1219,7 +1219,7 @@ bool Buildings::constructWithFilters(df::building *bld, std::vectorjob_items, 0, items[i]); if (items[i]->item_type == item_type::BOULDER) @@ -1238,7 +1238,7 @@ bool Buildings::constructWithFilters(df::building *bld, std::vectortax_collection.rooms, linear_index(ui->tax_collection.rooms, bld->id)); + vector_erase_at(plotinfo->tax_collection.rooms, linear_index(plotinfo->tax_collection.rooms, bld->id)); // Assume: not used in punishment // Assume: not used in non-own jobs // Assume: does not affect pathfinding diff --git a/library/modules/Burrows.cpp b/library/modules/Burrows.cpp index 52e550960..c2fe45eae 100644 --- a/library/modules/Burrows.cpp +++ b/library/modules/Burrows.cpp @@ -42,14 +42,14 @@ using namespace std; #include "df/block_burrow_link.h" #include "df/burrow.h" #include "df/map_block.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; df::burrow *Burrows::findByName(std::string name) { @@ -77,11 +77,11 @@ void Burrows::clearUnits(df::burrow *burrow) burrow->units.clear(); /* TODO: understand how this changes for v50 - // Sync ui if active - if (ui && ui->main.mode == ui_sidebar_mode::Burrows && - ui->burrows.in_add_units_mode && ui->burrows.sel_id == burrow->id) + // Sync plotinfo if active + if (plotinfo && plotinfo->main.mode == ui_sidebar_mode::Burrows && + plotinfo->burrows.in_add_units_mode && plotinfo->burrows.sel_id == burrow->id) { - auto &sel = ui->burrows.sel_units; + auto &sel = plotinfo->burrows.sel_units; for (size_t i = 0; i < sel.size(); i++) sel[i] = false; @@ -99,7 +99,7 @@ bool Burrows::isAssignedUnit(df::burrow *burrow, df::unit *unit) void Burrows::setAssignedUnit(df::burrow *burrow, df::unit *unit, bool enable) { - using df::global::ui; + using df::global::plotinfo; CHECK_NULL_POINTER(unit); CHECK_NULL_POINTER(burrow); @@ -116,13 +116,13 @@ void Burrows::setAssignedUnit(df::burrow *burrow, df::unit *unit, bool enable) } /* TODO: understand how this changes for v50 - // Sync ui if active - if (ui && ui->main.mode == ui_sidebar_mode::Burrows && - ui->burrows.in_add_units_mode && ui->burrows.sel_id == burrow->id) + // Sync plotinfo if active + if (plotinfo && plotinfo->main.mode == ui_sidebar_mode::Burrows && + plotinfo->burrows.in_add_units_mode && plotinfo->burrows.sel_id == burrow->id) { - int idx = linear_index(ui->burrows.list_units, unit); + int idx = linear_index(plotinfo->burrows.list_units, unit); if (idx >= 0) - ui->burrows.sel_units[idx] = enable; + plotinfo->burrows.sel_units[idx] = enable; } */ } diff --git a/library/modules/EventManager.cpp b/library/modules/EventManager.cpp index e882febf8..02b1892e9 100644 --- a/library/modules/EventManager.cpp +++ b/library/modules/EventManager.cpp @@ -27,7 +27,7 @@ #include "df/job.h" #include "df/job_list_link.h" #include "df/report.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_flags1.h" #include "df/unit_inventory_item.h" @@ -297,14 +297,14 @@ void DFHack::EventManager::onStateChange(color_ostream& out, state_change_event return; if (!df::global::job_next_id) return; - if (!df::global::ui) + if (!df::global::plotinfo) return; if (!df::global::world) return; nextItem = *df::global::item_next_id; nextBuilding = *df::global::building_next_id; - nextInvasion = df::global::ui->invasions.next_id; + nextInvasion = df::global::plotinfo->invasions.next_id; lastJobId = -1 + *df::global::job_next_id; constructions.clear(); @@ -807,13 +807,13 @@ static void manageSyndromeEvent(color_ostream& out) { } static void manageInvasionEvent(color_ostream& out) { - if (!df::global::ui) + if (!df::global::plotinfo) return; multimap copy(handlers[EventType::INVASION].begin(), handlers[EventType::INVASION].end()); - if ( df::global::ui->invasions.next_id <= nextInvasion ) + if ( df::global::plotinfo->invasions.next_id <= nextInvasion ) return; - nextInvasion = df::global::ui->invasions.next_id; + nextInvasion = df::global::plotinfo->invasions.next_id; for (auto &key_value : copy) { EventHandler &handle = key_value.second; diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp index f88331347..f59cdcb8b 100644 --- a/library/modules/Gui.cpp +++ b/library/modules/Gui.cpp @@ -74,10 +74,10 @@ using namespace DFHack; #include "df/report_zoom_type.h" #include "df/route_stockpile_link.h" #include "df/stop_depart_condition.h" -#include "df/ui_advmode.h" -#include "df/ui_build_selector.h" +#include "df/adventurest.h" +#include "df/buildreq.h" #include "df/ui_look_list.h" -#include "df/ui_sidebar_menus.h" +#include "df/gamest.h" #include "df/ui_unit_view_mode.h" #include "df/unit.h" #include "df/unit_inventory_item.h" @@ -101,9 +101,9 @@ using df::global::gps; using df::global::gview; using df::global::init; using df::global::selection_rect; -using df::global::ui; +using df::global::plotinfo; using df::global::ui_menu_width; -using df::global::ui_sidebar_menus; +using df::global::game; using df::global::world; /* TODO: understand how this changes for v50 @@ -158,9 +158,9 @@ DEFINE_GET_FOCUS_STRING_HANDLER(dwarfmode) using df::global::ui_building_assign_items; using df::global::ui_building_in_assign; - focus += "/" + enum_item_key(ui->main.mode); + focus += "/" + enum_item_key(plotinfo->main.mode); - switch (ui->main.mode) + switch (plotinfo->main.mode) { case QueryBuilding: if (df::building *selected = world->selected_building) @@ -304,38 +304,38 @@ DEFINE_GET_FOCUS_STRING_HANDLER(dwarfmode) break; case Burrows: - if (ui->burrows.in_confirm_delete) + if (plotinfo->burrows.in_confirm_delete) focus += "/ConfirmDelete"; - else if (ui->burrows.in_add_units_mode) + else if (plotinfo->burrows.in_add_units_mode) focus += "/AddUnits"; - else if (ui->burrows.in_edit_name_mode) + else if (plotinfo->burrows.in_edit_name_mode) focus += "/EditName"; - else if (ui->burrows.in_define_mode) + else if (plotinfo->burrows.in_define_mode) focus += "/Define"; else focus += "/List"; break; case Hauling: - if (ui->hauling.in_assign_vehicle) + if (plotinfo->hauling.in_assign_vehicle) { - auto vehicle = vector_get(ui->hauling.vehicles, ui->hauling.cursor_vehicle); + auto vehicle = vector_get(plotinfo->hauling.vehicles, plotinfo->hauling.cursor_vehicle); focus += "/AssignVehicle/" + std::string(vehicle ? "Some" : "None"); } else { - int idx = ui->hauling.cursor_top; - auto route = vector_get(ui->hauling.view_routes, idx); - auto stop = vector_get(ui->hauling.view_stops, idx); + int idx = plotinfo->hauling.cursor_top; + auto route = vector_get(plotinfo->hauling.view_routes, idx); + auto stop = vector_get(plotinfo->hauling.view_stops, idx); std::string tag = stop ? "Stop" : (route ? "Route" : "None"); - if (ui->hauling.in_name) + if (plotinfo->hauling.in_name) focus += "/Rename/" + tag; - else if (ui->hauling.in_stop) + else if (plotinfo->hauling.in_stop) { - int sidx = ui->hauling.cursor_stop; - auto cond = vector_get(ui->hauling.stop_conditions, sidx); - auto link = vector_get(ui->hauling.stop_links, sidx); + int sidx = plotinfo->hauling.cursor_stop; + auto cond = vector_get(plotinfo->hauling.stop_conditions, sidx); + auto link = vector_get(plotinfo->hauling.stop_links, sidx); focus += "/DefineStop"; @@ -364,12 +364,12 @@ DEFINE_GET_FOCUS_STRING_HANDLER(dwarfmode) /* TODO: understand how this changes for v50 DEFINE_GET_FOCUS_STRING_HANDLER(dungeonmode) { - using df::global::ui_advmode; + using df::global::adventure; - if (!ui_advmode) + if (!adventure) return; - focus += "/" + enum_item_key(ui_advmode->menu); + focus += "/" + enum_item_key(adventure->menu); } DEFINE_GET_FOCUS_STRING_HANDLER(unitlist) @@ -675,7 +675,7 @@ bool Gui::workshop_job_hotkey(df::viewscreen *top) using df::global::ui_workshop_in_add; using df::global::ui_workshop_job_cursor; - switch (ui->main.mode) { + switch (plotinfo->main.mode) { case QueryBuilding: { if (!ui_workshop_job_cursor) // allow missing @@ -712,7 +712,7 @@ bool Gui::build_selector_hotkey(df::viewscreen *top) using namespace ui_sidebar_mode; using df::global::ui_build_selector; - switch (ui->main.mode) { + switch (plotinfo->main.mode) { case Build: { if (!ui_build_selector) // allow missing @@ -739,7 +739,7 @@ bool Gui::view_unit_hotkey(df::viewscreen *top) /* TODO: understand how this changes for v50 using df::global::ui_selected_unit; - if (ui->main.mode != ui_sidebar_mode::ViewUnits) + if (plotinfo->main.mode != ui_sidebar_mode::ViewUnits) return false; if (!ui_selected_unit) // allow missing return false; @@ -1017,19 +1017,19 @@ df::unit *Gui::getAnyUnit(df::viewscreen *top) if (!Gui::dwarfmode_hotkey(top)) return NULL; - if (!ui) + if (!plotinfo) return NULL; // general assigning units in building, i.e. (q)uery cage -> (a)ssign if (ui_building_in_assign && *ui_building_in_assign && ui_building_assign_units && ui_building_item_cursor - && ui->main.mode != Zones) // dont show for (i) zone + && plotinfo->main.mode != Zones) // dont show for (i) zone return vector_get(*ui_building_assign_units, *ui_building_item_cursor); - if (ui->follow_unit != -1) - return df::unit::find(ui->follow_unit); + if (plotinfo->follow_unit != -1) + return df::unit::find(plotinfo->follow_unit); - switch (ui->main.mode) { + switch (plotinfo->main.mode) { case ViewUnits: { if (!ui_selected_unit || !world) @@ -1047,8 +1047,8 @@ df::unit *Gui::getAnyUnit(df::viewscreen *top) } case Burrows: { - if (ui->burrows.in_add_units_mode) - return vector_get(ui->burrows.list_units, ui->burrows.unit_cursor_pos); + if (plotinfo->burrows.in_add_units_mode) + return vector_get(plotinfo->burrows.list_units, plotinfo->burrows.unit_cursor_pos); return NULL; } @@ -1196,16 +1196,16 @@ df::item *Gui::getAnyItem(df::viewscreen *top) if (!Gui::dwarfmode_hotkey(top)) return NULL; - switch (ui->main.mode) { + switch (plotinfo->main.mode) { case ViewUnits: { - if (!ui_unit_view_mode || !ui_look_cursor || !ui_sidebar_menus) + if (!ui_unit_view_mode || !ui_look_cursor || !game) return NULL; if (ui_unit_view_mode->value != df::ui_unit_view_mode::Inventory) return NULL; - auto inv_item = vector_get(ui_sidebar_menus->unit.inv_items, *ui_look_cursor); + auto inv_item = vector_get(game->unit.inv_items, *ui_look_cursor); return inv_item ? inv_item->item : NULL; } case LookAround: @@ -1271,7 +1271,7 @@ df::building *Gui::getAnyBuilding(df::viewscreen *top) if (!Gui::dwarfmode_hotkey(top)) return NULL; - switch (ui->main.mode) { + switch (plotinfo->main.mode) { case LookAround: { if (!ui_look_list || !ui_look_cursor) @@ -1293,8 +1293,8 @@ df::building *Gui::getAnyBuilding(df::viewscreen *top) case ZonesPitInfo: case ZonesHospitalInfo: { - if (ui_sidebar_menus) - return ui_sidebar_menus->zone.selected; + if (game) + return game->zone.selected; return NULL; } default: @@ -1327,11 +1327,11 @@ df::plant *Gui::getAnyPlant(df::viewscreen *top) if (Gui::dwarfmode_hotkey(top)) { - if (!cursor || !ui || !world) + if (!cursor || !plotinfo || !world) return nullptr; /* TODO: understand how this changes for v50 - if (ui->main.mode == ui_sidebar_mode::LookAround) + if (plotinfo->main.mode == ui_sidebar_mode::LookAround) { return Maps::getPlantAtTile(cursor->x, cursor->y, cursor->z); } @@ -1949,12 +1949,12 @@ void Gui::resetDwarfmodeView(bool pause) { using df::global::cursor; - if (ui) + if (plotinfo) { - ui->follow_unit = -1; - ui->follow_item = -1; + plotinfo->follow_unit = -1; + plotinfo->follow_item = -1; /* TODO: understand how this changes for v50 - ui->main.mode = ui_sidebar_mode::Default; + plotinfo->main.mode = ui_sidebar_mode::Default; */ } @@ -2011,8 +2011,8 @@ bool Gui::revealInDwarfmodeMap(int32_t x, int32_t y, int32_t z, bool center) *window_x = clip_range(new_win_x, 0, (world->map.x_count - w)); *window_y = clip_range(new_win_y, 0, (world->map.y_count - h)); *window_z = clip_range(new_win_z, 0, (world->map.z_count - 1)); - ui_sidebar_menus->minimap.need_render = true; - ui_sidebar_menus->minimap.need_scan = true; + game->minimap.need_render = true; + game->minimap.need_scan = true; return true; } @@ -2058,10 +2058,10 @@ bool Gui::refreshSidebar() bool Gui::inRenameBuilding() { - if (!ui_sidebar_menus) + if (!game) return false; /* TODO: understand how this changes for v50 - return ui_sidebar_menus->barracks.in_rename; + return game->barracks.in_rename; */ return false; } diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index ceb0224e8..11d170725 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -87,7 +87,7 @@ using namespace std; #include "df/reaction_product_itemst.h" #include "df/tool_uses.h" #include "df/trapcomp_flags.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_inventory_item.h" #include "df/vehicle.h" @@ -100,7 +100,7 @@ using namespace std; using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; using df::global::ui_selected_unit; using df::global::proj_next_id; @@ -924,7 +924,7 @@ static bool detachItem(MapExtras::MapCache &mc, df::item *item) { /* TODO: understand how this changes for v50 // Unit view sidebar holds inventory item pointers - if (ui->main.mode == ui_sidebar_mode::ViewUnits && + if (plotinfo->main.mode == ui_sidebar_mode::ViewUnits && (!ui_selected_unit || vector_get(world->units.active, *ui_selected_unit) == unit)) return false; @@ -1534,7 +1534,7 @@ int32_t Items::createItem(df::item_type item_type, int16_t item_subtype, int16_t df::enums::game_type::game_type type = *df::global::gametype; prod->produce(unit, &out_products, &out_items, &in_reag, &in_items, 1, job_skill::NONE, 0, df::historical_entity::find(unit->civ_id), - ((type == df::enums::game_type::DWARF_MAIN) || (type == df::enums::game_type::DWARF_RECLAIM)) ? df::world_site::find(df::global::ui->site_id) : NULL, + ((type == df::enums::game_type::DWARF_MAIN) || (type == df::enums::game_type::DWARF_RECLAIM)) ? df::world_site::find(df::global::plotinfo->site_id) : NULL, NULL); if ( out_items.size() != 1 ) return -1; @@ -1643,9 +1643,9 @@ bool Items::isRouteVehicle(df::item *item) bool Items::isSquadEquipment(df::item *item) { CHECK_NULL_POINTER(item); - if (!ui) + if (!plotinfo) return false; - auto &vec = ui->equipment.items_assigned[item->getType()]; + auto &vec = plotinfo->equipment.items_assigned[item->getType()]; return binsearch_index(vec, &df::item::id, item->id) >= 0; } diff --git a/library/modules/Job.cpp b/library/modules/Job.cpp index ff158caa0..cd574684f 100644 --- a/library/modules/Job.cpp +++ b/library/modules/Job.cpp @@ -43,7 +43,7 @@ using namespace std; #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/building.h" #include "df/job.h" diff --git a/library/modules/Kitchen.cpp b/library/modules/Kitchen.cpp index ac560c687..65e47f528 100644 --- a/library/modules/Kitchen.cpp +++ b/library/modules/Kitchen.cpp @@ -20,13 +20,13 @@ using namespace DFHack; #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/item_type.h" #include "df/plant_raw.h" using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; // Special values used by "seedwatch" plugin to store seed limits const df::enums::item_type::item_type SEEDLIMIT_ITEMTYPE = df::enums::item_type::BAR; @@ -41,12 +41,12 @@ void Kitchen::debug_print(color_ostream &out) { out.print("%2zu: IT:%2i IS:%i MT:%3i MI:%2i ET:%i %s\n", i, - ui->kitchen.item_types[i], - ui->kitchen.item_subtypes[i], - ui->kitchen.mat_types[i], - ui->kitchen.mat_indices[i], - ui->kitchen.exc_types[i], - (ui->kitchen.mat_types[i] >= 419 && ui->kitchen.mat_types[i] <= 618) ? world->raws.plants.all[ui->kitchen.mat_indices[i]]->id.c_str() : "n/a" + plotinfo->kitchen.item_types[i], + plotinfo->kitchen.item_subtypes[i], + plotinfo->kitchen.mat_types[i], + plotinfo->kitchen.mat_indices[i], + plotinfo->kitchen.exc_types[i], + (plotinfo->kitchen.mat_types[i] >= 419 && plotinfo->kitchen.mat_types[i] <= 618) ? world->raws.plants.all[plotinfo->kitchen.mat_indices[i]]->id.c_str() : "n/a" ); } out.print("\n"); @@ -83,11 +83,11 @@ void Kitchen::fillWatchMap(std::map& watchMap) watchMap.clear(); for (std::size_t i = 0; i < size(); ++i) { - if (ui->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMTYPE && - ui->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMSUBTYPE && - ui->kitchen.exc_types[i] == SEEDLIMIT_EXCTYPE) + if (plotinfo->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMTYPE && + plotinfo->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMSUBTYPE && + plotinfo->kitchen.exc_types[i] == SEEDLIMIT_EXCTYPE) { - watchMap[ui->kitchen.mat_indices[i]] = ui->kitchen.mat_types[i]; + watchMap[plotinfo->kitchen.mat_indices[i]] = plotinfo->kitchen.mat_types[i]; } } } @@ -96,10 +96,10 @@ int Kitchen::findLimit(int32_t plant_id) { for (size_t i = 0; i < size(); ++i) { - if (ui->kitchen.item_types[i] == SEEDLIMIT_ITEMTYPE && - ui->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMSUBTYPE && - ui->kitchen.mat_indices[i] == plant_id && - ui->kitchen.exc_types[i] == SEEDLIMIT_EXCTYPE) + if (plotinfo->kitchen.item_types[i] == SEEDLIMIT_ITEMTYPE && + plotinfo->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMSUBTYPE && + plotinfo->kitchen.mat_indices[i] == plant_id && + plotinfo->kitchen.exc_types[i] == SEEDLIMIT_EXCTYPE) { return int(i); } @@ -113,11 +113,11 @@ bool Kitchen::removeLimit(int32_t plant_id) if (i < 0) return false; - ui->kitchen.item_types.erase(ui->kitchen.item_types.begin() + i); - ui->kitchen.item_subtypes.erase(ui->kitchen.item_subtypes.begin() + i); - ui->kitchen.mat_types.erase(ui->kitchen.mat_types.begin() + i); - ui->kitchen.mat_indices.erase(ui->kitchen.mat_indices.begin() + i); - ui->kitchen.exc_types.erase(ui->kitchen.exc_types.begin() + i); + plotinfo->kitchen.item_types.erase(plotinfo->kitchen.item_types.begin() + i); + plotinfo->kitchen.item_subtypes.erase(plotinfo->kitchen.item_subtypes.begin() + i); + plotinfo->kitchen.mat_types.erase(plotinfo->kitchen.mat_types.begin() + i); + plotinfo->kitchen.mat_indices.erase(plotinfo->kitchen.mat_indices.begin() + i); + plotinfo->kitchen.exc_types.erase(plotinfo->kitchen.exc_types.begin() + i); return true; } @@ -129,15 +129,15 @@ bool Kitchen::setLimit(int32_t plant_id, int16_t limit) int i = findLimit(plant_id); if (i < 0) { - ui->kitchen.item_types.push_back(SEEDLIMIT_ITEMTYPE); - ui->kitchen.item_subtypes.push_back(SEEDLIMIT_ITEMSUBTYPE); - ui->kitchen.mat_types.push_back(limit); - ui->kitchen.mat_indices.push_back(plant_id); - ui->kitchen.exc_types.push_back(SEEDLIMIT_EXCTYPE); + plotinfo->kitchen.item_types.push_back(SEEDLIMIT_ITEMTYPE); + plotinfo->kitchen.item_subtypes.push_back(SEEDLIMIT_ITEMSUBTYPE); + plotinfo->kitchen.mat_types.push_back(limit); + plotinfo->kitchen.mat_indices.push_back(plant_id); + plotinfo->kitchen.exc_types.push_back(SEEDLIMIT_EXCTYPE); } else { - ui->kitchen.mat_types[i] = limit; + plotinfo->kitchen.mat_types[i] = limit; } return true; } @@ -146,11 +146,11 @@ void Kitchen::clearLimits() { for (size_t i = 0; i < size(); ++i) { - if (ui->kitchen.item_types[i] == SEEDLIMIT_ITEMTYPE && - ui->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMSUBTYPE && - ui->kitchen.exc_types[i] == SEEDLIMIT_EXCTYPE) + if (plotinfo->kitchen.item_types[i] == SEEDLIMIT_ITEMTYPE && + plotinfo->kitchen.item_subtypes[i] == SEEDLIMIT_ITEMSUBTYPE && + plotinfo->kitchen.exc_types[i] == SEEDLIMIT_EXCTYPE) { - removeLimit(ui->kitchen.mat_indices[i]); + removeLimit(plotinfo->kitchen.mat_indices[i]); --i; } } @@ -158,7 +158,7 @@ void Kitchen::clearLimits() size_t Kitchen::size() { - return ui->kitchen.item_types.size(); + return plotinfo->kitchen.item_types.size(); } int Kitchen::findExclusion(df::kitchen_exc_type type, @@ -167,11 +167,11 @@ int Kitchen::findExclusion(df::kitchen_exc_type type, { for (size_t i = 0; i < size(); i++) { - if (ui->kitchen.item_types[i] == item_type && - ui->kitchen.item_subtypes[i] == item_subtype && - ui->kitchen.mat_types[i] == mat_type && - ui->kitchen.mat_indices[i] == mat_index && - ui->kitchen.exc_types[i] == type) + if (plotinfo->kitchen.item_types[i] == item_type && + plotinfo->kitchen.item_subtypes[i] == item_subtype && + plotinfo->kitchen.mat_types[i] == mat_type && + plotinfo->kitchen.mat_indices[i] == mat_index && + plotinfo->kitchen.exc_types[i] == type) { return int(i); } @@ -186,11 +186,11 @@ bool Kitchen::addExclusion(df::kitchen_exc_type type, if (findExclusion(type, item_type, item_subtype, mat_type, mat_index) >= 0) return false; - ui->kitchen.item_types.push_back(item_type); - ui->kitchen.item_subtypes.push_back(item_subtype); - ui->kitchen.mat_types.push_back(mat_type); - ui->kitchen.mat_indices.push_back(mat_index); - ui->kitchen.exc_types.push_back(type); + plotinfo->kitchen.item_types.push_back(item_type); + plotinfo->kitchen.item_subtypes.push_back(item_subtype); + plotinfo->kitchen.mat_types.push_back(mat_type); + plotinfo->kitchen.mat_indices.push_back(mat_index); + plotinfo->kitchen.exc_types.push_back(type); return true; } @@ -202,10 +202,10 @@ bool Kitchen::removeExclusion(df::kitchen_exc_type type, if (i < 0) return false; - ui->kitchen.item_types.erase(ui->kitchen.item_types.begin() + i); - ui->kitchen.item_subtypes.erase(ui->kitchen.item_subtypes.begin() + i); - ui->kitchen.mat_types.erase(ui->kitchen.mat_types.begin() + i); - ui->kitchen.mat_indices.erase(ui->kitchen.mat_indices.begin() + i); - ui->kitchen.exc_types.erase(ui->kitchen.exc_types.begin() + i); + plotinfo->kitchen.item_types.erase(plotinfo->kitchen.item_types.begin() + i); + plotinfo->kitchen.item_subtypes.erase(plotinfo->kitchen.item_subtypes.begin() + i); + plotinfo->kitchen.mat_types.erase(plotinfo->kitchen.mat_types.begin() + i); + plotinfo->kitchen.mat_indices.erase(plotinfo->kitchen.mat_indices.begin() + i); + plotinfo->kitchen.exc_types.erase(plotinfo->kitchen.exc_types.begin() + i); return true; } diff --git a/library/modules/Materials.cpp b/library/modules/Materials.cpp index a52579059..0854a85ce 100644 --- a/library/modules/Materials.cpp +++ b/library/modules/Materials.cpp @@ -42,7 +42,7 @@ using namespace std; #include "MiscUtils.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/item.h" #include "df/creature_raw.h" #include "df/caste_raw.h" @@ -68,7 +68,7 @@ using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; bool MaterialInfo::decode(df::item *item) { @@ -516,7 +516,7 @@ void MaterialInfo::getMatchBits(df::job_item_flags2 &ok, df::job_item_flags2 &ma TEST(fire_safe, material->heat.melting_point > 11000); TEST(magma_safe, material->heat.melting_point > 12000); TEST(deep_material, FLAG(inorganic, inorganic_flags::SPECIAL)); - TEST(non_economic, !inorganic || !(ui && vector_get(ui->economic_stone, index))); + TEST(non_economic, !inorganic || !(plotinfo && vector_get(plotinfo->economic_stone, index))); TEST(plant, plant); TEST(silk, MAT_FLAG(SILK)); diff --git a/library/modules/Screen.cpp b/library/modules/Screen.cpp index e7f6cea93..ab7031308 100644 --- a/library/modules/Screen.cpp +++ b/library/modules/Screen.cpp @@ -83,7 +83,7 @@ namespace DFHack { * Screen painting API. */ -// returns ui grid coordinates, even if the game map is scaled differently +// returns plotinfo grid coordinates, even if the game map is scaled differently df::coord2d Screen::getMousePos() { if (!gps) diff --git a/library/modules/Units.cpp b/library/modules/Units.cpp index 20badb1b5..6d5ec7fde 100644 --- a/library/modules/Units.cpp +++ b/library/modules/Units.cpp @@ -73,7 +73,7 @@ using namespace std; #include "df/nemesis_record.h" #include "df/squad.h" #include "df/tile_occupancy.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit_inventory_item.h" #include "df/unit_misc_trait.h" #include "df/unit_relationship_type.h" @@ -87,7 +87,7 @@ using namespace std; using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; using df::global::gamemode; using df::global::gametype; @@ -178,7 +178,7 @@ bool Units::isFortControlled(df::unit *unit) unit->flags2.bits.resident) return false; - return unit->civ_id != -1 && unit->civ_id == ui->civ_id; + return unit->civ_id != -1 && unit->civ_id == plotinfo->civ_id; } // check if creature belongs to the player's civilization @@ -186,7 +186,7 @@ bool Units::isFortControlled(df::unit *unit) bool Units::isOwnCiv(df::unit* unit) { CHECK_NULL_POINTER(unit); - return unit->civ_id == ui->civ_id; + return unit->civ_id == plotinfo->civ_id; } // check if creature belongs to the player's group @@ -199,7 +199,7 @@ bool Units::isOwnGroup(df::unit* unit) for (size_t i = 0; i < histfig->entity_links.size(); i++) { auto link = histfig->entity_links[i]; - if (link->entity_id == ui->group_id && link->getType() == df::histfig_entity_link_type::MEMBER) + if (link->entity_id == plotinfo->group_id && link->getType() == df::histfig_entity_link_type::MEMBER) return true; } return false; @@ -210,7 +210,7 @@ bool Units::isOwnGroup(df::unit* unit) bool Units::isOwnRace(df::unit* unit) { CHECK_NULL_POINTER(unit); - return unit->race == ui->race_id; + return unit->race == plotinfo->race_id; } @@ -622,8 +622,8 @@ bool Units::isDwarf(df::unit *unit) { CHECK_NULL_POINTER(unit); - return unit->race == ui->race_id || - unit->enemy.normal_race == ui->race_id; + return unit->race == plotinfo->race_id || + unit->enemy.normal_race == plotinfo->race_id; } bool Units::isAnimal(df::unit* unit) { @@ -1301,7 +1301,7 @@ bool Units::setLaborValidity(df::unit_labor labor, bool isValid) return false; if (labor == df::unit_labor::NONE) return false; - df::historical_entity *entity = df::historical_entity::find(ui->civ_id); + df::historical_entity *entity = df::historical_entity::find(plotinfo->civ_id); if (!entity || !entity->entity_raw) return false; entity->entity_raw->jobs.permitted_labor[labor] = isValid; @@ -1704,7 +1704,7 @@ std::string Units::getCasteProfessionName(int race, int casteid, df::profession if (pid < (df::profession)0 || !is_valid_enum_item(pid)) return ""; - int16_t current_race = df::global::ui->race_id; + int16_t current_race = df::global::plotinfo->race_id; if (df::global::gamemode && *df::global::gamemode == df::game_mode::ADVENTURE) current_race = world->units.active[0]->race; bool use_race_prefix = (race >= 0 && race != current_race); diff --git a/plugins/.gitignore b/plugins/.gitignore new file mode 100644 index 000000000..5b0a52473 --- /dev/null +++ b/plugins/.gitignore @@ -0,0 +1 @@ +!buildingplan/ diff --git a/plugins/add-spatter.cpp b/plugins/add-spatter.cpp index 459e28f25..451fffabf 100644 --- a/plugins/add-spatter.cpp +++ b/plugins/add-spatter.cpp @@ -24,7 +24,7 @@ #include "df/job.h" #include "df/job_item.h" #include "df/job_item_ref.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/report.h" #include "df/reaction.h" #include "df/reaction_reagent_itemst.h" @@ -45,7 +45,7 @@ DFHACK_PLUGIN("add-spatter"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); typedef df::reaction_product_item_improvementst improvement_product; diff --git a/plugins/autochop.cpp b/plugins/autochop.cpp index acb8959b9..415a6d322 100644 --- a/plugins/autochop.cpp +++ b/plugins/autochop.cpp @@ -22,7 +22,7 @@ #include "df/plant_tree_tile.h" #include "df/plant_raw.h" #include "df/tile_dig_designation.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/viewscreen_dwarfmodest.h" #include "df/world.h" @@ -45,7 +45,7 @@ using namespace df::enums; #define PLUGIN_VERSION 0.3 DFHACK_PLUGIN("autochop"); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); static int get_log_count(); @@ -499,7 +499,7 @@ public: burrows_column.clear(); - for (df::burrow *burrow : ui->burrows.list) + for (df::burrow *burrow : plotinfo->burrows.list) { string name = burrow->name; if (name.empty()) @@ -820,7 +820,7 @@ struct autochop_hook : public df::viewscreen_dwarfmodest bool isInDesignationMenu() { using namespace df::enums::ui_sidebar_mode; - return (ui->main.mode == DesignateChopTrees); + return (plotinfo->main.mode == DesignateChopTrees); } void sendKey(const df::interface_key &key) diff --git a/plugins/autofarm.cpp b/plugins/autofarm.cpp index 2f8762425..6a4078b56 100644 --- a/plugins/autofarm.cpp +++ b/plugins/autofarm.cpp @@ -5,7 +5,7 @@ #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/building_type.h" #include "df/building_farmplotst.h" #include "df/buildings_other_id.h" @@ -30,7 +30,7 @@ using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; static command_result autofarm(color_ostream& out, std::vector& parameters); @@ -348,7 +348,7 @@ static std::unique_ptr autofarmInstance; DFhackCExport command_result plugin_init(color_ostream& out, std::vector & commands) { - if (world && ui) { + if (world && plotinfo) { commands.push_back( PluginCommand("autofarm", "Automatically manage farm crop selection.", diff --git a/plugins/autogems.cpp b/plugins/autogems.cpp index d296caf7f..8cf419aba 100644 --- a/plugins/autogems.cpp +++ b/plugins/autogems.cpp @@ -33,7 +33,7 @@ using namespace DFHack; DFHACK_PLUGIN("autogems"); DFHACK_PLUGIN_IS_ENABLED(enabled); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); typedef int32_t item_id; @@ -242,7 +242,7 @@ struct autogem_hook : public df::viewscreen_dwarfmodest { bool in_menu() { // Determines whether we're looking at the Workshop Orders screen. - return ui->main.mode == ui_sidebar_mode::OrdersWorkshop; + return plotinfo->main.mode == ui_sidebar_mode::OrdersWorkshop; } bool handleInput(std::set *input) { diff --git a/plugins/autolabor/autohauler.cpp b/plugins/autolabor/autohauler.cpp index e7c2530e1..3bb2534f8 100644 --- a/plugins/autolabor/autohauler.cpp +++ b/plugins/autolabor/autohauler.cpp @@ -12,7 +12,7 @@ // DF data structure definition headers #include "DataDefs.h" -#include +#include #include #include #include @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include @@ -47,7 +47,7 @@ using namespace DFHack; using namespace df::enums; DFHACK_PLUGIN("autohauler"); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); #define ARRAY_COUNT(array) (sizeof(array)/sizeof((array)[0])) diff --git a/plugins/autolabor/autolabor.cpp b/plugins/autolabor/autolabor.cpp index 76108ddd0..0af4be5e2 100644 --- a/plugins/autolabor/autolabor.cpp +++ b/plugins/autolabor/autolabor.cpp @@ -12,7 +12,7 @@ // DF data structure definition headers #include "DataDefs.h" -#include +#include #include #include #include @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include @@ -47,7 +47,7 @@ using namespace DFHack; using namespace df::enums; DFHACK_PLUGIN("autolabor"); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); #define ARRAY_COUNT(array) (sizeof(array)/sizeof((array)[0])) @@ -813,7 +813,7 @@ DFhackCExport command_result plugin_onupdate ( color_ostream &out ) // identify dwarfs who are needed for meetings and mark them for exclusion - for (auto& act : ui->activities) + for (auto& act : plotinfo->activities) { if (!act) continue; bool p1 = act->unit_actor == dwarfs[dwarf]; diff --git a/plugins/autolabor/joblabormapper.cpp b/plugins/autolabor/joblabormapper.cpp index 2917b8d3a..690e80881 100644 --- a/plugins/autolabor/joblabormapper.cpp +++ b/plugins/autolabor/joblabormapper.cpp @@ -56,7 +56,7 @@ using std::string; using std::endl; using namespace DFHack; using namespace df::enums; -using df::global::ui; +using df::global::plotinfo; using df::global::world; #include "labormanager.h" diff --git a/plugins/autolabor/labormanager.cpp b/plugins/autolabor/labormanager.cpp index 44817e405..4b43b09c1 100644 --- a/plugins/autolabor/labormanager.cpp +++ b/plugins/autolabor/labormanager.cpp @@ -25,7 +25,7 @@ #include "DataDefs.h" #include -#include +#include #include #include #include @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include #include #include @@ -64,7 +64,7 @@ #include #include #include -#include +#include #include #include #include @@ -82,7 +82,7 @@ using std::string; using std::endl; using namespace DFHack; using namespace df::enums; -using df::global::ui; +using df::global::plotinfo; using df::global::world; #define ARRAY_COUNT(array) (sizeof(array)/sizeof((array)[0])) @@ -948,9 +948,9 @@ private: // identify dwarfs who are needed for meetings and mark them for exclusion - for (size_t i = 0; i < ui->activities.size(); ++i) + for (size_t i = 0; i < plotinfo->activities.size(); ++i) { - df::activity_info *act = ui->activities[i]; + df::activity_info *act = plotinfo->activities[i]; if (!act) continue; bool p1 = act->unit_actor == dwarf->dwarf; @@ -996,11 +996,11 @@ private: for (size_t j = 0; j < dwarf->dwarf->inventory.size(); j++) { - df::unit_inventory_item* ui = dwarf->dwarf->inventory[j]; - if (ui->mode == df::unit_inventory_item::Weapon && ui->item->isWeapon()) + df::unit_inventory_item* plotinfo = dwarf->dwarf->inventory[j]; + if (plotinfo->mode == df::unit_inventory_item::Weapon && plotinfo->item->isWeapon()) { dwarf->armed = true; - df::itemdef_weaponst* weapondef = ((df::item_weaponst*)(ui->item))->subtype; + df::itemdef_weaponst* weapondef = ((df::item_weaponst*)(plotinfo->item))->subtype; df::job_skill weaponsk = (df::job_skill) weapondef->skill_melee; df::job_skill rangesk = (df::job_skill) weapondef->skill_ranged; if (weaponsk == df::job_skill::AXE) @@ -1408,8 +1408,8 @@ public: (isOptionEnabled(CF_ALLOW_HUNTING) && has_butchers) ? 1 : 0; /* add animal trainers */ - for (auto a = df::global::ui->equipment.training_assignments.begin(); - a != df::global::ui->equipment.training_assignments.end(); + for (auto a = df::global::plotinfo->equipment.training_assignments.begin(); + a != df::global::plotinfo->equipment.training_assignments.end(); a++) { labor_needed[df::unit_labor::ANIMALTRAIN]++; diff --git a/plugins/automaterial.cpp b/plugins/automaterial.cpp index 24f2d8e2a..9783d28dc 100644 --- a/plugins/automaterial.cpp +++ b/plugins/automaterial.cpp @@ -21,8 +21,8 @@ #include "df/build_req_choice_specst.h" #include "df/construction_type.h" #include "df/item.h" -#include "df/ui.h" -#include "df/ui_build_selector.h" +#include "df/plotinfost.h" +#include "df/buildreq.h" #include "df/viewscreen_dwarfmodest.h" #include "df/items_other_id.h" #include "df/job.h" @@ -50,7 +50,7 @@ using namespace df::enums; DFHACK_PLUGIN("automaterial"); REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); namespace DFHack { @@ -115,14 +115,14 @@ static inline bool in_material_choice_stage() { return Gui::build_selector_hotkey(Core::getTopViewscreen()) && ui_build_selector->building_type == df::building_type::Construction && - ui->main.mode == ui_sidebar_mode::Build && + plotinfo->main.mode == ui_sidebar_mode::Build && ui_build_selector->stage == 2; } static inline bool in_placement_stage() { return Gui::dwarfmode_hotkey(Core::getTopViewscreen()) && - ui->main.mode == ui_sidebar_mode::Build && + plotinfo->main.mode == ui_sidebar_mode::Build && ui_build_selector && ui_build_selector->building_type == df::building_type::Construction && ui_build_selector->stage == 1; @@ -131,7 +131,7 @@ static inline bool in_placement_stage() static inline bool in_type_choice_stage() { return Gui::dwarfmode_hotkey(Core::getTopViewscreen()) && - ui->main.mode == ui_sidebar_mode::Build && + plotinfo->main.mode == ui_sidebar_mode::Build && ui_build_selector && ui_build_selector->building_type < 0; } @@ -713,7 +713,7 @@ struct jobutils_hook : public df::viewscreen_dwarfmodest if (!box_select_enabled) return; - if (ui->main.mode != df::ui_sidebar_mode::Build || + if (plotinfo->main.mode != df::ui_sidebar_mode::Build || ui_build_selector->building_type != df::building_type::Construction) return; diff --git a/plugins/automelt.cpp b/plugins/automelt.cpp index 4bbb727d7..9ca20e9ea 100644 --- a/plugins/automelt.cpp +++ b/plugins/automelt.cpp @@ -9,7 +9,7 @@ #include "df/building_stockpilest.h" #include "modules/Buildings.h" #include "modules/Items.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "modules/Maps.h" #include "modules/World.h" #include "df/item_quality.h" @@ -21,7 +21,7 @@ DFHACK_PLUGIN("automelt"); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(cursor); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); static const string PERSISTENCE_KEY = "automelt/stockpiles"; diff --git a/plugins/autotrade.cpp b/plugins/autotrade.cpp index 623fd5c1e..333e34e95 100644 --- a/plugins/autotrade.cpp +++ b/plugins/autotrade.cpp @@ -15,7 +15,7 @@ #include "df/job.h" #include "df/job_item_ref.h" #include "modules/Job.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/mandate.h" #include "modules/Maps.h" @@ -25,7 +25,7 @@ DFHACK_PLUGIN("autotrade"); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(cursor); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); static const string PERSISTENCE_KEY = "autotrade/stockpiles"; diff --git a/plugins/buildingplan/buildingplan-planner.cpp b/plugins/buildingplan/buildingplan-planner.cpp index 4ac11c4e1..07f23150a 100644 --- a/plugins/buildingplan/buildingplan-planner.cpp +++ b/plugins/buildingplan/buildingplan-planner.cpp @@ -6,7 +6,7 @@ #include "df/building_type.h" #include "df/general_ref_building_holderst.h" #include "df/job_item.h" -#include "df/ui_build_selector.h" +#include "df/buildreq.h" #include "modules/Buildings.h" #include "modules/Gui.h" diff --git a/plugins/buildingplan/buildingplan.cpp b/plugins/buildingplan/buildingplan.cpp index e0bc6dd69..cd4e84a6e 100644 --- a/plugins/buildingplan/buildingplan.cpp +++ b/plugins/buildingplan/buildingplan.cpp @@ -1,7 +1,7 @@ #include "df/construction_type.h" #include "df/entity_position.h" #include "df/interface_key.h" -#include "df/ui_build_selector.h" +#include "df/buildreq.h" #include "df/viewscreen_dwarfmodest.h" #include "modules/Gui.h" @@ -18,7 +18,7 @@ DFHACK_PLUGIN("buildingplan"); #define PLUGIN_VERSION "2.0" -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); REQUIRE_GLOBAL(world); // used in buildingplan library @@ -455,8 +455,8 @@ struct buildingplan_query_hook : public df::viewscreen_dwarfmodest bool isInPlannedBuildingQueryMode() { - return (ui->main.mode == df::ui_sidebar_mode::QueryBuilding || - ui->main.mode == df::ui_sidebar_mode::BuildingItems) && + return (plotinfo->main.mode == df::ui_sidebar_mode::QueryBuilding || + plotinfo->main.mode == df::ui_sidebar_mode::BuildingItems) && planner.getPlannedBuilding(world->selected_building); } @@ -595,7 +595,7 @@ struct buildingplan_place_hook : public df::viewscreen_dwarfmodest bool isInPlannedBuildingPlacementMode() { - return ui->main.mode == ui_sidebar_mode::Build && + return plotinfo->main.mode == ui_sidebar_mode::Build && df::global::ui_build_selector && df::global::ui_build_selector->stage < 2 && planner.isPlannableBuilding(toBuildingTypeKey(ui_build_selector)); @@ -861,7 +861,7 @@ struct buildingplan_room_hook : public df::viewscreen_dwarfmodest std::vector getNoblePositionOfSelectedBuildingOwner() { std::vector np; - if (ui->main.mode != df::ui_sidebar_mode::QueryBuilding || + if (plotinfo->main.mode != df::ui_sidebar_mode::QueryBuilding || !world->selected_building || !world->selected_building->owner) { @@ -1084,7 +1084,7 @@ DFhackCExport command_result plugin_onstatechange(color_ostream &out, state_chan static bool is_paused() { return World::ReadPauseState() || - ui->main.mode > df::ui_sidebar_mode::Squads || + plotinfo->main.mode > df::ui_sidebar_mode::Squads || !strict_virtual_cast(Gui::getCurViewscreen(true)); } diff --git a/plugins/burrows.cpp b/plugins/burrows.cpp index 029b3c715..c39253488 100644 --- a/plugins/burrows.cpp +++ b/plugins/burrows.cpp @@ -17,7 +17,7 @@ #include "TileTypes.h" #include "DataDefs.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" #include "df/unit.h" #include "df/burrow.h" @@ -38,7 +38,7 @@ using namespace df::enums; using namespace dfproto; DFHACK_PLUGIN("burrows"); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(gamemode); @@ -102,11 +102,11 @@ DEFINE_LUA_EVENT_1(onBurrowRename, handle_burrow_rename, df::burrow*); static void detect_burrow_renames(color_ostream &out) { - if (ui->main.mode == ui_sidebar_mode::Burrows && - ui->burrows.in_edit_name_mode && - ui->burrows.sel_id >= 0) + if (plotinfo->main.mode == ui_sidebar_mode::Burrows && + plotinfo->burrows.in_edit_name_mode && + plotinfo->burrows.sel_id >= 0) { - name_burrow_id = ui->burrows.sel_id; + name_burrow_id = plotinfo->burrows.sel_id; } else if (name_burrow_id >= 0) { @@ -222,7 +222,7 @@ static std::map name_lookup; static void parse_names() { - auto &list = ui->burrows.list; + auto &list = plotinfo->burrows.list; grow_burrows.clear(); name_lookup.clear(); diff --git a/plugins/confirm.cpp b/plugins/confirm.cpp index 5cef6376f..499d3f08f 100644 --- a/plugins/confirm.cpp +++ b/plugins/confirm.cpp @@ -36,7 +36,7 @@ using std::vector; DFHACK_PLUGIN("confirm"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); typedef std::set ikey_set; command_result df_confirm (color_ostream &out, vector & parameters); diff --git a/plugins/createitem.cpp b/plugins/createitem.cpp index 57dbf7244..499814adc 100644 --- a/plugins/createitem.cpp +++ b/plugins/createitem.cpp @@ -16,7 +16,7 @@ #include "DataDefs.h" #include "df/game_type.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/historical_entity.h" #include "df/world_site.h" @@ -38,7 +38,7 @@ using namespace df::enums; DFHACK_PLUGIN("createitem"); REQUIRE_GLOBAL(cursor); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(gametype); REQUIRE_GLOBAL(cur_year_tick); @@ -78,7 +78,7 @@ bool makeItem (df::reaction_product_itemst *prod, df::unit *unit, bool second_it prod->produce(unit, &out_products, &out_items, &in_reag, &in_items, 1, job_skill::NONE, 0, df::historical_entity::find(unit->civ_id), - (World::isFortressMode()) ? df::world_site::find(ui->site_id) : NULL, NULL); + (World::isFortressMode()) ? df::world_site::find(plotinfo->site_id) : NULL, NULL); if (!out_items.size()) return false; // if we asked to make shoes and we got twice as many as we asked, then we're okay diff --git a/plugins/debug.cpp b/plugins/debug.cpp index f4a22b8d1..a48fd2a05 100644 --- a/plugins/debug.cpp +++ b/plugins/debug.cpp @@ -43,7 +43,7 @@ namespace DFHack { DBG_DECLARE(debug,filter); DBG_DECLARE(debug,init); DBG_DECLARE(debug,command); -DBG_DECLARE(debug,ui); +DBG_DECLARE(debug,plotinfo); DBG_DECLARE(debug,example,DebugCategory::LINFO); } diff --git a/plugins/devel/kittens.cpp b/plugins/devel/kittens.cpp index 89ece51b6..ec1114576 100644 --- a/plugins/devel/kittens.cpp +++ b/plugins/devel/kittens.cpp @@ -33,7 +33,7 @@ using namespace DFHack; DFHACK_PLUGIN("kittens"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); namespace DFHack { @@ -119,9 +119,9 @@ DFhackCExport command_result plugin_onupdate ( color_ostream &out ) } if(trackmenu_flg) { - if (last_menu != ui->main.mode) + if (last_menu != plotinfo->main.mode) { - last_menu = ui->main.mode; + last_menu = plotinfo->main.mode; out.print("Menu: %d\n",last_menu); } } @@ -157,7 +157,7 @@ command_result trackmenu (color_ostream &out, vector & parameters) else { is_enabled = true; - last_menu = ui->main.mode; + last_menu = plotinfo->main.mode; out.print("Menu: %d\n",last_menu); trackmenu_flg = true; return CR_OK; diff --git a/plugins/devel/stockcheck.cpp b/plugins/devel/stockcheck.cpp index 619fda9fd..796bc2fc9 100644 --- a/plugins/devel/stockcheck.cpp +++ b/plugins/devel/stockcheck.cpp @@ -5,7 +5,7 @@ #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/building_stockpilest.h" #include "df/global_objects.h" #include "df/item.h" @@ -24,7 +24,7 @@ using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; using df::global::selection_rect; using df::building_stockpilest; @@ -35,7 +35,7 @@ DFHACK_PLUGIN("stockcheck"); DFhackCExport command_result plugin_init (color_ostream &out, std::vector &commands) { - if (world && ui) { + if (world && plotinfo) { commands.push_back( PluginCommand("stockcheck", "Check for unprotected rottable items.", stockcheck, false, diff --git a/plugins/devel/stripcaged.cpp b/plugins/devel/stripcaged.cpp index 30d0b0d2b..e96e63fb1 100644 --- a/plugins/devel/stripcaged.cpp +++ b/plugins/devel/stripcaged.cpp @@ -20,7 +20,7 @@ using namespace std; #include "modules/World.h" #include "MiscUtils.h" -#include +#include #include "df/world.h" #include "df/world_raws.h" #include "df/building_def.h" @@ -34,7 +34,7 @@ using namespace DFHack; using namespace df::enums; using df::global::world; using df::global::cursor; -using df::global::ui; +using df::global::plotinfo; using namespace DFHack::Gui; diff --git a/plugins/dig-now.cpp b/plugins/dig-now.cpp index 1bca6784c..9945ee2b0 100644 --- a/plugins/dig-now.cpp +++ b/plugins/dig-now.cpp @@ -20,14 +20,14 @@ #include #include #include -#include +#include #include #include #include #include DFHACK_PLUGIN("dig-now"); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); using namespace DFHack; @@ -678,7 +678,7 @@ static void create_boulders(color_ostream &out, df::unit *unit = world->units.active[0]; df::historical_entity *civ = df::historical_entity::find(unit->civ_id); df::world_site *site = World::isFortressMode() ? - df::world_site::find(ui->site_id) : NULL; + df::world_site::find(plotinfo->site_id) : NULL; std::vector in_reag; std::vector in_items; diff --git a/plugins/dig.cpp b/plugins/dig.cpp index 945bf3613..371dd588f 100644 --- a/plugins/dig.cpp +++ b/plugins/dig.cpp @@ -16,7 +16,7 @@ #include "modules/Maps.h" #include "modules/Materials.h" -#include "df/ui_sidebar_menus.h" +#include "df/gamest.h" using std::vector; using std::string; @@ -33,7 +33,7 @@ command_result digcircle (color_ostream &out, vector & parameters); command_result digtype (color_ostream &out, vector & parameters); DFHACK_PLUGIN("dig"); -REQUIRE_GLOBAL(ui_sidebar_menus); +REQUIRE_GLOBAL(game); REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(window_z); @@ -213,7 +213,7 @@ bool lineY (MapExtras::MapCache & MCache, int32_t parse_priority(color_ostream &out, vector ¶meters) { - int32_t default_priority = ui_sidebar_menus->designation.priority; + int32_t default_priority = game->designation.priority; for (auto it = parameters.begin(); it != parameters.end(); ++it) { diff --git a/plugins/diggingInvaders/assignJob.cpp b/plugins/diggingInvaders/assignJob.cpp index 2eaad9eb5..eb74433b8 100644 --- a/plugins/diggingInvaders/assignJob.cpp +++ b/plugins/diggingInvaders/assignJob.cpp @@ -25,7 +25,7 @@ #include "df/job_type.h" #include "df/reaction_product_itemst.h" #include "df/reaction_reagent.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_inventory_item.h" #include "df/world.h" @@ -252,7 +252,7 @@ int32_t assignJob(color_ostream& out, Edge firstImportantEdge, unordered_map in_items; prod->produce(firstInvader, &out_products, &out_items, &in_reag, &in_items, 1, df::job_skill::NONE, 0, df::historical_entity::find(firstInvader->civ_id), - df::world_site::find(df::global::ui->site_id), NULL); + df::world_site::find(df::global::plotinfo->site_id), NULL); if ( out_items.size() != 1 ) { out.print("%s, %d: wrong size: %zu.\n", __FILE__, __LINE__, out_items.size()); diff --git a/plugins/diggingInvaders/diggingInvaders.cpp b/plugins/diggingInvaders/diggingInvaders.cpp index 457a00e50..cf0047cd8 100644 --- a/plugins/diggingInvaders/diggingInvaders.cpp +++ b/plugins/diggingInvaders/diggingInvaders.cpp @@ -47,7 +47,7 @@ #include "df/tiletype_material.h" #include "df/tiletype_shape.h" #include "df/tiletype_shape_basic.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_inventory_item.h" #include "df/world.h" diff --git a/plugins/dwarfmonitor.cpp b/plugins/dwarfmonitor.cpp index 4355104a7..2b546bfad 100644 --- a/plugins/dwarfmonitor.cpp +++ b/plugins/dwarfmonitor.cpp @@ -4,7 +4,7 @@ #include "DataDefs.h" #include "df/job.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/viewscreen_dwarfmodest.h" #include "df/world.h" @@ -53,7 +53,7 @@ using std::deque; DFHACK_PLUGIN("dwarfmonitor"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); typedef int16_t activity_type; diff --git a/plugins/dwarfvet.cpp b/plugins/dwarfvet.cpp index 356fda238..75f015975 100644 --- a/plugins/dwarfvet.cpp +++ b/plugins/dwarfvet.cpp @@ -39,7 +39,7 @@ #include "df/job.h" #include "df/general_ref_unit_workerst.h" #include "df/profession.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_health_info.h" #include "df/unit_health_flags.h" @@ -58,7 +58,7 @@ using namespace std; DFHACK_PLUGIN("dwarfvet"); DFHACK_PLUGIN_IS_ENABLED(dwarfvet_enabled); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); static unordered_set tracked_units; @@ -407,7 +407,7 @@ void tickHandler(color_ostream& out, void* data) { if ( !dwarfvet_enabled ) return; CoreSuspender suspend; - int32_t own_race_id = df::global::ui->race_id; + int32_t own_race_id = df::global::plotinfo->race_id; /** * Generate a list of animal hospitals on the map diff --git a/plugins/embark-assistant/finder_ui.cpp b/plugins/embark-assistant/finder_ui.cpp index 1fb845d15..6501f7f21 100644 --- a/plugins/embark-assistant/finder_ui.cpp +++ b/plugins/embark-assistant/finder_ui.cpp @@ -123,7 +123,7 @@ namespace embark_assist { struct states { embark_assist::defs::find_callbacks find_callback; - uis ui; + uis plotinfo; display_maps finder_list; // Don't need the element key, but it's easier to use the same type. uint16_t finder_list_focus; bool finder_list_active; @@ -171,13 +171,13 @@ namespace embark_assist { size_t civ = 0; while (true) { - for (size_t k = 0; k < state->ui[static_cast(i)]->list.size(); k++) { - if (state->ui[static_cast(i) + civ]->current_value == state->ui[static_cast(i) + civ]->list[k].key) { - fprintf(outfile, "[%s:%s]\n", state->finder_list[static_cast(i) + civ].text.c_str(), state->ui[static_cast(i) + civ]->list[k].text.c_str()); + for (size_t k = 0; k < state->plotinfo[static_cast(i)]->list.size(); k++) { + if (state->plotinfo[static_cast(i) + civ]->current_value == state->plotinfo[static_cast(i) + civ]->list[k].key) { + fprintf(outfile, "[%s:%s]\n", state->finder_list[static_cast(i) + civ].text.c_str(), state->plotinfo[static_cast(i) + civ]->list[k].text.c_str()); break; } } -// fprintf(outfile, "[%s:%i]\n", state->finder_list[static_cast(i)].text.c_str(), state->ui[static_cast(i)]->current_value); +// fprintf(outfile, "[%s:%i]\n", state->finder_list[static_cast(i)].text.c_str(), state->plotinfo[static_cast(i)]->current_value); if (i == last_fields) { civ++; @@ -229,10 +229,10 @@ namespace embark_assist { found = false; - for (size_t l = 0; l < state->ui[static_cast(i) + civ]->list.size(); l++) { + for (size_t l = 0; l < state->plotinfo[static_cast(i) + civ]->list.size(); l++) { for (int m = k + 1; m < count; m++) { - if (state->ui[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] != line[m]) { - if (state->ui[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] == '\0' && + if (state->plotinfo[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] != line[m]) { + if (state->plotinfo[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] == '\0' && line[m] == ']') { found = true; } @@ -291,13 +291,13 @@ namespace embark_assist { found = false; - for (size_t l = 0; l < state->ui[static_cast(i) + civ]->list.size(); l++) { + for (size_t l = 0; l < state->plotinfo[static_cast(i) + civ]->list.size(); l++) { for (int m = k + 1; m < count; m++) { - if (state->ui[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] != line[m]) { - if (state->ui[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] == '\0' && + if (state->plotinfo[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] != line[m]) { + if (state->plotinfo[static_cast(i) + civ]->list[l].text.c_str()[m - (k + 1)] == '\0' && line[m] == ']') { - state->ui[static_cast(i) + civ]->current_value = state->ui[static_cast(i) + civ]->list[l].key; - state->ui[static_cast(i) + civ]->current_display_value = l; + state->plotinfo[static_cast(i) + civ]->current_value = state->plotinfo[static_cast(i) + civ]->list[l].key; + state->plotinfo[static_cast(i) + civ]->current_display_value = l; found = true; } @@ -1095,7 +1095,7 @@ namespace embark_assist { if (l < state->civs.size() - 1) { element->current_value = element->list[0].key; - state->ui.push_back(element); + state->plotinfo.push_back(element); element = new ui_lists; element->current_display_value = 0; element->current_index = 0; @@ -1108,7 +1108,7 @@ namespace embark_assist { } element->current_value = element->list[0].key; - state->ui.push_back(element); + state->plotinfo.push_back(element); switch (i) { case fields::x_dim: @@ -1333,21 +1333,21 @@ namespace embark_assist { // off to compensate for the list starting with 1 at index 0. // auto screen = Gui::getViewscreenByType(0); - state->ui[static_cast(fields::x_dim)]->current_display_value = + state->plotinfo[static_cast(fields::x_dim)]->current_display_value = screen->location.embark_pos_max.x - screen->location.embark_pos_min.x; - state->ui[static_cast(fields::x_dim)]->current_index = - state->ui[static_cast(fields::x_dim)]->current_display_value; - state->ui[static_cast(fields::x_dim)]->current_value = - state->ui[static_cast(fields::x_dim)]->current_display_value + 1; + state->plotinfo[static_cast(fields::x_dim)]->current_index = + state->plotinfo[static_cast(fields::x_dim)]->current_display_value; + state->plotinfo[static_cast(fields::x_dim)]->current_value = + state->plotinfo[static_cast(fields::x_dim)]->current_display_value + 1; - state->ui[static_cast(fields::y_dim)]->current_display_value = + state->plotinfo[static_cast(fields::y_dim)]->current_display_value = screen->location.embark_pos_max.y - screen->location.embark_pos_min.y; - state->ui[static_cast(fields::y_dim)]->current_index = - state->ui[static_cast(fields::y_dim)]->current_display_value; - state->ui[static_cast(fields::y_dim)]->current_value = - state->ui[static_cast(fields::y_dim)]->current_display_value + 1; + state->plotinfo[static_cast(fields::y_dim)]->current_index = + state->plotinfo[static_cast(fields::y_dim)]->current_display_value; + state->plotinfo[static_cast(fields::y_dim)]->current_value = + state->plotinfo[static_cast(fields::y_dim)]->current_display_value + 1; } //========================================================================================================== @@ -1360,234 +1360,234 @@ namespace embark_assist { while (true) { switch (i) { case fields::x_dim: - finder.x_dim = state->ui[static_cast(i)]->current_value; + finder.x_dim = state->plotinfo[static_cast(i)]->current_value; break; case fields::y_dim: - finder.y_dim = state->ui[static_cast(i)]->current_value; + finder.y_dim = state->plotinfo[static_cast(i)]->current_value; break; case fields::savagery_calm: finder.savagery[0] = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::savagery_medium: finder.savagery[1] = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::savagery_savage: finder.savagery[2] = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::good: finder.evilness[0] = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::neutral: finder.evilness[1] = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::evil: finder.evilness[2] = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::aquifer: finder.aquifer = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::min_river: finder.min_river = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::max_river: finder.max_river = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::min_waterfall: - finder.min_waterfall = state->ui[static_cast(i)]->current_value; + finder.min_waterfall = state->plotinfo[static_cast(i)]->current_value; break; case fields::flat: finder.flat = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::soil_min_everywhere: finder.soil_min_everywhere = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::freezing: finder.freezing = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::blood_rain: finder.blood_rain = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::syndrome_rain: finder.syndrome_rain = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::reanimation: finder.reanimation = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::clay: finder.clay = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::sand: finder.sand = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::flux: finder.flux = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::coal: finder.coal = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::soil_min: finder.soil_min = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::soil_max: finder.soil_max = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::spire_count_min: - finder.spire_count_min = state->ui[static_cast(i)]->current_value; + finder.spire_count_min = state->plotinfo[static_cast(i)]->current_value; break; case fields::spire_count_max: - finder.spire_count_max = state->ui[static_cast(i)]->current_value; + finder.spire_count_max = state->plotinfo[static_cast(i)]->current_value; break; case fields::magma_min: finder.magma_min = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::magma_max: finder.magma_max = - static_cast(state->ui[static_cast(i)]->current_value); + static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::biome_count_min: - finder.biome_count_min = state->ui[static_cast(i)]->current_value; + finder.biome_count_min = state->plotinfo[static_cast(i)]->current_value; break; case fields::biome_count_max: - finder.biome_count_max = state->ui[static_cast(i)]->current_value; + finder.biome_count_max = state->plotinfo[static_cast(i)]->current_value; break; case fields::region_type_1: - finder.region_type_1 = state->ui[static_cast(i)]->current_value; + finder.region_type_1 = state->plotinfo[static_cast(i)]->current_value; break; case fields::region_type_2: - finder.region_type_2 = state->ui[static_cast(i)]->current_value; + finder.region_type_2 = state->plotinfo[static_cast(i)]->current_value; break; case fields::region_type_3: - finder.region_type_3 = state->ui[static_cast(i)]->current_value; + finder.region_type_3 = state->plotinfo[static_cast(i)]->current_value; break; case fields::biome_1: - finder.biome_1 = state->ui[static_cast(i)]->current_value; + finder.biome_1 = state->plotinfo[static_cast(i)]->current_value; break; case fields::biome_2: - finder.biome_2 = state->ui[static_cast(i)]->current_value; + finder.biome_2 = state->plotinfo[static_cast(i)]->current_value; break; case fields::biome_3: - finder.biome_3 = state->ui[static_cast(i)]->current_value; + finder.biome_3 = state->plotinfo[static_cast(i)]->current_value; break; case fields::min_trees: - finder.min_trees = static_cast(state->ui[static_cast(i)]->current_value); + finder.min_trees = static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::max_trees: - finder.max_trees = static_cast(state->ui[static_cast(i)]->current_value); + finder.max_trees = static_cast(state->plotinfo[static_cast(i)]->current_value); break; case fields::metal_1: - finder.metal_1 = state->ui[static_cast(i)]->current_value; + finder.metal_1 = state->plotinfo[static_cast(i)]->current_value; break; case fields::metal_2: - finder.metal_2 = state->ui[static_cast(i)]->current_value; + finder.metal_2 = state->plotinfo[static_cast(i)]->current_value; break; case fields::metal_3: - finder.metal_3 = state->ui[static_cast(i)]->current_value; + finder.metal_3 = state->plotinfo[static_cast(i)]->current_value; break; case fields::economic_1: - finder.economic_1 = state->ui[static_cast(i)]->current_value; + finder.economic_1 = state->plotinfo[static_cast(i)]->current_value; break; case fields::economic_2: - finder.economic_2 = state->ui[static_cast(i)]->current_value; + finder.economic_2 = state->plotinfo[static_cast(i)]->current_value; break; case fields::economic_3: - finder.economic_3 = state->ui[static_cast(i)]->current_value; + finder.economic_3 = state->plotinfo[static_cast(i)]->current_value; break; case fields::mineral_1: - finder.mineral_1 = state->ui[static_cast(i)]->current_value; + finder.mineral_1 = state->plotinfo[static_cast(i)]->current_value; break; case fields::mineral_2: - finder.mineral_2 = state->ui[static_cast(i)]->current_value; + finder.mineral_2 = state->plotinfo[static_cast(i)]->current_value; break; case fields::mineral_3: - finder.mineral_3 = state->ui[static_cast(i)]->current_value; + finder.mineral_3 = state->plotinfo[static_cast(i)]->current_value; break; case fields::min_necro_neighbors: - finder.min_necro_neighbors = state->ui[static_cast(i)]->current_value; + finder.min_necro_neighbors = state->plotinfo[static_cast(i)]->current_value; break; case fields::max_necro_neighbors: - finder.max_necro_neighbors = state->ui[static_cast(i)]->current_value; + finder.max_necro_neighbors = state->plotinfo[static_cast(i)]->current_value; break; case fields::min_civ_neighbors: - finder.min_civ_neighbors = state->ui[static_cast(i)]->current_value; + finder.min_civ_neighbors = state->plotinfo[static_cast(i)]->current_value; break; case fields::max_civ_neighbors: - finder.max_civ_neighbors = state->ui[static_cast(i)]->current_value; + finder.max_civ_neighbors = state->plotinfo[static_cast(i)]->current_value; break; case fields::neighbors: for (size_t k = 0; k < state->civs.size(); k++) { - finder.neighbors.push_back({ state->civs[k].id, static_cast(state->ui[static_cast(i) + k]->current_value) }); + finder.neighbors.push_back({ state->civs[k].id, static_cast(state->plotinfo[static_cast(i) + k]->current_value) }); } break; } @@ -1641,10 +1641,10 @@ namespace embark_assist { } } else { - if (state->ui[state->finder_list_focus]->current_index > 0) { - state->ui[state->finder_list_focus]->current_index--; + if (state->plotinfo[state->finder_list_focus]->current_index > 0) { + state->plotinfo[state->finder_list_focus]->current_index--; } else { - state->ui[state->finder_list_focus]->current_index = static_cast(state->ui[state->finder_list_focus]->list.size()) - 1; + state->plotinfo[state->finder_list_focus]->current_index = static_cast(state->plotinfo[state->finder_list_focus]->list.size()) - 1; } } @@ -1657,17 +1657,17 @@ namespace embark_assist { } } else { - if (state->ui[state->finder_list_focus]->current_index < state->ui[state->finder_list_focus]->list.size() - 1) { - state->ui[state->finder_list_focus]->current_index++; + if (state->plotinfo[state->finder_list_focus]->current_index < state->plotinfo[state->finder_list_focus]->list.size() - 1) { + state->plotinfo[state->finder_list_focus]->current_index++; } else { - state->ui[state->finder_list_focus]->current_index = 0; + state->plotinfo[state->finder_list_focus]->current_index = 0; } } } else if (input->count(df::interface_key::SELECT)) { if (!state->finder_list_active) { - state->ui[state->finder_list_focus]->current_display_value = state->ui[state->finder_list_focus]->current_index; - state->ui[state->finder_list_focus]->current_value = state->ui[state->finder_list_focus]->list[state->ui[state->finder_list_focus]->current_index].key; + state->plotinfo[state->finder_list_focus]->current_display_value = state->plotinfo[state->finder_list_focus]->current_index; + state->plotinfo[state->finder_list_focus]->current_value = state->plotinfo[state->finder_list_focus]->list[state->plotinfo[state->finder_list_focus]->current_index].key; state->finder_list_active = true; } @@ -1743,7 +1743,7 @@ namespace embark_assist { embark_assist::screen::paintString(active_pen, 21, top_row + i - offset, - state->ui[i]->list[state->ui[i]->current_display_value].text); + state->plotinfo[i]->list[state->plotinfo[i]->current_display_value].text); } else { embark_assist::screen::paintString(normal_pen, 1, top_row + i - offset, state->finder_list[i].text); @@ -1751,38 +1751,38 @@ namespace embark_assist { embark_assist::screen::paintString(white_pen, 21, top_row + i - offset, - state->ui[i]->list[state->ui[i]->current_display_value].text); + state->plotinfo[i]->list[state->plotinfo[i]->current_display_value].text); } } // Implement scrolling lists if they don't fit on the screen. offset = 0; - if (int32_t(state->ui[state->finder_list_focus]->list.size()) > screen_size.y - top_row - 1) { + if (int32_t(state->plotinfo[state->finder_list_focus]->list.size()) > screen_size.y - top_row - 1) { offset = (screen_size.y - top_row - 1) / 2; - if (state->ui[state->finder_list_focus]->current_index < offset) { + if (state->plotinfo[state->finder_list_focus]->current_index < offset) { offset = 0; } else { - offset = state->ui[state->finder_list_focus]->current_index - offset; + offset = state->plotinfo[state->finder_list_focus]->current_index - offset; } - if (int32_t(state->ui[state->finder_list_focus]->list.size() - offset) < screen_size.y - top_row - 1) { - offset = static_cast(state->ui[state->finder_list_focus]->list.size()) - (screen_size.y - top_row - 1); + if (int32_t(state->plotinfo[state->finder_list_focus]->list.size() - offset) < screen_size.y - top_row - 1) { + offset = static_cast(state->plotinfo[state->finder_list_focus]->list.size()) - (screen_size.y - top_row - 1); } } - for (uint16_t i = offset; i < state->ui[state->finder_list_focus]->list.size(); i++) { - if (i == state->ui[state->finder_list_focus]->current_index) { + for (uint16_t i = offset; i < state->plotinfo[state->finder_list_focus]->list.size(); i++) { + if (i == state->plotinfo[state->finder_list_focus]->current_index) { if (!state->finder_list_active) { // Negated expression to get the display lines in the same order as above. - embark_assist::screen::paintString(active_pen, list_column, top_row + i - offset, state->ui[state->finder_list_focus]->list[i].text); + embark_assist::screen::paintString(active_pen, list_column, top_row + i - offset, state->plotinfo[state->finder_list_focus]->list[i].text); } else { - embark_assist::screen::paintString(passive_pen, list_column, top_row + i - offset, state->ui[state->finder_list_focus]->list[i].text); + embark_assist::screen::paintString(passive_pen, list_column, top_row + i - offset, state->plotinfo[state->finder_list_focus]->list[i].text); } } else { - embark_assist::screen::paintString(normal_pen, list_column, top_row + i - offset, state->ui[state->finder_list_focus]->list[i].text); + embark_assist::screen::paintString(normal_pen, list_column, top_row + i - offset, state->plotinfo[state->finder_list_focus]->list[i].text); } } @@ -1823,8 +1823,8 @@ void embark_assist::finder_ui::activate() { void embark_assist::finder_ui::shutdown() { if (embark_assist::finder_ui::state) { - for (uint16_t i = 0; i < embark_assist::finder_ui::state->ui.size(); i++) { - delete embark_assist::finder_ui::state->ui[i]; + for (uint16_t i = 0; i < embark_assist::finder_ui::state->plotinfo.size(); i++) { + delete embark_assist::finder_ui::state->plotinfo[i]; } delete embark_assist::finder_ui::state; diff --git a/plugins/eventful.cpp b/plugins/eventful.cpp index 980b2db9c..dfddab9e8 100644 --- a/plugins/eventful.cpp +++ b/plugins/eventful.cpp @@ -39,7 +39,7 @@ using namespace df::enums; DFHACK_PLUGIN("eventful"); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); typedef df::reaction_product_itemst item_product; diff --git a/plugins/getplants.cpp b/plugins/getplants.cpp index 6819b6191..4fc82cb97 100644 --- a/plugins/getplants.cpp +++ b/plugins/getplants.cpp @@ -14,7 +14,7 @@ #include "df/plant_growth.h" #include "df/plant_raw.h" #include "df/tile_dig_designation.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" #include "df/world_data.h" #include "df/world_object_data.h" @@ -32,7 +32,7 @@ using namespace DFHack; using namespace df::enums; DFHACK_PLUGIN("getplants"); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(cur_year); REQUIRE_GLOBAL(cur_year_tick); @@ -242,7 +242,7 @@ bool ripe(int32_t x, int32_t y, int32_t start, int32_t end) { // Looks in the picked growths vector to see if a matching growth has been marked as picked. bool picked(const df::plant *plant, int32_t growth_subtype) { df::world_data *world_data = world->world_data; - df::world_site *site = df::world_site::find(ui->site_id); + df::world_site *site = df::world_site::find(plotinfo->site_id); int32_t pos_x = site->global_min_x + plant->pos.x / 48; int32_t pos_y = site->global_min_y + plant->pos.y / 48; size_t id = pos_x + pos_y * 16 * world_data->world_width; diff --git a/plugins/jobutils.cpp b/plugins/jobutils.cpp index 5f5994435..35b6f2cb5 100644 --- a/plugins/jobutils.cpp +++ b/plugins/jobutils.cpp @@ -11,8 +11,8 @@ #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" -#include "df/ui_build_selector.h" +#include "df/plotinfost.h" +#include "df/buildreq.h" #include "df/ui_build_item_req.h" #include "df/build_req_choice_genst.h" #include "df/build_req_choice_specst.h" @@ -33,7 +33,7 @@ using namespace df::enums; DFHACK_PLUGIN("jobutils"); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); REQUIRE_GLOBAL(ui_workshop_job_cursor); REQUIRE_GLOBAL(job_next_id); @@ -48,7 +48,7 @@ static command_result job_cmd(color_ostream &out, vector & parameters); DFhackCExport command_result plugin_init (color_ostream &out, std::vector &commands) { - if (!world || !ui) + if (!world || !plotinfo) return CR_FAILURE; commands.push_back( @@ -232,9 +232,9 @@ static command_result job_material(color_ostream &out, vector & paramet else return CR_WRONG_USAGE; - if (ui->main.mode == ui_sidebar_mode::QueryBuilding) + if (plotinfo->main.mode == ui_sidebar_mode::QueryBuilding) return job_material_in_job(out, new_mat); - if (ui->main.mode == ui_sidebar_mode::Build) + if (plotinfo->main.mode == ui_sidebar_mode::Build) return job_material_in_build(out, new_mat); return CR_WRONG_USAGE; diff --git a/plugins/manipulator.cpp b/plugins/manipulator.cpp index 2d3f3bc0a..6731aa513 100644 --- a/plugins/manipulator.cpp +++ b/plugins/manipulator.cpp @@ -19,7 +19,7 @@ #include "df/activity_event.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/graphic.h" #include "df/enabler.h" #include "df/viewscreen_unitlistst.h" @@ -49,7 +49,7 @@ using namespace df::enums; DFHACK_PLUGIN("manipulator"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(enabler); @@ -1972,9 +1972,9 @@ void viewscreen_unitlaborsst::render() Screen::paintTile(Screen::Pen(columns[col_offset].label[0], fg, bg), col_offsets[DISP_COLUMN_LABORS] + col, 1); Screen::paintTile(Screen::Pen(columns[col_offset].label[1], fg, bg), col_offsets[DISP_COLUMN_LABORS] + col, 2); df::profession profession = columns[col_offset].profession; - if ((profession != profession::NONE) && (ui->race_id != -1)) + if ((profession != profession::NONE) && (plotinfo->race_id != -1)) { - auto graphics = world->raws.creatures.all[ui->race_id]->graphics; + auto graphics = world->raws.creatures.all[plotinfo->race_id]->graphics; Screen::paintTile( Screen::Pen(' ', fg, 0, graphics.profession_add_color[creature_graphics_role::DEFAULT][profession], diff --git a/plugins/misery.cpp b/plugins/misery.cpp index 224060c6b..870c4480c 100644 --- a/plugins/misery.cpp +++ b/plugins/misery.cpp @@ -10,7 +10,7 @@ #include "modules/Units.h" #include "df/emotion_type.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_personality.h" #include "df/unit_soul.h" @@ -24,7 +24,7 @@ DFHACK_PLUGIN("misery"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(cur_year); REQUIRE_GLOBAL(cur_year_tick); diff --git a/plugins/mousequery.cpp b/plugins/mousequery.cpp index 124664fa2..1a088141a 100644 --- a/plugins/mousequery.cpp +++ b/plugins/mousequery.cpp @@ -6,8 +6,8 @@ #include "df/viewscreen_dwarfmodest.h" #include "df/world.h" #include "df/items_other_id.h" -#include "df/ui_build_selector.h" -#include "df/ui_sidebar_menus.h" +#include "df/buildreq.h" +#include "df/gamest.h" #include "modules/Gui.h" #include "modules/World.h" @@ -26,7 +26,7 @@ DFHACK_PLUGIN("mousequery"); REQUIRE_GLOBAL(enabler); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); using namespace df::enums::ui_sidebar_mode; @@ -196,7 +196,7 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest bool isInDesignationMenu() { - switch (ui->main.mode) + switch (plotinfo->main.mode) { case DesignateMine: case DesignateRemoveRamps: @@ -230,7 +230,7 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest return true; case Burrows: - return ui->burrows.in_define_mode; + return plotinfo->burrows.in_define_mode; default: return false; @@ -242,7 +242,7 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest if (isInDesignationMenu()) return box_designation_enabled; - switch (ui->main.mode) + switch (plotinfo->main.mode) { case DesignateItemsClaim: case DesignateItemsForbid: @@ -281,8 +281,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest { bool selectableMode = isInDesignationMenu() || - ui->main.mode == Stockpiles || - ui->main.mode == Zones; + plotinfo->main.mode == Stockpiles || + plotinfo->main.mode == Zones; if (selectableMode) { @@ -314,7 +314,7 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest } else { - switch (ui->main.mode) + switch (plotinfo->main.mode) { case QueryBuilding: if (cursor_still_here) @@ -369,8 +369,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest if (mx < 1 || mx > dims.map_x2 || my < 1 || my > dims.map_y2) return false; - if (ui->main.mode == df::ui_sidebar_mode::Zones || - ui->main.mode == df::ui_sidebar_mode::Stockpiles) + if (plotinfo->main.mode == df::ui_sidebar_mode::Zones || + plotinfo->main.mode == df::ui_sidebar_mode::Stockpiles) { int32_t x, y, z; if (Gui::getDesignationCoords(x, y, z)) @@ -417,8 +417,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest enabler->mouse_rbut = 0; using namespace df::enums::ui_sidebar_mode; - if ((ui->main.mode == QueryBuilding || ui->main.mode == BuildingItems || - ui->main.mode == ViewUnits || ui->main.mode == LookAround) || + if ((plotinfo->main.mode == QueryBuilding || plotinfo->main.mode == BuildingItems || + plotinfo->main.mode == ViewUnits || plotinfo->main.mode == LookAround) || (isInTrackableMode() && tracking_enabled)) { sendKey(df::interface_key::LEAVESCREEN); @@ -707,8 +707,8 @@ struct mousequery_hook : public df::viewscreen_dwarfmodest if (Gui::getDesignationCoords(x, y, z)) { color = COLOR_WHITE; - if (ui->main.mode == df::ui_sidebar_mode::Zones || - ui->main.mode == df::ui_sidebar_mode::Stockpiles) + if (plotinfo->main.mode == df::ui_sidebar_mode::Zones || + plotinfo->main.mode == df::ui_sidebar_mode::Stockpiles) { auto dX = abs(x - mpos.x); if (dX > 30) diff --git a/plugins/nestboxes.cpp b/plugins/nestboxes.cpp index 403a8cb37..1908684d4 100644 --- a/plugins/nestboxes.cpp +++ b/plugins/nestboxes.cpp @@ -5,7 +5,7 @@ #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/building_nest_boxst.h" #include "df/building_type.h" #include "df/buildings_other_id.h" @@ -26,7 +26,7 @@ using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; static command_result nestboxes(color_ostream &out, vector & parameters); @@ -67,7 +67,7 @@ static void eggscan(color_ostream &out) DFhackCExport command_result plugin_init (color_ostream &out, std::vector &commands) { - if (world && ui) { + if (world && plotinfo) { commands.push_back( PluginCommand( "nestboxes", diff --git a/plugins/power-meter.cpp b/plugins/power-meter.cpp index c61c3c8ee..f5f4ac63f 100644 --- a/plugins/power-meter.cpp +++ b/plugins/power-meter.cpp @@ -29,8 +29,8 @@ #include "df/machine_info.h" #include "df/report.h" #include "df/tile_designation.h" -#include "df/ui.h" -#include "df/ui_build_selector.h" +#include "df/plotinfost.h" +#include "df/buildreq.h" #include "df/viewscreen_dwarfmodest.h" #include "df/world.h" @@ -43,7 +43,7 @@ using namespace df::enums; DFHACK_PLUGIN("power-meter"); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); static const uint32_t METER_BIT = 0x80000000U; diff --git a/plugins/remotefortressreader/adventure_control.cpp b/plugins/remotefortressreader/adventure_control.cpp index 6fb592d62..2dbf2abc1 100644 --- a/plugins/remotefortressreader/adventure_control.cpp +++ b/plugins/remotefortressreader/adventure_control.cpp @@ -7,7 +7,7 @@ #include "df/adventure_movement_hold_itemst.h" #include "df/adventure_movement_hold_tilest.h" #include "df/adventure_movement_optionst.h" -#include "df/ui_advmode.h" +#include "df/adventurest.h" #include "df/viewscreen.h" #include "modules/Gui.h" @@ -42,7 +42,7 @@ command_result MoveCommand(DFHack::color_ostream &stream, const MoveCommandParam auto viewScreen = getCurViewscreen(); if (!in->has_direction()) return CR_WRONG_USAGE; - if (!df::global::ui_advmode->menu == ui_advmode_menu::Default) + if (!df::global::adventure->menu == ui_advmode_menu::Default) return CR_OK; auto dir = in->direction(); switch (dir.x()) @@ -193,7 +193,7 @@ command_result JumpCommand(DFHack::color_ostream &stream, const MoveCommandParam { if (!in->has_direction()) return CR_WRONG_USAGE; - if (!df::global::ui_advmode->menu == ui_advmode_menu::Default) + if (!df::global::adventure->menu == ui_advmode_menu::Default) return CR_OK; auto dir = in->direction(); keyQueue.push(interface_key::A_JUMP); @@ -233,7 +233,7 @@ command_result JumpCommand(DFHack::color_ostream &stream, const MoveCommandParam command_result MenuQuery(DFHack::color_ostream &stream, const EmptyMessage *in, MenuContents *out) { - auto advUi = df::global::ui_advmode; + auto advUi = df::global::adventure; if (advUi == NULL) return CR_FAILURE; @@ -278,7 +278,7 @@ command_result MenuQuery(DFHack::color_ostream &stream, const EmptyMessage *in, command_result MovementSelectCommand(DFHack::color_ostream &stream, const dfproto::IntMessage *in) { - if (!(df::global::ui_advmode->menu == ui_advmode_menu::MoveCarefully)) + if (!(df::global::adventure->menu == ui_advmode_menu::MoveCarefully)) return CR_OK; int choice = in->value(); int page = choice / 5; @@ -293,7 +293,7 @@ command_result MovementSelectCommand(DFHack::color_ostream &stream, const dfprot command_result MiscMoveCommand(DFHack::color_ostream &stream, const MiscMoveParams *in) { - if (!df::global::ui_advmode->menu == ui_advmode_menu::Default) + if (!df::global::adventure->menu == ui_advmode_menu::Default) return CR_OK; auto type = in->type(); diff --git a/plugins/remotefortressreader/dwarf_control.cpp b/plugins/remotefortressreader/dwarf_control.cpp index 3a5933464..f0147670f 100644 --- a/plugins/remotefortressreader/dwarf_control.cpp +++ b/plugins/remotefortressreader/dwarf_control.cpp @@ -12,9 +12,9 @@ #include "df/job_list_link.h" #include "df/interface_button_construction_building_selectorst.h" #include "df/interface_button_construction_category_selectorst.h" -#include "df/ui.h" -#include "df/ui_build_selector.h" -#include "df/ui_sidebar_menus.h" +#include "df/plotinfost.h" +#include "df/buildreq.h" +#include "df/gamest.h" #include "df/viewscreen.h" #include "df/world.h" @@ -233,7 +233,7 @@ command_result SetPauseState(color_ostream &stream, const SingleBool *in) void CopyBuildMenu(DwarfControl::SidebarState * out) { - auto menus = df::global::ui_sidebar_menus; + auto menus = df::global::game; auto build_selector = df::global::ui_build_selector; if (build_selector->building_type == -1) for (size_t i = 0; i < menus->building.choices_visible.size(); i++) @@ -303,9 +303,9 @@ void CopyBuildMenu(DwarfControl::SidebarState * out) command_result GetSideMenu(DFHack::color_ostream &stream, const dfproto::EmptyMessage *in, DwarfControl::SidebarState *out) { - auto ui = df::global::ui; - out->set_mode((proto::enums::ui_sidebar_mode::ui_sidebar_mode)ui->main.mode); - auto mode = ui->main.mode; + auto plotinfo = df::global::plotinfo; + out->set_mode((proto::enums::ui_sidebar_mode::ui_sidebar_mode)plotinfo->main.mode); + auto mode = plotinfo->main.mode; switch (mode) { case ui_sidebar_mode::Default: @@ -427,25 +427,25 @@ command_result GetSideMenu(DFHack::color_ostream &stream, const dfproto::EmptyMe command_result SetSideMenu(DFHack::color_ostream &stream, const DwarfControl::SidebarCommand *in) { - auto ui = df::global::ui; + auto plotinfo = df::global::plotinfo; if (in->has_mode()) { ui_sidebar_mode::ui_sidebar_mode set_mode = (ui_sidebar_mode::ui_sidebar_mode)in->mode(); - if (ui->main.mode != set_mode) + if (plotinfo->main.mode != set_mode) { - ui->main.mode = ui_sidebar_mode::Default; + plotinfo->main.mode = ui_sidebar_mode::Default; switch (set_mode) { case ui_sidebar_mode::Build: keyQueue.push(interface_key::D_BUILDING); break; default: - ui->main.mode = set_mode; + plotinfo->main.mode = set_mode; break; } } } - switch (ui->main.mode) + switch (plotinfo->main.mode) { case ui_sidebar_mode::Build: if (in->has_action()) @@ -454,7 +454,7 @@ command_result SetSideMenu(DFHack::color_ostream &stream, const DwarfControl::Si if (in->has_menu_index()) index = in->menu_index(); if(ui_build_selector->building_type == -1) - df::global::ui_sidebar_menus->building.cursor = index; + df::global::game->building.cursor = index; if (ui_build_selector->stage == 2) { ui_build_selector->sel_index = index; diff --git a/plugins/remotefortressreader/remotefortressreader.cpp b/plugins/remotefortressreader/remotefortressreader.cpp index 643e92b21..536aa3b0d 100644 --- a/plugins/remotefortressreader/remotefortressreader.cpp +++ b/plugins/remotefortressreader/remotefortressreader.cpp @@ -89,7 +89,7 @@ #endif #include "df/tissue.h" #include "df/tissue_style_raw.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_inventory_item.h" #include "df/unit_wound.h" @@ -135,9 +135,9 @@ using namespace df::global; #else REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(gamemode); -REQUIRE_GLOBAL(ui_advmode); +REQUIRE_GLOBAL(adventure); #endif // Here go all the command declarations... @@ -1887,8 +1887,8 @@ static command_result GetViewInfo(color_ostream &stream, const EmptyMessage *in, if (gamemode && *gamemode == GameMode::ADVENTURE) out->set_follow_unit_id(world->units.active[0]->id); else - out->set_follow_unit_id(ui->follow_unit); - out->set_follow_item_id(ui->follow_item); + out->set_follow_unit_id(plotinfo->follow_unit); + out->set_follow_item_id(plotinfo->follow_item); return CR_OK; } diff --git a/plugins/rename.cpp b/plugins/rename.cpp index 7c46fc908..68186cb74 100644 --- a/plugins/rename.cpp +++ b/plugins/rename.cpp @@ -13,8 +13,8 @@ #include "modules/Screen.h" #include -#include "df/ui.h" -#include "df/ui_sidebar_menus.h" +#include "df/plotinfost.h" +#include "df/gamest.h" #include "df/world.h" #include "df/squad.h" #include "df/unit.h" @@ -49,8 +49,8 @@ using namespace dfproto; DFHACK_PLUGIN("rename"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); -REQUIRE_GLOBAL(ui); -REQUIRE_GLOBAL(ui_sidebar_menus); +REQUIRE_GLOBAL(plotinfo); +REQUIRE_GLOBAL(game); REQUIRE_GLOBAL(world); DFhackCExport command_result plugin_onstatechange(color_ostream &out, state_change_event event); @@ -59,7 +59,7 @@ static command_result rename(color_ostream &out, vector & parameters); DFhackCExport command_result plugin_init (color_ostream &out, std::vector &commands) { - if (world && ui) { + if (world && plotinfo) { commands.push_back(PluginCommand( "rename", "Easily rename things.", @@ -135,9 +135,9 @@ struct dwarf_render_zone_hook : df::viewscreen_dwarfmodest { { INTERPOSE_NEXT(render)(); - if (ui->main.mode == ui_sidebar_mode::Zones && - ui_sidebar_menus && ui_sidebar_menus->zone.selected && - !ui_sidebar_menus->zone.selected->name.empty()) + if (plotinfo->main.mode == ui_sidebar_mode::Zones && + game && game->zone.selected && + !game->zone.selected->name.empty()) { auto dims = Gui::getDwarfmodeViewDims(); int width = dims.menu_x2 - dims.menu_x1 - 1; @@ -146,7 +146,7 @@ struct dwarf_render_zone_hook : df::viewscreen_dwarfmodest { Screen::fillRect(pen, dims.menu_x1, dims.y1+1, dims.menu_x2, dims.y1+1); std::string name; - ui_sidebar_menus->zone.selected->getName(&name); + game->zone.selected->getName(&name); Screen::paintString(pen, dims.menu_x1+1, dims.y1+1, name.substr(0, width)); } } @@ -258,7 +258,7 @@ static bool renameBuilding(df::building *bld, std::string name) static df::squad *getSquadByIndex(unsigned idx) { - auto entity = df::historical_entity::find(ui->group_id); + auto entity = df::historical_entity::find(plotinfo->group_id); if (!entity) return NULL; @@ -361,7 +361,7 @@ static command_result rename(color_ostream &out, vector ¶meters) return CR_WRONG_USAGE; } - ui->main.hotkeys[id-1].name = parameters[2]; + plotinfo->main.hotkeys[id-1].name = parameters[2]; } else if (cmd == "unit") { diff --git a/plugins/rendermax/renderer_light.cpp b/plugins/rendermax/renderer_light.cpp index cc5d569c0..428de3a25 100644 --- a/plugins/rendermax/renderer_light.cpp +++ b/plugins/rendermax/renderer_light.cpp @@ -94,7 +94,7 @@ rect2d getMapViewport() { view_rb=area_x2; } - if (menu_posmain.mode!=0) + if (menu_posmain.mode!=0) { if (menu_pos >= area_pos) menu_pos = area_pos-1; diff --git a/plugins/rendermax/rendermax.cpp b/plugins/rendermax/rendermax.cpp index b7c703e09..6ed22fe77 100644 --- a/plugins/rendermax/rendermax.cpp +++ b/plugins/rendermax/rendermax.cpp @@ -31,7 +31,7 @@ REQUIRE_GLOBAL(cursor); REQUIRE_GLOBAL(enabler); REQUIRE_GLOBAL(gametype); REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(window_x); REQUIRE_GLOBAL(window_y); REQUIRE_GLOBAL(window_z); diff --git a/plugins/search.cpp b/plugins/search.cpp index 9ecae6460..b69480778 100644 --- a/plugins/search.cpp +++ b/plugins/search.cpp @@ -52,7 +52,7 @@ DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(gview); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_building_assign_units); REQUIRE_GLOBAL(ui_building_in_assign); REQUIRE_GLOBAL(ui_building_item_cursor); @@ -1878,7 +1878,7 @@ class look_menu_search : public look_menu_search_base public: bool can_init(df::viewscreen_dwarfmodest *screen) { - if (ui->main.mode == df::ui_sidebar_mode::LookAround) + if (plotinfo->main.mode == df::ui_sidebar_mode::LookAround) { return look_menu_search_base::can_init(screen); } @@ -1986,7 +1986,7 @@ class burrow_search : public burrow_search_base public: bool can_init(df::viewscreen_dwarfmodest *screen) { - if (ui->main.mode == df::ui_sidebar_mode::Burrows && ui->burrows.in_add_units_mode) + if (plotinfo->main.mode == df::ui_sidebar_mode::Burrows && plotinfo->burrows.in_add_units_mode) { return burrow_search_base::can_init(screen); } @@ -2011,17 +2011,17 @@ public: vector *get_primary_list() { - return &ui->burrows.list_units; + return &plotinfo->burrows.list_units; } vector *get_secondary_list() { - return &ui->burrows.sel_units; + return &plotinfo->burrows.sel_units; } virtual int32_t * get_viewscreen_cursor() { - return &ui->burrows.unit_cursor_pos; + return &plotinfo->burrows.unit_cursor_pos; } @@ -2055,7 +2055,7 @@ class room_assign_search : public room_assign_search_base public: bool can_init(df::viewscreen_dwarfmodest *screen) { - if (ui->main.mode == df::ui_sidebar_mode::QueryBuilding && *ui_building_in_assign) + if (plotinfo->main.mode == df::ui_sidebar_mode::QueryBuilding && *ui_building_in_assign) { return room_assign_search_base::can_init(screen); } diff --git a/plugins/siege-engine.cpp b/plugins/siege-engine.cpp index 55ea4eeab..2fbb1e8c8 100644 --- a/plugins/siege-engine.cpp +++ b/plugins/siege-engine.cpp @@ -47,8 +47,8 @@ #include "df/report.h" #include "df/stockpile_links.h" #include "df/strain_type.h" -#include "df/ui.h" -#include "df/ui_build_selector.h" +#include "df/plotinfost.h" +#include "df/buildreq.h" #include "df/unit.h" #include "df/unit_misc_trait.h" #include "df/unit_relationship_type.h" @@ -72,7 +72,7 @@ DFHACK_PLUGIN("siege-engine"); REQUIRE_GLOBAL(gamemode); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); REQUIRE_GLOBAL(process_jobs); @@ -1477,7 +1477,7 @@ static bool isTired(df::unit *worker) static void releaseTiredWorker(EngineInfo *engine, df::job *job, df::unit *worker) { // If not in siege - auto &sieges = ui->invasions.list; + auto &sieges = plotinfo->invasions.list; for (size_t i = 0; i < sieges.size(); i++) if (sieges[i]->flags.bits.active) diff --git a/plugins/sort.cpp b/plugins/sort.cpp index 630ac9e53..62af2c416 100644 --- a/plugins/sort.cpp +++ b/plugins/sort.cpp @@ -11,7 +11,7 @@ #include "LuaTools.h" #include "DataDefs.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" #include "df/viewscreen_joblistst.h" #include "df/viewscreen_unitlistst.h" @@ -38,7 +38,7 @@ using namespace DFHack; using namespace df::enums; DFHACK_PLUGIN("sort"); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); REQUIRE_GLOBAL(ui_building_in_assign); REQUIRE_GLOBAL(ui_building_item_cursor); @@ -379,11 +379,11 @@ DEFINE_SORT_HANDLER(unit_sorters, dwarfmode, "/Burrows/AddUnits", screen) { PARSE_SPEC("units", parameters); - if (compute_order(*pout, L, top, &order, ui->burrows.list_units)) + if (compute_order(*pout, L, top, &order, plotinfo->burrows.list_units)) { - reorder_cursor(&ui->burrows.unit_cursor_pos, order); - reorder_vector(&ui->burrows.list_units, order); - reorder_vector(&ui->burrows.sel_units, order); + reorder_cursor(&plotinfo->burrows.unit_cursor_pos, order); + reorder_vector(&plotinfo->burrows.list_units, order); + reorder_vector(&plotinfo->burrows.sel_units, order); } } diff --git a/plugins/spectate/pause.cpp b/plugins/spectate/pause.cpp index 5c60e2194..0e4f1707d 100644 --- a/plugins/spectate/pause.cpp +++ b/plugins/spectate/pause.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include @@ -25,12 +25,12 @@ namespace pausing { bool locked_states[announcement_flag_arr_size]; // locked state (re-applied each frame) bool allow_player_pause = true; // toggles player pause ability - using df::global::ui; + using df::global::plotinfo; using namespace df::enums; struct player_pause_hook : df::viewscreen_dwarfmodest { typedef df::viewscreen_dwarfmodest interpose_base; DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set* input)) { - if ((ui->main.mode == ui_sidebar_mode::Default) && !allow_player_pause) { + if ((plotinfo->main.mode == ui_sidebar_mode::Default) && !allow_player_pause) { input->erase(interface_key::D_PAUSE); } INTERPOSE_NEXT(feed)(input); diff --git a/plugins/spectate/spectate.cpp b/plugins/spectate/spectate.cpp index 73574c136..7bf3e1ec2 100644 --- a/plugins/spectate/spectate.cpp +++ b/plugins/spectate/spectate.cpp @@ -37,7 +37,7 @@ namespace DFHack { DFHACK_PLUGIN("spectate"); DFHACK_PLUGIN_IS_ENABLED(enabled); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(pause_state); REQUIRE_GLOBAL(d_init); @@ -106,7 +106,7 @@ namespace SP { out.print(" SETTINGS:\n"); out.print(" %-20s\t%" PRIi32 "\n", "tick-threshold: ", config.tick_threshold); if (following_dwarf) - out.print(" %-21s\t%s[id: %d]\n","FOLLOWING:", our_dorf ? our_dorf->name.first_name.c_str() : "nullptr", df::global::ui->follow_unit); + out.print(" %-21s\t%s[id: %d]\n","FOLLOWING:", our_dorf ? our_dorf->name.first_name.c_str() : "nullptr", df::global::plotinfo->follow_unit); } void SetUnpauseState(bool state) { @@ -311,7 +311,7 @@ namespace SP { // if you're looking at a warning about a local address escaping, it means the unit* from units (which aren't local) size_t idx = follow_any(RNG); our_dorf = units[idx]; - df::global::ui->follow_unit = our_dorf->id; + df::global::plotinfo->follow_unit = our_dorf->id; timestamp = df::global::world->frame_counter; return true; } else { @@ -362,7 +362,7 @@ namespace SP { if (!World::ReadPauseState() && tick - last_tick >= 1) { last_tick = tick; // validate follow state - if (!following_dwarf || !our_dorf || df::global::ui->follow_unit < 0 || tick - timestamp >= config.tick_threshold) { + if (!following_dwarf || !our_dorf || df::global::plotinfo->follow_unit < 0 || tick - timestamp >= config.tick_threshold) { // we're not following anyone following_dwarf = false; if (!config.disengage) { diff --git a/plugins/steam-engine.cpp b/plugins/steam-engine.cpp index 6e3c317d3..ac7803b95 100644 --- a/plugins/steam-engine.cpp +++ b/plugins/steam-engine.cpp @@ -31,8 +31,8 @@ #include "df/power_info.h" #include "df/report.h" #include "df/tile_designation.h" -#include "df/ui.h" -#include "df/ui_build_selector.h" +#include "df/plotinfost.h" +#include "df/buildreq.h" #include "df/viewscreen_dwarfmodest.h" #include "df/workshop_type.h" #include "df/world.h" @@ -48,7 +48,7 @@ DFHACK_PLUGIN("steam-engine"); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); REQUIRE_GLOBAL(cursor); @@ -748,7 +748,7 @@ struct dwarfmode_hook : df::viewscreen_dwarfmodest steam_engine_workshop *get_steam_engine() { - if (ui->main.mode == ui_sidebar_mode::Build && + if (plotinfo->main.mode == ui_sidebar_mode::Build && ui_build_selector->stage == 1 && ui_build_selector->building_type == building_type::Workshop && ui_build_selector->building_subtype == workshop_type::Custom) diff --git a/plugins/stockflow.cpp b/plugins/stockflow.cpp index 65223f603..49d56816b 100644 --- a/plugins/stockflow.cpp +++ b/plugins/stockflow.cpp @@ -26,7 +26,7 @@ DFHACK_PLUGIN_IS_ENABLED(enabled); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); bool fast = false; @@ -56,15 +56,15 @@ public: if (found) { // Entice the bookkeeper to spend less time update records. - ui->nobles.bookkeeper_precision += ui->nobles.bookkeeper_precision >> 3; + plotinfo->nobles.bookkeeper_precision += plotinfo->nobles.bookkeeper_precision >> 3; if (!bookkeeping) { command_method("start_bookkeeping", out); bookkeeping = true; } } else { // Entice the bookkeeper to update records more often. - ui->nobles.bookkeeper_precision -= ui->nobles.bookkeeper_precision >> 5; - ui->nobles.bookkeeper_cooldown -= ui->nobles.bookkeeper_cooldown >> 2; + plotinfo->nobles.bookkeeper_precision -= plotinfo->nobles.bookkeeper_precision >> 5; + plotinfo->nobles.bookkeeper_cooldown -= plotinfo->nobles.bookkeeper_cooldown >> 2; if (bookkeeping) { command_method("finish_bookkeeping", out); bookkeeping = false; diff --git a/plugins/stockpiles/StockpileSerializer.h b/plugins/stockpiles/StockpileSerializer.h index ff0a38241..478b403f2 100644 --- a/plugins/stockpiles/StockpileSerializer.h +++ b/plugins/stockpiles/StockpileSerializer.h @@ -105,7 +105,7 @@ private: */ void write(); - // parse serialized data into ui indices + // parse serialized data into plotinfo indices void read (); /** diff --git a/plugins/stockpiles/stockpiles.cpp b/plugins/stockpiles/stockpiles.cpp index aa36e20bd..4b61ff175 100644 --- a/plugins/stockpiles/stockpiles.cpp +++ b/plugins/stockpiles/stockpiles.cpp @@ -21,7 +21,7 @@ #include "df/world_data.h" #include "DataDefs.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/building_stockpilest.h" #include "df/stockpile_settings.h" #include "df/global_objects.h" @@ -42,7 +42,7 @@ using namespace dfstockpiles; DFHACK_PLUGIN ( "stockpiles" ); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(selection_rect); using df::building_stockpilest; @@ -59,7 +59,7 @@ static bool loadstock_guard ( df::viewscreen *top ); DFhackCExport command_result plugin_init ( color_ostream &out, std::vector &commands ) { - if ( world && ui ) + if ( world && plotinfo ) { commands.push_back(PluginCommand( "copystock", @@ -106,7 +106,7 @@ static bool copystock_guard ( df::viewscreen *top ) if ( !Gui::dwarfmode_hotkey ( top ) ) return false; - switch ( ui->main.mode ) + switch ( plotinfo->main.mode ) { case Stockpiles: return true; @@ -123,10 +123,10 @@ static command_result copystock ( color_ostream &out, vector & paramete // HOTKEY COMMAND: CORE ALREADY SUSPENDED // For convenience: when used in the stockpiles mode, switch to 'q' - if ( ui->main.mode == ui_sidebar_mode::Stockpiles ) + if ( plotinfo->main.mode == ui_sidebar_mode::Stockpiles ) { world->selected_building = NULL; // just in case it contains some kind of garbage - ui->main.mode = ui_sidebar_mode::QueryBuilding; + plotinfo->main.mode = ui_sidebar_mode::QueryBuilding; selection_rect->start_x = -30000; out << "Switched back to query building." << endl; @@ -140,8 +140,8 @@ static command_result copystock ( color_ostream &out, vector & paramete return CR_WRONG_USAGE; } - ui->stockpile.custom_settings = sp->settings; - ui->main.mode = ui_sidebar_mode::Stockpiles; + plotinfo->stockpile.custom_settings = sp->settings; + plotinfo->main.mode = ui_sidebar_mode::Stockpiles; world->selected_stockpile_type = stockpile_category::Custom; out << "Stockpile options copied." << endl; @@ -156,7 +156,7 @@ static bool savestock_guard ( df::viewscreen *top ) if ( !Gui::dwarfmode_hotkey ( top ) ) return false; - switch ( ui->main.mode ) + switch ( plotinfo->main.mode ) { case Stockpiles: return true; @@ -175,7 +175,7 @@ static bool loadstock_guard ( df::viewscreen *top ) if ( !Gui::dwarfmode_hotkey ( top ) ) return false; - switch ( ui->main.mode ) + switch ( plotinfo->main.mode ) { case Stockpiles: return true; diff --git a/plugins/stocks.cpp b/plugins/stocks.cpp index 62c13dcd5..8cc27067c 100644 --- a/plugins/stocks.cpp +++ b/plugins/stocks.cpp @@ -27,7 +27,7 @@ #include "modules/Maps.h" #include "modules/Units.h" #include "df/building_cagest.h" -#include "df/ui_advmode.h" +#include "df/adventurest.h" DFHACK_PLUGIN("stocks"); #define PLUGIN_VERSION 0.13 diff --git a/plugins/strangemood.cpp b/plugins/strangemood.cpp index a5b8e74a4..f6dd1f747 100644 --- a/plugins/strangemood.cpp +++ b/plugins/strangemood.cpp @@ -23,7 +23,7 @@ #include "df/job.h" #include "df/job_item.h" #include "df/map_block.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_preference.h" #include "df/unit_relationship_type.h" @@ -39,7 +39,7 @@ using namespace df::enums; DFHACK_PLUGIN("strangemood"); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(d_init); REQUIRE_GLOBAL(created_item_count); REQUIRE_GLOBAL(created_item_type); @@ -394,7 +394,7 @@ command_result df_strangemood (color_ostream &out, vector & parameters) out.printerr("Strange moods disabled via debug flag!\n"); return CR_FAILURE; } - if (ui->mood_cooldown && !force) + if (plotinfo->mood_cooldown && !force) { out.printerr("Last strange mood happened too recently!\n"); return CR_FAILURE; @@ -406,7 +406,7 @@ command_result df_strangemood (color_ostream &out, vector & parameters) df::unit *cur = world->units.active[i]; if (Units::isCitizen(cur) && cur->flags1.bits.has_mood) { - ui->mood_cooldown = 1000; + plotinfo->mood_cooldown = 1000; out.printerr("A strange mood is already in progress!\n"); return CR_FAILURE; } @@ -466,12 +466,12 @@ command_result df_strangemood (color_ostream &out, vector & parameters) if (blk->designation[x][y].bits.subterranean && !blk->designation[x][y].bits.hidden) num_revealed_tiles++; } - if (num_revealed_tiles / 2304 < ui->tasks.num_artifacts) + if (num_revealed_tiles / 2304 < plotinfo->tasks.num_artifacts) { out.printerr("Fortress is not eligible for a strange mood at this time - not enough subterranean tiles revealed.\n"); return CR_FAILURE; } - if (num_items / 200 < ui->tasks.num_artifacts) + if (num_items / 200 < plotinfo->tasks.num_artifacts) { out.printerr("Fortress is not eligible for a strange mood at this time - not enough items created\n"); return CR_FAILURE; @@ -544,7 +544,7 @@ command_result df_strangemood (color_ostream &out, vector & parameters) return CR_FAILURE; } - ui->mood_cooldown = 1000; + plotinfo->mood_cooldown = 1000; // If no mood type was specified, pick one randomly if (type == mood_type::None) { @@ -1034,7 +1034,7 @@ command_result df_strangemood (color_ostream &out, vector & parameters) (job->job_type == job_type::StrangeMoodFell) )) { - int extra_items = std::min(rng.df_trandom((ui->tasks.num_artifacts * 20 + moodable_units.size()) / 20 + 1), 7); + int extra_items = std::min(rng.df_trandom((plotinfo->tasks.num_artifacts * 20 + moodable_units.size()) / 20 + 1), 7); df::item_type avoid_type = item_type::NONE; int avoid_glass = 0; switch (skill) diff --git a/plugins/tailor.cpp b/plugins/tailor.cpp index bd11988d0..0a8a82f5b 100644 --- a/plugins/tailor.cpp +++ b/plugins/tailor.cpp @@ -20,7 +20,7 @@ #include "df/job.h" #include "df/job_type.h" #include "df/manager_order.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" #include "modules/Maps.h" @@ -32,14 +32,14 @@ using namespace DFHack; using namespace std; using df::global::world; -using df::global::ui; +using df::global::plotinfo; DFHACK_PLUGIN("tailor"); #define AUTOENABLE false DFHACK_PLUGIN_IS_ENABLED(enabled); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); class Tailor { // ARMOR, SHOES, HELM, GLOVES, PANTS @@ -261,7 +261,7 @@ private: void create_orders() { - auto entity = world->entities.all[ui->civ_id]; + auto entity = world->entities.all[plotinfo->civ_id]; for (auto& a : needed) { @@ -325,7 +325,7 @@ private: void place_orders() { - auto entity = world->entities.all[ui->civ_id]; + auto entity = world->entities.all[plotinfo->civ_id]; for (auto& o : orders) { diff --git a/plugins/trackstop.cpp b/plugins/trackstop.cpp index d21df0e36..43807ea8c 100644 --- a/plugins/trackstop.cpp +++ b/plugins/trackstop.cpp @@ -26,7 +26,7 @@ DFHACK_PLUGIN("trackstop"); DFHACK_PLUGIN_IS_ENABLED(enabled); REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(world); /* @@ -44,7 +44,7 @@ struct trackstop_hook : public df::viewscreen_dwarfmodest { }; building_trapst *get_selected_trackstop() { - if (ui->main.mode != ui_sidebar_mode::QueryBuilding) { + if (plotinfo->main.mode != ui_sidebar_mode::QueryBuilding) { // Not in a building's 'q' menu. return nullptr; } @@ -200,7 +200,7 @@ struct roller_hook : public df::viewscreen_dwarfmodest { }; building_rollersst *get_selected_roller() { - if (ui->main.mode != ui_sidebar_mode::QueryBuilding) { + if (plotinfo->main.mode != ui_sidebar_mode::QueryBuilding) { // Not in a building's 'q' menu. return nullptr; } diff --git a/plugins/tweak/tweak.cpp b/plugins/tweak/tweak.cpp index 6d2a46fa8..323f5f932 100644 --- a/plugins/tweak/tweak.cpp +++ b/plugins/tweak/tweak.cpp @@ -21,7 +21,7 @@ #include "DataDefs.h" #include #include "../uicommon.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" #include "df/unit.h" #include "df/unit_soul.h" @@ -36,8 +36,8 @@ #include "df/viewscreen_dwarfmodest.h" #include "df/viewscreen_kitchenprefst.h" #include "df/viewscreen_layer_unit_actionst.h" -#include "df/ui_build_selector.h" -#include "df/ui_sidebar_menus.h" +#include "df/buildreq.h" +#include "df/gamest.h" #include "df/building_trapst.h" #include "df/building_workshopst.h" #include "df/item_actual.h" @@ -78,7 +78,7 @@ #include "tweaks/block-labors.h" #include "tweaks/burrow-name-cancel.h" #include "tweaks/cage-butcher.h" -#include "tweaks/civ-agreement-ui.h" +#include "tweaks/civ-agreement-plotinfo.h" #include "tweaks/condition-material.h" #include "tweaks/craft-age-wear.h" #include "tweaks/do-job-now.h" @@ -117,14 +117,14 @@ DFHACK_PLUGIN("tweak"); DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(enabler); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_build_selector); REQUIRE_GLOBAL(ui_building_in_assign); REQUIRE_GLOBAL(ui_building_in_resize); REQUIRE_GLOBAL(ui_building_item_cursor); REQUIRE_GLOBAL(ui_look_cursor); REQUIRE_GLOBAL(ui_menu_width); -REQUIRE_GLOBAL(ui_sidebar_menus); +REQUIRE_GLOBAL(game); REQUIRE_GLOBAL(ui_unit_view_mode); REQUIRE_GLOBAL(ui_workshop_in_add); REQUIRE_GLOBAL(world); @@ -449,7 +449,7 @@ static command_result tweak(color_ostream &out, vector ¶meters) // if it happens that the player has 'foreign' units of the same race // (vanilla df: dwarves not from mountainhome) on his map, just grab them if(!Units::isOwnCiv(unit)) - unit->civ_id = ui->civ_id; + unit->civ_id = plotinfo->civ_id; return fix_clothing_ownership(out, unit); } @@ -468,7 +468,7 @@ static command_result tweak(color_ostream &out, vector ¶meters) if(Units::isForest(unit)) unit->flags1.bits.forest = 0; if(!Units::isOwnCiv(unit)) - unit->civ_id = ui->civ_id; + unit->civ_id = plotinfo->civ_id; if(unit->profession == df::profession::MERCHANT) unit->profession = df::profession::TRADER; if(unit->profession2 == df::profession::MERCHANT) diff --git a/plugins/tweak/tweaks/block-labors.h b/plugins/tweak/tweaks/block-labors.h index bc407ed19..df2474400 100644 --- a/plugins/tweak/tweaks/block-labors.h +++ b/plugins/tweak/tweaks/block-labors.h @@ -6,7 +6,7 @@ #include "df/viewscreen_dwarfmodest.h" using namespace DFHack; -using df::global::ui; +using df::global::plotinfo; using df::global::ui_look_cursor; using df::global::ui_unit_view_mode; @@ -15,7 +15,7 @@ struct block_labors_hook : df::viewscreen_dwarfmodest { inline bool valid_mode() { - return ui->main.mode == df::ui_sidebar_mode::ViewUnits && + return plotinfo->main.mode == df::ui_sidebar_mode::ViewUnits && ui_unit_view_mode->value == df::ui_unit_view_mode::T_value::PrefLabor && Gui::getAnyUnit(this); } diff --git a/plugins/tweak/tweaks/burrow-name-cancel.h b/plugins/tweak/tweaks/burrow-name-cancel.h index 2ee84508e..f49e7ae1b 100644 --- a/plugins/tweak/tweaks/burrow-name-cancel.h +++ b/plugins/tweak/tweaks/burrow-name-cancel.h @@ -1,6 +1,6 @@ #include "df/burrow.h" -using df::global::ui; +using df::global::plotinfo; struct burrow_name_cancel_hook : df::viewscreen_dwarfmodest { typedef df::viewscreen_dwarfmodest interpose_base; @@ -9,15 +9,15 @@ struct burrow_name_cancel_hook : df::viewscreen_dwarfmodest { DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set *input)) { - if (ui->main.mode == df::ui_sidebar_mode::Burrows) + if (plotinfo->main.mode == df::ui_sidebar_mode::Burrows) { - bool was_naming = ui->burrows.in_edit_name_mode; + bool was_naming = plotinfo->burrows.in_edit_name_mode; INTERPOSE_NEXT(feed)(input); - df::burrow *burrow = vector_get(ui->burrows.list, ui->burrows.sel_index); + df::burrow *burrow = vector_get(plotinfo->burrows.list, plotinfo->burrows.sel_index); if (!burrow) return; - if (ui->burrows.in_edit_name_mode) + if (plotinfo->burrows.in_edit_name_mode) { if (!was_naming) { @@ -27,7 +27,7 @@ struct burrow_name_cancel_hook : df::viewscreen_dwarfmodest { if (input->count(df::interface_key::LEAVESCREEN)) { // Cancel and restore the old name - ui->burrows.in_edit_name_mode = false; + plotinfo->burrows.in_edit_name_mode = false; burrow->name = old_name; } } diff --git a/plugins/tweak/tweaks/cage-butcher.h b/plugins/tweak/tweaks/cage-butcher.h index 61a989d50..7290746a9 100644 --- a/plugins/tweak/tweaks/cage-butcher.h +++ b/plugins/tweak/tweaks/cage-butcher.h @@ -6,7 +6,7 @@ #include "df/unit.h" using namespace DFHack; -using df::global::ui; +using df::global::plotinfo; using df::global::ui_building_in_assign; using df::global::ui_building_in_resize; using df::global::ui_building_item_cursor; @@ -19,7 +19,7 @@ struct cage_butcher_hook : df::viewscreen_dwarfmodest { if (*ui_building_in_assign || *ui_building_in_resize) return nullptr; - if (ui->main.mode != df::ui_sidebar_mode::QueryBuilding) + if (plotinfo->main.mode != df::ui_sidebar_mode::QueryBuilding) return nullptr; auto cage = virtual_cast(Gui::getAnyBuilding(this)); diff --git a/plugins/tweak/tweaks/eggs-fertile.h b/plugins/tweak/tweaks/eggs-fertile.h index f4fe29569..b264b227f 100644 --- a/plugins/tweak/tweaks/eggs-fertile.h +++ b/plugins/tweak/tweaks/eggs-fertile.h @@ -6,15 +6,15 @@ using namespace DFHack; using namespace df::enums; using df::global::world; -using df::global::ui; +using df::global::plotinfo; struct egg_fertile_hook : df::viewscreen_dwarfmodest { typedef df::viewscreen_dwarfmodest interpose_base; df::building_nest_boxst* getNestBox() { - if (ui->main.mode != ui_sidebar_mode::QueryBuilding && - ui->main.mode != ui_sidebar_mode::BuildingItems) + if (plotinfo->main.mode != ui_sidebar_mode::QueryBuilding && + plotinfo->main.mode != ui_sidebar_mode::BuildingItems) return NULL; return virtual_cast(world->selected_building); } @@ -38,7 +38,7 @@ struct egg_fertile_hook : df::viewscreen_dwarfmodest { has_eggs = true; if (egg->egg_flags.bits.fertile) fertile = true; - if (ui->main.mode == ui_sidebar_mode::BuildingItems) + if (plotinfo->main.mode == ui_sidebar_mode::BuildingItems) { Screen::paintString( Screen::Pen(' ', fertile ? COLOR_LIGHTGREEN : COLOR_LIGHTRED), @@ -50,7 +50,7 @@ struct egg_fertile_hook : df::viewscreen_dwarfmodest { } ++idx; } - if (has_eggs && ui->main.mode == ui_sidebar_mode::QueryBuilding) + if (has_eggs && plotinfo->main.mode == ui_sidebar_mode::QueryBuilding) { Screen::paintString( Screen::Pen(' ', fertile ? COLOR_LIGHTGREEN : COLOR_LIGHTRED), diff --git a/plugins/tweak/tweaks/farm-plot-select.h b/plugins/tweak/tweaks/farm-plot-select.h index 696c7ca2e..7b2e440e1 100644 --- a/plugins/tweak/tweaks/farm-plot-select.h +++ b/plugins/tweak/tweaks/farm-plot-select.h @@ -4,7 +4,7 @@ using namespace df::enums; -using df::global::ui; +using df::global::plotinfo; using df::global::ui_building_item_cursor; using df::global::world; @@ -13,7 +13,7 @@ struct farm_select_hook : df::viewscreen_dwarfmodest { df::building_farmplotst* getFarmPlot() { - if (ui->main.mode != ui_sidebar_mode::QueryBuilding) + if (plotinfo->main.mode != ui_sidebar_mode::QueryBuilding) return NULL; VIRTUAL_CAST_VAR(farm_plot, df::building_farmplotst, world->selected_building); return farm_plot; @@ -44,12 +44,12 @@ struct farm_select_hook : df::viewscreen_dwarfmodest { return false; } - inline int32_t getSelectedCropId() { return ui->selected_farm_crops[*ui_building_item_cursor]; } + inline int32_t getSelectedCropId() { return plotinfo->selected_farm_crops[*ui_building_item_cursor]; } DEFINE_VMETHOD_INTERPOSE(void, feed, (set *input)) { df::building_farmplotst* farm_plot = getFarmPlot(); - if (farm_plot && ui->selected_farm_crops.size() > 0) + if (farm_plot && plotinfo->selected_farm_crops.size() > 0) { if (input->count(interface_key::SELECT_ALL)) { @@ -77,7 +77,7 @@ struct farm_select_hook : df::viewscreen_dwarfmodest { { INTERPOSE_NEXT(render)(); auto farm_plot = getFarmPlot(); - if (!farm_plot || !ui->selected_farm_crops.size()) + if (!farm_plot || !plotinfo->selected_farm_crops.size()) return; if (farm_plot->getBuildStage() != farm_plot->getMaxBuildStage()) return; diff --git a/plugins/tweak/tweaks/hide-priority.h b/plugins/tweak/tweaks/hide-priority.h index ef84a5831..6f096ee82 100644 --- a/plugins/tweak/tweaks/hide-priority.h +++ b/plugins/tweak/tweaks/hide-priority.h @@ -3,7 +3,7 @@ using namespace DFHack; using df::global::gps; -using df::global::ui_sidebar_menus; +using df::global::game; struct hide_priority_hook : df::viewscreen_dwarfmodest { typedef df::viewscreen_dwarfmodest interpose_base; @@ -14,7 +14,7 @@ struct hide_priority_hook : df::viewscreen_dwarfmodest { inline bool valid_mode () { - switch (ui->main.mode) + switch (plotinfo->main.mode) { case df::ui_sidebar_mode::DesignateMine: case df::ui_sidebar_mode::DesignateRemoveRamps: @@ -41,7 +41,7 @@ struct hide_priority_hook : df::viewscreen_dwarfmodest { DEFINE_VMETHOD_INTERPOSE(void, render, ()) { if (!was_valid_mode && valid_mode() && toggled_manually) { - ui_sidebar_menus->designation.priority_set = last_show_priorities_setting; + game->designation.priority_set = last_show_priorities_setting; } INTERPOSE_NEXT(render)(); if (valid_mode()) @@ -51,7 +51,7 @@ struct hide_priority_hook : df::viewscreen_dwarfmodest { { int x = dims.menu_x1 + 1, y = gps->dimy - (gps->dimy > 26 ? 8 : 7); OutputToggleString(x, y, "Show priorities", df::interface_key::CUSTOM_ALT_P, - ui_sidebar_menus->designation.priority_set, true, 0, + game->designation.priority_set, true, 0, COLOR_WHITE, COLOR_LIGHTRED); } } @@ -61,9 +61,9 @@ struct hide_priority_hook : df::viewscreen_dwarfmodest { { if (valid_mode() && input->count(df::interface_key::CUSTOM_ALT_P)) { - ui_sidebar_menus->designation.priority_set = !ui_sidebar_menus->designation.priority_set; + game->designation.priority_set = !game->designation.priority_set; toggled_manually = true; - last_show_priorities_setting = ui_sidebar_menus->designation.priority_set; + last_show_priorities_setting = game->designation.priority_set; } else INTERPOSE_NEXT(feed)(input); diff --git a/plugins/tweak/tweaks/hotkey-clear.h b/plugins/tweak/tweaks/hotkey-clear.h index bc85c112e..8d683a1bd 100644 --- a/plugins/tweak/tweaks/hotkey-clear.h +++ b/plugins/tweak/tweaks/hotkey-clear.h @@ -1,6 +1,6 @@ #include "df/viewscreen_dwarfmodest.h" -using df::global::ui; +using df::global::plotinfo; struct hotkey_clear_hook : df::viewscreen_dwarfmodest { typedef df::viewscreen_dwarfmodest interpose_base; @@ -8,7 +8,7 @@ struct hotkey_clear_hook : df::viewscreen_dwarfmodest { DEFINE_VMETHOD_INTERPOSE(void, render, ()) { INTERPOSE_NEXT(render)(); - if (ui->main.mode == df::ui_sidebar_mode::Hotkeys) + if (plotinfo->main.mode == df::ui_sidebar_mode::Hotkeys) { auto dims = Gui::getDwarfmodeViewDims(); int x = dims.menu_x1 + 1, y = 19; @@ -18,11 +18,11 @@ struct hotkey_clear_hook : df::viewscreen_dwarfmodest { DEFINE_VMETHOD_INTERPOSE(void, feed, (set *input)) { - if (ui->main.mode == df::ui_sidebar_mode::Hotkeys && + if (plotinfo->main.mode == df::ui_sidebar_mode::Hotkeys && input->count(df::interface_key::CUSTOM_C) && - !ui->main.in_rename_hotkey) + !plotinfo->main.in_rename_hotkey) { - auto &hotkey = ui->main.hotkeys[ui->main.selected_hotkey]; + auto &hotkey = plotinfo->main.hotkeys[plotinfo->main.selected_hotkey]; hotkey.name = ""; hotkey.cmd = df::ui_hotkey::T_cmd::None; hotkey.x = 0; diff --git a/plugins/tweak/tweaks/max-wheelbarrow.h b/plugins/tweak/tweaks/max-wheelbarrow.h index a7af186ef..38d704b24 100644 --- a/plugins/tweak/tweaks/max-wheelbarrow.h +++ b/plugins/tweak/tweaks/max-wheelbarrow.h @@ -22,7 +22,7 @@ struct max_wheelbarrow_hook : df::viewscreen_dwarfmodest { df::building_stockpilest* getStockpile() { - if (ui->main.mode != ui_sidebar_mode::QueryBuilding) + if (plotinfo->main.mode != ui_sidebar_mode::QueryBuilding) return NULL; return virtual_cast(world->selected_building); } diff --git a/plugins/tweak/tweaks/shift-8-scroll.h b/plugins/tweak/tweaks/shift-8-scroll.h index 86f7e9fc7..2c1eea23d 100644 --- a/plugins/tweak/tweaks/shift-8-scroll.h +++ b/plugins/tweak/tweaks/shift-8-scroll.h @@ -1,13 +1,13 @@ #include "df/viewscreen_dwarfmodest.h" using namespace df::enums; -using df::global::ui; +using df::global::plotinfo; struct shift_8_scroll_hook : df::viewscreen_dwarfmodest { typedef df::viewscreen_dwarfmodest interpose_base; DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set* input)) { - if (ui->main.mode != ui_sidebar_mode::Default && + if (plotinfo->main.mode != ui_sidebar_mode::Default && input->count(interface_key::CURSOR_UP_FAST) && input->count(interface_key::SECONDSCROLL_PAGEDOWN) ) diff --git a/plugins/tweak/tweaks/stable-cursor.h b/plugins/tweak/tweaks/stable-cursor.h index b08346410..3b628ef04 100644 --- a/plugins/tweak/tweaks/stable-cursor.h +++ b/plugins/tweak/tweaks/stable-cursor.h @@ -6,7 +6,7 @@ using namespace std; using namespace DFHack; using namespace df::enums; -using df::global::ui; +using df::global::plotinfo; using df::global::ui_build_selector; using df::global::ui_menu_width; @@ -18,7 +18,7 @@ struct stable_cursor_hook : df::viewscreen_dwarfmodest bool check_default() { - switch (ui->main.mode) { + switch (plotinfo->main.mode) { case ui_sidebar_mode::Default: return true; diff --git a/plugins/uicommon.h b/plugins/uicommon.h index e7a586585..03914b461 100644 --- a/plugins/uicommon.h +++ b/plugins/uicommon.h @@ -24,7 +24,7 @@ #include "df/dfhack_material_category.h" #include "df/enabler.h" #include "df/item_quality.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/world.h" using namespace std; @@ -217,7 +217,7 @@ static inline char get_string_input(const std::set *input) static inline df::building_stockpilest *get_selected_stockpile() { if (!Gui::dwarfmode_hotkey(Core::getTopViewscreen()) || - df::global::ui->main.mode != ui_sidebar_mode::QueryBuilding) + df::global::plotinfo->main.mode != ui_sidebar_mode::QueryBuilding) { return nullptr; } @@ -227,10 +227,10 @@ static inline df::building_stockpilest *get_selected_stockpile() static inline bool can_trade() { - if (df::global::ui->caravans.size() == 0) + if (df::global::plotinfo->caravans.size() == 0) return false; - for (auto it = df::global::ui->caravans.begin(); it != df::global::ui->caravans.end(); it++) + for (auto it = df::global::plotinfo->caravans.begin(); it != df::global::plotinfo->caravans.end(); it++) { typedef df::caravan_state::T_trade_state state; auto caravan = *it; diff --git a/plugins/workflow.cpp b/plugins/workflow.cpp index 3f132616b..a8f11dec0 100644 --- a/plugins/workflow.cpp +++ b/plugins/workflow.cpp @@ -15,7 +15,7 @@ #include "DataDefs.h" #include "df/world.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/building_workshopst.h" #include "df/building_furnacest.h" #include "df/job.h" @@ -51,7 +51,7 @@ using namespace df::enums; DFHACK_PLUGIN("workflow"); REQUIRE_GLOBAL(world); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_workshop_job_cursor); REQUIRE_GLOBAL(job_next_id); @@ -64,7 +64,7 @@ static void cleanup_state(color_ostream &out); DFhackCExport command_result plugin_init (color_ostream &out, std::vector &commands) { - if (!world || !ui) + if (!world || !plotinfo) return CR_FAILURE; if (ui_workshop_job_cursor && job_next_id) { @@ -1684,7 +1684,7 @@ static command_result workflow_cmd(color_ostream &out, vector & paramet //df::job *job = NULL; if (Gui::dwarfmode_hotkey(Core::getTopViewscreen()) && - ui->main.mode == ui_sidebar_mode::QueryBuilding) + plotinfo->main.mode == ui_sidebar_mode::QueryBuilding) { workshop = world->selected_building; //job = Gui::getSelectedWorkshopJob(out, true); diff --git a/plugins/zone.cpp b/plugins/zone.cpp index a3a0f2431..878014bb0 100644 --- a/plugins/zone.cpp +++ b/plugins/zone.cpp @@ -24,7 +24,7 @@ #include "df/building_chainst.h" #include "df/building_civzonest.h" #include "df/general_ref_building_civzone_assignedst.h" -#include "df/ui.h" +#include "df/plotinfost.h" #include "df/unit.h" #include "df/unit_relationship_type.h" #include "df/viewscreen_dwarfmodest.h" @@ -56,7 +56,7 @@ DFHACK_PLUGIN_IS_ENABLED(is_enabled); REQUIRE_GLOBAL(cursor); REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(ui); +REQUIRE_GLOBAL(plotinfo); REQUIRE_GLOBAL(ui_building_item_cursor); REQUIRE_GLOBAL(ui_building_assign_type); REQUIRE_GLOBAL(ui_building_assign_is_marked); @@ -1565,7 +1565,7 @@ static command_result df_zone(color_ostream &out, vector & parameters) if(!race_filter_set && (building_assign || cagezone_assign || unit_slaughter)) { - string own_race_name = Units::getRaceNameById(ui->race_id); + string own_race_name = Units::getRaceNameById(plotinfo->race_id); out.color(COLOR_BROWN); out << "Default filter for " << parameters[0] << ": 'not (race " << own_race_name << " or own civilization)'; use 'race " @@ -2128,14 +2128,14 @@ struct zone_hook : public df::viewscreen_dwarfmodest DEFINE_VMETHOD_INTERPOSE(void, render, ()) { - if ( ( (ui->main.mode == ui_sidebar_mode::ZonesPenInfo || ui->main.mode == ui_sidebar_mode::ZonesPitInfo) && + if ( ( (plotinfo->main.mode == ui_sidebar_mode::ZonesPenInfo || plotinfo->main.mode == ui_sidebar_mode::ZonesPitInfo) && ui_building_assign_type && ui_building_assign_units && ui_building_assign_is_marked && ui_building_assign_items && ui_building_assign_type->size() == ui_building_assign_units->size() && ui_building_item_cursor) // allow mode QueryBuilding, but only for cages (bedrooms will crash DF with this code, chains don't work either etc) || - ( ui->main.mode == ui_sidebar_mode::QueryBuilding && + ( plotinfo->main.mode == ui_sidebar_mode::QueryBuilding && ui_building_in_assign && *ui_building_in_assign && ui_building_assign_type && ui_building_assign_units && ui_building_assign_type->size() == ui_building_assign_units->size() && @@ -2146,7 +2146,7 @@ struct zone_hook : public df::viewscreen_dwarfmodest ) { if (vector_get(*ui_building_assign_units, *ui_building_item_cursor)) - filter.initialize(ui->main.mode); + filter.initialize(plotinfo->main.mode); } else { From c4a2bdd08efc2905980dbe6d0c3926ae2335453c Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 5 Jan 2023 17:35:33 -0800 Subject: [PATCH 14/20] update lua too --- library/lua/gui/dwarfmode.lua | 6 +++--- library/lua/makeown.lua | 4 ++-- plugins/lua/buildingplan.lua | 2 +- plugins/lua/confirm.lua | 2 +- plugins/lua/eventful.lua | 6 +++--- plugins/lua/siege-engine.lua | 2 +- plugins/lua/stockflow.lua | 4 ++-- test/library/gui/dwarfmode.lua | 14 +++++++------- test/library/utils.lua | 4 ++-- test/quickfort/ecosystem.lua | 2 +- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/library/lua/gui/dwarfmode.lua b/library/lua/gui/dwarfmode.lua index 7ac29e04e..bb381be24 100644 --- a/library/lua/gui/dwarfmode.lua +++ b/library/lua/gui/dwarfmode.lua @@ -49,7 +49,7 @@ function enterSidebarMode(sidebar_mode, max_esc) while remaining_esc > 0 do local screen = dfhack.gui.getCurViewscreen(true) focus_string = dfhack.gui.getFocusString(screen) - if df.global.ui.main.mode == df.ui_sidebar_mode.Default and + if df.global.plotinfo.main.mode == df.ui_sidebar_mode.Default and focus_string == 'dwarfmode/Default' then if #navkey > 0 then gui.simulateInput(screen, navkey) end if navkey == 'D_DESIGNATE' then @@ -275,7 +275,7 @@ end HOTKEY_KEYS = {} -for i,v in ipairs(df.global.ui.main.hotkeys) do +for i,v in ipairs(df.global.plotinfo.main.hotkeys) do HOTKEY_KEYS['D_HOTKEY'..(i+1)] = v end @@ -433,7 +433,7 @@ function MenuOverlay:init() end if self.sidebar_mode then - self.saved_sidebar_mode = df.global.ui.main.mode + self.saved_sidebar_mode = df.global.plotinfo.main.mode -- what mode should we restore when this window is dismissed? ideally, we'd -- restore the mode that the user has set, but we should fall back to -- restoring the default mode if either of the following conditions are diff --git a/library/lua/makeown.lua b/library/lua/makeown.lua index 2b16db1df..3d646b5fc 100644 --- a/library/lua/makeown.lua +++ b/library/lua/makeown.lua @@ -288,11 +288,11 @@ end function make_own(unit) --tweak makeown unit.flags2.resident = false; unit.flags1.merchant = false; unit.flags1.forest = false; - unit.civ_id = df.global.ui.civ_id + unit.civ_id = df.global.plotinfo.civ_id if unit.profession == df.profession.MERCHANT then unit.profession = df.profession.TRADER end if unit.profession2 == df.profession.MERCHANT then unit.profession2 = df.profession.TRADER end fix_clothing_ownership(unit) - if unit.race == df.global.ui.race_id then + if unit.race == df.global.plotinfo.race_id then make_citizen(unit) end end diff --git a/plugins/lua/buildingplan.lua b/plugins/lua/buildingplan.lua index 43122a7da..a01a1d0b1 100644 --- a/plugins/lua/buildingplan.lua +++ b/plugins/lua/buildingplan.lua @@ -87,7 +87,7 @@ end -- returns a vector of constructed buildings (usually of size 1, but potentially -- more for constructions) function construct_buildings_from_ui_state() - local uibs = df.global.ui_build_selector + local uibs = df.global.buildreq local world = df.global.world local direction = world.selected_direction local _, width, height = dfhack.buildings.getCorrectSize( diff --git a/plugins/lua/confirm.lua b/plugins/lua/confirm.lua index e36a4fb86..736f13fe1 100644 --- a/plugins/lua/confirm.lua +++ b/plugins/lua/confirm.lua @@ -1,6 +1,6 @@ local _ENV = mkmodule('plugins.confirm') -local ui = df.global.ui +local ui = df.global.plotinfo local confs = {} -- Wraps df.interface_key[foo] functionality but fails with invalid keys diff --git a/plugins/lua/eventful.lua b/plugins/lua/eventful.lua index 1e3170c45..4cbcbeef2 100644 --- a/plugins/lua/eventful.lua +++ b/plugins/lua/eventful.lua @@ -54,10 +54,10 @@ local function onPostSidebar(workshop) if shop_id then if _registeredStuff.shopNonNative and _registeredStuff.shopNonNative[shop_id] then if _registeredStuff.shopNonNative[shop_id].all then - --[[for _,button in ipairs(df.global.ui_sidebar_menus.workshop_job.choices_all) do + --[[for _,button in ipairs(df.global.game.workshop_job.choices_all) do button.is_hidden=true end]] - df.global.ui_sidebar_menus.workshop_job.choices_visible:resize(0) + df.global.game.workshop_job.choices_visible:resize(0) else --todo by name end @@ -72,7 +72,7 @@ local function onPostSidebar(workshop) new_button.job_type=df.job_type.CustomReaction --could be used for other stuff too i guess... new_button.reaction_name=reaction_name new_button.is_custom=true - local wjob=df.global.ui_sidebar_menus.workshop_job + local wjob=df.global.game.workshop_job wjob.choices_all:insert("#",new_button) wjob.choices_visible:insert("#",new_button) end diff --git a/plugins/lua/siege-engine.lua b/plugins/lua/siege-engine.lua index 5d8cc9050..25f405615 100644 --- a/plugins/lua/siege-engine.lua +++ b/plugins/lua/siege-engine.lua @@ -146,7 +146,7 @@ function getBaseUnitWeight(unit) return -30 elseif flags1.diplomat or flags1.merchant or flags1.forest then return -5 - elseif flags1.tame and unit.civ_id == df.global.ui.civ_id then + elseif flags1.tame and unit.civ_id == df.global.plotinfo.civ_id then return -1 end end diff --git a/plugins/lua/stockflow.lua b/plugins/lua/stockflow.lua index 91a3284ff..d6c9fc070 100644 --- a/plugins/lua/stockflow.lua +++ b/plugins/lua/stockflow.lua @@ -234,7 +234,7 @@ function material_reactions(reactions, itemtypes, mat_info) end function clothing_reactions(reactions, mat_info, filter) - local resources = df.historical_entity.find(df.global.ui.civ_id).resources + local resources = df.historical_entity.find(df.global.plotinfo.civ_id).resources local itemdefs = df.global.world.raws.itemdefs local job_types = df.job_type resource_reactions(reactions, job_types.MakeArmor, mat_info, resources.armor_type, itemdefs.armor, {permissible = filter}) @@ -408,7 +408,7 @@ function collect_reactions() -- Reactions defined in the raws. -- Not all reactions are allowed to the civilization. -- That includes "Make sharp rock" by default. - local entity = df.historical_entity.find(df.global.ui.civ_id) + local entity = df.historical_entity.find(df.global.plotinfo.civ_id) if not entity then -- No global civilization; arena mode? -- Anyway, skip remaining reactions, since many depend on the civ. diff --git a/test/library/gui/dwarfmode.lua b/test/library/gui/dwarfmode.lua index 1f3ab6a87..960397e02 100644 --- a/test/library/gui/dwarfmode.lua +++ b/test/library/gui/dwarfmode.lua @@ -36,39 +36,39 @@ function test.enterSidebarMode() end) -- verify expected starting state - expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) + expect.eq(df.ui_sidebar_mode.Default, df.global.plotinfo.main.mode) expect.eq('dwarfmode/Default', dfhack.gui.getCurFocus(true)) -- get into the orders screen gui.simulateInput(dfhack.gui.getCurViewscreen(true), 'D_JOBLIST') gui.simulateInput(dfhack.gui.getCurViewscreen(true), 'UNITJOB_MANAGER') - expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) + expect.eq(df.ui_sidebar_mode.Default, df.global.plotinfo.main.mode) expect.eq('jobmanagement/Main', dfhack.gui.getCurFocus(true)) -- get back into default from some deep screen guidm.enterSidebarMode(df.ui_sidebar_mode.Default) - expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) + expect.eq(df.ui_sidebar_mode.Default, df.global.plotinfo.main.mode) expect.eq('dwarfmode/Default', dfhack.gui.getCurFocus(true)) -- move from default to some other mode guidm.enterSidebarMode(df.ui_sidebar_mode.QueryBuilding) - expect.eq(df.ui_sidebar_mode.QueryBuilding, df.global.ui.main.mode) + expect.eq(df.ui_sidebar_mode.QueryBuilding, df.global.plotinfo.main.mode) expect.str_find('^dwarfmode/QueryBuilding', dfhack.gui.getCurFocus(true)) -- move between non-default modes guidm.enterSidebarMode(df.ui_sidebar_mode.LookAround) - expect.eq(df.ui_sidebar_mode.LookAround, df.global.ui.main.mode) + expect.eq(df.ui_sidebar_mode.LookAround, df.global.plotinfo.main.mode) expect.str_find('^dwarfmode/LookAround', dfhack.gui.getCurFocus(true)) -- get back into default from a supported mode guidm.enterSidebarMode(df.ui_sidebar_mode.Default) - expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) + expect.eq(df.ui_sidebar_mode.Default, df.global.plotinfo.main.mode) expect.eq('dwarfmode/Default', dfhack.gui.getCurFocus(true)) -- verify that all supported modes lead where we say they'll go for k,v in pairs(guidm.SIDEBAR_MODE_KEYS) do guidm.enterSidebarMode(k) - expect.eq(k, df.global.ui.main.mode, df.ui_sidebar_mode[k]) + expect.eq(k, df.global.plotinfo.main.mode, df.ui_sidebar_mode[k]) end -- end test back in default so the test harness doesn't have to autocorrect guidm.enterSidebarMode(df.ui_sidebar_mode.Default) diff --git a/test/library/utils.lua b/test/library/utils.lua index 509fab8bc..cf2024618 100644 --- a/test/library/utils.lua +++ b/test/library/utils.lua @@ -94,7 +94,7 @@ function test.df_expr_to_ref() dfhack.with_temp_object(df.new('ptr-vector'), function(vec) fake_unit = vec vec:insert('#', df.global.world) - vec:insert('#', df.global.ui) + vec:insert('#', df.global.plotinfo) expect.eq(utils.df_expr_to_ref('unit'), vec) @@ -102,7 +102,7 @@ function test.df_expr_to_ref() expect.eq(df.reinterpret_cast(df.world, utils.df_expr_to_ref('unit[0]').value), df.global.world) expect.eq(utils.df_expr_to_ref('unit[1]'), utils.df_expr_to_ref('unit.1')) - expect.eq(df.reinterpret_cast(df.ui, utils.df_expr_to_ref('unit[1]').value), df.global.ui) + expect.eq(df.reinterpret_cast(df.ui, utils.df_expr_to_ref('unit[1]').value), df.global.plotinfo) expect.error_match('index out of bounds', function() utils.df_expr_to_ref('unit.2') end) expect.error_match('index out of bounds', function() utils.df_expr_to_ref('unit[2]') end) diff --git a/test/quickfort/ecosystem.lua b/test/quickfort/ecosystem.lua index 27dddc5d5..3a4c014e4 100644 --- a/test/quickfort/ecosystem.lua +++ b/test/quickfort/ecosystem.lua @@ -397,7 +397,7 @@ function extra_fns.gui_quantum(pos) local vehicles = assign_minecarts.get_free_vehicles() local confirm_state = confirm.isEnabled() local confirm_conf = confirm.get_conf_data() - local routes = df.global.ui.hauling.routes + local routes = df.global.plotinfo.hauling.routes local num_routes = #routes local next_order_id = df.global.world.manager_order_next_id From 845391f4e65d5231397c8451a3eed4ff95634624 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 5 Jan 2023 17:46:30 -0800 Subject: [PATCH 15/20] fix overzealous "ui" -> "plotinfo" replacement some comments were just talking about the UI.. --- library/include/RemoteClient.h | 2 +- library/modules/Buildings.cpp | 2 +- library/modules/Screen.cpp | 2 +- plugins/stockpiles/StockpileSerializer.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/library/include/RemoteClient.h b/library/include/RemoteClient.h index 1948ea754..e71b985cd 100644 --- a/library/include/RemoteClient.h +++ b/library/include/RemoteClient.h @@ -46,7 +46,7 @@ namespace DFHack CR_NOT_IMPLEMENTED = -1, // Command not implemented, or plugin not loaded CR_OK = 0, // Success CR_FAILURE = 1, // Failure - CR_WRONG_USAGE = 2, // Wrong arguments or plotinfo state + CR_WRONG_USAGE = 2, // Wrong arguments or ui state CR_NOT_FOUND = 3 // Target object not found (for RPC mainly) }; diff --git a/library/modules/Buildings.cpp b/library/modules/Buildings.cpp index cd0924a36..21d63862c 100644 --- a/library/modules/Buildings.cpp +++ b/library/modules/Buildings.cpp @@ -1219,7 +1219,7 @@ bool Buildings::constructWithFilters(df::building *bld, std::vectorjob_items, 0, items[i]); if (items[i]->item_type == item_type::BOULDER) diff --git a/library/modules/Screen.cpp b/library/modules/Screen.cpp index ab7031308..e7f6cea93 100644 --- a/library/modules/Screen.cpp +++ b/library/modules/Screen.cpp @@ -83,7 +83,7 @@ namespace DFHack { * Screen painting API. */ -// returns plotinfo grid coordinates, even if the game map is scaled differently +// returns ui grid coordinates, even if the game map is scaled differently df::coord2d Screen::getMousePos() { if (!gps) diff --git a/plugins/stockpiles/StockpileSerializer.h b/plugins/stockpiles/StockpileSerializer.h index 478b403f2..ff0a38241 100644 --- a/plugins/stockpiles/StockpileSerializer.h +++ b/plugins/stockpiles/StockpileSerializer.h @@ -105,7 +105,7 @@ private: */ void write(); - // parse serialized data into plotinfo indices + // parse serialized data into ui indices void read (); /** From 3969262e44ed741ab4a29acc0623db91ff494dc3 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 5 Jan 2023 17:50:49 -0800 Subject: [PATCH 16/20] update submodule refs --- library/xml | 2 +- plugins/stonesense | 2 +- scripts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/library/xml b/library/xml index 1b1ffd406..a172530f9 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit 1b1ffd4069652bf189ac0bc229ddf027009c110a +Subproject commit a172530f98612b787ad59d58452bddf83d2bd7e8 diff --git a/plugins/stonesense b/plugins/stonesense index 25e7452f0..7b44c9dd0 160000 --- a/plugins/stonesense +++ b/plugins/stonesense @@ -1 +1 @@ -Subproject commit 25e7452f01b49b0a479d2c77a922cabbb7fd1e4c +Subproject commit 7b44c9dd0e0316c3edb66393de08591c95264e1a diff --git a/scripts b/scripts index 5ec3a484e..cea267cec 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 5ec3a484e243954151cf21fd288311667bf15b61 +Subproject commit cea267cec7819c03bd097485c29a24d77af29bc3 From 1934014659816b0b7704799638f0d7afeccbdfe6 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 4 Jan 2023 13:36:46 -0800 Subject: [PATCH 17/20] framework for passthru, z-order swapping windows --- library/LuaApi.cpp | 12 ++++++ library/LuaTools.cpp | 22 +++++++++-- library/include/modules/Screen.h | 1 + library/lua/gui.lua | 66 +++++++++++++++++++++++++++++++- library/lua/gui/widgets.lua | 5 +-- library/modules/Screen.cpp | 4 ++ 6 files changed, 102 insertions(+), 8 deletions(-) diff --git a/library/LuaApi.cpp b/library/LuaApi.cpp index 2f1d612b2..303a319c9 100644 --- a/library/LuaApi.cpp +++ b/library/LuaApi.cpp @@ -2456,6 +2456,17 @@ static int screen_findGraphicsTile(lua_State *L) } } +static int screen_raise(lua_State *L) { + df::viewscreen *screen = dfhack_lua_viewscreen::get_pointer(L, 1, false); + + // remove screen from the stack so it doesn't get returned as an output + lua_remove(L, 1); + + Screen::raise(screen); + + return 0; +} + static int screen_hideGuard(lua_State *L) { df::viewscreen *screen = dfhack_lua_viewscreen::get_pointer(L, 1, false); luaL_checktype(L, 2, LUA_TFUNCTION); @@ -2574,6 +2585,7 @@ static const luaL_Reg dfhack_screen_funcs[] = { { "paintString", screen_paintString }, { "fillRect", screen_fillRect }, { "findGraphicsTile", screen_findGraphicsTile }, + CWRAP(raise, screen_raise), CWRAP(hideGuard, screen_hideGuard), CWRAP(show, screen_show), CWRAP(dismiss, screen_dismiss), diff --git a/library/LuaTools.cpp b/library/LuaTools.cpp index 084e5a21b..c76c65651 100644 --- a/library/LuaTools.cpp +++ b/library/LuaTools.cpp @@ -131,6 +131,9 @@ void DFHack::Lua::GetVector(lua_State *state, std::vector &pvec) } } +static bool trigger_inhibit_l_down = false; +static bool trigger_inhibit_r_down = false; +static bool trigger_inhibit_m_down = false; static bool inhibit_l_down = false; static bool inhibit_r_down = false; static bool inhibit_m_down = false; @@ -161,17 +164,17 @@ void DFHack::Lua::PushInterfaceKeys(lua_State *L, if (!inhibit_l_down && df::global::enabler->mouse_lbut_down) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_L_DOWN"); - inhibit_l_down = true; + trigger_inhibit_l_down = true; } if (!inhibit_r_down && df::global::enabler->mouse_rbut_down) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_R_DOWN"); - inhibit_r_down = true; + trigger_inhibit_r_down = true; } if (!inhibit_m_down && df::global::enabler->mouse_mbut_down) { lua_pushboolean(L, true); lua_setfield(L, -2, "_MOUSE_M_DOWN"); - inhibit_m_down = true; + trigger_inhibit_m_down = true; } if (df::global::enabler->mouse_lbut) { lua_pushboolean(L, true); @@ -2148,6 +2151,19 @@ void DFHack::Lua::Core::Reset(color_ostream &out, const char *where) lua_settop(State, 0); } + if (trigger_inhibit_l_down) { + trigger_inhibit_l_down = false; + inhibit_l_down = true; + } + if (trigger_inhibit_r_down) { + trigger_inhibit_r_down = false; + inhibit_r_down = true; + } + if (trigger_inhibit_m_down) { + trigger_inhibit_m_down = false; + inhibit_m_down = true; + } + if (!df::global::enabler->mouse_lbut) inhibit_l_down = false; if (!df::global::enabler->mouse_rbut) diff --git a/library/include/modules/Screen.h b/library/include/modules/Screen.h index 347df1011..bc8a406a0 100644 --- a/library/include/modules/Screen.h +++ b/library/include/modules/Screen.h @@ -222,6 +222,7 @@ namespace DFHack DFHACK_EXPORT void dismiss(df::viewscreen *screen, bool to_first = false); DFHACK_EXPORT bool isDismissed(df::viewscreen *screen); DFHACK_EXPORT bool hasActiveScreens(Plugin *p); + DFHACK_EXPORT void raise(df::viewscreen *screen); /// Retrieve the string representation of the bound key. DFHACK_EXPORT std::string getKeyDisplay(df::interface_key key); diff --git a/library/lua/gui.lua b/library/lua/gui.lua index 1742ee342..27484541f 100644 --- a/library/lua/gui.lua +++ b/library/lua/gui.lua @@ -484,6 +484,10 @@ function View:getMousePos(view_rect) end end +function View:getMouseFramePos() + return self:getMousePos(ViewRect{rect=self.frame_rect}) +end + function View:computeFrame(parent_rect) return mkdims_wh(0,0,parent_rect.width,parent_rect.height) end @@ -681,9 +685,67 @@ function Screen:onRender() self:render(Painter.new()) end ------------------------- +----------------------------- +-- Z-order swapping screen -- +----------------------------- + +ZScreen = defclass(ZScreen, Screen) + +function ZScreen:onIdle() + if self._native and self._native.parent then + self._native.parent:logic() + end +end + +function ZScreen:render(dc) + self:renderParent() + ZScreen.super.render(self, dc) +end + +local function zscreen_is_top(self) + return dfhack.gui.getCurViewscreen(true) == self._native +end + +function ZScreen:onInput(keys) + if not zscreen_is_top(self) then + if keys._MOUSE_L_DOWN and self:isMouseOver() then + self:raise() + else + self:sendInputToParent(keys) + return + end + end + + if ZScreen.super.onInput(self, keys) then + return + end + if keys.LEAVESCREEN or keys._MOUSE_R_DOWN then + self:dismiss() + return + end + + if not keys._MOUSE_L or not self:isMouseOver() then + self:sendInputToParent(keys) + end +end + +-- move this viewscreen to the top of the stack (if it's not there already) +function ZScreen:raise() + if self:isDismissed() or zscreen_is_top(self) then + return + end + dscreen.raise(self) +end + +-- subclasses should override this and return whether the mouse is over an +-- owned screen element +function ZScreen:isMouseOver() + return false +end + +-------------------------- -- Framed screen object -- ------------------------- +-------------------------- -- Plain grey-colored frame. GREY_FRAME = { diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index c3d89c49b..e95410fb2 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -87,7 +87,7 @@ Panel.ATTRS { function Panel:init(args) if not self.drag_anchors then - self.drag_anchors = {title=true, frame=false, body=false} + self.drag_anchors = {title=true, frame=false, body=true} end if not self.resize_anchors then self.resize_anchors = {t=false, l=true, r=true, b=true} @@ -303,8 +303,7 @@ function Panel:onInput(keys) return true end if not keys._MOUSE_L_DOWN then return end - local rect = self.frame_rect - local x,y = self:getMousePos(gui.ViewRect{rect=rect}) + local x,y = self:getMouseFramePos() if not x then return end if self.resizable and y == 0 then diff --git a/library/modules/Screen.cpp b/library/modules/Screen.cpp index e7f6cea93..65817aa93 100644 --- a/library/modules/Screen.cpp +++ b/library/modules/Screen.cpp @@ -502,6 +502,10 @@ bool Screen::hasActiveScreens(Plugin *plugin) return false; } +void Screen::raise(df::viewscreen *screen) { + Hide swapper(screen, Screen::Hide::RESTORE_AT_TOP); +} + namespace DFHack { namespace Screen { Hide::Hide(df::viewscreen* screen, int flags) : From 9eb5165ebed2964fc8f552ce4c740e93e8ab5e04 Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Fri, 6 Jan 2023 02:11:27 +0000 Subject: [PATCH 18/20] Auto-update submodules library/xml: master --- library/xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/xml b/library/xml index a172530f9..522b9ea01 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit a172530f98612b787ad59d58452bddf83d2bd7e8 +Subproject commit 522b9ea01ac32206eaa6bfc43fed0494b84e5541 From f4d059ea3d5c1d079b599b4bbb0b07f82c02de51 Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Fri, 6 Jan 2023 02:43:42 +0000 Subject: [PATCH 19/20] Auto-update submodules library/xml: master scripts: master --- library/xml | 2 +- scripts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/xml b/library/xml index 522b9ea01..7714dd9cb 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit 522b9ea01ac32206eaa6bfc43fed0494b84e5541 +Subproject commit 7714dd9cbe94c270f0de1ab09c797ad4ecdcaa0e diff --git a/scripts b/scripts index cea267cec..164bea616 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit cea267cec7819c03bd097485c29a24d77af29bc3 +Subproject commit 164bea61674ab786dce8ac774cb9ae9efaa1e5aa From 1540e7c2945ebba1f183988d9ac3e91631dac249 Mon Sep 17 00:00:00 2001 From: DFHack-Urist via GitHub Actions <63161697+DFHack-Urist@users.noreply.github.com> Date: Fri, 6 Jan 2023 07:13:54 +0000 Subject: [PATCH 20/20] Auto-update submodules library/xml: master scripts: master --- library/xml | 2 +- scripts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/xml b/library/xml index 7714dd9cb..d026f34ed 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit 7714dd9cbe94c270f0de1ab09c797ad4ecdcaa0e +Subproject commit d026f34ed1f7ab79aebb1c5bc8a36ee9b30bd13d diff --git a/scripts b/scripts index 164bea616..55488a935 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 164bea61674ab786dce8ac774cb9ae9efaa1e5aa +Subproject commit 55488a9350190858efa2f872cda2d627ae2d0cd2