Skip to content

Commit

Permalink
Export functions to Buildings.h
Browse files Browse the repository at this point in the history
  • Loading branch information
cdombroski committed Jan 29, 2015
1 parent 1514233 commit 48b6cf1
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 61 deletions.
8 changes: 8 additions & 0 deletions library/include/modules/Buildings.h
Expand Up @@ -288,6 +288,14 @@ class DFHACK_EXPORT StockpileIterator : public std::iterator<std::input_iterator
* Collects items stored on a stockpile into a vector.
*/
DFHACK_EXPORT void getStockpileContents(df::building_stockpilest *stockpile, std::vector<df::item*> *items);
DFHACK_EXPORT bool isActivityZone(df::building * building);
DFHACK_EXPORT bool isPenPasture(df::building * building);
DFHACK_EXPORT bool isPitPond(df::building * building);
DFHACK_EXPORT bool isActive(df::building * building);
DFHACK_EXPORT bool isPenPasture(df::building_civzonest * building);
DFHACK_EXPORT bool isPitPond(df::building_civzonest * building);
DFHACK_EXPORT bool isActive(df::building_civzonest * building);

DFHACK_EXPORT df::building* findPenPitAtCoord(df::coord coord);
}
}
60 changes: 60 additions & 0 deletions library/modules/Buildings.cpp
Expand Up @@ -1176,3 +1176,63 @@ void Buildings::getStockpileContents(df::building_stockpilest *stockpile, std::v
items->push_back(item);
}
}

bool Buildings::isActivityZone(df::building * building)
{
CHECK_NULL_POINTER(building);
return building->getType() == building_type::Civzone
&& building->getSubtype() == (short)civzone_type::ActivityZone;
}

bool Buildings::isPenPasture(df::building * building)
{
if (!isActivityZone(building))
return false;
return isPenPasture((df::building_civzonest*) building);
}

bool Buildings::isPenPasture(df::building_civzonest* civ)
{
CHECK_NULL_POINTER(civ);
return civ->zone_flags.bits.pen_pasture != 0;
}

bool Buildings::isPitPond(df::building * building)
{
if (!isActivityZone(building))
return false;
return isPitPond((df::building_civzonest *) building);
}

bool Buildings::isPitPond(df::building_civzonest* civ)
{
CHECK_NULL_POINTER(civ);
return civ->zone_flags.bits.pit_pond != 0;
}

bool Buildings::isActive(df::building * building)
{
if (!isActivityZone(building))
return false;
return isActive((df::building_civzonest *) building);
}

bool Buildings::isActive(df::building_civzonest* civ)
{
CHECK_NULL_POINTER(civ);
return civ->zone_flags.bits.active != 0;
}

// returns building of pen/pit at cursor position (NULL if nothing found)
df::building* Buildings::findPenPitAtCoord(df::coord coord)
{
CHECK_NULL_POINTER(coord);
vector<df::building_civzonest*> zones;
Buildings::findCivzonesAt(&zones, coord);
for (auto zone = zones.begin(); zone != zones.end(); ++zone)
{
if (isPenPasture(*zone) || isPitPond(*zone))
return (*zone);
}
return NULL;
}
65 changes: 4 additions & 61 deletions plugins/zone.cpp
Expand Up @@ -75,6 +75,7 @@ using std::vector;
using std::string;
using namespace DFHack;
using namespace DFHack::Units;
using namespace DFHack::Buildings;
using namespace df::enums;

DFHACK_PLUGIN("zone");
Expand Down Expand Up @@ -344,13 +345,6 @@ bool isTrained(df::unit* unit);

bool isGay(df::unit* unit);

bool isActivityZone(df::building * building);
bool isPenPasture(df::building * building);
bool isPitPond(df::building * building);
bool isActive(df::building * building);

int32_t findBuildingIndexById(int32_t id);
df::building* findPenPitAtCursor();
df::building* findCageAtCursor();
df::building* findChainAtCursor();

Expand Down Expand Up @@ -590,32 +584,6 @@ void unitInfo(color_ostream & out, df::unit* unit, bool verbose = false)
}
}

bool isActivityZone(df::building * building)
{
return building->getType() == building_type::Civzone
&& building->getSubtype() == (short)civzone_type::ActivityZone;
}

bool isPenPasture(df::building * building)
{
if(!isActivityZone(building))
return false;

df::building_civzonest * civ = (df::building_civzonest *) building;

return civ->zone_flags.bits.pen_pasture != 0;
}

bool isPitPond(df::building * building)
{
if(!isActivityZone(building))
return false;

df::building_civzonest * civ = (df::building_civzonest *) building;

return civ->zone_flags.bits.pit_pond != 0;
}

bool isCage(df::building * building)
{
return building->getType() == building_type::Cage;
Expand All @@ -626,28 +594,6 @@ bool isChain(df::building * building)
return building->getType() == building_type::Chain;
}

bool isActive(df::building * building)
{
if(!isActivityZone(building))
return false;

df::building_civzonest * civ = (df::building_civzonest *) building;
return civ->zone_flags.bits.active != 0;
}

// returns building of pen/pit at cursor position (NULL if nothing found)
df::building* findPenPitAtCursor()
{
vector<df::building_civzonest*> zones;
Buildings::findCivzonesAt(&zones, Gui::getCursorPos());
for (auto zone = zones.begin(); zone != zones.end(); ++zone)
{
if ((*zone)->zone_flags.bits.pen_pasture || (*zone)->zone_flags.bits.pit_pond)
return (*zone);
}
return NULL;
}

// returns building of cage at cursor position (NULL if nothing found)
df::building* findCageAtCursor()
{
Expand Down Expand Up @@ -1320,10 +1266,7 @@ command_result nickUnitsInBuilding(color_ostream& out, df::building* building, s
// dump some zone info
void zoneInfo(color_ostream & out, df::building* building, bool verbose)
{
if(building->getType()!= building_type::Civzone)
return;

if(building->getSubtype() != (short)civzone_type::ActivityZone)
if(!isActivityZone(building))
return;

string name;
Expand All @@ -1339,7 +1282,7 @@ void zoneInfo(color_ostream & out, df::building* building, bool verbose)
out.print("\n");

df::building_civzonest * civ = (df::building_civzonest *) building;
if(civ->zone_flags.bits.active)
if(isActive(civ))
out << "active";
else
out << "not active";
Expand Down Expand Up @@ -2052,7 +1995,7 @@ command_result df_zone (color_ostream &out, vector <string> & parameters)
}
else
{
target_building = findPenPitAtCursor();
target_building = findPenPitAtCoord(Gui::getCursorPos());
if(!target_building)
{
out << "No pen/pasture or pit under cursor!" << endl;
Expand Down

0 comments on commit 48b6cf1

Please sign in to comment.