Cleaned up ItemInstance, and ESDragAndDrop a bit. Reenabled AISpellActionContainer and fixed android build with it.

This commit is contained in:
Relintai 2019-09-27 00:49:21 +02:00
parent 501f33484d
commit f337ab57c4
15 changed files with 81 additions and 179 deletions

2
SCsub
View File

@ -111,5 +111,5 @@ module_env.add_source_files(env.modules_sources,"loot/loot_data_item.cpp")
module_env.add_source_files(env.modules_sources,"ai/ai_action.cpp")
module_env.add_source_files(env.modules_sources,"ai/ai_spell_action.cpp")
module_env.add_source_files(env.modules_sources,"ai/ai_action_container.cpp")
#module_env.add_source_files(env.modules_sources,"ai/ai_spell_action_container.cpp")
module_env.add_source_files(env.modules_sources,"ai/ai_spell_action_container.cpp")

View File

@ -37,6 +37,10 @@ void AIActionContainer::set_ai_actions(const Vector<Variant> &ai_actions) {
AIActionContainer::AIActionContainer() {
}
AIActionContainer::~AIActionContainer() {
_ai_actions.clear();
}
void AIActionContainer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_num_ai_actions"), &AIActionContainer::get_num_ai_actions);
ClassDB::bind_method(D_METHOD("set_num_ai_actions", "value"), &AIActionContainer::set_num_ai_actions);

View File

@ -17,6 +17,7 @@ public:
void set_ai_actions(const Vector<Variant> &auras);
AIActionContainer();
~AIActionContainer();
protected:
static void _bind_methods();

View File

@ -56,6 +56,10 @@ AISpellAction::AISpellAction() {
_keep_aura_on_self_index = 0;
}
AISpellAction::~AISpellAction() {
_spell.unref();
}
void AISpellAction::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_type"), &AISpellAction::get_type);
ClassDB::bind_method(D_METHOD("set_type", "value"), &AISpellAction::set_type);

View File

@ -44,6 +44,7 @@ public:
void set_keep_aura_on_self_index(const int value);
AISpellAction();
~AISpellAction();
protected:
static void _bind_methods();

View File

@ -37,6 +37,10 @@ void AISpellActionContainer::set_ai_spell_actions(const Vector<Variant> &ai_spel
AISpellActionContainer::AISpellActionContainer() {
}
AISpellActionContainer::~AISpellActionContainer() {
_ai_spell_actions.clear();
}
void AISpellActionContainer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_num_ai_spell_actions"), &AISpellActionContainer::get_num_ai_spell_actions);
ClassDB::bind_method(D_METHOD("set_num_ai_spell_actions", "value"), &AISpellActionContainer::set_num_ai_spell_actions);

View File

@ -18,6 +18,7 @@ public:
void set_ai_spell_actions(const Vector<Variant> &auras);
AISpellActionContainer();
~AISpellActionContainer();
protected:
static void _bind_methods();

View File

@ -1,31 +1,7 @@
#include "item_instance.h"
#include "item_template.h"
#include "../inventory/bag.h"
int ItemInstance::get_id() {
return _id;
}
void ItemInstance::set_id(int value) {
_id = value;
}
int ItemInstance::get_inventory_position() const {
return _inventory_position;
}
void ItemInstance::set_inventory_position(const int value) {
_inventory_position = value;
}
Ref<Bag> ItemInstance::get_bag() const {
return _bag;
}
void ItemInstance::set_bag(const Ref<Bag> bag) {
_bag = bag;
}
Ref<ItemTemplate> ItemInstance::get_item_template() const {
return _item_template;
@ -35,134 +11,53 @@ void ItemInstance::set_item_template(const Ref<ItemTemplate> value) {
}
Ref<ItemStatModifier> ItemInstance::get_item_stat_modifier(int index) {
return _modifiers[index];
}
/*
void ItemInstance::set_item_stat_modifier(int index, ItemStatModifier modifier) {
_modifiers[index] = modifier;
}*/
ERR_FAIL_INDEX_V(index, _modifiers.size(), Ref<ItemStatModifier>());
return _modifiers.get(index);
}
void ItemInstance::add_item_stat_modifier(Ref<ItemStatModifier> modifier) {
_modifiers.push_back(modifier);
}
void ItemInstance::remove_item_stat_modifier(int index) {
ERR_FAIL_INDEX(index, _modifiers.size());
_modifiers.remove(index);
}
void ItemInstance::clear_item_stat_modifiers() {
_modifiers.clear();
}
int ItemInstance::get_item_stat_modifier_count() {
return _modifier_count;
}
void ItemInstance::set_item_stat_modifier_count(int value) {
_modifier_count = value;
}
Stat::StatId ItemInstance::get_item_stat_id(int index) {
return _modifiers[index]->get_stat_id();
}
void ItemInstance::set_item_stat_id(int index, Stat::StatId value) {
_modifiers[index]->set_stat_id(value);
}
float ItemInstance::get_item_base_mod(int index) {
return _modifiers[index]->get_base_mod();
}
void ItemInstance::set_item_base_mod(int index, float value) {
_modifiers[index]->set_base_mod(value);
}
float ItemInstance::get_item_bonus_mod(int index) {
return _modifiers[index]->get_bonus_mod();
}
void ItemInstance::set_item_bonus_mod(int index, float value) {
_modifiers[index]->set_bonus_mod(value);
}
float ItemInstance::get_percent_mod(int index) {
return _modifiers[index]->get_percent_mod();
}
void ItemInstance::set_percent_mod(int index, float value) {
_modifiers[index]->set_percent_mod(value);
return _modifiers.size();
}
int ItemInstance::get_stack_size() {
return _stack_size;
}
void ItemInstance::set_stack_size(int value) {
_stack_size = value;
}
ItemInstance::ItemInstance() {
_id = 0;
_stack_size = 1;
_modifier_count = 0;
for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) {
_modifiers[i] = Ref<ItemStatModifier>(memnew(ItemStatModifier()));
}
}
ItemInstance::~ItemInstance() {
}
void ItemInstance::_validate_property(PropertyInfo &property) const {
String prop = property.name;
if (prop.begins_with("Modifiers_")) {
int frame = prop.get_slicec('/', 0).get_slicec('_', 1).to_int();
if (frame >= _modifier_count) {
property.usage = 0;
}
}
_modifiers.clear();
}
void ItemInstance::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_id"), &ItemInstance::get_id);
ClassDB::bind_method(D_METHOD("set_id", "count"), &ItemInstance::set_id);
ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
ClassDB::bind_method(D_METHOD("get_inventory_position"), &ItemInstance::get_inventory_position);
ClassDB::bind_method(D_METHOD("set_inventory_position", "value"), &ItemInstance::set_inventory_position);
ADD_PROPERTY(PropertyInfo(Variant::INT, "inventory_position"), "set_inventory_position", "get_inventory_position");
ClassDB::bind_method(D_METHOD("get_bag"), &ItemInstance::get_bag);
ClassDB::bind_method(D_METHOD("set_bag", "bag"), &ItemInstance::set_bag);
ClassDB::bind_method(D_METHOD("get_item_template"), &ItemInstance::get_item_template);
ClassDB::bind_method(D_METHOD("set_item_template", "value"), &ItemInstance::set_item_template);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "item_template", PROPERTY_HINT_RESOURCE_TYPE, "ItemTemplate"), "set_item_template", "get_item_template");
ClassDB::bind_method(D_METHOD("get_stack_size"), &ItemInstance::get_stack_size);
ClassDB::bind_method(D_METHOD("set_stack_size", "count"), &ItemInstance::set_stack_size);
ADD_PROPERTY(PropertyInfo(Variant::INT, "stack_size"), "set_stack_size", "get_stack_size");
ClassDB::bind_method(D_METHOD("get_item_stat_modifier", "index"), &ItemInstance::get_item_stat_modifier);
//ClassDB::bind_method(D_METHOD("set_item_stat_modifier", "index", "value"), &ItemInstance::set_item_stat_modifier);
//StatMods Property binds
ClassDB::bind_method(D_METHOD("add_item_stat_modifier", "modifier"), &ItemInstance::add_item_stat_modifier);
ClassDB::bind_method(D_METHOD("remove_item_stat_modifier", "index"), &ItemInstance::remove_item_stat_modifier);
ClassDB::bind_method(D_METHOD("clear_item_stat_modifiers"), &ItemInstance::clear_item_stat_modifiers);
ClassDB::bind_method(D_METHOD("get_item_stat_modifier_count"), &ItemInstance::get_item_stat_modifier_count);
ClassDB::bind_method(D_METHOD("set_item_stat_modifier_count", "count"), &ItemInstance::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");
ClassDB::bind_method(D_METHOD("get_item_stat_id", "index"), &ItemInstance::get_item_stat_id);
ClassDB::bind_method(D_METHOD("set_item_stat_id", "index", "value"), &ItemInstance::set_item_stat_id);
ClassDB::bind_method(D_METHOD("get_item_base_mod", "index"), &ItemInstance::get_item_base_mod);
ClassDB::bind_method(D_METHOD("set_item_base_mod", "index", "value"), &ItemInstance::set_item_base_mod);
ClassDB::bind_method(D_METHOD("get_item_bonus_mod", "index"), &ItemInstance::get_item_bonus_mod);
ClassDB::bind_method(D_METHOD("set_item_bonus_mod", "index", "value"), &ItemInstance::set_item_bonus_mod);
ClassDB::bind_method(D_METHOD("get_percent_mod", "index"), &ItemInstance::get_percent_mod);
ClassDB::bind_method(D_METHOD("set_percent_mod", "index", "value"), &ItemInstance::set_percent_mod);
for (int i = 0; i < MAX_ITEM_STAT_MOD; ++i) {
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) + "/item_base_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_base_mod", "get_item_base_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/item_bonus_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_item_bonus_mod", "get_item_bonus_mod", i);
ADD_PROPERTYI(PropertyInfo(Variant::REAL, "Modifiers_" + itos(i) + "/percent_mod", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_percent_mod", "get_percent_mod", i);
}
}

