Added EquipmentData.

This commit is contained in:
Relintai 2019-10-13 15:21:28 +02:00
parent 65227db52c
commit 21b8d432e0
8 changed files with 202 additions and 0 deletions

View File

@ -26,6 +26,17 @@ void DataManager::_notification(int p_what) {
}
}
Ref<Aura> DataManager::get_skill_for_armor_type(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::ARMOR_TYPE_MAX, Ref<Aura>());
return _armor_type_skills[index];
}
void DataManager::set_skill_for_armor_type(int index, Ref<Aura> aura) {
ERR_FAIL_INDEX(index, ItemEnums::ARMOR_TYPE_MAX);
_armor_type_skills[index] = aura;
}
String DataManager::get_xp_data_path() {
return _xp_data_path;
}
@ -620,6 +631,13 @@ void DataManager::list_player_character_datas() {
}
void DataManager::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_skill_for_armor_type", "index"), &DataManager::get_skill_for_armor_type);
ClassDB::bind_method(D_METHOD("set_skill_for_armor_type", "index", "aura"), &DataManager::set_skill_for_armor_type);
for (int i = 0; i < ItemEnums::ARMOR_TYPE_MAX; ++i) {
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "skill_for_armor_type_" + itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Aura"), "set_skill_for_armor_type", "get_skill_for_armor_type", i);
}
ClassDB::bind_method(D_METHOD("get_automatic_load"), &DataManager::get_automatic_load);
ClassDB::bind_method(D_METHOD("set_automatic_load", "load"), &DataManager::set_automatic_load);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "automatic_load"), "set_automatic_load", "get_automatic_load");

View File

@ -12,6 +12,7 @@
#include "scene/main/node.h"
#include "core/bind/core_bind.h"
#include "../item_enums.h"
#include "xp_data.h"
@ -27,6 +28,9 @@ class DataManager : public Node {
public:
static DataManager *get_instance();
Ref<Aura> get_skill_for_armor_type(int index);
void set_skill_for_armor_type(int index, Ref<Aura> aura);
String get_xp_data_path();
void set_xp_data_path(String path);
Ref<XPData> get_xp_data();
@ -147,6 +151,8 @@ private:
Vector<Ref<EntityData> > _player_character_datas;
HashMap<int, Ref<EntityData> > _player_character_data_map;
Ref<Aura> _armor_type_skills[ItemEnums::ARMOR_TYPE_MAX];
static DataManager *instance;
bool _automatic_load;

32
data/equipment_data.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "equipment_data.h"
Ref<EquipmentDataEntry> EquipmentDataEntry::get_slot(int index) {
ERR_FAIL_INDEX_V(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX, Ref<EquipmentDataEntry>());
return _entries[index];
}
void EquipmentDataEntry::set_slot(int index, Ref<EquipmentDataEntry> entry) {
ERR_FAIL_INDEX(index, ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX);
_entries[index] = entry;
}
EquipmentDataEntry::EquipmentDataEntry() {
}
EquipmentDataEntry::~EquipmentDataEntry() {
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i)
_entries[i].unref();
}
void EquipmentDataEntry::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_slot", "index"), &EquipmentDataEntry::get_slot);
ClassDB::bind_method(D_METHOD("set_slot", "index", "entry"), &EquipmentDataEntry::set_slot);
ADD_GROUP("Slots", "slot");
for (int i = 0; i < ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX; ++i) {
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "slot_" + ItemEnums::get_equip_slot_string(i), PROPERTY_HINT_RESOURCE_TYPE, "EntityData"), "sets_entity_data", "gets_entity_data", i);
}
}

26
data/equipment_data.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef EQUIPMENT_DATA_H
#define EQUIPMENT_DATA_H
#include "core/resource.h"
#include "../item_enums.h"
#include "equipment_data_entry.h"
class EquipmentDataEntry : public Resource {
GDCLASS(EquipmentDataEntry, Resource);
public:
Ref<EquipmentDataEntry> get_slot(int index);
void set_slot(int index, Ref<EquipmentDataEntry> entry);
EquipmentDataEntry();
~EquipmentDataEntry();
protected:
static void _bind_methods();
private:
Ref<EquipmentDataEntry> _entries[ItemEnums::EQUIP_SLOT_EQUIP_SLOT_MAX];
};
#endif

View File

@ -0,0 +1,23 @@
#include "equipment_data_entry.h"
#include "item_instance.h"
Ref<ItemInstance> EquipmentDataEntry::get_item() {
if (has_method("_get_item")) {
return call("_get_item");
}
return Ref<ItemInstance>();
}
EquipmentDataEntry::EquipmentDataEntry() {
}
EquipmentDataEntry::~EquipmentDataEntry() {
}
void EquipmentDataEntry::_bind_methods() {
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "item", PROPERTY_HINT_RESOURCE_TYPE, "ItemInstance"), "_get_item"));
ClassDB::bind_method(D_METHOD("get_item"), &EquipmentDataEntry::get_item);
}

View File

@ -0,0 +1,23 @@
#ifndef EQUIPMENT_DATA_ENTRY_H
#define EQUIPMENT_DATA_ENTRY_H
#include "core/resource.h"
class ItemInstance;
class EquipmentDataEntry : public Resource {
GDCLASS(EquipmentDataEntry, Resource);
public:
Ref<ItemInstance> get_item();
EquipmentDataEntry();
~EquipmentDataEntry();
protected:
static void _bind_methods();
//private:
};
#endif

View File

@ -8,4 +8,56 @@ const String ItemEnums::BINDING_STRING_ITEM_TYPE_FLAGS = "Equipment,Weapon,Potio
const String ItemEnums::BINDING_STRING_ITEM_SUB_TYPE = "None,Sword,Axe,Mace,Dagger,Bow,Crossbow,Gun,Wand,Quest Item";
const String ItemEnums::BINDING_STRING_ITEM_SUB_SUB_TYPE = "None,Two Hand,One Hand,Left Hand,Right Hand";
const String ItemEnums::BINDING_STRING_EQUIP_SLOTS = "Head,Neck,Shoulders,Chest,Gloves,Belt,Legs,Feet,Ring 1,Ring 2,Trinket 1,Trinket 2,Main Hand,Off Hand,None";
const String ItemEnums::BINDING_STRING_ARMOR_TYPE = "None,Cloth,Leather,Mail,Plate";
String ItemEnums::get_equip_slot_string(int slot) {
switch (slot) {
case 0:
return "head";
case 1:
return "neck";
case 2:
return "shoulders";
case 3:
return "chest";
case 4:
return "gloves";
case 5:
return "belt";
case 6:
return "legs";
case 7:
return "feet";
case 8:
return "ring_1";
case 9:
return "ring_2";
case 10:
return "trinket_1";
case 11:
return "trinket_2";
case 12:
return "main_hand";
case 13:
return "off_hand";
}
return "";
}
String ItemEnums::get_armor_type_string(int type) {
switch (type) {
case 0:
return "none";
case 1:
return "cloth";
case 2:
return "leather";
case 3:
return "mail";
case 4:
return "plate";
}
return "";
}

View File

@ -2,6 +2,7 @@
#define ITEM_ENUMS_H
#include "core/object.h"
#include "core/ustring.h"
class ItemEnums : public Object {
GDCLASS(ItemEnums, Object);
@ -14,6 +15,7 @@ public:
static const String BINDING_STRING_ITEM_SUB_TYPE;
static const String BINDING_STRING_ITEM_SUB_SUB_TYPE;
static const String BINDING_STRING_EQUIP_SLOTS;
static const String BINDING_STRING_ARMOR_TYPE;
enum ItemRarity {
ITEM_RARITY_NONE = 0,
@ -97,6 +99,18 @@ public:
EQUIP_SLOT_NONE = 14
};
enum ArmorType {
ARMOR_TYPE_NONE = 0,
ARMOR_TYPE_CLOTH = 1,
ARMOR_TYPE_LEATHER = 2,
ARMOR_TYPE_MAIL = 3,
ARMOR_TYPE_PLATE = 4,
ARMOR_TYPE_MAX = 5,
};
static String get_equip_slot_string(int slot);
static String get_armor_type_string(int type);
ItemEnums() {}
protected:
@ -170,6 +184,13 @@ protected:
BIND_ENUM_CONSTANT(EQUIP_SLOT_NONE);
BIND_ENUM_CONSTANT(EQUIP_SLOT_EQUIP_SLOT_MAX);
BIND_ENUM_CONSTANT(ARMOR_TYPE_NONE);
BIND_ENUM_CONSTANT(ARMOR_TYPE_CLOTH);
BIND_ENUM_CONSTANT(ARMOR_TYPE_LEATHER);
BIND_ENUM_CONSTANT(ARMOR_TYPE_MAIL);
BIND_ENUM_CONSTANT(ARMOR_TYPE_PLATE);
BIND_ENUM_CONSTANT(ARMOR_TYPE_MAX);
}
};
@ -179,6 +200,7 @@ VARIANT_ENUM_CAST(ItemEnums::ItemType);
VARIANT_ENUM_CAST(ItemEnums::ItemSubtype);
VARIANT_ENUM_CAST(ItemEnums::ItemSubSubtype);
VARIANT_ENUM_CAST(ItemEnums::EquipSlots);
VARIANT_ENUM_CAST(ItemEnums::ArmorType);
#endif