OSDN Git Service

[Refactor] monster_idxと0との比較を関数化する
[hengbandforosx/hengbandosx.git] / src / system / grid-type-definition.cpp
1 #include "system/grid-type-definition.h"
2 #include "system/angband-system.h"
3 #include "system/monster-race-info.h"
4 #include "system/terrain-type-definition.h"
5 #include "util/bit-flags-calculator.h"
6
7 /*!
8  * @brief 指定座標がFLOOR属性を持ったマスかどうかを返す
9  * @param Y 指定Y座標
10  * @param X 指定X座標
11  * @return FLOOR属性を持っているならばTRUE
12  */
13 bool Grid::is_floor() const
14 {
15     return any_bits(this->info, CAVE_FLOOR);
16 }
17
18 bool Grid::is_room() const
19 {
20     return any_bits(this->info, CAVE_ROOM);
21 }
22
23 bool Grid::is_extra() const
24 {
25     return any_bits(this->info, CAVE_EXTRA);
26 }
27
28 bool Grid::is_inner() const
29 {
30     return any_bits(this->info, CAVE_INNER);
31 }
32
33 bool Grid::is_outer() const
34 {
35     return any_bits(this->info, CAVE_OUTER);
36 }
37
38 bool Grid::is_solid() const
39 {
40     return any_bits(this->info, CAVE_SOLID);
41 }
42
43 bool Grid::is_icky() const
44 {
45     return any_bits(this->info, CAVE_ICKY);
46 }
47
48 bool Grid::is_lite() const
49 {
50     return any_bits(this->info, CAVE_LITE);
51 }
52
53 bool Grid::is_redraw() const
54 {
55     return any_bits(this->info, CAVE_REDRAW);
56 }
57
58 bool Grid::is_view() const
59 {
60     return any_bits(this->info, CAVE_VIEW);
61 }
62
63 bool Grid::is_object() const
64 {
65     return any_bits(this->info, CAVE_OBJECT);
66 }
67
68 bool Grid::is_mark() const
69 {
70     return any_bits(this->info, CAVE_MARK);
71 }
72
73 bool Grid::is_mirror() const
74 {
75     return this->is_object() && TerrainList::get_instance()[this->mimic].flags.has(TerrainCharacteristics::MIRROR);
76 }
77
78 /*
79  *  @brief 守りのルーンで守られているかを返す
80  */
81 bool Grid::is_rune_protection() const
82 {
83     return this->is_object() && TerrainList::get_instance()[this->mimic].flags.has(TerrainCharacteristics::RUNE_PROTECTION);
84 }
85
86 /*
87  *  @brief 爆発のルーンが仕掛けられているかを返す
88  */
89 bool Grid::is_rune_explosion() const
90 {
91     return this->is_object() && TerrainList::get_instance()[this->mimic].flags.has(TerrainCharacteristics::RUNE_EXPLOSION);
92 }
93
94 byte Grid::get_cost(const MonsterRaceInfo *r_ptr) const
95 {
96     return this->costs[get_grid_flow_type(r_ptr)];
97 }
98
99 byte Grid::get_distance(const MonsterRaceInfo *r_ptr) const
100 {
101     return this->dists[get_grid_flow_type(r_ptr)];
102 }
103
104 flow_type Grid::get_grid_flow_type(const MonsterRaceInfo *r_ptr) const
105 {
106     return r_ptr->feature_flags.has(MonsterFeatureType::CAN_FLY) ? FLOW_CAN_FLY : FLOW_NORMAL;
107 }
108
109 /*
110  * @brief グリッドのミミック特性地形を返す
111  * @param g_ptr グリッドへの参照ポインタ
112  * @return 地形情報
113  */
114 FEAT_IDX Grid::get_feat_mimic() const
115 {
116     return TerrainList::get_instance()[this->mimic ? this->mimic : this->feat].mimic;
117 }
118
119 bool Grid::cave_has_flag(TerrainCharacteristics feature_flags) const
120 {
121     return this->get_terrain().flags.has(feature_flags);
122 }
123
124 /*!
125  * @brief グリッドのシンボルが指定した記号かどうかを調べる
126  * @param ch 指定するシンボル文字
127  * @return シンボルが指定した記号か否か
128  */
129 bool Grid::is_symbol(const int ch) const
130 {
131     return this->get_terrain().x_char[0] == ch;
132 }
133
134 void Grid::reset_costs()
135 {
136     for (auto &cost : this->costs) {
137         cost = 0;
138     }
139 }
140
141 void Grid::reset_dists()
142 {
143     for (auto &dist : this->dists) {
144         dist = 0;
145     }
146 }
147
148 bool Grid::has_los() const
149 {
150     return any_bits(this->info, CAVE_VIEW) || AngbandSystem::get_instance().is_phase_out();
151 }
152
153 TerrainType &Grid::get_terrain()
154 {
155     return TerrainList::get_instance()[this->feat];
156 }
157
158 const TerrainType &Grid::get_terrain() const
159 {
160     return TerrainList::get_instance()[this->feat];
161 }
162
163 TerrainType &Grid::get_terrain_mimic()
164 {
165     return TerrainList::get_instance()[this->get_feat_mimic()];
166 }
167
168 const TerrainType &Grid::get_terrain_mimic() const
169 {
170     return TerrainList::get_instance()[this->get_feat_mimic()];
171 }
172
173 TerrainType &Grid::get_terrain_mimic_raw()
174 {
175     return TerrainList::get_instance()[this->mimic];
176 }
177
178 const TerrainType &Grid::get_terrain_mimic_raw() const
179 {
180     return TerrainList::get_instance()[this->mimic];
181 }