void CartPusher::send2City() { computeWalkerDestination(); if( !isDeleted() ) Scenario::instance().getCity().addWalker( WalkerPtr( this ) ); }
void CartSupplier::send2City( BuildingPtr building, const Good::Type type, const int qty ) { computeWalkerDestination( building, type, qty ); GoodStore* storage = 0; if( building.is<Factory>() ) { storage = &building.as<Factory>()->getGoodStore(); } else if( building.is<Granary>() ) { storage = &building.as<Granary>()->getGoodStore(); } else if( building.is<Warehouse>() ) { storage = &building.as<Warehouse>()->getGoodStore(); } if( !isDeleted() && storage ) { _d->stock.setType( type ); _d->stock._maxQty = qty; _d->rcvReservationID = storage->reserveStorage( _d->stock ); _d->city->addWalker( WalkerPtr( this ) ); } }
void MarketLady::send2City( MarketPtr market ) { computeWalkerDestination( market ); if( !isDeleted() ) { _d->city->addWalker( WalkerPtr( this ) ); } }
void TraineeWalker::send2City() { computeWalkerPath(); if( !isDeleted() ) { _destinationBuilding->reserveTrainee(_traineeType); Scenario::instance().getCity().addWalker( WalkerPtr( this ) ); } }
WalkerPtr WalkerManager::create(const WalkerType walkerType , CityPtr city) { Impl::WalkerCreators::iterator findConstructor = _d->constructors.find( walkerType ); if( findConstructor != _d->constructors.end() ) { return findConstructor->second->create( city ).as<Walker>(); } StringHelper::debug( 0xff, "Can't create walker from type %d", walkerType ); return WalkerPtr(); }
WalkerPtr WalkerManager::create( const WalkerType walkerType ) { Impl::WalkerCreators::iterator findConstructor = _d->constructors.find( walkerType ); if( findConstructor != _d->constructors.end() ) { WalkerPtr ret( findConstructor->second->create() ); ret->drop(); return ret; } return WalkerPtr(); }
void FishPlace::timeStep(const unsigned long time) { _getAnimation().update( time ); _d->animations[ 0 ] = _getAnimation().getFrame(); if( _d->walker != 0 ) { TilePos lastPos = _d->walker->getIJ(); _d->walker->timeStep( time ); if( lastPos != _d->walker->getIJ() ) { getTile().setOverlay( 0 ); getTile().setPicture( _d->savePicture ); TilePos pos = _d->walker->getIJ(); _d->savePicture = &_getCity()->getTilemap().at( pos ).getPicture(); setPicture( *_d->savePicture ); TileOverlay::build( _getCity(), pos ); } else if( lastPos == _d->walker->getPathway().getDestination().getIJ() ) { deleteLater(); } } else { Pathway pathway; bool pathFound = Pathfinder::getInstance().getPath( getTilePos(), _getCity()->getBorderInfo().boatExit, pathway, Pathfinder::waterOnly, Size( 1 ) ); if( !pathFound ) { deleteLater(); } else { _d->walker = WalkerPtr( new Walker( _getCity() ) ); _d->walker->drop(); _d->walker->setSpeed( 0.1f ); _d->walker->setPathway( pathway ); _d->walker->setIJ( getTilePos() ); _d->walker->go(); } } }