SimpleLevelStatData now uses the new flexible stat system.

This commit is contained in:
Relintai 2020-04-25 19:24:05 +02:00
parent f8f7d6bd0d
commit aa5cec5071
2 changed files with 65 additions and 90 deletions

View File

@ -22,61 +22,23 @@ SOFTWARE.
#include "simple_level_stat_data.h"
int SimpleLevelStatData::get_agility_per_level() {
return _agility_per_level;
}
void SimpleLevelStatData::set_agility_per_level(int value) {
_agility_per_level = value;
}
#include "../../singletons/ess.h"
int SimpleLevelStatData::get_strength_per_level() {
return _strength_per_level;
}
void SimpleLevelStatData::set_strength_per_level(int value) {
_strength_per_level = value;
}
int SimpleLevelStatData::get_stat_per_level(int main_stat) {
ERR_FAIL_INDEX_V(main_stat, ESS::get_instance()->stat_get_main_stat_count(), 0);
int SimpleLevelStatData::get_stamina_per_level() {
return _stamina_per_level;
}
void SimpleLevelStatData::set_stamina_per_level(int value) {
_stamina_per_level = value;
return _stat_per_level[main_stat];
}
void SimpleLevelStatData::set_stat_per_level(int main_stat, int value) {
ERR_FAIL_INDEX(main_stat, ESS::get_instance()->stat_get_main_stat_count());
int SimpleLevelStatData::get_intellect_per_level() {
return _intellect_per_level;
}
void SimpleLevelStatData::set_intellect_per_level(int value) {
_intellect_per_level = value;
}
int SimpleLevelStatData::get_spirit_per_level() {
return _spirit_per_level;
}
void SimpleLevelStatData::set_spirit_per_level(int value) {
_spirit_per_level = value;
_stat_per_level.set(main_stat, value);
}
int SimpleLevelStatData::_get_stat_diff(int main_stat, int old_level, int new_level) {
int s = 0;
ERR_FAIL_INDEX_V(main_stat, ESS::get_instance()->stat_get_main_stat_count(), 0);
switch (main_stat) {
case Stat::MAIN_STAT_AGILITY:
s = _agility_per_level;
break;
case Stat::MAIN_STAT_STRENGTH:
s = _strength_per_level;
break;
case Stat::MAIN_STAT_STAMINA:
s = _stamina_per_level;
break;
case Stat::MAIN_STAT_INTELLECT:
s = _intellect_per_level;
break;
case Stat::MAIN_STAT_SPIRIT:
s = _spirit_per_level;
break;
}
int s = _stat_per_level[main_stat];
s *= new_level - old_level;
@ -84,33 +46,59 @@ int SimpleLevelStatData::_get_stat_diff(int main_stat, int old_level, int new_le
}
SimpleLevelStatData::SimpleLevelStatData() {
_agility_per_level = 0;
_strength_per_level = 0;
_stamina_per_level = 0;
_intellect_per_level = 0;
_spirit_per_level = 0;
_stat_per_level.resize(ESS::get_instance()->stat_get_main_stat_count());
for (int i = 0; i < _stat_per_level.size(); ++i) {
_stat_per_level.set(i, 0);
}
}
bool SimpleLevelStatData::_set(const StringName &p_name, const Variant &p_value) {
if (ESS::get_instance()->stat_is_property(p_name)) {
int stat_id = ESS::get_instance()->stat_get_property_id(p_name);
if (_stat_per_level.size() < stat_id) {
_stat_per_level.resize(stat_id + 1);
}
_stat_per_level.set(stat_id, p_value);
return true;
}
return false;
}
bool SimpleLevelStatData::_get(const StringName &p_name, Variant &r_ret) const {
if (ESS::get_instance()->stat_is_property(p_name)) {
int stat_id = ESS::get_instance()->stat_get_property_id(p_name);
if (_stat_per_level.size() < stat_id) {
r_ret = 0;
return true;
}
r_ret = _stat_per_level[stat_id];
return true;
}
return false;
}
void SimpleLevelStatData::_get_property_list(List<PropertyInfo> *p_list) const {
//int property_usange = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_INTERNAL;
int property_usange = PROPERTY_USAGE_DEFAULT;
for (int i = 0; i < ESS::get_instance()->stat_get_main_stat_count(); ++i) {
p_list->push_back(PropertyInfo(Variant::INT, ESS::get_instance()->stat_get_property_name(i), PROPERTY_HINT_NONE, "", property_usange));
}
}
void SimpleLevelStatData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_agility_per_level"), &SimpleLevelStatData::get_agility_per_level);
ClassDB::bind_method(D_METHOD("set_agility_per_level", "value"), &SimpleLevelStatData::set_agility_per_level);
ADD_PROPERTY(PropertyInfo(Variant::INT, "agility_per_level"), "set_agility_per_level", "get_agility_per_level");
ClassDB::bind_method(D_METHOD("get_strength_per_level"), &SimpleLevelStatData::get_strength_per_level);
ClassDB::bind_method(D_METHOD("set_strength_per_level", "value"), &SimpleLevelStatData::set_strength_per_level);
ADD_PROPERTY(PropertyInfo(Variant::INT, "strength_per_level"), "set_strength_per_level", "get_strength_per_level");
ClassDB::bind_method(D_METHOD("get_stamina_per_level"), &SimpleLevelStatData::get_stamina_per_level);
ClassDB::bind_method(D_METHOD("set_stamina_per_level", "value"), &SimpleLevelStatData::set_stamina_per_level);
ADD_PROPERTY(PropertyInfo(Variant::INT, "stamina_per_level"), "set_stamina_per_level", "get_stamina_per_level");
ClassDB::bind_method(D_METHOD("get_intellect_per_level"), &SimpleLevelStatData::get_intellect_per_level);
ClassDB::bind_method(D_METHOD("set_intellect_per_level", "value"), &SimpleLevelStatData::set_intellect_per_level);
ADD_PROPERTY(PropertyInfo(Variant::INT, "intellect_per_level"), "set_intellect_per_level", "get_intellect_per_level");
ClassDB::bind_method(D_METHOD("get_spirit_per_level"), &SimpleLevelStatData::get_spirit_per_level);
ClassDB::bind_method(D_METHOD("set_spirit_per_level", "value"), &SimpleLevelStatData::set_spirit_per_level);
ADD_PROPERTY(PropertyInfo(Variant::INT, "spirit_per_level"), "set_spirit_per_level", "get_spirit_per_level");
ClassDB::bind_method(D_METHOD("get_stat_per_level"), &SimpleLevelStatData::get_stat_per_level);
ClassDB::bind_method(D_METHOD("set_stat_per_level", "value"), &SimpleLevelStatData::set_stat_per_level);
ClassDB::bind_method(D_METHOD("_get_stat_diff", "stat", "old_level", "new_level"), &SimpleLevelStatData::_get_stat_diff);
}

View File

@ -31,34 +31,21 @@ class SimpleLevelStatData : public LevelStatData {
GDCLASS(SimpleLevelStatData, LevelStatData);
public:
int get_agility_per_level();
void set_agility_per_level(int value);
int get_strength_per_level();
void set_strength_per_level(int value);
int get_stamina_per_level();
void set_stamina_per_level(int value);
int get_intellect_per_level();
void set_intellect_per_level(int value);
int get_spirit_per_level();
void set_spirit_per_level(int value);
int get_stat_per_level(int main_stat);
void set_stat_per_level(int main_stat, int value);
int _get_stat_diff(int stat, int old_level, int new_level);
SimpleLevelStatData();
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
static void _bind_methods();
private:
int _agility_per_level;
int _strength_per_level;
int _stamina_per_level;
int _intellect_per_level;
int _spirit_per_level;
Vector<int> _stat_per_level;
};
#endif