From d394dc406bffee23fb8b3586dd10ee78f2954503 Mon Sep 17 00:00:00 2001 From: Quietust Date: Sat, 18 Feb 2012 11:34:52 -0600 Subject: [PATCH] Update t_building, change subtype into a union of all possible subtypes (depending on type) --- library/include/modules/Buildings.h | 19 +++++++++++++++++-- library/modules/Buildings.cpp | 26 +++++++++++++------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/library/include/modules/Buildings.h b/library/include/modules/Buildings.h index 78fa064a8..10de78bc3 100644 --- a/library/include/modules/Buildings.h +++ b/library/include/modules/Buildings.h @@ -26,6 +26,12 @@ distribution. #include "Export.h" #include "DataDefs.h" #include "df/building.h" +#include "df/furnace_type.h" +#include "df/workshop_type.h" +#include "df/construction_type.h" +#include "df/shop_type.h" +#include "df/siegeengine_type.h" +#include "df/trap_type.h" namespace DFHack { @@ -45,8 +51,17 @@ struct t_building uint32_t y2; uint32_t z; t_matglossPair material; - int32_t type; - int16_t subtype; + df::building_type type; + union + { + int16_t subtype; + df::furnace_type furnace_type; + df::workshop_type workshop_type; + df::construction_type construction_type; + df::shop_type shop_type; + df::siegeengine_type siegeengine_type; + df::trap_type trap_type; + }; int32_t custom_type; df::building * origin; }; diff --git a/library/modules/Buildings.cpp b/library/modules/Buildings.cpp index 96a34153e..1ef913f27 100644 --- a/library/modules/Buildings.cpp +++ b/library/modules/Buildings.cpp @@ -57,19 +57,19 @@ uint32_t Buildings::getNumBuildings() bool Buildings::Read (const uint32_t index, t_building & building) { Core & c = Core::getInstance(); - df::building *bld_40d = world->buildings.all[index]; - - building.x1 = bld_40d->x1; - building.x2 = bld_40d->x2; - building.y1 = bld_40d->y1; - building.y2 = bld_40d->y2; - building.z = bld_40d->z; - building.material.index = bld_40d->mat_index; - building.material.type = bld_40d->mat_type; - building.type = bld_40d->getType(); - building.subtype = bld_40d->getSubtype(); - building.custom_type = bld_40d->getCustomType(); - building.origin = bld_40d; + df::building *bld = world->buildings.all[index]; + + building.x1 = bld->x1; + building.x2 = bld->x2; + building.y1 = bld->y1; + building.y2 = bld->y2; + building.z = bld->z; + building.material.index = bld->mat_index; + building.material.type = bld->mat_type; + building.type = bld->getType(); + building.subtype = bld->getSubtype(); + building.custom_type = bld->getCustomType(); + building.origin = bld; return true; }