summaryrefslogtreecommitdiff
path: root/library/modules
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-08-24 18:26:18 +0400
committerAlexander Gavrilov2012-08-24 18:26:18 +0400
commit8359e80b233675ee347ff1ac8ec7d37430d52a7a (patch)
treec9d6876ef0fb50ffd3e27d793ac505d63f401ed9 /library/modules
parentd52c54cc762e4f525b4d1f3c339e9cf5a1230ee7 (diff)
downloaddfhack-8359e80b233675ee347ff1ac8ec7d37430d52a7a.tar.gz
dfhack-8359e80b233675ee347ff1ac8ec7d37430d52a7a.tar.bz2
dfhack-8359e80b233675ee347ff1ac8ec7d37430d52a7a.tar.xz
Expose a few API functions to lua, and implement a room browser overlay.
Diffstat (limited to 'library/modules')
-rw-r--r--library/modules/Buildings.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/library/modules/Buildings.cpp b/library/modules/Buildings.cpp
index 8ec60e55..d1aed897 100644
--- a/library/modules/Buildings.cpp
+++ b/library/modules/Buildings.cpp
@@ -49,6 +49,7 @@ using namespace DFHack;
#include "df/ui_look_list.h"
#include "df/d_init.h"
#include "df/item.h"
+#include "df/unit.h"
#include "df/job.h"
#include "df/job_item.h"
#include "df/general_ref_building_holderst.h"
@@ -177,6 +178,44 @@ bool Buildings::ReadCustomWorkshopTypes(map <uint32_t, string> & btypes)
return true;
}
+bool Buildings::setOwner(df::building *bld, df::unit *unit)
+{
+ CHECK_NULL_POINTER(bld);
+
+ if (!bld->is_room)
+ return false;
+ if (bld->owner == unit)
+ return true;
+
+ if (bld->owner)
+ {
+ auto &blist = bld->owner->owned_buildings;
+ vector_erase_at(blist, linear_index(blist, bld));
+
+ if (auto spouse = df::unit::find(bld->owner->relations.spouse_id))
+ {
+ auto &blist = spouse->owned_buildings;
+ vector_erase_at(blist, linear_index(blist, bld));
+ }
+ }
+
+ bld->owner = unit;
+
+ if (unit)
+ {
+ unit->owned_buildings.push_back(bld);
+
+ if (auto spouse = df::unit::find(unit->relations.spouse_id))
+ {
+ auto &blist = spouse->owned_buildings;
+ if (bld->canUseSpouseRoom() && linear_index(blist, bld) < 0)
+ blist.push_back(bld);
+ }
+ }
+
+ return true;
+}
+
df::building *Buildings::findAtTile(df::coord pos)
{
auto occ = Maps::getTileOccupancy(pos);