mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-04-17 21:26:35 +02:00
SimpleLevelStatData now uses the new flexible stat system.
This commit is contained in:
parent
f8f7d6bd0d
commit
aa5cec5071
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user