mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-04-19 21:33:15 +02:00
Added EquipmentData.
This commit is contained in:
parent
65227db52c
commit
21b8d432e0
@ -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");
|
||||
|
@ -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
32
data/equipment_data.cpp
Normal 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
26
data/equipment_data.h
Normal 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
|
23
data/equipment_data_entry.cpp
Normal file
23
data/equipment_data_entry.cpp
Normal 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);
|
||||
}
|
23
data/equipment_data_entry.h
Normal file
23
data/equipment_data_entry.h
Normal 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
|
@ -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 "";
|
||||
}
|
||||
|
22
item_enums.h
22
item_enums.h
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user