void BuildingFountain::deliverService() { ServiceWalkerPtr walker = ServiceWalker::create( BuildingPtr( this ), getService()); ServiceWalker::ReachedBuildings reachedBuildings = walker->getReachedBuildings( getTile().getIJ() ); for( ServiceWalker::ReachedBuildings::iterator itBuilding = reachedBuildings.begin(); itBuilding != reachedBuildings.end(); ++itBuilding) { (*itBuilding)->applyService( walker ); } }
void ServiceBuilding::deliverService() { // make a service walker and send him to his wandering ServiceWalkerPtr serviceman = ServiceWalker::create( BuildingPtr( this ),_service); serviceman->send2City(); if( !serviceman->isDeleted() ) _addWalker( serviceman.as<Walker>() ); }
void Well::deliverService() { ServiceWalkerPtr walker = ServiceWalker::create( _getCity(), getService() ); walker->setBase( BuildingPtr( this ) ); ServiceWalker::ReachedBuildings reachedBuildings = walker->getReachedBuildings( getTile().getIJ() ); foreach( BuildingPtr building, reachedBuildings) { building->applyService( walker ); }
BuildingPtr reserveShortestPath( const BuildingType buildingType, GoodStock& stock, long& reservationID, Propagator &pathPropagator, PathWay &oPathWay ) { BuildingPtr res; Propagator::Routes pathWayList; pathPropagator.getRoutes(buildingType, pathWayList); //remove factories with improrer storage Propagator::Routes::iterator pathWayIt= pathWayList.begin(); while( pathWayIt != pathWayList.end() ) { // for every factory within range SmartPtr<T> building = pathWayIt->first.as<T>(); if( stock._currentQty > building->getGoodStore().getMaxStore( stock.type() ) ) { pathWayList.erase( pathWayIt++ ); } else { pathWayIt++; } } //find shortest path int maxLength = 999; PathWay* shortestPath = 0; for( Propagator::Routes::iterator pathIt = pathWayList.begin(); pathIt != pathWayList.end(); pathIt++ ) { if( pathIt->second.getLength() < maxLength ) { shortestPath = &pathIt->second; maxLength = pathIt->second.getLength(); res = pathIt->first; } } if( res.isValid() ) { reservationID = res.as<T>()->getGoodStore().reserveStorage( stock ); if (reservationID != 0) { oPathWay = *shortestPath; } else { res = BuildingPtr(); } } return res; }
void ServiceBuilding::deliverService() { // make a service walker and send him to his wandering ServiceWalkerPtr serviceman = ServiceWalker::create( _getCity(), getService() ); serviceman->setMaxDistance( getWalkerDistance() ); serviceman->send2City( BuildingPtr( this ) ); if( !serviceman->isDeleted() ) { addWalker( serviceman.as<Walker>() ); } }
void Factory::deliverGood() { // make a cart pusher and send him away StringHelper::debug( 0xff, "Good is ready!!!" ); if( _mayDeliverGood() ) { GoodStock stock(_outGoodType, 100, 100); CartPusherPtr walker = CartPusher::create( BuildingPtr( this ), stock ); walker->send2City(); _d->progress -= 100.f; if( !walker->isDeleted() ) _addWalker( walker.as<Walker>() ); } }
void Granary::_tryDevastateGranary() { //if granary in devastation mode need try send cart pusher with goods to other granary/warehouse/factory for( int goodType=Good::wheat; goodType <= Good::vegetable; goodType++ ) { int goodQty = math::clamp( goodQty, 0, 400); if( goodQty > 0 ) { GoodStock stock( (Good::Type)goodType, goodQty, goodQty); CartPusherPtr walker = CartPusher::create( _getCity() ); walker->send2City( BuildingPtr( this ), stock ); if( !walker->isDeleted() ) { stock._currentQty = 0; _d->goodStore.retrieve( stock, goodQty );//setCurrentQty( (GoodType)goodType, goodQtyMax - goodQty ); addWalker( walker.as<Walker>() ); break; } } } }
void Factory::deliverGood() { // make a cart pusher and send him away int qty = _d->goodStore.getCurrentQty( _d->outGoodType ); if( _mayDeliverGood() && qty >= 100 ) { CartPusherPtr walker = CartPusher::create( Scenario::instance().getCity() ); GoodStock pusherStock( _d->outGoodType, qty, 0 ); _d->goodStore.retrieve( pusherStock, math::clamp( qty, 0, 400 ) ); walker->send2City( BuildingPtr( this ), pusherStock ); //success to send cartpusher if( !walker->isDeleted() ) { addWalker( walker.as<Walker>() ); } else { _d->goodStore.store( walker->getStock(), walker->getStock()._currentQty ); } } }