OSDN Git Service

[Refactor] #40535 Moved pattern_seq() from player-move.c/h to pattern-walk.c/h
authorHourier <hourier@users.sourceforge.jp>
Mon, 13 Jul 2020 12:41:26 +0000 (21:41 +0900)
committerHourier <hourier@users.sourceforge.jp>
Mon, 13 Jul 2020 12:41:26 +0000 (21:41 +0900)
src/action/movement-execution.c
src/cmd-action/cmd-pet.c
src/floor/pattern-walk.c
src/floor/pattern-walk.h
src/player/player-move.c
src/player/player-move.h

index 573523c..a0a2811 100644 (file)
@@ -6,6 +6,7 @@
 #include "core/player-update-types.h"
 #include "core/stuff-handler.h"
 #include "floor/floor.h"
+#include "floor/pattern-walk.h"
 #include "game-option/input-options.h"
 #include "grid/feature.h"
 #include "grid/grid.h"
index 71de790..947138f 100644 (file)
@@ -9,6 +9,7 @@
 #include "core/window-redrawer.h"
 #include "effect/spells-effect-util.h"
 #include "floor/floor.h"
+#include "floor/pattern-walk.h"
 #include "game-option/input-options.h"
 #include "game-option/play-record-options.h"
 #include "game-option/text-display-options.h"
index e7f210b..978b557 100644 (file)
@@ -18,7 +18,9 @@
 #include "spell-kind/spells-teleport.h"
 #include "status/bad-status-setter.h"
 #include "status/experience.h"
+#include "util/bit-flags-calculator.h"
 #include "view/display-messages.h"
+#include "world/world.h"
 
 /*!
  * @brief パターン終点到達時のテレポート処理を行う
@@ -141,3 +143,101 @@ bool pattern_effect(player_type *creature_ptr)
 
     return TRUE;
 }
+
+/*!
+ * @brief パターンによる移動制限処理
+ * @param creature_ptr プレーヤーへの参照ポインタ
+ * @param c_y プレイヤーの移動元Y座標
+ * @param c_x プレイヤーの移動元X座標
+ * @param n_y プレイヤーの移動先Y座標
+ * @param n_x プレイヤーの移動先X座標
+ * @return 移動処理が可能である場合(可能な場合に選択した場合)TRUEを返す。
+ */
+bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x)
+{
+    feature_type *cur_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[c_y][c_x].feat];
+    feature_type *new_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[n_y][n_x].feat];
+    bool is_pattern_tile_cur = have_flag(cur_f_ptr->flags, FF_PATTERN);
+    bool is_pattern_tile_new = have_flag(new_f_ptr->flags, FF_PATTERN);
+    if (!is_pattern_tile_cur && !is_pattern_tile_new)
+        return TRUE;
+
+    int pattern_type_cur = is_pattern_tile_cur ? cur_f_ptr->subtype : NOT_PATTERN_TILE;
+    int pattern_type_new = is_pattern_tile_new ? new_f_ptr->subtype : NOT_PATTERN_TILE;
+    if (pattern_type_new == PATTERN_TILE_START) {
+        if (!is_pattern_tile_cur && !creature_ptr->confused && !creature_ptr->stun && !creature_ptr->image) {
+            if (get_check(_("パターンの上を歩き始めると、全てを歩かなければなりません。いいですか?",
+                    "If you start walking the Pattern, you must walk the whole way. Ok? ")))
+                return TRUE;
+            else
+                return FALSE;
+        } else
+            return TRUE;
+    }
+
+    if ((pattern_type_new == PATTERN_TILE_OLD) || (pattern_type_new == PATTERN_TILE_END) || (pattern_type_new == PATTERN_TILE_WRECKED)) {
+        if (is_pattern_tile_cur) {
+            return TRUE;
+        } else {
+            msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
+            return FALSE;
+        }
+    }
+
+    if ((pattern_type_new == PATTERN_TILE_TELEPORT) || (pattern_type_cur == PATTERN_TILE_TELEPORT))
+        return TRUE;
+
+    if (pattern_type_cur == PATTERN_TILE_START) {
+        if (is_pattern_tile_new)
+            return TRUE;
+        else {
+            msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
+            return FALSE;
+        }
+    }
+
+    if ((pattern_type_cur == PATTERN_TILE_OLD) || (pattern_type_cur == PATTERN_TILE_END) || (pattern_type_cur == PATTERN_TILE_WRECKED)) {
+        if (!is_pattern_tile_new) {
+            msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
+            return FALSE;
+        } else {
+            return TRUE;
+        }
+    }
+
+    if (!is_pattern_tile_cur) {
+        msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
+
+        return FALSE;
+    }
+
+    byte ok_move = PATTERN_TILE_START;
+    switch (pattern_type_cur) {
+    case PATTERN_TILE_1:
+        ok_move = PATTERN_TILE_2;
+        break;
+    case PATTERN_TILE_2:
+        ok_move = PATTERN_TILE_3;
+        break;
+    case PATTERN_TILE_3:
+        ok_move = PATTERN_TILE_4;
+        break;
+    case PATTERN_TILE_4:
+        ok_move = PATTERN_TILE_1;
+        break;
+    default:
+        if (current_world_ptr->wizard)
+            msg_format(_("おかしなパターン歩行、%d。", "Funny Pattern walking, %d."), pattern_type_cur);
+        return TRUE;
+    }
+
+    if ((pattern_type_new == ok_move) || (pattern_type_new == pattern_type_cur))
+        return TRUE;
+
+    if (!is_pattern_tile_new)
+        msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
+    else
+        msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
+
+    return FALSE;
+}
index 170a699..17a045a 100644 (file)
@@ -3,3 +3,4 @@
 #include "system/angband.h"
 
 bool pattern_effect(player_type* creature_ptr);
+bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x);
index 10ea9a3..cb62d53 100644 (file)
@@ -145,104 +145,6 @@ void search(player_type *creature_ptr)
 }
 
 /*!
- * @brief パターンによる移動制限処理
- * @param creature_ptr プレーヤーへの参照ポインタ
- * @param c_y プレイヤーの移動元Y座標
- * @param c_x プレイヤーの移動元X座標
- * @param n_y プレイヤーの移動先Y座標
- * @param n_x プレイヤーの移動先X座標
- * @return 移動処理が可能である場合(可能な場合に選択した場合)TRUEを返す。
- */
-bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x)
-{
-    feature_type *cur_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[c_y][c_x].feat];
-    feature_type *new_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[n_y][n_x].feat];
-    bool is_pattern_tile_cur = have_flag(cur_f_ptr->flags, FF_PATTERN);
-    bool is_pattern_tile_new = have_flag(new_f_ptr->flags, FF_PATTERN);
-    if (!is_pattern_tile_cur && !is_pattern_tile_new)
-        return TRUE;
-
-    int pattern_type_cur = is_pattern_tile_cur ? cur_f_ptr->subtype : NOT_PATTERN_TILE;
-    int pattern_type_new = is_pattern_tile_new ? new_f_ptr->subtype : NOT_PATTERN_TILE;
-    if (pattern_type_new == PATTERN_TILE_START) {
-        if (!is_pattern_tile_cur && !creature_ptr->confused && !creature_ptr->stun && !creature_ptr->image) {
-            if (get_check(_("パターンの上を歩き始めると、全てを歩かなければなりません。いいですか?",
-                    "If you start walking the Pattern, you must walk the whole way. Ok? ")))
-                return TRUE;
-            else
-                return FALSE;
-        } else
-            return TRUE;
-    }
-
-    if ((pattern_type_new == PATTERN_TILE_OLD) || (pattern_type_new == PATTERN_TILE_END) || (pattern_type_new == PATTERN_TILE_WRECKED)) {
-        if (is_pattern_tile_cur) {
-            return TRUE;
-        } else {
-            msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
-            return FALSE;
-        }
-    }
-
-    if ((pattern_type_new == PATTERN_TILE_TELEPORT) || (pattern_type_cur == PATTERN_TILE_TELEPORT))
-        return TRUE;
-
-    if (pattern_type_cur == PATTERN_TILE_START) {
-        if (is_pattern_tile_new)
-            return TRUE;
-        else {
-            msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
-            return FALSE;
-        }
-    }
-
-    if ((pattern_type_cur == PATTERN_TILE_OLD) || (pattern_type_cur == PATTERN_TILE_END) || (pattern_type_cur == PATTERN_TILE_WRECKED)) {
-        if (!is_pattern_tile_new) {
-            msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
-            return FALSE;
-        } else {
-            return TRUE;
-        }
-    }
-
-    if (!is_pattern_tile_cur) {
-        msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
-
-        return FALSE;
-    }
-
-    byte ok_move = PATTERN_TILE_START;
-    switch (pattern_type_cur) {
-    case PATTERN_TILE_1:
-        ok_move = PATTERN_TILE_2;
-        break;
-    case PATTERN_TILE_2:
-        ok_move = PATTERN_TILE_3;
-        break;
-    case PATTERN_TILE_3:
-        ok_move = PATTERN_TILE_4;
-        break;
-    case PATTERN_TILE_4:
-        ok_move = PATTERN_TILE_1;
-        break;
-    default:
-        if (current_world_ptr->wizard)
-            msg_format(_("おかしなパターン歩行、%d。", "Funny Pattern walking, %d."), pattern_type_cur);
-        return TRUE;
-    }
-
-    if ((pattern_type_new == ok_move) || (pattern_type_new == pattern_type_cur))
-        return TRUE;
-
-    if (!is_pattern_tile_new)
-        msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
-    else
-        msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
-
-    return FALSE;
-}
-
-/*!
  * @brief 移動に伴うプレイヤーのステータス変化処理
  * @param creature_ptr プレーヤーへの参照ポインタ
  * @param ny 移動先Y座標
index 67cd4ab..3f32892 100644 (file)
@@ -29,7 +29,6 @@ extern POSITION temp2_x[MAX_SHORT];
 extern POSITION temp2_y[MAX_SHORT];
 
 bool move_player_effect(player_type *creature_ptr, POSITION ny, POSITION nx, BIT_FLAGS mpe_mode);
-bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x);
 bool trap_can_be_ignored(player_type *creature_ptr, FEAT_IDX feat);
 void search(player_type *creature_ptr);