From e2aabbf1500ed19c440ad36cd186cc24fd19ffe8 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 16 Oct 2019 13:28:16 +0200 Subject: [PATCH] Improved XPData's bindings. --- data/xp_data.cpp | 40 ++++++++++++++++++++++++---------------- data/xp_data.h | 9 +++------ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/data/xp_data.cpp b/data/xp_data.cpp index 270b217..a0e714a 100644 --- a/data/xp_data.cpp +++ b/data/xp_data.cpp @@ -1,27 +1,33 @@ #include "xp_data.h" +#include "../entity_enums.h" + int XPData::get_max_level() { - return _xp_required.size(); + return EntityEnums::MAX_LEVEL; } -int XPData::xp_required_for_level(int level) { - ERR_FAIL_INDEX_V(level, _xp_required.size(), 9999999); +int XPData::get_xp(int level) { + ERR_FAIL_INDEX_V(level, EntityEnums::MAX_LEVEL, 9999999); - return _xp_required.get(level); + return _xps.get(level); +} + +void XPData::set_xp(int level, int value) { + ERR_FAIL_INDEX(level, EntityEnums::MAX_LEVEL); + + _xps.set(level, value); } bool XPData::can_level_up(int level) { - return level < _xp_required.size(); -} - -PoolIntArray XPData::get_xps() { - return _xp_required; -} -void XPData::set_xps(const PoolIntArray &xps) { - _xp_required = xps; + return level < EntityEnums::MAX_LEVEL; } XPData::XPData() { + _xps.resize(EntityEnums::MAX_LEVEL); + + for (int i = 0; i < _xps.size(); ++i) { + _xps.set(i, 0); + } } XPData::~XPData() { @@ -29,10 +35,12 @@ XPData::~XPData() { void XPData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_max_level"), &XPData::get_max_level); - ClassDB::bind_method(D_METHOD("xp_required_for_level", "level"), &XPData::xp_required_for_level); + ClassDB::bind_method(D_METHOD("get_xp", "level"), &XPData::get_xp); + ClassDB::bind_method(D_METHOD("set_xp", "level", "value"), &XPData::set_xp); ClassDB::bind_method(D_METHOD("can_level_up", "level"), &XPData::can_level_up); - ClassDB::bind_method(D_METHOD("get_xps"), &XPData::get_xps); - ClassDB::bind_method(D_METHOD("set_xps", "auras"), &XPData::set_xps); - ADD_PROPERTY(PropertyInfo(Variant::POOL_INT_ARRAY, "xps"), "set_xps", "get_xps"); + ADD_GROUP("Level", "level_"); + for (int i = 0; i < EntityEnums::MAX_LEVEL; ++i) { + ADD_PROPERTYI(PropertyInfo(Variant::INT, "level_" + String::num(i + 1)), "set_xp", "get_xp", i); + } } diff --git a/data/xp_data.h b/data/xp_data.h index 2bca667..5e61c23 100644 --- a/data/xp_data.h +++ b/data/xp_data.h @@ -10,21 +10,18 @@ class XPData : public Resource { public: int get_max_level(); - int xp_required_for_level(int level); + int get_xp(int level); + void set_xp(int level, int value); bool can_level_up(int level); - PoolIntArray get_xps(); - void set_xps(const PoolIntArray &xps); - XPData(); ~XPData(); protected: static void _bind_methods(); - private: - PoolIntArray _xp_required; + Vector _xps; }; #endif