forked from sandsmark/borderlands3-save-editor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathItemData.h
105 lines (80 loc) · 3.19 KB
/
ItemData.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#ifndef ITEMDATA_H
#define ITEMDATA_H
#include "InventoryItem.h"
#include <QJsonObject>
#include <QStringList>
#include <QMap>
#include <QHash>
#include <QVector>
#include <QPair>
// Could use an enum, but memory is cheap and I'm lazy
struct ItemPart {
QString manufacturer;
QString itemType;
QString rarity;
QString balance;
QString category;
int minParts = 0;
int maxParts = 0;
float weight = 0.f;
QString partId;
QStringList dependencies;
QStringList excluders;
};
struct ItemDescription {
QString positives;
QString negatives;
QString effects;
QString naming;
};
struct ItemInfo {
QString inventoryName;
QString inventoryNameLocationKey;
int inventoryCategoryHash;
float inventorySize = 0.f;
bool usesInventoryScore = false;
int monetaryValue = 0.f;
float baseMonetaryValueModifier = 0.f;
bool canDropOrSell = false;
};
class ItemData
{
public:
static ItemData *instance();
static bool isValid();
static QString getItemAsset(const QString &category, const int index);
static int requiredBits(const QString &category, const int requiredVersion);
static QString englishName(const QString &itemName);
static QString partCategory(const QString &objectName);
static const QVector<ItemPart> &weaponParts(const QString &balance);
static QStringList categoriesForWeapon(const QString &balance) { return instance()->m_weaponPartCategories.values(balance); }
static QString weaponPartType(const QString &id) { return instance()->m_weaponPartTypes[id]; }
static int partIndex(const QString &category, const QString &id);
static const ItemDescription &itemDescription(const QString &id) { return instance()->m_itemDescriptions[id]; }
static const ItemInfo &itemInfo(const QString &id) { return instance()->m_itemInfos[id]; }
static bool hasItemInfo(const QString &id) { return instance()->m_itemInfos.contains(id); } // inefficient lol
static const QString &objectForShortName(const QString &shortName) { return instance()->m_shortNameToObject[shortName]; }
static InventoryItem::Aspect createInventoryItemPart(const InventoryItem &inventoryItem, const QString &objectName);
// static bool hasItemPart(const QString &id) { return instance()->m_}
private:
ItemData();
void loadPartsForOther(const QString &type);
void loadWeaponPartDescriptions(const QString &filename);
void loadShieldPartDescriptions();
void loadGrenadePartDescriptions();
void loadClassModDescriptions(const QString &characterClass);
void loadItemInfos();
void loadInventorySerials();
static const QVector<ItemPart> nullWeaponParts; // so we always can return references
QJsonObject m_englishNames;
QJsonObject m_itemPartCategories;
QHash<QString, QVector<ItemPart>> m_weaponParts;
QHash<QString, QString> m_weaponPartTypes;
QMultiMap<QString, QString> m_weaponPartCategories;
QHash<QString, ItemDescription> m_itemDescriptions;
QHash<QString, ItemInfo> m_itemInfos;
QHash<QString, QStringList> m_categoryObjects;
QHash<QString, QVector<QPair<int, int>>> m_categoryRequiredBits;
QHash<QString, QString> m_shortNameToObject;
};
#endif // ITEMDATA_H