Skip to content

Commit 814c08b

Browse files
committed
add BasicInventory
1 parent b572926 commit 814c08b

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

code/bits/InventoryState.cc

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,36 @@
66

77
namespace akgr {
88

9-
namespace {
10-
11-
void add_item_to(const DataReference<ItemData>& data, std::vector<InventoryItemState>& items, int32_t count)
12-
{
13-
if (auto iterator = std::find_if(items.begin(), items.end(), [&data](const InventoryItemState& state) { return data.id == state.data.id; }); iterator != items.end()) {
14-
iterator->count += count;
15-
} else {
16-
items.push_back({ data, count });
17-
}
18-
}
9+
/*
10+
* BasicInventoryState
11+
*/
1912

13+
void BasicInventoryState::add_item(const DataReference<ItemData>& data, int32_t count)
14+
{
15+
if (auto iterator = std::find_if(items.begin(), items.end(), [&data](const InventoryItemState& state) { return data.id == state.data.id; }); iterator != items.end()) {
16+
iterator->count += count;
17+
} else {
18+
items.push_back({ data, count });
19+
}
2020
}
2121

22-
void InventoryState::add_item(const DataReference<ItemData>& data, int32_t count)
22+
/*
23+
* InventoryState
24+
*/
25+
26+
void InventoryState::add_regular_item(const DataReference<ItemData>& data, int32_t count)
2327
{
24-
add_item_to(data, items, count);
28+
regular.add_item(data, count);
2529
}
2630

2731
void InventoryState::add_quest_item(const DataReference<ItemData>& data, int32_t count)
2832
{
29-
add_item_to(data, quest_items, count);
33+
quest.add_item(data, count);
3034
}
3135

3236
void InventoryState::transfer_to_quest_items(const DataReference<ItemData>& data, int32_t count)
3337
{
34-
if (auto iterator = std::find_if(items.begin(), items.end(), [&data](const InventoryItemState& state) { return data.id == state.data.id; }); iterator != items.end()) {
38+
if (auto iterator = std::find_if(quest.items.begin(), quest.items.end(), [&data](const InventoryItemState& state) { return data.id == state.data.id; }); iterator != quest.items.end()) {
3539
assert(iterator->count >= count);
3640
iterator->count -= count;
3741
add_quest_item(data, count);

code/bits/InventoryState.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,29 @@ namespace akgr {
1818
return ar | state.data | state.count;
1919
}
2020

21-
struct InventoryState {
21+
struct BasicInventoryState {
2222
std::vector<InventoryItemState> items;
23-
std::vector<InventoryItemState> quest_items;
2423

2524
void add_item(const DataReference<ItemData>& data, int32_t count = 1);
25+
};
26+
27+
template<typename Archive>
28+
Archive& operator|(Archive& ar, gf::MaybeConst<BasicInventoryState, Archive>& state) {
29+
return ar | state.items;
30+
}
31+
32+
struct InventoryState {
33+
BasicInventoryState regular;
34+
BasicInventoryState quest;
35+
36+
void add_regular_item(const DataReference<ItemData>& data, int32_t count = 1);
2637
void add_quest_item(const DataReference<ItemData>& data, int32_t count = 1);
2738
void transfer_to_quest_items(const DataReference<ItemData>& data, int32_t count = 1);
2839
};
2940

3041
template<typename Archive>
3142
Archive& operator|(Archive& ar, gf::MaybeConst<InventoryState, Archive>& state) {
32-
return ar | state.items | state.quest_items;
43+
return ar | state.regular | state.quest;
3344
}
3445

3546
}

code/bits/WorldModel.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ namespace akgr {
163163
for (auto& item : state.items) {
164164
if (item.status.test(ItemStatus::Picked)) {
165165
need_update = true;
166-
state.hero.inventory.add_item(item.data);
166+
state.hero.inventory.add_regular_item(item.data);
167167
check_quest_farm(item.data->label.tag);
168168
}
169169
}
@@ -324,7 +324,7 @@ namespace akgr {
324324
auto& quest_state = std::get<FarmQuestState>(quest.features);
325325
quest_state.amount = 0;
326326

327-
for (auto& item : state.hero.inventory.items) {
327+
for (auto& item : state.hero.inventory.regular.items) {
328328
if (quest_data.item->label.id == item.data->label.id) {
329329
quest_state.amount += item.count;
330330

0 commit comments

Comments
 (0)