void Emigrant::_lockHouse( HousePtr house ) { if( _d->housePosLock.i() >= 0 ) { HousePtr oldHouse = ptr_cast<House>( _city()->tilemap().at( _d->housePosLock ).overlay() ); if( oldHouse.isValid() ) { _d->housePosLock = TilePos( -1, -1 ); oldHouse->setState( House::settleLock, 0 ); } } if( house.isValid() ) { _d->housePosLock = house->pos(); house->setState( House::settleLock, TileHelper::hash( _d->housePosLock ) ); } }
void RandomPlague::_exec( Game& game, unsigned int time) { int population = game.city()->states().population; if( _d->popRange.contain( population ) ) { Logger::info( "Execute random plague event" ); _d->isDeleted = true; HouseList houses = game.city()->statistic().houses.habitable(); unsigned int number4burn = math::clamp<unsigned int>( (houses.size() * _d->strong / 100), 1u, 100u ); for( unsigned int k=0; k < number4burn; k++ ) { HousePtr house = houses.random(); house->setState( pr::health, 0.f ); } } }