diff --git a/docs/changelog.txt b/docs/changelog.txt index 6f2e0d8f7..e134426ab 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -130,11 +130,12 @@ Template for new versions: - unavailable tools are no longer listed in the tag indices in the online docs ## API +- added ``Buildings::completebuild``, used to link a newly created building into the world - added ``Items::getCapacity``, returns the capacity of an item as a container (reverse-engineered), needed for `combine` ## Lua - added ``GRAY`` color aliases for ``GREY`` colors -- added ``dfhack.items.getCapacity`` to expose the new module API +- added ``dfhack.items.completebuild`` and ``dfhack.items.getCapacity`` to expose new module APIs - ``utils.search_text``: text search routine (generalized from internal ``widgets.FilteredList`` logic) ## Removed diff --git a/library/LuaApi.cpp b/library/LuaApi.cpp index a8e901a6d..93291592d 100644 --- a/library/LuaApi.cpp +++ b/library/LuaApi.cpp @@ -2440,6 +2440,7 @@ static const LuaWrapper::FunctionReg dfhack_buildings_module[] = { WRAPM(Buildings, isPenPasture), WRAPM(Buildings, isPitPond), WRAPM(Buildings, isActive), + WRAPM(Buildings, completebuild), { NULL, NULL } }; diff --git a/library/include/modules/Buildings.h b/library/include/modules/Buildings.h index 22dbb0370..6fbe0d6e1 100644 --- a/library/include/modules/Buildings.h +++ b/library/include/modules/Buildings.h @@ -289,5 +289,10 @@ DFHACK_EXPORT df::building* findPenPitAt(df::coord coord); * Returns the units currently in the given cage */ DFHACK_EXPORT bool getCageOccupants(df::building_cagest *cage, std::vector &units); + +/** + * Finalizes a new building into the world + */ +DFHACK_EXPORT void completebuild(df::building* bld, char in_play); } } diff --git a/library/modules/Buildings.cpp b/library/modules/Buildings.cpp index 78c7b00ed..8418e8c55 100644 --- a/library/modules/Buildings.cpp +++ b/library/modules/Buildings.cpp @@ -1707,3 +1707,15 @@ bool Buildings::getCageOccupants(df::building_cagest *cage, vector &u return true; } + +void Buildings::completebuild(df::building* bld, char in_play) +{ + CHECK_NULL_POINTER(bld); + + auto fp = df::global::buildingst_completebuild; + CHECK_NULL_POINTER(fp); + + typedef std::function FT; + auto f = reinterpret_cast(fp); + (*f)(bld, in_play); +}