fix labor inferences for custom furnaces

Also clean up how paved roads are handled (the way it was was stupid)
develop
Kelly Kinkade 2020-06-20 23:05:55 -05:00
parent 5d05cfc7cc
commit 7ddc3bb918
1 changed files with 33 additions and 7 deletions

@ -200,8 +200,6 @@ static df::building* get_building_from_job(df::job* j)
static df::unit_labor construction_build_labor(df::building_actual* b)
{
if (b->getType() == df::building_type::RoadPaved)
return df::unit_labor::BUILD_ROAD;
// Find last item in building with use mode appropriate to the building's constructions state
// For screw pumps contained_items[0] = pipe, 1 corkscrew, 2 block
// For wells 0 mechanism, 1 rope, 2 bucket, 3 block
@ -313,14 +311,27 @@ public:
return workshop_build_labor[ws->type];
}
break;
case df::building_type::Furnace:
{
df::building_furnacest* frn = (df::building_furnacest*) bld;
if (frn->design && !frn->design->flags.bits.designed)
return df::unit_labor::ARCHITECT;
if (frn->type == df::furnace_type::Custom)
{
df::building_def* def = df::building_def::find(frn->custom_type);
return def->build_labors[0];
}
else
// cast to building_actual should be safe here because at this point the building has been designed
return construction_build_labor((df::building_actual*)bld);
}
break;
case df::building_type::Construction:
return df::unit_labor::BUILD_CONSTRUCTION;
case df::building_type::Furnace:
case df::building_type::TradeDepot:
case df::building_type::Bridge:
case df::building_type::ArcheryTarget:
case df::building_type::WaterWheel:
case df::building_type::RoadPaved:
case df::building_type::Well:
case df::building_type::ScrewPump:
case df::building_type::Wagon:
@ -334,6 +345,8 @@ public:
return construction_build_labor(b);
}
break;
case df::building_type::RoadPaved:
return df::unit_labor::BUILD_ROAD;
case df::building_type::FarmPlot:
return df::unit_labor::PLANT;
case df::building_type::Chair:
@ -418,15 +431,26 @@ public:
return workshop_build_labor[ws->type];
}
break;
case df::building_type::Furnace:
{
df::building_furnacest* frn = (df::building_furnacest*) bld;
if (frn->type == df::furnace_type::Custom)
{
df::building_def* def = df::building_def::find(frn->custom_type);
return def->build_labors[0];
}
else
// can't destroy a building if doesn't actually exist
return construction_build_labor((df::building_actual*)bld);
}
break;
case df::building_type::Construction:
return df::unit_labor::REMOVE_CONSTRUCTION;
case df::building_type::Furnace:
case df::building_type::TradeDepot:
case df::building_type::Wagon:
case df::building_type::Bridge:
case df::building_type::ScrewPump:
case df::building_type::ArcheryTarget:
case df::building_type::RoadPaved:
case df::building_type::Shop:
case df::building_type::Support:
case df::building_type::WaterWheel:
@ -437,6 +461,8 @@ public:
return construction_build_labor(b);
}
break;
case df::building_type::RoadPaved:
return df::unit_labor::BUILD_ROAD;
case df::building_type::FarmPlot:
return df::unit_labor::PLANT;
case df::building_type::Trap: