mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-21 01:25:32 -04:00
a8559bfbbc
* 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
112 lines
2.4 KiB
C++
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(); }
|