void CartPusher::send2City()
{
  computeWalkerDestination();

  if( !isDeleted() )
    Scenario::instance().getCity().addWalker( WalkerPtr( this ) );
}
Beispiel #2
0
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 ) );   
  }
}
Beispiel #4
0
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();
}
Beispiel #7
0
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();
    }
  }
}