From 396c49542cd85eee1081135de47749075fc734bf Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 8 Sep 2019 23:10:22 +0200 Subject: [PATCH] Finished up the previous change in CharacterClass. Added some temporary comments. --- data/MobSpellDataEntry.h | 16 ++++ data/character_class.cpp | 154 +++++++++++++++++++++------------------ data/character_class.h | 22 +++--- entities/entity.cpp | 2 +- 4 files changed, 114 insertions(+), 80 deletions(-) diff --git a/data/MobSpellDataEntry.h b/data/MobSpellDataEntry.h index 3ee4701..d9fa1a2 100644 --- a/data/MobSpellDataEntry.h +++ b/data/MobSpellDataEntry.h @@ -3,6 +3,22 @@ #include "core/object.h" +//bind, att to charclass, add virtual _should use, add should_use +//keep type, and prio +//foeach all keep all, should use, use highest prio +//use one per frame +//basic setup script all types into a class, then have the ability to customize +//can have other classes too, this could work like util ai + +//AIAction is a resource +//AIAction base have the virtuals, and c++ stuff to call them +//this inheroths ai action + +//AIMoveAction -> kiter classes have higher prio + +//this is attach only (for now) + + enum class MobSpellDataType{ ATTACK, CHARGE, diff --git a/data/character_class.cpp b/data/character_class.cpp index aaa4dc1..1a8793d 100644 --- a/data/character_class.cpp +++ b/data/character_class.cpp @@ -46,6 +46,44 @@ void CharacterClass::set_stat_data(Ref value) { _stat_data = value; } +//// SPECS //// + +int CharacterClass::get_num_specs() { + return _specs.size(); +} +void CharacterClass::set_num_specs(int value) { + _specs.resize(value); +} + +Ref CharacterClass::get_spec(int index) const { + ERR_FAIL_INDEX_V(index, _specs.size(), Ref()); + + return _specs[index]; +} +void CharacterClass::set_spec(int index, Ref spec) { + ERR_FAIL_INDEX(index, _specs.size()); + + _specs.set(index, Ref(spec)); +} + +Vector CharacterClass::get_specs() { + Vector r; + for (int i = 0; i < _specs.size(); i++) { + r.push_back(_specs[i].get_ref_ptr()); + } + return r; +} +void CharacterClass::set_specs(const Vector &specs) { + _specs.clear(); + for (int i = 0; i < specs.size(); i++) { + Ref spec = Ref(specs[i]); + + _specs.push_back(spec); + } +} + +//// SPELLS //// + int CharacterClass::get_num_spells() { return _spells.size(); } @@ -80,39 +118,13 @@ void CharacterClass::set_spells(const Vector &spells) { } } -int CharacterClass::get_num_specs() { - return _specs.size(); +//// AURAS //// + +int CharacterClass::get_num_auras() { + return _auras.size(); } - -void CharacterClass::set_num_specs(int value) { - _specs.resize(value); -} - -Ref CharacterClass::get_spec(int index) const { - ERR_FAIL_INDEX_V(index, _specs.size(), Ref()); - - return _specs[index]; -} -void CharacterClass::set_spec(int index, Ref spec) { - ERR_FAIL_INDEX(index, _specs.size()); - - _specs.set(index, Ref(spec)); -} - -Vector CharacterClass::get_specs() { - Vector r; - for (int i = 0; i < _specs.size(); i++) { - r.push_back(_specs[i].get_ref_ptr()); - } - return r; -} -void CharacterClass::set_specs(const Vector &specs) { - _specs.clear(); - for (int i = 0; i < specs.size(); i++) { - Ref spec = Ref(specs[i]); - - _specs.push_back(spec); - } +void CharacterClass::set_num_auras(int value) { + _auras.resize(value); } Ref CharacterClass::get_aura(int index) { @@ -126,6 +138,23 @@ void CharacterClass::set_aura(int index, Ref aura) { _auras.set(index, aura); } +Vector CharacterClass::get_auras() { + Vector r; + for (int i = 0; i < _auras.size(); i++) { + r.push_back(_auras[i].get_ref_ptr()); + } + return r; +} +void CharacterClass::set_auras(const Vector &auras) { + _auras.clear(); + for (int i = 0; i < auras.size(); i++) { + Ref aura = Ref(auras[i]); + + _auras.push_back(aura); + } +} + + void CharacterClass::setup_resources(Entity *entity) { if (has_method("_setup_resources")) call("_setup_resources", entity); @@ -160,7 +189,7 @@ void CharacterClass::set_inspector_max_spells(int value) { }*/ void CharacterClass::start_casting(int spell_id, Entity *caster, float spellScale) { - for (int i = 0; i < MAX_SPELLS; i++) { + for (int i = 0; i < _spells.size(); i++) { Ref s = _spells[i]; if (s == NULL) { @@ -716,59 +745,46 @@ void CharacterClass::_bind_methods() { //// Specs //// ClassDB::bind_method(D_METHOD("get_num_specs"), &CharacterClass::get_num_specs); ClassDB::bind_method(D_METHOD("set_num_specs", "value"), &CharacterClass::set_num_specs); - ADD_PROPERTY(PropertyInfo(Variant::INT, "num_specs", PROPERTY_HINT_RANGE, "0," + itos(MAX_SPECS), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_num_specs", "get_num_specs"); ClassDB::bind_method(D_METHOD("get_spec", "index"), &CharacterClass::get_spec); ClassDB::bind_method(D_METHOD("set_spec", "index", "spec"), &CharacterClass::set_spec); - for (int i = 0; i < MAX_SPECS; i++) { - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "Spec_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "CharacterSpec", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_spec", "get_spec", i); - } - - //// AURAS //// - - ClassDB::bind_method(D_METHOD("get_aura", "index"), &CharacterClass::get_aura); - ClassDB::bind_method(D_METHOD("set_aura", "index", "aura"), &CharacterClass::set_aura); - - ADD_GROUP("Auras", "Aura"); - for (int i = 0; i < MAX_AURAS; ++i) { - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "Aura_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Aura", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_aura", "get_aura", i); - } - - //// Spell //// + ClassDB::bind_method(D_METHOD("get_specs"), &CharacterClass::get_specs); + ClassDB::bind_method(D_METHOD("set_specs", "specs"), &CharacterClass::set_specs); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "specs", PROPERTY_HINT_NONE, "17/17:CharacterSpec", PROPERTY_USAGE_DEFAULT, "CharacterSpec"), "set_specs", "get_specs"); + + //// Spell //// ClassDB::bind_method(D_METHOD("get_num_spells"), &CharacterClass::get_num_spells); ClassDB::bind_method(D_METHOD("set_num_spells", "value"), &CharacterClass::set_num_spells); - ADD_PROPERTY(PropertyInfo(Variant::INT, "num_spells", PROPERTY_HINT_RANGE, "0," + itos(MAX_SPELLS), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_num_spells", "get_num_spells"); - - ClassDB::bind_method(D_METHOD("get_current_spell_page"), &CharacterClass::get_current_spell_page); - ClassDB::bind_method(D_METHOD("set_current_spell_page", "value"), &CharacterClass::set_current_spell_page); - ADD_PROPERTY(PropertyInfo(Variant::INT, "current_spell_page", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_current_spell_page", "get_current_spell_page"); ClassDB::bind_method(D_METHOD("get_spell", "index"), &CharacterClass::get_spell); ClassDB::bind_method(D_METHOD("set_spell", "index", "spell"), &CharacterClass::set_spell); - for (int i = 0; i < MAX_SPELLS; ++i) { - ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "Spell_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Spell", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_spell", "get_spell", i); - } + ClassDB::bind_method(D_METHOD("get_spells"), &CharacterClass::get_spells); + ClassDB::bind_method(D_METHOD("set_spells", "spells"), &CharacterClass::set_spells); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "spells", PROPERTY_HINT_NONE, "17/17:Spell", PROPERTY_USAGE_DEFAULT, "Spell"), "set_spells", "get_spells"); + + //// AURAS //// + ClassDB::bind_method(D_METHOD("get_num_auras"), &CharacterClass::get_num_auras); + ClassDB::bind_method(D_METHOD("set_num_auras", "value"), &CharacterClass::set_num_auras); + + ClassDB::bind_method(D_METHOD("get_aura", "index"), &CharacterClass::get_aura); + ClassDB::bind_method(D_METHOD("set_aura", "index", "aura"), &CharacterClass::set_aura); + + ClassDB::bind_method(D_METHOD("get_auras"), &CharacterClass::get_auras); + ClassDB::bind_method(D_METHOD("set_auras", "auras"), &CharacterClass::set_auras); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "auras", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_auras", "get_auras"); + - BIND_CONSTANT(MAX_SPELLS); - BIND_CONSTANT(MAX_SPECS); - BIND_CONSTANT(MAX_AURAS); } CharacterClass::CharacterClass() { //_spells = memnew(Vector >()); _id = 0; - - _num_specs = 0; - _num_spells = 0; - _current_spell_page = 0; } CharacterClass::~CharacterClass() { - //memdelete(_spells); - - //for (int i = 0; i < MAX_SPELLS; ++i) { - //_spells[i] = Ref(NULL); - //} + _spells.clear(); + _specs.clear(); + _auras.clear(); } diff --git a/data/character_class.h b/data/character_class.h index 8c04487..3e9b7a4 100644 --- a/data/character_class.h +++ b/data/character_class.h @@ -49,16 +49,7 @@ public: int get_player_resource_type(); void set_player_resource_type(int value); - int get_num_spells(); - void set_num_spells(int value); - - Ref get_spell(int index); - void set_spell(int index, Ref spell); - - Vector get_spells(); - void set_spells(const Vector &spells); - - + //Specs int get_num_specs(); void set_num_specs(int value); @@ -68,7 +59,17 @@ public: Vector get_specs(); void set_specs(const Vector &specs); + //Spells + int get_num_spells(); + void set_num_spells(int value); + Ref get_spell(int index); + void set_spell(int index, Ref spell); + + Vector get_spells(); + void set_spells(const Vector &spells); + + //Auras int get_num_auras(); void set_num_auras(int value); @@ -78,6 +79,7 @@ public: Vector get_auras(); void set_auras(const Vector &auras); + void setup_resources(Entity *entity); //void _setup_resources(Entity *entity); diff --git a/entities/entity.cpp b/entities/entity.cpp index b18db6e..dddbec3 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -414,7 +414,7 @@ void Entity::sinitialize_stats() { cc->get_stat_data()->get_stat_for_stat(get_melee_damage()); cc->get_stat_data()->get_stat_for_stat(get_spell_damage()); - for (int i = 0; i < CharacterClass::MAX_AURAS; ++i) { + for (int i = 0; i < cc->get_num_auras(); ++i) { Ref a = cc->get_aura(i); if (a.is_valid()) {