OSDN Git Service

[Refactor] #3903 その他の箇所から呼び出しているget_direction() の周辺コードをget_neighbor() を用いて整理した
authorHourier <66951241+Hourier@users.noreply.github.com>
Mon, 8 Apr 2024 13:45:27 +0000 (22:45 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Mon, 22 Apr 2024 12:34:18 +0000 (21:34 +0900)
src/action/mutation-execution.cpp
src/cmd-action/cmd-pet.cpp
src/mind/mind-berserker.cpp
src/mind/mind-warrior.cpp
src/mutation/mutation-techniques.cpp
src/racial/racial-vampire.cpp
src/spell/spells-status.cpp

index 6041792..aa5daa8 100644 (file)
@@ -244,9 +244,8 @@ bool exe_mutation_power(PlayerType *player_ptr, PlayerMutationType power)
             return false;
         }
 
-        const auto y = player_ptr->y + ddy[dir];
-        const auto x = player_ptr->x + ddx[dir];
-        const auto &grid = floor.grid_array[y][x];
+        const auto pos = player_ptr->get_neighbor(dir);
+        const auto &grid = floor.get_grid(pos);
         if (!grid.has_monster()) {
             msg_print(_("邪悪な存在を感じとれません!", "You sense no evil there!"));
             return true;
@@ -284,9 +283,8 @@ bool exe_mutation_power(PlayerType *player_ptr, PlayerMutationType power)
             return false;
         }
 
-        const auto y = player_ptr->y + ddy[dir];
-        const auto x = player_ptr->x + ddx[dir];
-        auto &grid = floor.grid_array[y][x];
+        const auto pos = player_ptr->get_neighbor(dir);
+        const auto &grid = floor.get_grid(pos);
         if (!grid.has_monster()) {
             msg_print(_("あなたは何もない場所で手を振った。", "You wave your hands in the air."));
             return true;
index 6c1142f..dce3d8f 100644 (file)
@@ -202,7 +202,7 @@ bool do_cmd_riding(PlayerType *player_ptr, bool force)
         return false;
     }
 
-    const Pos2D pos(player_ptr->y + ddy[dir], player_ptr->x + ddx[dir]);
+    const auto pos = player_ptr->get_neighbor(dir);
     auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
 
     PlayerClass(player_ptr).break_samurai_stance({ SamuraiStanceType::MUSOU });
