Improved XPData's bindings.

This commit is contained in:
Relintai 2019-10-16 13:28:16 +02:00
parent 53c66c2136
commit e2aabbf150
2 changed files with 27 additions and 22 deletions

View File

@ -1,27 +1,33 @@
#include "xp_data.h" #include "xp_data.h"
#include "../entity_enums.h"
int XPData::get_max_level() { int XPData::get_max_level() {
return _xp_required.size(); return EntityEnums::MAX_LEVEL;
} }
int XPData::xp_required_for_level(int level) { int XPData::get_xp(int level) {
ERR_FAIL_INDEX_V(level, _xp_required.size(), 9999999); 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) { bool XPData::can_level_up(int level) {
return level < _xp_required.size(); return level < EntityEnums::MAX_LEVEL;
}
PoolIntArray XPData::get_xps() {
return _xp_required;
}
void XPData::set_xps(const PoolIntArray &xps) {
_xp_required = xps;
} }
XPData::XPData() { XPData::XPData() {
_xps.resize(EntityEnums::MAX_LEVEL);
for (int i = 0; i < _xps.size(); ++i) {
_xps.set(i, 0);
}
} }
XPData::~XPData() { XPData::~XPData() {
@ -29,10 +35,12 @@ XPData::~XPData() {
void XPData::_bind_methods() { void XPData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_max_level"), &XPData::get_max_level); 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("can_level_up", "level"), &XPData::can_level_up);
ClassDB::bind_method(D_METHOD("get_xps"), &XPData::get_xps); ADD_GROUP("Level", "level_");
ClassDB::bind_method(D_METHOD("set_xps", "auras"), &XPData::set_xps); for (int i = 0; i < EntityEnums::MAX_LEVEL; ++i) {
ADD_PROPERTY(PropertyInfo(Variant::POOL_INT_ARRAY, "xps"), "set_xps", "get_xps"); ADD_PROPERTYI(PropertyInfo(Variant::INT, "level_" + String::num(i + 1)), "set_xp", "get_xp", i);
}
} }

View File

@ -10,21 +10,18 @@ class XPData : public Resource {
public: public:
int get_max_level(); 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); bool can_level_up(int level);
PoolIntArray get_xps();
void set_xps(const PoolIntArray &xps);
XPData(); XPData();
~XPData(); ~XPData();
protected: protected:
static void _bind_methods(); static void _bind_methods();
private: private:
PoolIntArray _xp_required; Vector<int> _xps;
}; };
#endif #endif