37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
|
#include "plannedbuilding.h"
|
||
|
#include "buildingplan.h"
|
||
|
|
||
|
#include "Debug.h"
|
||
|
|
||
|
#include "modules/World.h"
|
||
|
|
||
|
namespace DFHack {
|
||
|
DBG_EXTERN(buildingplan, status);
|
||
|
DBG_EXTERN(buildingplan, cycle);
|
||
|
}
|
||
|
|
||
|
using namespace DFHack;
|
||
|
|
||
|
PlannedBuilding::PlannedBuilding(color_ostream &out, df::building *building)
|
||
|
: id(building->id) {
|
||
|
DEBUG(status,out).print("creating persistent data for building %d\n", id);
|
||
|
bld_config = World::AddPersistentData(BLD_CONFIG_KEY);
|
||
|
set_config_val(bld_config, BLD_CONFIG_ID, id);
|
||
|
}
|
||
|
|
||
|
PlannedBuilding::PlannedBuilding(PersistentDataItem &bld_config)
|
||
|
: id(get_config_val(bld_config, BLD_CONFIG_ID)), bld_config(bld_config) { }
|
||
|
|
||
|
// Ensure the building still exists and is in a valid state. It can disappear
|
||
|
// for lots of reasons, such as running the game with the buildingplan plugin
|
||
|
// disabled, manually removing the building, modifying it via the API, etc.
|
||
|
df::building * PlannedBuilding::getBuildingIfValidOrRemoveIfNot(color_ostream &out) {
|
||
|
auto bld = df::building::find(id);
|
||
|
bool valid = bld && bld->getBuildStage() == 0;
|
||
|
if (!valid) {
|
||
|
remove(out);
|
||
|
return NULL;
|
||
|
}
|
||
|
return bld;
|
||
|
}
|