#include "Item.h" #include "ItemRegistry.h" #include "external/nlohmann/json.hpp" #include #include namespace ZL { void Inventory::addItem(const std::string& itemId) { itemIds.push_back(itemId); std::cout << "Item added to inventory: " << itemId << std::endl; if (onItemAdded) onItemAdded(itemId); } void Inventory::removeItem(const std::string& itemId) { auto it = std::find(itemIds.begin(), itemIds.end(), itemId); if (it != itemIds.end()) { std::cout << "Item removed from inventory: " << itemId << std::endl; if (onItemRemoved) onItemRemoved(itemId); itemIds.erase(it); } } bool Inventory::hasItem(const std::string& itemId) const { return std::find(itemIds.begin(), itemIds.end(), itemId) != itemIds.end(); } std::vector Inventory::getItems() const { std::vector result; result.reserve(itemIds.size()); for (const auto& id : itemIds) { const Item* def = ItemRegistry::instance().findById(id); if (def) result.push_back(*def); } return result; } void Inventory::save(nlohmann::json& out) const { out["items"] = itemIds; } void Inventory::load(const nlohmann::json& in) { itemIds.clear(); if (!in.contains("items") || !in["items"].is_array()) return; for (const auto& j : in["items"]) { if (j.is_string()) { itemIds.push_back(j.get()); } else if (j.is_object()) { // Backward-compat with old save files that stored full item structs. const std::string id = j.value("id", ""); if (!id.empty()) itemIds.push_back(id); } } } } // namespace ZL