OSDN Git Service

[Refactor] #3718 terrains_info[] へアクセスしている周辺のコードを参照を使う形にまとめた その22
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 28 Oct 2023 05:40:48 +0000 (14:40 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sun, 5 Nov 2023 01:30:36 +0000 (10:30 +0900)
src/mind/mind-archer.cpp
src/spell-kind/spells-lite.cpp

index 35bf485..6766143 100644 (file)
@@ -107,20 +107,19 @@ bool create_ammo(PlayerType *player_ptr)
 
     switch (ext) {
     case AMMO_SHOT: {
-        DIRECTION dir;
+        int dir;
         if (!get_rep_dir(player_ptr, &dir)) {
             return false;
         }
 
-        POSITION y = player_ptr->y + ddy[dir];
-        POSITION x = player_ptr->x + ddx[dir];
-        auto *g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
-        if (terrains_info[g_ptr->get_feat_mimic()].flags.has_not(TerrainCharacteristics::CAN_DIG)) {
+        const Pos2D pos(player_ptr->y + ddy[dir], player_ptr->x + ddx[dir]);
+        const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
+        if (terrains_info[grid.get_feat_mimic()].flags.has_not(TerrainCharacteristics::CAN_DIG)) {
             msg_print(_("そこには岩石がない。", "You need a pile of rubble."));
             return false;
         }
 
-        if (!g_ptr->cave_has_flag(TerrainCharacteristics::CAN_DIG) || !g_ptr->cave_has_flag(TerrainCharacteristics::HURT_ROCK)) {
+        if (!grid.cave_has_flag(TerrainCharacteristics::CAN_DIG) || !grid.cave_has_flag(TerrainCharacteristics::HURT_ROCK)) {
             msg_print(_("硬すぎて崩せなかった。", "You failed to make ammo."));
             return true;
         }
@@ -140,7 +139,7 @@ bool create_ammo(PlayerType *player_ptr)
             autopick_alter_item(player_ptr, slot, false);
         }
 
-        cave_alter_feat(player_ptr, y, x, TerrainCharacteristics::HURT_ROCK);
+        cave_alter_feat(player_ptr, pos.y, pos.x, TerrainCharacteristics::HURT_ROCK);
         RedrawingFlagsUpdater::get_instance().set_flag(StatusRecalculatingFlag::FLOW);
         return true;
     }
index 55cc3a6..4c7cae9 100644 (file)
@@ -93,42 +93,30 @@ static void cave_temp_room_lite(PlayerType *player_ptr, const std::vector<Pos2D>
 /*!
  * @brief 指定した座標全てを暗くする。
  * @param player_ptr プレイヤーへの参照ポインタ
- * @param points 暗くすべき座標たち
- * @details
- * <pre>
- * This routine clears the entire "temp" set.
- * This routine will "darken" all "temp" grids.
- * In addition, some of these grids will be "unmarked".
- * This routine is used (only) by "unlite_room()"
- * Also, process all affected monsters
- * </pre>
- * @todo この辺、xとyが引数になっているが、player_ptr->xとplayer_ptr->yで全て置き換えが効くはず……
+ * @param points 暗くすべき座標群
  */
 static void cave_temp_room_unlite(PlayerType *player_ptr, const std::vector<Pos2D> &points)
 {
+    auto &floor = *player_ptr->current_floor_ptr;
     for (const auto &point : points) {
-        const POSITION y = point.y;
-        const POSITION x = point.x;
-
-        auto *g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
-        bool do_dark = !g_ptr->is_mirror();
-        g_ptr->info &= ~(CAVE_TEMP);
+        auto &grid = floor.get_grid(point);
+        auto do_dark = !grid.is_mirror();
+        grid.info &= ~(CAVE_TEMP);
         if (!do_dark) {
             continue;
         }
 
-        if (player_ptr->current_floor_ptr->dun_level || !is_daytime()) {
+        if (floor.dun_level || !is_daytime()) {
             for (int j = 0; j < 9; j++) {
-                POSITION by = y + ddy_ddd[j];
-                POSITION bx = x + ddx_ddd[j];
-
-                if (in_bounds2(player_ptr->current_floor_ptr, by, bx)) {
-                    Grid *cc_ptr = &player_ptr->current_floor_ptr->grid_array[by][bx];
+                const Pos2D pos_neighbor(point.y + ddy_ddd[j], point.x + ddx_ddd[j]);
+                if (!in_bounds2(&floor, pos_neighbor.y, pos_neighbor.x)) {
+                    continue;
+                }
 
-                    if (terrains_info[cc_ptr->get_feat_mimic()].flags.has(TerrainCharacteristics::GLOW)) {
-                        do_dark = false;
-                        break;
-                    }
+                const auto &grid_neighbor = floor.get_grid(pos_neighbor);
+                if (terrains_info[grid_neighbor.get_feat_mimic()].flags.has(TerrainCharacteristics::GLOW)) {
+                    do_dark = false;
+                    break;
                 }
             }
 
@@ -137,20 +125,20 @@ static void cave_temp_room_unlite(PlayerType *player_ptr, const std::vector<Pos2
             }
         }
 
-        g_ptr->info &= ~(CAVE_GLOW);
-        if (terrains_info[g_ptr->get_feat_mimic()].flags.has_not(TerrainCharacteristics::REMEMBER)) {
+        grid.info &= ~(CAVE_GLOW);
+        if (terrains_info[grid.get_feat_mimic()].flags.has_not(TerrainCharacteristics::REMEMBER)) {
             if (!view_torch_grids) {
-                g_ptr->info &= ~(CAVE_MARK);
+                grid.info &= ~(CAVE_MARK);
             }
-            note_spot(player_ptr, y, x);
+            note_spot(player_ptr, point.y, point.x);
         }
 
-        if (g_ptr->m_idx) {
-            update_monster(player_ptr, g_ptr->m_idx, false);
+        if (grid.m_idx) {
+            update_monster(player_ptr, grid.m_idx, false);
         }
 
-        lite_spot(player_ptr, y, x);
-        update_local_illumination(player_ptr, y, x);
+        lite_spot(player_ptr, point.y, point.x);
+        update_local_illumination(player_ptr, point.y, point.x);
     }
 }