From c00a6041029c25def2bf2b563170354d026c402e Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 25 Apr 2020 14:38:52 +0200 Subject: [PATCH] Customizable stats - Part 1. The ESS singleton now stores stats, and they can be changed from the project settings. Stuff doesn't use it yet. --- singletons/ess.cpp | 98 ++++++++++++++++++++++++++++++++++++++++++++++ singletons/ess.h | 20 ++++++++++ 2 files changed, 118 insertions(+) diff --git a/singletons/ess.cpp b/singletons/ess.cpp index 6c430b7..e4e5946 100644 --- a/singletons/ess.cpp +++ b/singletons/ess.cpp @@ -177,6 +177,81 @@ void ESS::setup(const Ref &resource_db, const Ref 0) + _stat_enum_string += array[0]; + + for (int i = 0; i < array.size(); ++i) { + StringName s = StringName(array[i]); + + _stat_id_to_name.set(i, s); + _stat_name_to_id.set(s, i); + + _stat_enum_string += ","; + _stat_enum_string += array[i]; + } +} + +int ESS::stat_get_main_stat_count() const { + return _stat_main_stat_count; +} +void ESS::stat_set_main_stat_count(const int index) { + _stat_main_stat_count = index; +} + void ESS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_use_spell_points"), &ESS::get_use_spell_points); ClassDB::bind_method(D_METHOD("set_use_spell_points", "value"), &ESS::set_use_spell_points); @@ -238,6 +313,23 @@ void ESS::_bind_methods() { ClassDB::bind_method(D_METHOD("load_all"), &ESS::load_all); ClassDB::bind_method(D_METHOD("setup", "resource_db", "entity_spawner"), &ESS::setup); + + //Stats + ClassDB::bind_method(D_METHOD("stat_get_string"), &ESS::stat_get_string); + ClassDB::bind_method(D_METHOD("stat_set_string", "stat_enum_string"), &ESS::stat_set_string); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "stat_string"), "stat_set_string", "stat_get_string"); + + ClassDB::bind_method(D_METHOD("stat_get_id", "name"), &ESS::stat_get_id); + ClassDB::bind_method(D_METHOD("stat_get_name", "id"), &ESS::stat_get_name); + ClassDB::bind_method(D_METHOD("stat_get_count"), &ESS::stat_get_count); + + ClassDB::bind_method(D_METHOD("stats_get"), &ESS::stats_get); + ClassDB::bind_method(D_METHOD("stats_set", "array"), &ESS::stats_set); + ADD_PROPERTY(PropertyInfo(Variant::POOL_STRING_ARRAY, "stats"), "stats_set", "stats_get"); + + ClassDB::bind_method(D_METHOD("stat_get_main_stat_count"), &ESS::stat_get_main_stat_count); + ClassDB::bind_method(D_METHOD("stat_set_main_stat_count", "index"), &ESS::stat_set_main_stat_count); + ADD_PROPERTY(PropertyInfo(Variant::INT, "main_stat_count"), "stat_set_main_stat_count", "stat_get_main_stat_count"); } ESS::ESS() { @@ -257,6 +349,9 @@ ESS::ESS() { _ess_resource_db_path = GLOBAL_DEF("ess/data/ess_resource_db_path", ""); _ess_entity_spawner_path = GLOBAL_DEF("ess/data/ess_entity_spawner_path", ""); + stat_set_string(GLOBAL_DEF("ess/enums/stats", "Agility,Strenght,Stamina,Intellect,Spirit,Health,Speed,Global Cooldown,Haste")); + _stat_main_stat_count = GLOBAL_DEF("ess/enums/main_stat_count", 6); + if (!Engine::get_singleton()->is_editor_hint() && _automatic_load) { call_deferred("load_all"); } @@ -267,4 +362,7 @@ ESS::~ESS() { _ess_resource_db.unref(); _ess_entity_spawner.unref(); + + _stat_id_to_name.clear(); + _stat_name_to_id.clear(); } diff --git a/singletons/ess.h b/singletons/ess.h index f255119..f49e918 100644 --- a/singletons/ess.h +++ b/singletons/ess.h @@ -93,6 +93,20 @@ public: void setup(const Ref &resource_db, const Ref &entity_spawner); + //Stats + String stat_get_string() const; + void stat_set_string(const String &stat_enum_string); + + int stat_get_id(const StringName &name) const; + StringName stat_get_name(const int id) const; + int stat_get_count() const; + + PoolStringArray stats_get() const; + void stats_set(const PoolStringArray &array); + + int stat_get_main_stat_count() const; + void stat_set_main_stat_count(const int index); + ESS(); ~ESS(); @@ -117,6 +131,12 @@ private: bool _use_class_xp; bool _allow_class_spell_learning; bool _allow_class_recipe_learning; + + //Stats + Vector _stat_id_to_name; + HashMap _stat_name_to_id; + String _stat_enum_string; + int _stat_main_stat_count; }; #endif