From 42108a64b9e249a2e7d31cd5b3c9ebd706bc78fa Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 12 Aug 2020 15:12:53 -0700 Subject: [PATCH] expose basic buildingplan functionality to Lua --- plugins/CMakeLists.txt | 2 +- plugins/buildingplan-lib.cpp | 5 ----- plugins/buildingplan-lib.h | 5 +++++ plugins/buildingplan.cpp | 22 ++++++++++++++++++++++ plugins/lua/buildingplan.lua | 3 +++ 5 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 plugins/lua/buildingplan.lua diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 678b7eec2..aa2f70625 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -96,7 +96,7 @@ if(BUILD_SUPPORTED) dfhack_plugin(blueprint blueprint.cpp LINK_LIBRARIES lua) dfhack_plugin(burrows burrows.cpp LINK_LIBRARIES lua) dfhack_plugin(building-hacks building-hacks.cpp LINK_LIBRARIES lua) - dfhack_plugin(buildingplan buildingplan.cpp LINK_LIBRARIES buildingplan-lib) + dfhack_plugin(buildingplan buildingplan.cpp LINK_LIBRARIES lua buildingplan-lib) dfhack_plugin(changeitem changeitem.cpp) dfhack_plugin(changelayer changelayer.cpp) dfhack_plugin(changevein changevein.cpp) diff --git a/plugins/buildingplan-lib.cpp b/plugins/buildingplan-lib.cpp index 0c29284db..e21c843aa 100644 --- a/plugins/buildingplan-lib.cpp +++ b/plugins/buildingplan-lib.cpp @@ -623,11 +623,6 @@ bool Planner::allocatePlannedBuilding(df::building_type type) return false; } - for (auto iter = newinst->jobs.begin(); iter != newinst->jobs.end(); iter++) - { - (*iter)->flags.bits.suspend = true; - } - if (type == building_type::Door) { auto door = virtual_cast(newinst); diff --git a/plugins/buildingplan-lib.h b/plugins/buildingplan-lib.h index 0d66e3248..d8d276a55 100644 --- a/plugins/buildingplan-lib.h +++ b/plugins/buildingplan-lib.h @@ -403,6 +403,11 @@ public: void addPlannedBuilding(df::building *bld) { + for (auto iter = bld->jobs.begin(); iter != bld->jobs.end(); iter++) + { + (*iter)->flags.bits.suspend = true; + } + PlannedBuilding pb(bld, &default_item_filters[bld->getType()]); planned_buildings.push_back(pb); } diff --git a/plugins/buildingplan.cpp b/plugins/buildingplan.cpp index c19eb02e9..c42aeac53 100644 --- a/plugins/buildingplan.cpp +++ b/plugins/buildingplan.cpp @@ -1,3 +1,4 @@ +#include "LuaTools.h" #include "buildingplan-lib.h" DFHACK_PLUGIN("buildingplan"); @@ -414,3 +415,24 @@ DFhackCExport command_result plugin_onstatechange(color_ostream &out, state_chan return CR_OK; } + +// Lua API section + +static bool isPlannableBuilding(df::building_type type) { + return planner.isPlanableBuilding(type); +} + +static void addPlannedBuilding(df::building *bld) { + planner.addPlannedBuilding(bld); +} + +static void doCycle() { + planner.doCycle(); +} + +DFHACK_PLUGIN_LUA_FUNCTIONS { + DFHACK_LUA_FUNCTION(isPlannableBuilding), + DFHACK_LUA_FUNCTION(addPlannedBuilding), + DFHACK_LUA_FUNCTION(doCycle), + DFHACK_LUA_END +}; diff --git a/plugins/lua/buildingplan.lua b/plugins/lua/buildingplan.lua new file mode 100644 index 000000000..c1f86081c --- /dev/null +++ b/plugins/lua/buildingplan.lua @@ -0,0 +1,3 @@ +local _ENV = mkmodule('plugins.buildingplan') + +return _ENV