From 223276ef41b5417eb0ba8d79d55a898387dee54f Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 2 Oct 2019 11:35:30 +0200 Subject: [PATCH] Loot data container now uses the vector based bindings. --- loot/loot_data_container.cpp | 47 +++++++++++++++++++++++++++--------- loot/loot_data_container.h | 13 ++++++---- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/loot/loot_data_container.cpp b/loot/loot_data_container.cpp index 00f2564..2b16a6e 100644 --- a/loot/loot_data_container.cpp +++ b/loot/loot_data_container.cpp @@ -1,36 +1,59 @@ #include "loot_data_container.h" -Ref LootDataContainter::get_entry(int index) const { - ERR_FAIL_INDEX_V(index, MAX_ENTRIES, Ref(NULL)); +int LootDataContainter::get_num_entries() const { + return _entries.size(); +} - return _entries[index]; +Ref LootDataContainter::get_entry(int index) const { + ERR_FAIL_INDEX_V(index, _entries.size(), Ref(NULL)); + + return _entries.get(index); } void LootDataContainter::set_entry(const int index, const Ref ldb) { - ERR_FAIL_INDEX(index, MAX_ENTRIES); + ERR_FAIL_INDEX(index, _entries.size()); - _entries[index] = ldb; + _entries.set(index, ldb); } void LootDataContainter::_get_loot(Array into) { - for (int i = 0; i < MAX_ENTRIES; ++i) { + for (int i = 0; i < _entries.size(); ++i) { if (_entries[i].is_valid()) { - _entries[i]->get_loot(into); + _entries.get(i)->get_loot(into); } } } +Vector LootDataContainter::get_entries() { + Vector r; + for (int i = 0; i < _entries.size(); i++) { + r.push_back(_entries[i].get_ref_ptr()); + } + return r; +} +void LootDataContainter::set_entries(const Vector &entries) { + _entries.clear(); + for (int i = 0; i < entries.size(); i++) { + Ref entry = Ref(entries[i]); + + _entries.push_back(entry); + } +} + LootDataContainter::LootDataContainter() { } +LootDataContainter::~LootDataContainter() { + _entries.clear(); +} void LootDataContainter::_bind_methods() { ClassDB::bind_method(D_METHOD("_get_loot", "into"), &LootDataContainter::_get_loot); + ClassDB::bind_method(D_METHOD("get_num_entries"), &LootDataContainter::get_num_entries); + ClassDB::bind_method(D_METHOD("get_entry", "index"), &LootDataContainter::get_entry); ClassDB::bind_method(D_METHOD("set_entry", "index", "ldb"), &LootDataContainter::set_entry); - for (int i = 0; i < MAX_ENTRIES; ++i) { - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "entry_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "LootDataBase", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_entry", "get_entry", i); - } - - BIND_CONSTANT(MAX_ENTRIES); + ClassDB::bind_method(D_METHOD("get_entries"), &LootDataContainter::get_entries); + ClassDB::bind_method(D_METHOD("set_entries", "auras"), &LootDataContainter::set_entries); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "entries", PROPERTY_HINT_NONE, "17/17:LootDataBase", PROPERTY_USAGE_DEFAULT, "LootDataBase"), "set_entries", "get_entries"); } diff --git a/loot/loot_data_container.h b/loot/loot_data_container.h index 9f0609c..44f99ff 100644 --- a/loot/loot_data_container.h +++ b/loot/loot_data_container.h @@ -2,27 +2,30 @@ #define LOOT_DATA_CONTAINER_H #include "loot_data_base.h" +#include "core/vector.h" class LootDataContainter : public LootDataBase { GDCLASS(LootDataContainter, LootDataBase); public: + int get_num_entries() const; + Ref get_entry(const int index) const; void set_entry(const int index, const Ref ldb); void _get_loot(Array into); - LootDataContainter(); + Vector get_entries(); + void set_entries(const Vector &auras); - enum { - MAX_ENTRIES = 6, - }; + LootDataContainter(); + ~LootDataContainter(); protected: static void _bind_methods(); private: - Ref _entries[MAX_ENTRIES]; + Vector > _entries; }; #endif