Beispiel #1
0
void Barracks::deliverTrainee()
{ 
  if( walkers().size() == 0 && _d->store.freeQty() > 0 )
  {
    CartSupplierPtr walker = CartSupplier::create( _city() );
    walker->send2city( this, good::weapon, 100 );

    if( !walker->isDeleted() )
    {
      addWalker( walker.object() );
    }
  }

  if( _d->store.qty( good::weapon ) >= 100 )
  {
    TraineeWalkerPtr trainee = TraineeWalker::create( _city(), walker::soldier );
    trainee->send2City( this, false );

    if( !trainee->isDeleted() )
    {
      good::Stock delStock( good::weapon, 100 );
      _d->store.retrieve( delStock, 100 );
      addWalker( trainee.object() );
      _d->notNeedSoldiers = false;
    }
    else
    {
      _d->notNeedSoldiers = true;
    }
  }
}
void Factory::receiveGood()
{
  GoodStock& stock = getInGood();

  //send cart supplier if stock not full
  if( _mayDeliverGood() && stock._currentQty < stock._maxQty )
  {
    CartSupplierPtr walker = CartSupplier::create( Scenario::instance().getCity() );
    walker->send2City( this, stock._goodType, stock._maxQty - stock._currentQty );

    if( !walker->isDeleted() )
    {
      addWalker( walker.as<Walker>() );
    }
  }
}