#include "Inventory.h" #include "Area.h" #include "Registries.h" using namespace Framework; Inventory::Inventory( const Framework::Vec3 location, bool hasInventory ) : ReferenceCounter(), location( location ) { if( hasInventory ) { pullSlotsOrder = new Framework::RCArray(); pushSlotsOrder = new Framework::RCArray(); } else { pullSlotsOrder = 0; pushSlotsOrder = 0; } } Inventory::~Inventory() { if( pullSlotsOrder ) pullSlotsOrder->release(); if( pushSlotsOrder ) pushSlotsOrder->release(); } void Inventory::loadInventory( Framework::StreamReader* zReader ) { if( pushSlotsOrder ) { for( auto slot : *pushSlotsOrder ) { int size = 0; zReader->lese( (char*)&size, 4 ); if( size != 0 ) { int id = 0; zReader->lese( (char*)&id, 4 ); Item* item = STATIC_REGISTRY( ItemType ).zElement( id )->loadItem( zReader ); slot->setItems( new ItemStack( item, size ) ); } else slot->setItems( 0 ); } } } void Inventory::addSlot( ItemSlot* slot ) { int pullPrio = slot->getPullPriority(); int pushPrio = slot->getPushPriority(); int index = 0; for( auto stack : *pullSlotsOrder ) { if( stack->getPullPriority() > pullPrio ) break; index++; } pullSlotsOrder->add( dynamic_cast(slot->getThis()), index ); index = 0; for( auto stack : *pushSlotsOrder ) { if( stack->getPushPriority() > pushPrio ) break; index++; } pushSlotsOrder->add( slot, index ); }