Added a few spell and aura arrays to ItemTemplate, added a new enum, and fixed compile.

This commit is contained in:
Relintai 2019-09-12 22:45:29 +02:00
parent aadb56411a
commit d5d38aea1c
5 changed files with 193 additions and 49 deletions

View File

@ -115,32 +115,112 @@ void ItemTemplate::set_bag_size(const int size) {
_bag_size = size;
}
Ref<Spell> ItemTemplate::get_spell() const {
if (_spell)
return (*_spell);
//// TEACHES ////
return Ref<Spell>(NULL);
int ItemTemplate::get_num_teaches_spells() {
return _teaches_spells.size();
}
void ItemTemplate::set_num_teaches_spells(int value) {
_teaches_spells.resize(value);
}
void ItemTemplate::set_spell(const Ref<Spell> spell) {
if (_spell)
memdelete(_spell);
Ref<Spell> ItemTemplate::get_teaches_spell(int index) const {
ERR_FAIL_INDEX_V(index, _teaches_spells.size(), Ref<Spell>());
_spell = memnew(Ref<Spell>(spell));
return _teaches_spells[index];
}
void ItemTemplate::set_teaches_spell(int index, Ref<Spell> spell) {
ERR_FAIL_INDEX(index, _teaches_spells.size());
_teaches_spells.set(index, Ref<Spell>(spell));
}
Ref<Aura> ItemTemplate::get_aura(const int index) const {
if (_auras[index])
return (*_auras[index]);
Vector<Variant> ItemTemplate::get_teaches_spells() {
Vector<Variant> r;
for (int i = 0; i < _teaches_spells.size(); i++) {
r.push_back(_teaches_spells[i].get_ref_ptr());
}
return r;
}
void ItemTemplate::set_teaches_spells(const Vector<Variant> &spells) {
_teaches_spells.clear();
for (int i = 0; i < spells.size(); i++) {
Ref<Spell> spell = Ref<Spell>(spells[i]);
return Ref<Aura>(NULL);
_teaches_spells.push_back(spell);
}
}
void ItemTemplate::set_aura(const int index, const Ref<Aura> aura) {
if (_auras[index])
memdelete(_auras[index]);
//// GRANTS SPELLS ////
_auras[index] = memnew(Ref<Aura>(aura));
int ItemTemplate::get_num_grants_spells() {
return _grants_spells.size();
}
void ItemTemplate::set_num_grants_spells(int value) {
_grants_spells.resize(value);
}
Ref<Spell> ItemTemplate::get_grants_spell(int index) const {
ERR_FAIL_INDEX_V(index, _grants_spells.size(), Ref<Spell>());
return _grants_spells[index];
}
void ItemTemplate::set_grants_spell(int index, Ref<Spell> spell) {
ERR_FAIL_INDEX(index, _grants_spells.size());
_grants_spells.set(index, Ref<Spell>(spell));
}
Vector<Variant> ItemTemplate::get_grants_spells() {
Vector<Variant> r;
for (int i = 0; i < _grants_spells.size(); i++) {
r.push_back(_grants_spells[i].get_ref_ptr());
}
return r;
}
void ItemTemplate::set_grants_spells(const Vector<Variant> &spells) {
_grants_spells.clear();
for (int i = 0; i < spells.size(); i++) {
Ref<Spell> spell = Ref<Spell>(spells[i]);
_grants_spells.push_back(spell);
}
}
//// AURAS ////
int ItemTemplate::get_num_auras() {
return _auras.size();
}
void ItemTemplate::set_num_auras(int value) {
_auras.resize(value);
}
Ref<Aura> ItemTemplate::get_aura(int index) const {
ERR_FAIL_INDEX_V(index, _auras.size(), Ref<Aura>());
return _auras[index];
}
void ItemTemplate::set_aura(int index, Ref<Aura> aura) {
ERR_FAIL_INDEX(index, _auras.size());
_auras.set(index, Ref<Aura>(aura));
}
Vector<Variant> ItemTemplate::get_auras() {
Vector<Variant> r;
for (int i = 0; i < _auras.size(); i++) {
r.push_back(_auras[i].get_ref_ptr());
}
return r;
}
void ItemTemplate::set_auras(const Vector<Variant> &auras) {
_auras.clear();
for (int i = 0; i < auras.size(); i++) {
Ref<Aura> spell = Ref<Aura>(auras[i]);
_auras.push_back(spell);
}
}
int ItemTemplate::get_item_stat_modifier_count() const {
@ -272,12 +352,6 @@ ItemTemplate::ItemTemplate() {
_inventory_size_x = 0;
_inventory_size_y = 0;
_bag_size = 0;
_spell = NULL;
for (int i = 0; i < MAX_AURAS; ++i) {
_auras[i] = NULL;
}
for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) {
_modifiers[i] = Ref<ItemTemplateStatModifier>(memnew(ItemTemplateStatModifier()));
@ -285,14 +359,9 @@ ItemTemplate::ItemTemplate() {
}
ItemTemplate::~ItemTemplate() {
if (_spell)
memdelete(_spell);
for (int i = 0; i < MAX_AURAS; ++i) {
if (_auras[i])
memdelete(_auras[i]);
}
_teaches_spells.clear();
_grants_spells.clear();
_auras.clear();
}
void ItemTemplate::_validate_property(PropertyInfo &property) const {
@ -369,22 +438,49 @@ void ItemTemplate::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_bag_size"), &ItemTemplate::get_bag_size);
ClassDB::bind_method(D_METHOD("set_bag_size", "size"), &ItemTemplate::set_bag_size);
ADD_PROPERTY(PropertyInfo(Variant::INT, "bag_size"), "set_bag_size", "get_bag_size");
ClassDB::bind_method(D_METHOD("get_spell"), &ItemTemplate::get_spell);
ClassDB::bind_method(D_METHOD("set_spell", "spell"), &ItemTemplate::set_spell);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "spell", PROPERTY_HINT_RESOURCE_TYPE, "Spell"), "set_spell", "get_spell");
//// Teaches ////
ADD_GROUP("Teaches Spells", "teaches_spells");
ClassDB::bind_method(D_METHOD("get_num_teaches_spells"), &ItemTemplate::get_num_teaches_spells);
ClassDB::bind_method(D_METHOD("set_num_teaches_spells", "value"), &ItemTemplate::set_num_teaches_spells);
ClassDB::bind_method(D_METHOD("get_teaches_spell", "index"), &ItemTemplate::get_teaches_spell);
ClassDB::bind_method(D_METHOD("set_teaches_spell", "index", "spell"), &ItemTemplate::set_teaches_spell);
ClassDB::bind_method(D_METHOD("get_teaches_spells"), &ItemTemplate::get_teaches_spells);
ClassDB::bind_method(D_METHOD("set_teaches_spells", "spells"), &ItemTemplate::set_teaches_spells);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "teaches_spells", PROPERTY_HINT_NONE, "17/17:Spell", PROPERTY_USAGE_DEFAULT, "Spell"), "set_teaches_spells", "get_teaches_spells");
//// Grants Spells ////
ADD_GROUP("Grants Spells", "grants_spells");
ClassDB::bind_method(D_METHOD("get_num_grants_spells"), &ItemTemplate::get_num_grants_spells);
ClassDB::bind_method(D_METHOD("set_num_grants_spells", "value"), &ItemTemplate::set_num_grants_spells);
ClassDB::bind_method(D_METHOD("get_grants_spell", "index"), &ItemTemplate::get_grants_spell);
ClassDB::bind_method(D_METHOD("set_grants_spell", "index", "spell"), &ItemTemplate::set_grants_spell);
ClassDB::bind_method(D_METHOD("get_grants_spells"), &ItemTemplate::get_grants_spells);
ClassDB::bind_method(D_METHOD("set_grants_spells", "spells"), &ItemTemplate::set_grants_spells);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "grants_spells", PROPERTY_HINT_NONE, "17/17:Spell", PROPERTY_USAGE_DEFAULT, "Spell"), "set_grants_spells", "get_grants_spells");
//// Auras ////
ADD_GROUP("Auras", "auras");
ClassDB::bind_method(D_METHOD("get_num_auras"), &ItemTemplate::get_num_auras);
ClassDB::bind_method(D_METHOD("set_num_auras", "value"), &ItemTemplate::set_num_auras);
ClassDB::bind_method(D_METHOD("get_aura", "index"), &ItemTemplate::get_aura);
ClassDB::bind_method(D_METHOD("set_aura", "index", "aura"), &ItemTemplate::set_aura);
for (int i = 0; i < MAX_AURAS; ++i) {
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "aura_" + itos(i + 1), PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_aura", "get_aura", i);
}
ClassDB::bind_method(D_METHOD("get_auras"), &ItemTemplate::get_auras);
ClassDB::bind_method(D_METHOD("set_auras", "spells"), &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
ADD_GROUP("Item Stat Modifiers", "item_stat_modifier");
ClassDB::bind_method(D_METHOD("get_item_stat_modifier_count"), &ItemTemplate::get_item_stat_modifier_count);
ClassDB::bind_method(D_METHOD("set_item_stat_modifier_count", "count"), &ItemTemplate::set_item_stat_modifier_count);
ADD_PROPERTY(PropertyInfo(Variant::INT, "set_item_stat_modifier_count", PROPERTY_HINT_RANGE, "0," + itos(MAX_ITEM_STAT_MOD), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_item_stat_modifier_count", "get_item_stat_modifier_count");
ADD_PROPERTY(PropertyInfo(Variant::INT, "item_stat_modifier_count", PROPERTY_HINT_RANGE, "0," + itos(MAX_ITEM_STAT_MOD), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_item_stat_modifier_count", "get_item_stat_modifier_count");
ClassDB::bind_method(D_METHOD("get_item_stat_id", "index"), &ItemTemplate::get_item_stat_id);
ClassDB::bind_method(D_METHOD("set_item_stat_id", "index", "value"), &ItemTemplate::set_item_stat_id);
@ -414,15 +510,12 @@ void ItemTemplate::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::INT, "Modifiers_" + itos(i) + "/stat_id", PROPERTY_HINT_ENUM, Stat::STAT_BINDING_STRING, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_stat_id", "get_item_stat_id", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/min_base_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_min_base_mod", "get_item_min_base_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/max_base_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_max_base_mod", "get_item_max_base_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/min_bonus_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_min_bonus_mod", "get_item_min_bonus_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/max_bonus_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_max_bonus_mod", "get_item_max_bonus_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/min_percent_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_min_percent_mod", "get_item_min_percent_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/max_percent_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_max_percent_mod", "get_item_max_percent_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/scaling_factor", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_scaling_factor", "get_item_scaling_factor", i);

View File

@ -3,6 +3,7 @@
#include "core/resource.h"
#include "scene/resources/texture.h"
#include "core/vector.h"
#include "item_visual.h"
#include "item_template_stat_modifier.h"
@ -64,11 +65,36 @@ public:
int get_bag_size() const;
void set_bag_size(const int size);
Ref<Spell> get_spell() const;
void set_spell(const Ref<Spell> spell);
//Teaches
int get_num_teaches_spells();
void set_num_teaches_spells(int value);
Ref<Spell> get_teaches_spell(int index) const;
void set_teaches_spell(int index, Ref<Spell> teaches_spell);
Vector<Variant> get_teaches_spells();
void set_teaches_spells(const Vector<Variant> &teaches_spells);
//Grants Spells
int get_num_grants_spells();
void set_num_grants_spells(int value);
Ref<Spell> get_grants_spell(int index) const;
void set_grants_spell(int index, Ref<Spell> grants_spell);
Vector<Variant> get_grants_spells();
void set_grants_spells(const Vector<Variant> &grants_spells);
//Auras
int get_num_auras();
void set_num_auras(int value);
Ref<Aura> get_aura(int index) const;
void set_aura(const int index, const Ref<Aura> aura);
void set_aura(int index, Ref<Aura> aura);
Vector<Variant> get_auras();
void set_auras(const Vector<Variant> &auras);
int get_item_stat_modifier_count() const;
void set_item_stat_modifier_count(const int value);
@ -108,7 +134,6 @@ protected:
private:
enum {
MAX_ITEM_STAT_MOD = 6,
MAX_AURAS = 5,
};
int _id;
@ -133,8 +158,13 @@ private:
int _bag_size;
Ref<Spell> *_spell;
Ref<Aura> *_auras[MAX_AURAS];
//Ref<Spell> *_spell;
//Ref<Aura> *_auras;
Vector<Ref<Spell> > _teaches_spells;
Vector<Ref<Spell> > _grants_spells;
Vector<Ref<Aura> > _auras;
int _modifier_count;
Ref<ItemTemplateStatModifier> _modifiers[MAX_ITEM_STAT_MOD];

View File

@ -1,5 +1,5 @@
#ifndef TALENT_H
#define TALENT_H
#ifndef SKILL_H
#define SKILL_H
#include "core/resource.h"
#include "core/ustring.h"

View File

@ -1,6 +1,7 @@
#include "spell_enums.h"
const String SpellEnums::BINDING_STRING_SPELL_TYPES = "Melee,Holy,Shadow,Nature,Fire,Frost,Lightning,Chaos";
const String SpellEnums::BINDING_STRING_SPELL_CATEGORY = "Normal,Alchemy,Cooking,Engineering,Crafting,Hidden,Development";
const String SpellEnums::BINDING_STRING_DIMINISHING_RETURN_CATEGORIES = "None,Root,Stun";
const String SpellEnums::BINDING_STRING_TRIGGER_EVENTS = "None,S On Before Damage,S On Damage Receive,S On Hit,S On Damage Dealt,S Aura Remove,S Aura Dispell,S On Before Aura Applied,S On After Aura Applied,C On Aura Added,C On Aura Removed,C On Aura Refreshed";
const String SpellEnums::BINDING_STRING_DAMAGE_TYPES = "Melee,Holy,Shadow,Nature,Fire,Frost,Lightning,Chaos";

View File

@ -8,6 +8,7 @@ class SpellEnums : public Object {
public:
static const String BINDING_STRING_SPELL_TYPES;
static const String BINDING_STRING_SPELL_CATEGORY;
static const String BINDING_STRING_DIMINISHING_RETURN_CATEGORIES;
static const String BINDING_STRING_TRIGGER_EVENTS;
static const String BINDING_STRING_DAMAGE_TYPES;
@ -25,6 +26,16 @@ public:
DAMAGE_TYPE_CHAOS = 1 << 7,
};
enum SpellCategory {
SPELL_CATEGORY_NORMAL = 0,
SPELL_CATEGORY_ALCHEMY = 1,
SPELL_CATEGORY_COOKING = 2,
SPELL_CATEGORY_ENGINEERING = 3,
SPELL_CATEGORY_CRAFTING = 4,
SPELL_CATEGORY_HIDDEN = 5,
SPELL_CATEGORY_DEVELOPMENT = 6,
};
enum SpellType {
SPELL_TYPE_NONE = 0,
SPELL_TYPE_MELEE = 1 << 0,
@ -83,6 +94,14 @@ protected:
BIND_ENUM_CONSTANT(DAMAGE_TYPE_LIGHTNING);
BIND_ENUM_CONSTANT(DAMAGE_TYPE_CHAOS);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_NORMAL);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_ALCHEMY);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_COOKING);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_ENGINEERING);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_CRAFTING);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_HIDDEN);
BIND_ENUM_CONSTANT(SPELL_CATEGORY_DEVELOPMENT);
BIND_ENUM_CONSTANT(SPELL_TYPE_NONE);
BIND_ENUM_CONSTANT(SPELL_TYPE_MELEE);
BIND_ENUM_CONSTANT(SPELL_TYPE_HOLY);
@ -122,6 +141,7 @@ protected:
};
VARIANT_ENUM_CAST(SpellEnums::SpellType);
VARIANT_ENUM_CAST(SpellEnums::SpellCategory);
VARIANT_ENUM_CAST(SpellEnums::DiminishingReturnCategory);
VARIANT_ENUM_CAST(SpellEnums::TriggerEvents);
VARIANT_ENUM_CAST(SpellEnums::DamageType);