diff options
Diffstat (limited to 'src/resources/item')
-rw-r--r-- | src/resources/item/item.cpp | 182 | ||||
-rw-r--r-- | src/resources/item/item.h | 249 |
2 files changed, 431 insertions, 0 deletions
diff --git a/src/resources/item/item.cpp b/src/resources/item/item.cpp new file mode 100644 index 000000000..2292a66eb --- /dev/null +++ b/src/resources/item/item.cpp @@ -0,0 +1,182 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "resources/item/item.h" + +#include "configuration.h" +#include "dragdrop.h" +#include "itemcolormanager.h" + +#include "gui/theme.h" + +#include "resources/iteminfo.h" +#include "resources/resourcemanager.h" + +#include "net/serverfeatures.h" + +#include "debug.h" + +DragDrop dragDrop(nullptr, DragDropSource::Empty); + +Item::Item(const int id, + const int type, + const int quantity, + const uint8_t refine, + const ItemColor color, + const Identified identified, + const Damaged damaged, + const Favorite favorite, + const Equipm equipment, + const Equipped equipped) : + mId(0), + mColor(ItemColor_zero), + mQuantity(quantity), + mTag(0), + mImage(nullptr), + mDescription(), + mTags(), + mCards(), + mRefine(refine), + mInvIndex(0), + mType(type), + mEquipment(equipment), + mEquipped(equipped), + mInEquipment(false), + mIdentified(identified), + mDamaged(damaged), + mFavorite(favorite) +{ + setId(id, color); + for (int f = 0; f < 4; f ++) + mCards[f] = 0; +} + +Item::~Item() +{ + if (mImage) + { + mImage->decRef(); + mImage = nullptr; + } + dragDrop.clearItem(this); +} + +void Item::setId(const int id, + const ItemColor color) +{ + mId = id; + mColor = color; + + // Types 0 and 1 are not equippable items. + mEquipment = fromBool(id && static_cast<int>(getInfo().getType()) + >= 2, Equipm); + + if (mImage) + mImage->decRef(); + + const ItemInfo &info = getInfo(); + mTags = info.getTags(); + + const std::string dye = combineDye2(paths.getStringValue( + "itemIcons").append(info.getDisplay().image), + info.getDyeIconColorsString(color)); + mImage = resourceManager->getImage(dye); + + if (!mImage) + { + mImage = Theme::getImageFromTheme(paths.getValue("unknownItemFile", + "unknown-item.png")); + } +} + +bool Item::isHaveTag(const int tagId) const +{ + const std::map <int, int>::const_iterator it = mTags.find(tagId); + if (it == mTags.end()) + return false; + return (*it).second > 0; +} + +Image *Item::getImage(const int id, + const ItemColor color) +{ + const ItemInfo &info = ItemDB::get(id); + Image *image = resourceManager->getImage(combineDye2(paths.getStringValue( + "itemIcons").append(info.getDisplay().image), + info.getDyeIconColorsString(color))); + + if (!image) + image = Theme::getImageFromTheme("unknown-item.png"); + return image; +} + +std::string Item::getName() const +{ + const ItemInfo &info = ItemDB::get(mId); + if (serverFeatures->haveItemColors()) + return info.getName(mColor); + else + return info.getName(); +} + +void Item::setCard(const int index, const int id) +{ + if (index < 0 || index >= maxCards) + return; + mCards[index] = id; +} + +int Item::getCard(const int index) const +{ + if (index < 0 || index >= maxCards) + return 0; + return mCards[index]; +} + +void Item::setCards(const int *const cards, const int size) +{ + if (size < 0 || !cards) + return; + int sz = size; + if (sz > maxCards) + sz = maxCards; + for (int f = 0; f < sz; f ++) + mCards[f] = cards[f]; +} + +void Item::addCard(const int card) +{ + for (int f = 0; f < maxCards; f ++) + { + if (!mCards[f]) + { + mCards[f] = card; + return; + } + } +} + +void Item::updateColor() +{ + if (serverFeatures && serverFeatures->haveItemColors()) + setId(mId, ItemColorManager::getColorFromCards(&mCards[0])); +} diff --git a/src/resources/item/item.h b/src/resources/item/item.h new file mode 100644 index 000000000..ed53b3241 --- /dev/null +++ b/src/resources/item/item.h @@ -0,0 +1,249 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef RESOURCES_ITEM_ITEM_H +#define RESOURCES_ITEM_ITEM_H + +#include "enums/simpletypes/damaged.h" +#include "enums/simpletypes/equipm.h" +#include "enums/simpletypes/equipped.h" +#include "enums/simpletypes/favorite.h" +#include "enums/simpletypes/identified.h" +#include "enums/simpletypes/itemcolor.h" + +#include "resources/db/itemdb.h" + +#include "localconsts.h" + +class Image; + +const int maxCards = 4; + +/** + * Represents one or more instances of a certain item type. + */ +class Item notfinal +{ + public: + /** + * Constructor. + */ + Item(const int id, + const int type, + const int quantity, + const uint8_t refine, + const ItemColor color, + const Identified identified, + const Damaged damaged, + const Favorite favorite, + const Equipm equipment, + const Equipped equipped); + + A_DELETE_COPY(Item) + + /** + * Destructor. + */ + virtual ~Item(); + + /** + * Sets the item id, color the item type. + */ + void setId(const int id, const ItemColor color); + + /** + * Returns the item id. + */ + int getId() const A_WARN_UNUSED + { return mId; } + + /** + * Returns the item image. + */ + Image *getImage() const A_WARN_UNUSED + { return mImage; } + + /** + * Sets the number of items. + */ + void setQuantity(const int quantity) + { mQuantity = quantity; } + + /** + * Increases the number of items by the given amount. + */ + void increaseQuantity(const int amount) + { mQuantity += amount; } + + /** + * Returns the number of items. + */ + int getQuantity() const A_WARN_UNUSED + { return mQuantity; } + + /** + * Sets whether this item is considered equipment. + */ + void setEquipment(const Equipm equipment) + { mEquipment = equipment; } + + /** + * Returns whether this item is considered equipment. + */ + Equipm isEquipment() const A_WARN_UNUSED + { return mEquipment; } + + /** + * Sets whether this item is equipped. + */ + void setEquipped(const Equipped equipped) + { mEquipped = equipped; } + + /** + * Returns whether this item is equipped. + */ + Equipped isEquipped() const A_WARN_UNUSED + { return mEquipped; } + + /** + * Sets this item refine level. + */ + void setRefine(const uint8_t refine) + { mRefine = refine; } + + /** + * Returns this item refine level. + */ + uint8_t getRefine() const A_WARN_UNUSED + { return mRefine; } + + /** + * Sets whether this item is in equipment. + */ + void setInEquipment(const bool inEquipment) + { mInEquipment = inEquipment; } + + /** + * Returns whether this item is in equipment. + */ + bool isInEquipment() const A_WARN_UNUSED + { return mInEquipment; } + + /** + * Sets the inventory index of this item. + */ + void setInvIndex(const int index) + { mInvIndex = index; } + + /** + * Returns the inventory index of this item. + */ + int getInvIndex() const A_WARN_UNUSED + { return mInvIndex; } + + /** + * Returns information about this item type. + */ + const ItemInfo &getInfo() const A_WARN_UNUSED + { return ItemDB::get(mId); } + + std::string getName() const A_WARN_UNUSED; + + static Image *getImage(const int id, + const ItemColor color) A_WARN_UNUSED; + + bool isHaveTag(const int tagId) const A_WARN_UNUSED; + + ItemColor getColor() const A_WARN_UNUSED + { return mColor; } + + void setColor(const ItemColor color) + { mColor = color; } + + const std::string &getDescription() const A_WARN_UNUSED + { return mDescription; } + + void setIdentified(const Identified b) + { mIdentified = b; } + + Identified getIdentified() const A_WARN_UNUSED + { return mIdentified; } + + void setDamaged(const Damaged b) + { mDamaged = b; } + + Damaged getDamaged() const A_WARN_UNUSED + { return mDamaged; } + + void setFavorite(const Favorite b) + { mFavorite = b; } + + Favorite getFavorite() const A_WARN_UNUSED + { return mFavorite; } + + void setCard(const int index, const int id); + + int getCard(const int index) const; + + void setCards(const int *const cards, const int size); + + const int *getCards() const + { return mCards; } + + void setType(const int type) + { mType = type; } + + int getType() const A_WARN_UNUSED + { return mType; } + + void setTag(const int tag) + { mTag = tag; } + + int getTag() const A_WARN_UNUSED + { return mTag; } + + void addCard(const int card); + + void updateColor(); + + int mId; /**< Item type id. */ + ItemColor mColor; + int mQuantity; /**< Number of items. */ + int mTag; + + protected: + Image *mImage; /**< Item image. */ + std::string mDescription; + std::map <int, int> mTags; + int mCards[maxCards]; + uint8_t mRefine; /**< Item refine level. */ + int mInvIndex; /**< Inventory index. */ + int mType; /**< Item type. */ + Equipm mEquipment; /**< Item is equipment. */ + Equipped mEquipped; /**< Item is equipped. */ + bool mInEquipment; /**< Item is in equipment */ + Identified mIdentified; + Damaged mDamaged; + Favorite mFavorite; +}; + +#endif // RESOURCES_ITEM_ITEM_H |