View File

@ -2,48 +2,27 @@
#define ITEM_INSTANCE_H
#include "core/reference.h"
#include "scene/resources/texture.h"
#include "core/vector.h"
#include "item_stat_modifier.h"
#include "../entities/stats/stat.h"
#include "../item_enums.h"
class Bag;
class ItemTemplate;
class ItemInstance : public Reference {
GDCLASS(ItemInstance, Reference);
public:
int get_id();
void set_id(int value);
int get_inventory_position() const;
void set_inventory_position(const int value);
Ref<Bag> get_bag() const;
void set_bag(const Ref<Bag> bag);
Ref<ItemTemplate> get_item_template() const;
void set_item_template(const Ref<ItemTemplate> value);
Ref<ItemStatModifier> get_item_stat_modifier(int index);
//void set_item_stat_modifier(int index, ItemStatModifier modifier);
void add_item_stat_modifier(Ref<ItemStatModifier> modifier);
void remove_item_stat_modifier(int index);
void clear_item_stat_modifiers();
int get_item_stat_modifier_count();
void set_item_stat_modifier_count(int value);
Stat::StatId get_item_stat_id(int index);
void set_item_stat_id(int index, Stat::StatId value);
float get_item_base_mod(int index);
void set_item_base_mod(int index, float value);
float get_item_bonus_mod(int index);
void set_item_bonus_mod(int index, float value);
float get_percent_mod(int index);
void set_percent_mod(int index, float value);
int get_stack_size();
void set_stack_size(int value);
@ -56,26 +35,13 @@ public:
protected:
static void _bind_methods();
void _validate_property(PropertyInfo &property) const;
private:
enum {
MAX_ITEM_STAT_MOD = 6,
};
int _id;
int _inventory_position;
int _item_tamplate_id;
Ref<ItemTemplate> _item_template;
int _stack_size;
Ref<Bag> _bag;
int _modifier_count;
Ref<ItemStatModifier> _modifiers[MAX_ITEM_STAT_MOD];
Vector<Ref<ItemStatModifier> > _modifiers;
};
#endif

