#include "item_db.hpp" ItemDB::StaticData::~StaticData() { if(this->hint != nullptr) delete this->hint; if(this->array_hint != nullptr) delete this->array_hint; for(Item *action : this->items) delete action; } gd::String &ItemDB::StaticData::get_hint() { if(this->hint == nullptr) this->hint = new gd::String("None"); return *this->hint; } gd::String &ItemDB::StaticData::get_array_hint() { if(this->array_hint == nullptr) this->array_hint = new gd::String("None"); return *this->array_hint; } ItemID ItemDB::register_item(Item *item, gd::String item_name) { item->id = ItemDB::data.items.size()+1; ItemDB::data.get_hint() += ","; ItemDB::data.get_hint() += item_name; ItemDB::data.get_array_hint() = gd::vformat("%s/%s:%s", gd::Variant::INT, gd::PROPERTY_HINT_ENUM, ItemDB::data.get_hint()); ItemDB::data.items.push_back(item); return item->get_id(); } Item const *ItemDB::get_item(ItemID index) { index -= 1; if(ItemDB::data.items.size() <= index || index < 0) { gd::UtilityFunctions::push_warning("Attempted to get pointer to non-existent item type by ID ", index); return nullptr; } return ItemDB::data.items[index]; } gd::String const &ItemDB::get_enum_hint() { return ItemDB::data.get_hint(); } gd::String const &ItemDB::get_array_hint() { return ItemDB::data.get_array_hint(); } Item const *ItemDB::get_item_by_name(gd::StringName item_name) { for(Item const *item : ItemDB::data.items) if(item->get_class() == item_name) return item; return nullptr; } ItemDB::StaticData ItemDB::data{};