@ -87,6 +87,58 @@ static uint8_t *getExtentTile(df::building_extents &extent, df::coord2d tile)
return & extent . extents [ dx + dy * extent . width ] ;
}
/*
* A monitor to work around this bug , in its application to buildings :
*
* http : //www.bay12games.com/dwarves/mantisbt/view.php?id=1416
*/
bool buildings_do_onupdate = false ;
void buildings_onStateChange ( color_ostream & out , state_change_event event )
{
switch ( event ) {
case SC_MAP_LOADED :
buildings_do_onupdate = true ;
break ;
case SC_MAP_UNLOADED :
buildings_do_onupdate = false ;
break ;
default :
break ;
}
}
void buildings_onUpdate ( color_ostream & out )
{
buildings_do_onupdate = false ;
df : : job_list_link * link = world - > job_list . next ;
for ( ; link ; link = link - > next ) {
df : : job * job = link - > item ;
if ( job - > job_type ! = job_type : : ConstructBuilding )
continue ;
if ( job - > job_items . empty ( ) )
continue ;
buildings_do_onupdate = true ;
for ( size_t i = 0 ; i < job - > items . size ( ) ; i + + )
{
df : : job_item_ref * iref = job - > items [ i ] ;
if ( iref - > role ! = df : : job_item_ref : : Reagent )
continue ;
df : : job_item * item = vector_get ( job - > job_items , iref - > job_item_idx ) ;
if ( ! item )
continue ;
// Convert Reagent to Hauled, while decrementing quantity
item - > quantity = std : : max ( 0 , item - > quantity - 1 ) ;
iref - > role = df : : job_item_ref : : Hauled ;
iref - > job_item_idx = - 1 ;
}
}
}
uint32_t Buildings : : getNumBuildings ( )
{
return world - > buildings . all . size ( ) ;
@ -906,6 +958,8 @@ bool Buildings::constructWithFilters(df::building *bld, std::vector<df::job_item
bld - > mat_index = items [ i ] - > mat_index ;
}
buildings_do_onupdate = true ;
createDesign ( bld , rough ) ;
return true ;
}
@ -969,3 +1023,4 @@ bool Buildings::deconstruct(df::building *bld)
return true ;
}