View File

@ -216,6 +216,13 @@ void ItemTemplate::set_auras(const Vector<Variant> &auras) {
}
}
Ref<Spell> ItemTemplate::get_use_spell() const {
return _use_spell;
}
void ItemTemplate::set_use_spell(Ref<Spell> use_spell) {
_use_spell = use_spell;
}
int ItemTemplate::get_item_stat_modifier_count() const {
return _modifier_count;
}
@ -464,6 +471,11 @@ void ItemTemplate::_bind_methods() {
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");
//Use spell
ClassDB::bind_method(D_METHOD("get_use_spell"), &ItemTemplate::get_use_spell);
ClassDB::bind_method(D_METHOD("set_use_spell", "size"), &ItemTemplate::set_use_spell);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "use_spell", PROPERTY_HINT_RESOURCE_TYPE, "Spell"), "set_use_spell", "get_use_spell");
//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);

View File

@ -92,7 +92,11 @@ public:
Vector<Variant> get_auras();
void set_auras(const Vector<Variant> &auras);
//use spell
Ref<Spell> get_use_spell() const;
void set_use_spell(Ref<Spell> use_spell);
//Stat mods
int get_item_stat_modifier_count() const;
void set_item_stat_modifier_count(const int value);
@ -154,13 +158,10 @@ private:
int _bag_size;
//Ref<Spell> *_spell;
//Ref<Aura> *_auras;
Vector<Ref<Spell> > _teaches_spells;
Vector<Ref<Spell> > _grants_spells;
Vector<Ref<Aura> > _auras;
Ref<Spell> _use_spell;
int _modifier_count;
Ref<ItemTemplateStatModifier> _modifiers[MAX_ITEM_STAT_MOD];