index 9985899..daeaf3f 100644 (file)
@@ -24,8 +24,6 @@
  */
 bool cast_berserk_spell(PlayerType *player_ptr, MindBerserkerType spell)
 {
-    POSITION y, x;
-    DIRECTION dir;
     switch (spell) {
     case MindBerserkerType::DETECT_MANACE:
         detect_monsters_mind(player_ptr, DETECT_RAD_DEFAULT);
@@ -36,32 +34,35 @@ bool cast_berserk_spell(PlayerType *player_ptr, MindBerserkerType spell)
             return false;
         }
 
+        DIRECTION dir;
         if (!get_direction(player_ptr, &dir) || (dir == 5)) {
             return false;
         }
 
-        y = player_ptr->y + ddy[dir];
-        x = player_ptr->x + ddx[dir];
-        if (!player_ptr->current_floor_ptr->grid_array[y][x].has_monster()) {
+        const auto pos = player_ptr->get_neighbor(dir);
+        const auto &floor = *player_ptr->current_floor_ptr;
+        const auto &grid = floor.get_grid(pos);
+        if (!grid.has_monster()) {
             msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
             return false;
         }
 
-        do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
-        if (!player_can_enter(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat, 0) || is_trap(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat)) {
+        do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_NONE);
+        if (!player_can_enter(player_ptr, grid.feat, 0) || is_trap(player_ptr, grid.feat)) {
             return true;
         }
 
-        y += ddy[dir];
-        x += ddx[dir];
-        if (player_can_enter(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat, 0) && !is_trap(player_ptr, player_ptr->current_floor_ptr->grid_array[y][x].feat) && !player_ptr->current_floor_ptr->grid_array[y][x].has_monster()) {
+        const Pos2D pos_new(pos.y + ddy[dir], pos.x + ddx[dir]);
+        const auto &grid_new = floor.get_grid(pos_new);
+        if (player_can_enter(player_ptr, grid_new.feat, 0) && !is_trap(player_ptr, grid_new.feat) && !grid_new.has_monster()) {
             msg_print(nullptr);
-            (void)move_player_effect(player_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
+            (void)move_player_effect(player_ptr, pos_new.y, pos_new.x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
         }
 
         return true;
     }
     case MindBerserkerType::SMASH_TRAP: {
+        DIRECTION dir;
         if (!get_direction(player_ptr, &dir)) {
             return false;
         }
index a7e54ac..bc63355 100644 (file)
@@ -19,10 +19,10 @@ bool hit_and_away(PlayerType *player_ptr)
     if (!get_direction(player_ptr, &dir)) {
         return false;
     }
-    POSITION y = player_ptr->y + ddy[dir];
-    POSITION x = player_ptr->x + ddx[dir];
-    if (player_ptr->current_floor_ptr->grid_array[y][x].has_monster()) {
-        do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
+
+    const auto pos = player_ptr->get_neighbor(dir);
+    if (player_ptr->current_floor_ptr->get_grid(pos).has_monster()) {
+        do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_NONE);
         if (randint0(player_ptr->skill_dis) < 7) {
             msg_print(_("うまく逃げられなかった。", "You failed to run away."));
         } else {
@@ -43,18 +43,12 @@ bool hit_and_away(PlayerType *player_ptr)
  */
 bool sword_dancing(PlayerType *player_ptr)
 {
-    DIRECTION dir;
-    POSITION y = 0, x = 0;
-    Grid *g_ptr;
-    for (int i = 0; i < 6; i++) {
-        dir = randint0(8);
-        y = player_ptr->y + ddy_ddd[dir];
-        x = player_ptr->x + ddx_ddd[dir];
-        g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
-
-        /* Hack -- attack monsters */
-        if (g_ptr->has_monster()) {
-            do_cmd_attack(player_ptr, y, x, HISSATSU_NONE);
+    for (auto i = 0; i < 6; i++) {
+        const auto dir = randint0(8);
+        const Pos2D pos(player_ptr->y + ddy_ddd[dir], player_ptr->x + ddx_ddd[dir]);
+        const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
+        if (grid.has_monster()) {
+            do_cmd_attack(player_ptr, pos.y, pos.x, HISSATSU_NONE);
         } else {
             msg_print(_("攻撃が空をきった。", "You attack the empty air."));
         }
index 2064b80..2802379 100644 (file)
@@ -33,7 +33,7 @@ bool eat_rock(PlayerType *player_ptr)
         return false;
     }
 
-    const Pos2D pos(player_ptr->y + ddy[dir], player_ptr->x + ddx[dir]);
+    const auto pos = player_ptr->get_neighbor(dir);
     const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
     const auto &terrain = grid.get_terrain();
     const auto &terrain_mimic = grid.get_terrain_mimic();
index b5d5a4a..dd6305c 100644 (file)
@@ -25,11 +25,10 @@ bool vampirism(PlayerType *player_ptr)
         return false;
     }
 
-    POSITION y = player_ptr->y + ddy[dir];
-    POSITION x = player_ptr->x + ddx[dir];
-    const auto *g_ptr = &floor.grid_array[y][x];
+    const auto pos = player_ptr->get_neighbor(dir);
+    const auto &grid = floor.get_grid(pos);
     stop_mouth(player_ptr);
-    if (!g_ptr->has_monster()) {
+    if (!grid.has_monster()) {
         msg_print(_("何もない場所に噛みついた!", "You bite into thin air!"));
         return false;
     }
index 2d5341e..c000e24 100644 (file)
@@ -537,17 +537,18 @@ bool fishing(PlayerType *player_ptr)
     if (!get_direction(player_ptr, &dir)) {
         return false;
     }
-    POSITION y = player_ptr->y + ddy[dir];
-    POSITION x = player_ptr->x + ddx[dir];
+
+    const auto pos = player_ptr->get_neighbor(dir);
     player_ptr->fishing_dir = dir;
-    auto *floor_ptr = player_ptr->current_floor_ptr;
-    if (!cave_has_flag_bold(floor_ptr, y, x, TerrainCharacteristics::WATER)) {
+    const auto &floor = *player_ptr->current_floor_ptr;
+    if (!cave_has_flag_bold(&floor, pos.y, pos.x, TerrainCharacteristics::WATER)) {
         msg_print(_("そこは水辺ではない。", "You can't fish here."));
         return false;
     }
 
-    if (floor_ptr->grid_array[y][x].has_monster()) {
-        const auto m_name = monster_desc(player_ptr, &floor_ptr->m_list[floor_ptr->grid_array[y][x].m_idx], 0);
+    const auto &grid = floor.get_grid(pos);
+    if (grid.has_monster()) {
+        const auto m_name = monster_desc(player_ptr, &floor.m_list[grid.m_idx], 0);
         msg_format(_("%sが邪魔だ!", "%s^ is standing in your way."), m_name.data());
         PlayerEnergy(player_ptr).reset_player_turn();
         return false;