Exemple #1
0
WearerPtr Wearer::create(DescriptionPtr dsc)
{
  /* REMEBER TO UPDATE CLONE, WHEN ADDING NEW ELEMENTS */  
  WearerPtr w = nullptr;
  WearerDescriptionPtr wearerDsc = std::dynamic_pointer_cast<WearerDescription>(dsc);

  if ( wearerDsc != nullptr )
  {
    w.reset( new Wearer );
    wearerDsc->eqItems->maxSize = wearerDsc->itemSlots.size();

    std::for_each(wearerDsc->itemSlots.begin(), wearerDsc->itemSlots.end(), [&](ItemSlotType slot)
    {
      w->_itemSlots[slot] = nullptr;
    });

    w->_equippedItems = Container::create(wearerDsc->eqItems);
    if ( w->_equippedItems )
    {
      assignItemsToSlots( w );
    }

  }else throw creation_error("Wrong wearer description!");

  return w;
}
Exemple #2
0
ActorFeaturePtr Wearer::clone()
{
  WearerPtr cloned( new Wearer );

  for(auto i : _itemSlots)
  {
    cloned->_itemSlots[ i.first ] = nullptr;
  }

  cloned->_equippedItems = std::dynamic_pointer_cast<Container>(_equippedItems->clone());
  assignItemsToSlots(cloned);

  return cloned;
}
Exemple #3
0
Wearer::Wearer(DescriptionPtr dsc)
  : _equippedItems( new ActorContainer )
{
  upgrade(dsc);
  if ( _equippedItems ) assignItemsToSlots();
}