OSDN Git Service

[Refactor] #3677 object_known() をItemEntity のオブジェクトメソッドに繰り込んだ
[hengbandforosx/hengbandosx.git] / src / object / object-index-list.cpp
1 #include "object/object-index-list.h"
2 #include "system/floor-type-definition.h"
3 #include "system/item-entity.h"
4
5 #include <algorithm>
6
7 void ObjectIndexList::add(FloorType *floor_ptr, OBJECT_IDX o_idx, IDX stack_idx)
8 {
9     if (stack_idx <= 0) {
10         stack_idx = o_idx_list_.empty() ? 1 : floor_ptr->o_list[o_idx_list_.front()].stack_idx + 1;
11     }
12
13     auto it = std::partition_point(
14         o_idx_list_.begin(), o_idx_list_.end(), [floor_ptr, stack_idx](IDX idx) { return floor_ptr->o_list[idx].stack_idx > stack_idx; });
15
16     o_idx_list_.insert(it, o_idx);
17     floor_ptr->o_list[o_idx].stack_idx = stack_idx;
18 }
19
20 void ObjectIndexList::remove(OBJECT_IDX o_idx)
21 {
22     o_idx_list_.remove(o_idx);
23 }
24
25 void ObjectIndexList::rotate(FloorType *floor_ptr)
26 {
27     if (o_idx_list_.size() < 2) {
28         return;
29     }
30
31     o_idx_list_.push_back(o_idx_list_.front());
32     o_idx_list_.pop_front();
33
34     for (const auto o_idx : o_idx_list_) {
35         floor_ptr->o_list[o_idx].stack_idx++;
36     }
37
38     floor_ptr->o_list[o_idx_list_.back()].stack_idx = 1;
39 }