metro-rts/src/item_db.cpp

58 lines
1.6 KiB
C++

#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{};