diff --git a/entities/stats/simple_level_stat_data.cpp b/entities/stats/simple_level_stat_data.cpp index c9f5698..2100c9d 100644 --- a/entities/stats/simple_level_stat_data.cpp +++ b/entities/stats/simple_level_stat_data.cpp @@ -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 *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); } diff --git a/entities/stats/simple_level_stat_data.h b/entities/stats/simple_level_stat_data.h index 46790ae..cfe5301 100644 --- a/entities/stats/simple_level_stat_data.h +++ b/entities/stats/simple_level_stat_data.h @@ -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 *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 _stat_per_level; }; #endif