载入中...
搜索中...
未找到
Bag.h
浏览该文件的文档.
1#pragma once
2
9
10#include <string>
11#include <unordered_map>
12#include <vector>
13
14namespace eve::inventory {
15
17class Bag {
18public:
20 Bag(int slotCount);
21 ~Bag() = default;
22
23 Bag(const Bag &) = delete;
24 Bag &operator=(const Bag &) = delete;
25
27 void destroy();
28
30 std::string getId() const { return id_; }
31 void setId(const std::string &id) { id_ = id; }
32
34 std::string getKind() const { return kind_; }
35 void setKind(const std::string &kind) { kind_ = kind; }
36
38 int getSlotCount() const { return int(slots_.size()); }
40 void setSlotCount(int slotCount);
41
43 float getMaxWeight() const { return maxWeight_; }
44 void setMaxWeight(float w) { maxWeight_ = w; }
45 float getMaxVolume() const { return maxVolume_; }
46 void setMaxVolume(float v) { maxVolume_ = v; }
47
49 std::string getAcceptRule() const { return acceptRule_; }
50 void setAcceptRule(const std::string &name) { acceptRule_ = name; }
51 std::string getCapacityPolicy() const { return capacityPolicy_; }
52 void setCapacityPolicy(const std::string &name) { capacityPolicy_ = name; }
53 std::string getStackRule() const { return stackRule_; }
54 void setStackRule(const std::string &name) { stackRule_ = name; }
55
57 void clearAcceptTags();
58 void addAcceptTag(const std::string &tag);
59 int getAcceptTagCount() const;
60 std::string getAcceptTag(int index) const;
61
62 void clearRejectTags();
63 void addRejectTag(const std::string &tag);
64 int getRejectTagCount() const;
65 std::string getRejectTag(int index) const;
66
68 void setExtra(const std::string &key, const std::string &value);
69 std::string getExtra(const std::string &key, const std::string &fallback = {}) const;
70
72 bool canAddItem(const std::string &itemId, int quantity);
73 std::string canAddItemReason(const std::string &itemId, int quantity);
74 int addItem(const std::string &itemId, int quantity);
75 int removeItem(const std::string &itemId, int quantity);
76 int removeAt(int slot, int quantity);
77 bool swapSlots(int slotA, int slotB);
78 bool moveSlot(int fromSlot, int toSlot);
79 bool splitStack(int slot, int quantity, int toSlot);
80 int countItem(const std::string &itemId) const;
81 int findItem(const std::string &itemId) const;
82 int findItemByTag(const std::string &tag) const;
83 float getUsedWeight() const;
84 float getUsedVolume() const;
85 int getUsedSlotCount() const;
86 void clear();
87
88 // ---- 槽位查询 ----
89 bool isSlotEmpty(int slot) const;
90 std::string getSlotItemId(int slot) const;
91 int getSlotQuantity(int slot) const;
92 int getSlotInstanceId(int slot) const;
93 float getSlotDurability(int slot) const;
94 void setSlotDurability(int slot, float durability);
95 std::string getSlotProp(int slot, const std::string &key, const std::string &fallback = {}) const;
96 void setSlotProp(int slot, const std::string &key, const std::string &value);
97 bool slotHasTag(int slot, const std::string &tag) const;
98 void addSlotTag(int slot, const std::string &tag);
99
100 // ---- 供 System 直接访问 ----
101 const std::vector<ItemStack> &slots() const { return slots_; }
102 std::vector<ItemStack> &slots() { return slots_; }
103 const std::vector<std::string> &acceptTags() const { return acceptTags_; }
104 const std::vector<std::string> &rejectTags() const { return rejectTags_; }
105
106private:
107 friend class InventorySystem;
108
109 std::string id_;
110 std::string kind_ = "backpack";
111 float maxWeight_ = 0.f;
112 float maxVolume_ = 0.f;
113 std::string acceptRule_ = "default";
114 std::string capacityPolicy_ = "slotsAndWeight";
115 std::string stackRule_ = "sameItem";
116 std::vector<std::string> acceptTags_;
117 std::vector<std::string> rejectTags_;
118 std::vector<ItemStack> slots_;
119 std::unordered_map<std::string, std::string> extra_;
120};
121
122} // namespace eve::inventory
Tok kind
std::string value
std::string id
int w
const char * name
Definition RockMesh.cpp:21
int v
格子型物品容器(脚本可直接操作)。
Definition Bag.h:17
int getSlotInstanceId(int slot) const
Definition Bag.cpp:122
std::string getId() const
容器 id(变更事件定位用)。
Definition Bag.h:30
float getUsedWeight() const
Definition Bag.cpp:99
void setSlotCount(int slotCount)
调整格数:扩容追加空槽;缩容会丢弃被裁掉的槽(不自动转移)。
Definition Bag.cpp:15
float getMaxVolume() const
Definition Bag.h:45
const std::vector< ItemStack > & slots() const
Definition Bag.h:101
const std::vector< std::string > & rejectTags() const
Definition Bag.h:104
std::string canAddItemReason(const std::string &itemId, int quantity)
Definition Bag.cpp:61
std::string getAcceptTag(int index) const
Definition Bag.cpp:30
bool canAddItem(const std::string &itemId, int quantity)
便捷操作(转发 InventorySystem):增删 / 移动 / 查询。
Definition Bag.cpp:57
void setSlotDurability(int slot, float durability)
Definition Bag.cpp:132
std::string getSlotProp(int slot, const std::string &key, const std::string &fallback={}) const
Definition Bag.cpp:137
std::vector< ItemStack > & slots()
Definition Bag.h:102
int addItem(const std::string &itemId, int quantity)
Definition Bag.cpp:67
int getRejectTagCount() const
Definition Bag.cpp:43
void addSlotTag(int slot, const std::string &tag)
Definition Bag.cpp:152
bool slotHasTag(int slot, const std::string &tag) const
Definition Bag.cpp:147
float getMaxWeight() const
重量 / 体积上限(容量策略用)。
Definition Bag.h:43
bool splitStack(int slot, int quantity, int toSlot)
Definition Bag.cpp:83
int removeItem(const std::string &itemId, int quantity)
Definition Bag.cpp:71
const std::vector< std::string > & acceptTags() const
Definition Bag.h:103
std::string getStackRule() const
Definition Bag.h:53
void clearRejectTags()
Definition Bag.cpp:35
void setCapacityPolicy(const std::string &name)
Definition Bag.h:52
int findItem(const std::string &itemId) const
Definition Bag.cpp:91
void addRejectTag(const std::string &tag)
Definition Bag.cpp:37
void setKind(const std::string &kind)
Definition Bag.h:35
std::string getKind() const
容器种类(bag / chest / shop 等)。
Definition Bag.h:34
void setAcceptRule(const std::string &name)
Definition Bag.h:50
std::string getSlotItemId(int slot) const
Definition Bag.cpp:112
void setId(const std::string &id)
Definition Bag.h:31
bool moveSlot(int fromSlot, int toSlot)
Definition Bag.cpp:79
int getSlotCount() const
格数。
Definition Bag.h:38
int countItem(const std::string &itemId) const
Definition Bag.cpp:87
float getUsedVolume() const
Definition Bag.cpp:101
int getAcceptTagCount() const
Definition Bag.cpp:28
Bag(const Bag &)=delete
bool swapSlots(int slotA, int slotB)
Definition Bag.cpp:77
std::string getExtra(const std::string &key, const std::string &fallback={}) const
Definition Bag.cpp:52
std::string getAcceptRule() const
接受规则 / 容量策略 / 堆叠规则名。
Definition Bag.h:49
int getSlotQuantity(int slot) const
Definition Bag.cpp:117
void setExtra(const std::string &key, const std::string &value)
容器级额外属性(键值)。
Definition Bag.cpp:50
int removeAt(int slot, int quantity)
Definition Bag.cpp:75
void setMaxVolume(float v)
Definition Bag.h:46
bool isSlotEmpty(int slot) const
Definition Bag.cpp:107
float getSlotDurability(int slot) const
Definition Bag.cpp:127
void setSlotProp(int slot, const std::string &key, const std::string &value)
Definition Bag.cpp:142
void setMaxWeight(float w)
Definition Bag.h:44
void clearAcceptTags()
可接受 / 拒绝的标签过滤。
Definition Bag.cpp:20
int findItemByTag(const std::string &tag) const
Definition Bag.cpp:95
std::string getCapacityPolicy() const
Definition Bag.h:51
Bag & operator=(const Bag &)=delete
void addAcceptTag(const std::string &tag)
Definition Bag.cpp:22
int getUsedSlotCount() const
Definition Bag.cpp:103
void destroy()
释放资源并使其失效。
Definition Bag.cpp:13
std::string getRejectTag(int index) const
Definition Bag.cpp:45
void setStackRule(const std::string &name)
Definition Bag.h:54
运行时容器:固定格数的背包 / 箱子 / 商店栏等。 行为由 InventorySystem 提供;本类暴露便于脚本绑定的薄封装方法。
Definition Bag.cpp:6