#ifndef _RYL_GAME_ITEM_FACTORY_H_ #define _RYL_GAME_ITEM_FACTORY_H_ #include #include #include #include #define DELETE_ITEM(p) if(p) { Item::CItemFactory::GetInstance().DeleteItem(p); (p)=0; } namespace Item { // Àü¹æ ÂüÁ¶ class CItem; class CItemMgr; struct ItemInfo; class CItemOwnerInfo { public: CItemOwnerInfo(const char* szName, unsigned long dwUID, unsigned long dwCID); const char* GetName() const { return m_szName; } unsigned long GetUID() const { return m_dwUID; } unsigned long GetCID() const { return m_dwCID; } private: enum { MAX_NAME = 16 }; char m_szName[MAX_NAME]; unsigned long m_dwUID; unsigned long m_dwCID; }; class CItemFactory { public: static CItemFactory& GetInstance(); unsigned __int64 GetItemUID() { return m_nCurrentUID; } unsigned __int64 GetNewItemUID() { return m_nCurrentUID++; } void SetItemUID(unsigned __int64 nCurrentUID) { m_nCurrentUID = nCurrentUID; } // Desc : ¾ÆÀÌÅÛ ½Ã¸®¾óÀÌ 0ÀÎ Àӽà ¾ÆÀÌÅÛÀ» »ý¼ºÇÑ´Ù. - ¾ÆÀÌÅÛ ½Ã¸®¾óÀ» ¸Å±âÁö ¾Ê´Â´Ù. CItem* CreateTempItem(const ItemInfo& itemInfo); // Desc : Á¾·ù·Î ¾ÆÀÌÅÛ »ý¼º(±âº» ´É·ÂÄ¡) - ¾ÆÀÌÅÛ ½Ã¸®¾óÀ» ¸Å±ä´Ù. CItem* CreateItem(const ItemInfo& itemInfo); // Desc : Á¾·ù ID·Î ¾ÆÀÌÅÛ »ý¼º(±âº» ´É·ÂÄ¡) - ¾ÆÀÌÅÛ ½Ã¸®¾óÀ» ¸Å±ä´Ù. CItem* CreateItem(unsigned short usProtoTypeID); // Desc : SerializeOutµÈ ¹öÆÛ·Î ¾ÆÀÌÅÛ »ý¼º. ¾ÆÀÌÅÛ ½Ã¸®¾ó ¸Å±âÁö ¾Ê´Â´Ù! // In : ¹öÆÛ, ¹öÆÛ Å©±â // Out : (Return)¼º°ø ¿©ºÎ, nParseLength_InOut - »ç¿ëÇÑ ¹öÆÛ Å©±â CItem* CreateItem(const char* lpSerializedItem_In, size_t& nParseLength_InOut); // ¾ÆÀÌÅÛÀ» »èÁ¦ÇÑ´Ù. void DeleteItem(CItem* lpDeleteItem); // --------------------------------------- // ¾ÆÀÌÅÛ º¹»ç üũ ¸ÞÄ¿´ÏÁò °³¿ä. (2004/08/11, by sparrowhawk) // ij¸¯ÅͰ¡ ·Î±×ÀÎÇÒ¶§, ij¸¯ÅÍ ¾ÆÀÌÅÛÀ» ¸ù¶¥ ¸Ê¿¡ ¶§·Á¹Ú´Â´Ù. // ¶§·Á¹Ú´Ù°¡, ¾È¹Ú¾ÆÁö¸é DB¿¡ ³²±ä´Ù. (ÀÌ¹Ì ÀÖ´ø ¾ÆÀÌÅÛ, ³ÖÀ»¶§ °É¸° ¾ÆÀÌÅÛ µÑ ´Ù..) // ³ªÁß¿¡ ¿Ö °ãÄ¡´Â ID°¡ »ý°å´ÂÁö ·Î±×Á¶»çÇØ¼­ ȸ¼öÇÏ´øÁö, ¹ö±×¸¦ °íÄ¡´øÁö ÇÑ´Ù.. // TODO : MapÀ» boost poolÀ» »ç¿ëÇÏ°í ½ÍÁö¸¸, Ŭ¶óÀÌ¾ðÆ®´Â boost¶óÀ̺귯¸®¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. // ³ªÁß¿¡ Ŭ¶óÀ̾ðÆ®ÂÊ¿¡ boost pool¶óÀ̺귯¸®¸¦ Ãß°¡ÇÏÀÚ.. // ¾ÆÀÌÅÛ UID¸Ê¿¡ ¾ÆÀÌÅÛ Ãß°¡. ¸®ÅϰªÀÌ NULLÀ̸é Ãß°¡ ¼º°ø. ¾Æ´Ï¸é Ãß°¡ ½ÇÆÐ(ÀÌ¹Ì ÀÖÀ½) CItemOwnerInfo* AddItemMap(unsigned __int64 dwItemUID, const CItemOwnerInfo& itemOwnerInfo); void RemoveItemMap(unsigned __int64 dwItemUID); void ClearItemMap(); private: CItemFactory(); ~CItemFactory(); typedef std::map, boost::fast_pool_allocator > > ItemSerialMap; unsigned __int64 m_nCurrentUID; ItemSerialMap m_ItemSerialMap; }; Item::CItem* CreateItemFromGiveInfo(Item::CItemMgr& itemMgr, CItemFactory& itemFactory, GiveItemInfo& giveItemInfo, Item::ItemPos itemPos); bool CreateItemDataFromGiveInfo(Item::CItemMgr& itemMgr, GiveItemInfo& giveItemInfo, char* szData, unsigned long& dwDataSize_InOut, unsigned __int64 dwItemUID, Item::ItemPos itemPos); }; #endif