📄 inventory.cpp
字号:
////////////////////////////////////////////////////////////// 酒捞袍阑 舅酒辑 歹茄促.////////////////////////////////////////////////////////////bool Inventory::addItem(Item* pItem) throw(InventoryFullException , Error){ __BEGIN_TRY Assert (pItem != NULL); _TPOINT pt; if (getEmptySlot(pItem, pt)) { addItem(pt.x, pt.y, pItem); return true; } return false; __END_CATCH}////////////////////////////////////////////////////////////// 酒捞袍阑 舅酒辑 歹茄促.////////////////////////////////////////////////////////////bool Inventory::addItem(Item* pItem, TPOINT& rpt) throw(InventoryFullException , Error){ __BEGIN_TRY Assert (pItem != NULL); _TPOINT pt; if (getEmptySlot(pItem, pt)) { rpt.x = pt.x; rpt.y = pt.y; addItem(pt.x, pt.y, pItem); return true; } rpt.x = 255; rpt.y = 255; return false; __END_CATCH}////////////////////////////////////////////////////////////// 酒捞袍阑 持阑 荐 乐绰 后 磊府甫 茫绰促.////////////////////////////////////////////////////////////bool Inventory::getEmptySlot(VolumeWidth_t ItemWidth, VolumeHeight_t ItemHeight, _TPOINT& p) throw(){ __BEGIN_TRY int x, y; int i, j; //--------------------------------------------------------- // grid狼 葛电(x,y)俊 pItem阑 眠啊且 荐 乐绰瘤 八荤秦夯促. //--------------------------------------------------------- int yLimit = m_Height - ItemHeight; int xLimit = m_Width - ItemWidth; int yPlusHeight, xPlusWidth; for (x = 0; x <= xLimit; x++) { xPlusWidth = x + ItemWidth; for (y = 0; y <= yLimit; y++) { yPlusHeight = y + ItemHeight; //--------------------------------------------------------- // (x,y)俊 持阑 荐 乐绰瘤 眉农.. //--------------------------------------------------------- bool bPlace = true; for (i = y; bPlace && i < yPlusHeight; i++) { for (j = x; bPlace && j < xPlusWidth; j++) { //--------------------------------------------------------- // 捞固 促弗 Item捞 乐绰 grid啊 窍唱扼档 乐促搁 眠啊且 荐 绝促. //--------------------------------------------------------- Item* pItem = m_pInventorySlot[j][i].getItem(); if (pItem != NULL) { bPlace = false; // 促澜俊 眉农且 巴... // y = i + pItem->getVolumeHeight() - 1; break; } } } //--------------------------------------------------------- // (x,y)俊 持阑 荐 乐绰 版快 //--------------------------------------------------------- if (bPlace) { p.x = x; p.y = y; //cout << (int)x << ", " << (int)y << " ]" << endl; return true; } } } return false; __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 酒捞袍阑 茫酒辑 瘤款促.////////////////////////////////////////////////////////////void Inventory::deleteItem(ObjectID_t ObjectID) throw(Error){ __BEGIN_TRY __BEGIN_DEBUG Item* pTargetItem = NULL; CoordInven_t x = 0; CoordInven_t y = 0; pTargetItem = findItemOID(ObjectID, x, y); if (pTargetItem != NULL) { deleteItem(x, y); } else Assert(false); __END_DEBUG __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 困摹俊辑 酒捞袍阑 瘤款促.// *** 林狼 *** // 1x1 酒捞袍捞 酒匆 版快, 谅螟 惑窜狼 谅钎甫 瘤沥秦林瘤// 臼栏搁 阐嘛茄 搬苞啊 惯积且 荐 乐促.////////////////////////////////////////////////////////////void Inventory::deleteItem(CoordInven_t X, CoordInven_t Y) throw(Error){ __BEGIN_TRY __BEGIN_DEBUG if (X < m_Width && Y < m_Height) { Item* pItem = m_pInventorySlot[X][Y].getItem(); //Assert(pItem != NULL); if (pItem != NULL) { // get Volume's Size Width, Height VolumeWidth_t ItemWidth = pItem->getVolumeWidth(); VolumeHeight_t ItemHeight = pItem->getVolumeHeight(); Assert(ItemWidth != 0); Assert(ItemHeight != 0); for (int x = X; x < X + ItemWidth ; x++) { for (int y = Y; y < Y + ItemHeight ; y++) { InventorySlot& slot = getInventorySlot(x, y); //if (slot.getItem()==pItem) { slot.deleteItem(); } /* // 促弗 巩力看促. - -; // Restore俊辑 轨颇捞绢 酒捞袍 剧颊 公扁甫 窍唱 眉农甫 救秦辑 弊犯促. // by sigi. 2002.8.29 广 else { // 牢亥配府俊 购啊 捞惑茄 泅惑捞 乐促绊 焊咯瘤骨肺 // 老窜 促款 泅惑阑 阜扁 困秦辑.. // 傈眉甫 八祸秦辑 酒捞袍阑 瘤款促. // by sigi. 2002.8.29 filelog("inventoryDeleteBug.txt", "deleteItem(%d, %d): class=%d, type=%d, volume(%d, %d), Wrong Item. (%d, %d) ", (int)X, (int)Y, (int)pItem->getItemClass(), (int)pItem->getItemType(), (int)ItemWidth, (int)ItemHeight, (int)x, (int)y); // 傈眉 八祸秦辑 pItem阑 瘤款促. for (int a=0; a<m_Width; a++) { for (int b=0; b<m_Height; b++) { InventorySlot& tempSlot = getInventorySlot(a, b); if (tempSlot.getItem()==pItem) { slot.deleteItem(); filelog("inventoryDeleteBug.txt", "delete another position(%d, %d)", a, b); } } } } */ } } m_TotalWeight -= (pItem->getWeight()* pItem->getNum()); m_TotalNum -= pItem->getNum(); } else { } } __END_DEBUG __END_CATCH}//////////////////////////////////////////////////////////////////////////////////// FIND METHODS//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// X, Y肺何磐 酒捞袍狼 农扁父怒狼 浇儿阑 八荤窍咯,// 粮犁窍绰 酒捞袍捞 乐栏搁 弊 器牢磐甫 府畔茄促.////////////////////////////////////////////////////////////Item* Inventory::searchItem(CoordInven_t X, CoordInven_t Y, Item* pItem, TPOINT & pt) throw(){ __BEGIN_TRY // get Volume's Size Width, Height VolumeWidth_t ItemWidth = pItem->getVolumeWidth(); VolumeHeight_t ItemHeight = pItem->getVolumeHeight(); if ((X + ItemWidth <= m_Width) && (Y + ItemHeight <= m_Height)) { for (int x = X; x < (X + ItemWidth); x++) { for (int y = Y; y < (Y + ItemHeight); y++) { if (hasItem(x, y)) { pt.x = x; pt.y = y; return m_pInventorySlot[x][y].getItem(); } } } } return NULL; __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 酒捞袍阑 茫酒辑 器牢磐甫 府畔茄促.////////////////////////////////////////////////////////////Item* Inventory::getItemWithItemID (ItemID_t itemID) throw (Error){ __BEGIN_TRY CoordInven_t x, y; return findItemIID(itemID, x, y); __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 骇飘甫 茫酒辑 器牢磐甫 府畔茄促.////////////////////////////////////////////////////////////Item* Inventory::getBeltWithItemID(ItemID_t itemID) throw (Error){ __BEGIN_TRY CoordInven_t x, y; return findItemIID(itemID, Item::ITEM_CLASS_BELT, x, y); __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 酒捞袍阑 茫酒辑 器牢磐甫 府畔茄促.////////////////////////////////////////////////////////////Item* Inventory::getItemWithObjectID(ObjectID_t objectID) throw (Error){ __BEGIN_TRY CoordInven_t x, y; return findItemOID(objectID, x, y); __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 酒捞袍阑 茫酒辑 器牢磐甫 府畔茄促.// 捞客 窃膊 弊 酒捞袍狼 谅螟 惑窜 谅钎档 鞍捞 焊郴霖促.////////////////////////////////////////////////////////////Item* Inventory::findItemOID(ObjectID_t id, CoordInven_t& X, CoordInven_t& Y) throw(){ __BEGIN_TRY for (int j=0; j<m_Height; j++) { for (int i=0; i<m_Width; i++) { InventorySlot& slot = getInventorySlot(i, j); Item* pItem = slot.getItem(); if (pItem != NULL && pItem->getObjectID() == id) { X = i; Y = j; return pItem; } } } return NULL; __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 酒捞袍阑 茫酒辑 器牢磐甫 府畔茄促.// 捞客 窃膊 弊 酒捞袍狼 谅螟 惑窜 谅钎档 鞍捞 焊郴霖促.////////////////////////////////////////////////////////////Item* Inventory::findItemIID(ItemID_t id, CoordInven_t& X, CoordInven_t& Y) throw(){ __BEGIN_TRY for (int y=0; y<m_Height; y++) { for (int x=0; x<m_Width; x++) { InventorySlot& slot = getInventorySlot(x, y); Item* pItem = slot.getItem(); if (pItem != NULL && pItem->getItemID() == id) { X = x; Y = y; return pItem; } } } return NULL; __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 id客 努贰胶肺 酒捞袍阑 茫酒辑 器牢磐甫 府畔茄促.// 捞客 窃膊 弊 酒捞袍狼 谅螟 惑窜 谅钎档 鞍捞 焊郴霖促.////////////////////////////////////////////////////////////Item* Inventory::findItemOID(ObjectID_t id, Item::ItemClass IClass, CoordInven_t& X, CoordInven_t& Y) throw(){ __BEGIN_TRY for (int j=0; j<m_Height; j++) { for (int i=0; i<m_Width; i++) { InventorySlot& slot = getInventorySlot(i, j); Item* pItem = slot.getItem(); if (pItem != NULL && pItem->getItemClass() == IClass && pItem->getObjectID() == id) { X = i; Y = j; return pItem; } } } return NULL; __END_CATCH}////////////////////////////////////////////////////////////// 瘤沥等 id客 努贰胶肺 酒捞袍阑 茫酒辑 器牢磐甫 府畔茄促.// 捞客 窃膊 弊 酒捞袍狼 谅螟 惑窜 谅钎档 鞍捞 焊郴霖促.////////////////////////////////////////////////////////////Item* Inventory::findItemIID(ItemID_t id, Item::ItemClass IClass, CoordInven_t& X, CoordInven_t& Y) throw(){ __BEGIN_TRY for (int y=0; y<m_Height; y++) { for (int x=0; x<m_Width; x++) { InventorySlot& slot = getInventorySlot(x, y); Item* pItem = slot.getItem(); if (pItem != NULL && pItem->getItemClass() == IClass && pItem->getItemID() == id) { X = x; Y = y; return pItem; } } } return NULL; __END_CATCH}/////////////////////////////////////////////////////////////////////////////////////// findItem// : ItemClass// Desctiption: 秦寸 牢亥配府俊 漂沥 Item Class狼 酒捞袍捞 粮犁窍绰 啊 眉农茄促.// 饭绢 付胶磐甫 磷看阑 版快 唱鸥唱绰 酒捞袍阑 背券窍扁 困秦辑 // 捞 荤恩捞 啊瘤绊 乐绰 漂沥 Item Class狼 酒捞袍阑 馆券茄促.//// 2002.09.04 厘全芒 /////////////////////////////////////////////////////////////////////////////////////Item* Inventory::findItem(Item::ItemClass IClass, ItemType_t itemType)//, CoordInven_t& X, CoordInven_t& Y) throw(){ __BEGIN_TRY for (int y=0; y<m_Height; y++) { for (int x=0; x<m_Width; x++) { InventorySlot& slot = getInventorySlot(x, y); Item* pItem = slot.getItem(); if (pItem != NULL && pItem->getItemClass() == IClass && (itemType==0xFFFF || pItem->getItemType() == itemType)) { //X = x; //Y = y; return pItem; } } } return NULL; __END_CATCH}Item* Inventory::findItem(Item::ItemClass IClass, ItemType_t itemType, CoordInven_t& X, CoordInven_t& Y) throw(){ __BEGIN_TRY for (int y=0; y<m_Height; y++) { for (int x=0; x<m_Width; x++) { InventorySlot& slot = getInventorySlot(x, y); Item* pItem = slot.getItem();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -