mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-04-19 21:33:15 +02:00
Now caster aura apply, and target aura apply in Spell are done using Arrays. Also added a new array "Apply Auras On Learn".
This commit is contained in:
parent
e65b2f4ecb
commit
d87668f779
@ -473,7 +473,7 @@ void ItemTemplate::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_aura", "index", "aura"), &ItemTemplate::set_aura);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_auras"), &ItemTemplate::get_auras);
|
||||
ClassDB::bind_method(D_METHOD("set_auras", "spells"), &ItemTemplate::set_auras);
|
||||
ClassDB::bind_method(D_METHOD("set_auras", "auras"), &ItemTemplate::set_auras);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "auras", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_auras", "get_auras");
|
||||
|
||||
//StatMods Property binds
|
||||
|
278
data/spell.cpp
278
data/spell.cpp
@ -51,58 +51,6 @@ void Spell::set_target_relation_type(TargetRelationType value) {
|
||||
_target_relation_type = value;
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_caster_aura_apply() {
|
||||
return Ref<Aura>(_caster_aura_apply);
|
||||
}
|
||||
|
||||
void Spell::set_caster_aura_apply(Ref<Aura> value) {
|
||||
_caster_aura_apply = (*value);
|
||||
|
||||
if (_caster_aura_apply_ref)
|
||||
memdelete(_caster_aura_apply_ref);
|
||||
|
||||
_caster_aura_apply_ref = memnew(Ref<Aura>(value));
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_caster_aura_apply2() {
|
||||
return Ref<Aura>(_caster_aura_apply2);
|
||||
}
|
||||
|
||||
void Spell::set_caster_aura_apply2(Ref<Aura> value) {
|
||||
_caster_aura_apply2 = (*value);
|
||||
|
||||
if (_caster_aura_apply2_ref)
|
||||
memdelete(_caster_aura_apply2_ref);
|
||||
|
||||
_caster_aura_apply2_ref = memnew(Ref<Aura>(value));
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_target_aura_apply() {
|
||||
return Ref<Aura>(_target_aura_apply);
|
||||
}
|
||||
|
||||
void Spell::set_target_aura_apply(Ref<Aura> value) {
|
||||
_target_aura_apply = (*value);
|
||||
|
||||
if (_target_aura_apply_ref)
|
||||
memdelete(_target_aura_apply_ref);
|
||||
|
||||
_target_aura_apply_ref = memnew(Ref<Aura>(value));
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_target_aura_apply2() {
|
||||
return Ref<Aura>(_target_aura_apply2);
|
||||
}
|
||||
|
||||
void Spell::set_target_aura_apply2(Ref<Aura> value) {
|
||||
_target_aura_apply2 = (*value);
|
||||
|
||||
if (_target_aura_apply2_ref)
|
||||
memdelete(_target_aura_apply2_ref);
|
||||
|
||||
_target_aura_apply2_ref = memnew(Ref<Aura>(value));
|
||||
}
|
||||
|
||||
int Spell::get_level() {
|
||||
return _level;
|
||||
}
|
||||
@ -251,6 +199,116 @@ float Spell::get_absorb_scale_for_level(int level) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
//// Caster Aura Apply ////
|
||||
|
||||
int Spell::get_num_caster_aura_applys() {
|
||||
return _caster_aura_applys.size();
|
||||
}
|
||||
void Spell::set_num_caster_aura_applys(int value) {
|
||||
_caster_aura_applys.resize(value);
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_caster_aura_apply(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _caster_aura_applys.size(), Ref<Aura>());
|
||||
|
||||
return _caster_aura_applys[index];
|
||||
}
|
||||
void Spell::set_caster_aura_apply(int index, Ref<Aura> caster_aura_apply) {
|
||||
ERR_FAIL_INDEX(index, _caster_aura_applys.size());
|
||||
|
||||
_caster_aura_applys.set(index, Ref<Aura>(caster_aura_apply));
|
||||
}
|
||||
|
||||
Vector<Variant> Spell::get_caster_aura_applys() {
|
||||
Vector<Variant> r;
|
||||
for (int i = 0; i < _caster_aura_applys.size(); i++) {
|
||||
r.push_back(_caster_aura_applys[i].get_ref_ptr());
|
||||
}
|
||||
return r;
|
||||
}
|
||||
void Spell::set_caster_aura_applys(const Vector<Variant> &caster_aura_applys) {
|
||||
_caster_aura_applys.clear();
|
||||
for (int i = 0; i < caster_aura_applys.size(); i++) {
|
||||
Ref<Aura> aura = Ref<Aura>(caster_aura_applys[i]);
|
||||
|
||||
_caster_aura_applys.push_back(aura);
|
||||
}
|
||||
}
|
||||
|
||||
//// Target Aura Apply ////
|
||||
|
||||
int Spell::get_num_target_aura_applys() {
|
||||
return _target_aura_applys.size();
|
||||
}
|
||||
void Spell::set_num_target_aura_applys(int value) {
|
||||
_target_aura_applys.resize(value);
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_target_aura_apply(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _target_aura_applys.size(), Ref<Aura>());
|
||||
|
||||
return _target_aura_applys[index];
|
||||
}
|
||||
void Spell::set_target_aura_apply(int index, Ref<Aura> target_aura_apply) {
|
||||
ERR_FAIL_INDEX(index, _target_aura_applys.size());
|
||||
|
||||
_target_aura_applys.set(index, Ref<Aura>(target_aura_apply));
|
||||
}
|
||||
|
||||
Vector<Variant> Spell::get_target_aura_applys() {
|
||||
Vector<Variant> r;
|
||||
for (int i = 0; i < _target_aura_applys.size(); i++) {
|
||||
r.push_back(_target_aura_applys[i].get_ref_ptr());
|
||||
}
|
||||
return r;
|
||||
}
|
||||
void Spell::set_target_aura_applys(const Vector<Variant> &target_aura_applys) {
|
||||
_target_aura_applys.clear();
|
||||
for (int i = 0; i < target_aura_applys.size(); i++) {
|
||||
Ref<Aura> aura = Ref<Aura>(target_aura_applys[i]);
|
||||
|
||||
_target_aura_applys.push_back(aura);
|
||||
}
|
||||
}
|
||||
|
||||
//// Apply Auras On Learn ////
|
||||
|
||||
int Spell::get_num_on_learn_auras() {
|
||||
return _on_learn_auras.size();
|
||||
}
|
||||
void Spell::set_num_on_learn_auras(int value) {
|
||||
_on_learn_auras.resize(value);
|
||||
}
|
||||
|
||||
Ref<Aura> Spell::get_on_learn_aura(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _on_learn_auras.size(), Ref<Aura>());
|
||||
|
||||
return _on_learn_auras[index];
|
||||
}
|
||||
void Spell::set_on_learn_aura(int index, Ref<Aura> on_learn_aura_apply) {
|
||||
ERR_FAIL_INDEX(index, _on_learn_auras.size());
|
||||
|
||||
_on_learn_auras.set(index, Ref<Aura>(on_learn_aura_apply));
|
||||
}
|
||||
|
||||
Vector<Variant> Spell::get_on_learn_auras() {
|
||||
Vector<Variant> r;
|
||||
for (int i = 0; i < _on_learn_auras.size(); i++) {
|
||||
r.push_back(_on_learn_auras[i].get_ref_ptr());
|
||||
}
|
||||
return r;
|
||||
}
|
||||
void Spell::set_on_learn_auras(const Vector<Variant> &on_learn_aura_applys) {
|
||||
_on_learn_auras.clear();
|
||||
for (int i = 0; i < on_learn_aura_applys.size(); i++) {
|
||||
Ref<Aura> aura = Ref<Aura>(on_learn_aura_applys[i]);
|
||||
|
||||
_on_learn_auras.push_back(aura);
|
||||
}
|
||||
}
|
||||
|
||||
//// Range ////
|
||||
|
||||
bool Spell::get_has_range() {
|
||||
return _has_range;
|
||||
}
|
||||
@ -647,49 +705,7 @@ void Spell::_sstart_casting(Ref<SpellCastInfo> info) {
|
||||
handle_spell_damage(dpd);
|
||||
}
|
||||
|
||||
if (spell->get_caster_aura_apply() != NULL) {
|
||||
Ref<AuraApplyInfo> aainfo(memnew(AuraApplyInfo(info->get_caster(), info->get_caster(), info->get_spell_scale())));
|
||||
|
||||
spell->get_caster_aura_apply()->sapply(aainfo);
|
||||
}
|
||||
|
||||
if (spell->get_caster_aura_apply2() != NULL) {
|
||||
Ref<AuraApplyInfo> aainfo(memnew(AuraApplyInfo(info->get_caster(), info->get_caster(), info->get_spell_scale())));
|
||||
|
||||
spell->get_caster_aura_apply2()->sapply(aainfo);
|
||||
}
|
||||
|
||||
if (spell->get_target_aura_apply() != NULL) {
|
||||
Ref<AuraApplyInfo> aainfo(memnew(AuraApplyInfo(info->get_caster(), info->get_caster()->getc_target(), info->get_spell_scale())));
|
||||
|
||||
spell->get_target_aura_apply()->sapply(aainfo);
|
||||
}
|
||||
|
||||
if (spell->get_target_aura_apply2() != NULL) {
|
||||
Ref<AuraApplyInfo> aainfo(memnew(AuraApplyInfo(info->get_caster(), info->get_caster()->getc_target(), info->get_spell_scale())));
|
||||
|
||||
spell->get_target_aura_apply2()->sapply(aainfo);
|
||||
}
|
||||
}
|
||||
/*
|
||||
WorldEntity *worldEntity = null;
|
||||
if (spell->GenericSpellData->NeedsTarget || damage) {
|
||||
worldEntity = Spell::GetTarget(caster);
|
||||
}
|
||||
|
||||
if (!hasCastTime) {
|
||||
if (spell->SpellRangeData->Enabled && !Spell::isInRange(caster, worldEntity)) {
|
||||
return;
|
||||
}
|
||||
HandleSpellEffect(caster, worldEntity, spellScale);
|
||||
return;
|
||||
} else {
|
||||
if (!Spell::SpellCostCheck(caster)) {
|
||||
return;
|
||||
}
|
||||
Spell::DoStartCasting(caster, spellId, spell->SpellName, spell->CastTime, !spell->GenericSpellData->CanMoveWhileCasting, spellScale);
|
||||
return;
|
||||
}*/
|
||||
}
|
||||
|
||||
void Spell::_calculate_initial_damage(Ref<SpellDamageInfo> data) {
|
||||
@ -774,36 +790,13 @@ Spell::Spell() {
|
||||
_projectile_destroy_on_impact = false;
|
||||
_projectile_collision = false;
|
||||
|
||||
_caster_aura_apply = NULL;
|
||||
_caster_aura_apply2 = NULL;
|
||||
_target_aura_apply = NULL;
|
||||
_target_aura_apply2 = NULL;
|
||||
|
||||
_caster_aura_apply_ref = NULL;
|
||||
_caster_aura_apply2_ref = NULL;
|
||||
_target_aura_apply_ref = NULL;
|
||||
_target_aura_apply2_ref = NULL;
|
||||
|
||||
_spell_cooldown_mainpulation_data_count = 0;
|
||||
}
|
||||
|
||||
Spell::~Spell() {
|
||||
if (_caster_aura_apply_ref != NULL)
|
||||
memdelete(_caster_aura_apply_ref);
|
||||
|
||||
if (_caster_aura_apply2_ref != NULL)
|
||||
memdelete(_caster_aura_apply2_ref);
|
||||
|
||||
if (_target_aura_apply_ref != NULL)
|
||||
memdelete(_target_aura_apply_ref);
|
||||
|
||||
if (_target_aura_apply2_ref != NULL)
|
||||
memdelete(_target_aura_apply2_ref);
|
||||
|
||||
_caster_aura_apply = NULL;
|
||||
_caster_aura_apply2 = NULL;
|
||||
_target_aura_apply = NULL;
|
||||
_target_aura_apply2 = NULL;
|
||||
_caster_aura_applys.clear();
|
||||
_target_aura_applys.clear();
|
||||
_on_learn_auras.clear();
|
||||
}
|
||||
|
||||
void Spell::_bind_methods() {
|
||||
@ -939,22 +932,41 @@ void Spell::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_has_global_cooldown", "value"), &Spell::set_has_global_cooldown);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "cooldown_global_cooldown"), "set_has_global_cooldown", "has_global_cooldown");
|
||||
|
||||
ADD_GROUP("Auras", "aura");
|
||||
ClassDB::bind_method(D_METHOD("get_caster_aura_apply"), &Spell::get_caster_aura_apply);
|
||||
ClassDB::bind_method(D_METHOD("set_caster_aura_apply", "value"), &Spell::set_caster_aura_apply);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "aura_caster_apply", PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_caster_aura_apply", "get_caster_aura_apply");
|
||||
ADD_GROUP("Caster Aura Applys", "caster_aura_applys");
|
||||
ClassDB::bind_method(D_METHOD("get_num_caster_aura_applys"), &Spell::get_num_caster_aura_applys);
|
||||
ClassDB::bind_method(D_METHOD("set_num_caster_aura_applys", "value"), &Spell::set_num_caster_aura_applys);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_caster_aura_apply2"), &Spell::get_caster_aura_apply2);
|
||||
ClassDB::bind_method(D_METHOD("set_caster_aura_apply2", "value"), &Spell::set_caster_aura_apply2);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "aura_caster_aura_apply2", PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_caster_aura_apply2", "get_caster_aura_apply2");
|
||||
ClassDB::bind_method(D_METHOD("get_caster_aura_apply", "index"), &Spell::get_caster_aura_apply);
|
||||
ClassDB::bind_method(D_METHOD("set_caster_aura_apply", "index", "aura"), &Spell::set_caster_aura_apply);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_target_aura_apply"), &Spell::get_target_aura_apply);
|
||||
ClassDB::bind_method(D_METHOD("set_target_aura_apply", "value"), &Spell::set_target_aura_apply);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "aura_target_apply", PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_target_aura_apply", "get_target_aura_apply");
|
||||
ClassDB::bind_method(D_METHOD("get_caster_aura_applys"), &Spell::get_caster_aura_applys);
|
||||
ClassDB::bind_method(D_METHOD("set_caster_aura_applys", "caster_aura_applys"), &Spell::set_caster_aura_applys);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "caster_aura_applys", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_caster_aura_applys", "get_caster_aura_applys");
|
||||
|
||||
|
||||
ADD_GROUP("Target Aura Apply", "target_aura_applys");
|
||||
ClassDB::bind_method(D_METHOD("get_num_target_aura_applys"), &Spell::get_num_target_aura_applys);
|
||||
ClassDB::bind_method(D_METHOD("set_num_target_aura_applys", "value"), &Spell::set_num_target_aura_applys);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_target_aura_apply", "index"), &Spell::get_target_aura_apply);
|
||||
ClassDB::bind_method(D_METHOD("set_target_aura_apply", "index", "aura"), &Spell::set_target_aura_apply);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_target_aura_applys"), &Spell::get_target_aura_applys);
|
||||
ClassDB::bind_method(D_METHOD("set_target_aura_applys", "target_aura_applys"), &Spell::set_target_aura_applys);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "target_aura_applys", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_target_aura_applys", "get_target_aura_applys");
|
||||
|
||||
|
||||
ADD_GROUP("Apply Auras On Learn", "on_learn_auras");
|
||||
ClassDB::bind_method(D_METHOD("get_num_on_learn_auras"), &Spell::get_num_on_learn_auras);
|
||||
ClassDB::bind_method(D_METHOD("set_num_on_learn_auras", "value"), &Spell::set_num_on_learn_auras);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_on_learn_aura", "index"), &Spell::get_on_learn_aura);
|
||||
ClassDB::bind_method(D_METHOD("set_on_learn_aura", "index", "aura"), &Spell::set_on_learn_aura);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_on_learn_auras"), &Spell::get_on_learn_auras);
|
||||
ClassDB::bind_method(D_METHOD("set_on_learn_auras", "spells"), &Spell::set_on_learn_auras);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "on_learn_auras", PROPERTY_HINT_NONE, "17/17:Aura", PROPERTY_USAGE_DEFAULT, "Aura"), "set_on_learn_auras", "get_on_learn_auras");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_target_aura_apply2"), &Spell::get_target_aura_apply2);
|
||||
ClassDB::bind_method(D_METHOD("set_target_aura_apply2", "value"), &Spell::set_target_aura_apply2);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "aura_target_apply2", PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_target_aura_apply2", "get_target_aura_apply2");
|
||||
|
||||
ADD_GROUP("Range", "range");
|
||||
ClassDB::bind_method(D_METHOD("get_has_range"), &Spell::get_has_range);
|
||||
|
55
data/spell.h
55
data/spell.h
@ -103,18 +103,6 @@ public:
|
||||
TargetRelationType get_target_relation_type();
|
||||
void set_target_relation_type(TargetRelationType value);
|
||||
|
||||
Ref<Aura> get_caster_aura_apply();
|
||||
void set_caster_aura_apply(Ref<Aura> value);
|
||||
|
||||
Ref<Aura> get_caster_aura_apply2();
|
||||
void set_caster_aura_apply2(Ref<Aura> value);
|
||||
|
||||
Ref<Aura> get_target_aura_apply();
|
||||
void set_target_aura_apply(Ref<Aura> value);
|
||||
|
||||
Ref<Aura> get_target_aura_apply2();
|
||||
void set_target_aura_apply2(Ref<Aura> value);
|
||||
|
||||
int get_level();
|
||||
void set_level(int value);
|
||||
|
||||
@ -176,6 +164,37 @@ public:
|
||||
float get_heal_scale_for_level(int level);
|
||||
float get_absorb_scale_for_level(int level);
|
||||
|
||||
//Caster Aura Apply
|
||||
int get_num_caster_aura_applys();
|
||||
void set_num_caster_aura_applys(int value);
|
||||
|
||||
Ref<Aura> get_caster_aura_apply(int index) const;
|
||||
void set_caster_aura_apply(int index, Ref<Aura> caster_aura_apply);
|
||||
|
||||
Vector<Variant> get_caster_aura_applys();
|
||||
void set_caster_aura_applys(const Vector<Variant> &caster_aura_applys);
|
||||
|
||||
//Target Aura Apply
|
||||
int get_num_target_aura_applys();
|
||||
void set_num_target_aura_applys(int value);
|
||||
|
||||
Ref<Aura> get_target_aura_apply(int index) const;
|
||||
void set_target_aura_apply(int index, Ref<Aura> target_aura_apply);
|
||||
|
||||
Vector<Variant> get_target_aura_applys();
|
||||
void set_target_aura_applys(const Vector<Variant> &target_aura_applys);
|
||||
|
||||
//Apply Auras On Learn
|
||||
int get_num_on_learn_auras();
|
||||
void set_num_on_learn_auras(int value);
|
||||
|
||||
Ref<Aura> get_on_learn_aura(int index) const;
|
||||
void set_on_learn_aura(int index, Ref<Aura> on_learn_aura);
|
||||
|
||||
Vector<Variant> get_on_learn_auras();
|
||||
void set_on_learn_auras(const Vector<Variant> &on_learn_auras);
|
||||
|
||||
//Range
|
||||
bool get_has_range();
|
||||
void set_has_range(bool value);
|
||||
|
||||
@ -322,15 +341,9 @@ private:
|
||||
SpellTargetType _target_type;
|
||||
TargetRelationType _target_relation_type;
|
||||
|
||||
Ref<Aura> *_caster_aura_apply_ref;
|
||||
Ref<Aura> *_caster_aura_apply2_ref;
|
||||
Ref<Aura> *_target_aura_apply_ref;
|
||||
Ref<Aura> *_target_aura_apply2_ref;
|
||||
|
||||
Aura *_caster_aura_apply;
|
||||
Aura *_caster_aura_apply2;
|
||||
Aura *_target_aura_apply;
|
||||
Aura *_target_aura_apply2;
|
||||
Vector<Ref<Aura> > _caster_aura_applys;
|
||||
Vector<Ref<Aura> > _target_aura_applys;
|
||||
Vector<Ref<Aura> > _on_learn_auras;
|
||||
|
||||
int _level;
|
||||
int _rank;
|
||||
|
Loading…
Reference in New Issue
Block a user