View File

@ -1,11 +1,17 @@
#include "es_drag_and_drop.h"
const String ESDragAndDrop::BINDING_STRING_ES_DRAG_AND_DROP_TYPE = "None, Spell, Item";
const String ESDragAndDrop::BINDING_STRING_ES_DRAG_AND_DROP_TYPE = "None,Spell,Item,Inventory Item";
Node *ESDragAndDrop::get_origin() const {
return _origin;
}
void ESDragAndDrop::set_origin(Node *origin) {
_origin = origin;
}
ESDragAndDrop::ESDragAndDropType ESDragAndDrop::get_type() {
return _type;
}
void ESDragAndDrop::set_type(ESDragAndDrop::ESDragAndDropType type) {
_type = type;
}
@ -13,7 +19,6 @@ void ESDragAndDrop::set_type(ESDragAndDrop::ESDragAndDropType type) {
int ESDragAndDrop::get_item_id() {
return _item_id;
}
void ESDragAndDrop::set_item_id(int item_id) {
_item_id = item_id;
}
@ -21,9 +26,14 @@ void ESDragAndDrop::set_item_id(int item_id) {
ESDragAndDrop::ESDragAndDrop() {
_item_id = 0;
_type = ES_DRAG_AND_DROP_TYPE_NONE;
_origin = NULL;
}
void ESDragAndDrop::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_origin"), &ESDragAndDrop::get_origin);
ClassDB::bind_method(D_METHOD("set_origin", "id"), &ESDragAndDrop::set_origin);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "origin", PROPERTY_HINT_RESOURCE_TYPE, "Node"), "set_origin", "get_origin");
ClassDB::bind_method(D_METHOD("get_type"), &ESDragAndDrop::get_type);
ClassDB::bind_method(D_METHOD("set_type", "type"), &ESDragAndDrop::set_type);
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, BINDING_STRING_ES_DRAG_AND_DROP_TYPE), "set_type", "get_type");
@ -35,5 +45,5 @@ void ESDragAndDrop::_bind_methods() {
BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_NONE);
BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_SPELL);
BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_ITEM);
BIND_ENUM_CONSTANT(ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM);
}

View File

@ -3,6 +3,7 @@
#include "core/reference.h"
#include "core/ustring.h"
#include "scene/main/node.h"
class ESDragAndDrop : public Reference {
GDCLASS(ESDragAndDrop, Reference);
@ -14,10 +15,15 @@ public:
ES_DRAG_AND_DROP_TYPE_NONE = 0,
ES_DRAG_AND_DROP_TYPE_SPELL = 1,
ES_DRAG_AND_DROP_TYPE_ITEM = 2,
ES_DRAG_AND_DROP_TYPE_INVENTORY_ITEM = 3,
};
Node *get_origin() const;
void set_origin(Node *owner);
ESDragAndDropType get_type();
void set_type(ESDragAndDropType type);
int get_item_id();
void set_item_id(int item_id);
@ -27,6 +33,7 @@ protected:
static void _bind_methods();
private:
Node *_origin;
ESDragAndDropType _type;
int _item_id;
};

View File

@ -48,8 +48,6 @@ bool Bag::add_item(Ref<ItemInstance> item) {
}
}
item->set_bag(Ref<Bag>(this));
for (int i = 0; i < _items.size(); ++i) {
Ref<ItemInstance> ii = _items.get(i);
@ -99,8 +97,6 @@ Ref<ItemInstance> Bag::remove_item(const int index) {
if (!ii.is_valid())
return ii;
ii->set_bag(Ref<Bag>());
_items.set(index, Ref<ItemInstance>());
emit_signal("item_removed", Ref<Bag>(this), ii, index);

View File

@ -101,7 +101,7 @@
#include "ai/ai_action.h"
#include "ai/ai_spell_action.h"
#include "ai/ai_action_container.h"
//#include "ai/ai_spell_action_container.h"
#include "ai/ai_spell_action_container.h"
#ifdef TOOLS_ENABLED
#include "editor/editor_plugin.h"
@ -223,7 +223,7 @@ void register_entity_spell_system_types() {
ClassDB::register_class<AIAction>();
ClassDB::register_class<AISpellAction>();
ClassDB::register_class<AIActionContainer>();
// ClassDB::register_class<AISpellActionContainer>();
ClassDB::register_class<AISpellActionContainer>();
//meshes
ClassDB::register_class<MeshDataResource>();