Files
GDevelop/Extensions/Inventory/Inventory.cpp
T
Florian Rival a8559bfbbc Add clang-format to format (C++) source files automatically (#491)
* Update all CMakeLists of extensions to use clang-format
* Run clang-format on all Extensions
* Update GDCore CMakeLists.txt to add clang-format
* Run clang-format on GDCore files
* Update GDJS and GDCpp CMakeLists.txt to add clang-format
* Run clang-format on GDCpp and GDJS files
2018-05-09 15:57:38 -07:00

112 lines
2.4 KiB
C++

#include "Inventory.h"
#include "GDCore/String.h"
bool Inventory::Has(const gd::String& itemName) {
return items.find(itemName) != items.end() && items[itemName].count > 0;
}
size_t Inventory::Count(const gd::String& itemName) {
if (items.find(itemName) == items.end()) return 0;
return items[itemName].count;
}
bool Inventory::Add(const gd::String& itemName) {
if (items.find(itemName) == items.end()) {
MakeItemEntry(itemName);
}
auto& item = items[itemName];
if (item.unlimited || item.count < item.maxCount) {
item.count++;
return true;
}
return false;
}
bool Inventory::SetCount(const gd::String& itemName, size_t count) {
if (items.find(itemName) == items.end()) {
MakeItemEntry(itemName);
}
auto& item = items[itemName];
size_t newCount = item.unlimited ? count : std::min(count, item.maxCount);
item.count = newCount;
return item.unlimited || count <= item.maxCount;
}
bool Inventory::IsFull(const gd::String& itemName) {
if (items.find(itemName) == items.end()) return false;
auto& item = items[itemName];
return !item.unlimited && item.count >= item.maxCount;
}
bool Inventory::Remove(const gd::String& itemName) {
if (items.find(itemName) == items.end()) return false;
auto& item = items[itemName];
if (item.count > 0) {
item.count--;
if (item.count == 0) {
item.equipped = false;
}
return true;
}
return false;
}
void Inventory::SetMaximum(const gd::String& itemName, size_t maxCount) {
if (items.find(itemName) == items.end()) {
MakeItemEntry(itemName);
}
items[itemName].maxCount = maxCount;
items[itemName].unlimited = false;
}
void Inventory::SetUnlimited(const gd::String& itemName, bool enable) {
if (items.find(itemName) == items.end()) {
MakeItemEntry(itemName);
}
items[itemName].unlimited = enable;
}
void Inventory::MakeItemEntry(const gd::String& itemName) {
Item item;
items[itemName] = item;
}
bool Inventory::Equip(const gd::String& itemName, bool equip) {
if (items.find(itemName) == items.end()) {
return false;
}
auto& item = items[itemName];
if (!equip) {
item.equipped = false;
return true;
} else if (item.count > 0) {
item.equipped = true;
return true;
}
return false;
}
bool Inventory::IsEquipped(const gd::String& itemName) {
if (items.find(itemName) == items.end()) {
return false;
}
return items[itemName].equipped;
}
void Inventory::Clear() { items.clear(); }