OSDN Git Service

[Refactor] #40481 Separated blue_magic_key_input() from get_learned_power()
authorHourier <hourier@users.sourceforge.jp>
Sat, 18 Jul 2020 10:34:28 +0000 (19:34 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sat, 18 Jul 2020 10:35:18 +0000 (19:35 +0900)
src/blue-magic/learnt-power-getter.c

index 2a0c96e..5c5ca6b 100644 (file)
@@ -313,6 +313,28 @@ static void describe_blue_magic_name(player_type *caster_ptr, learnt_magic_type
     }
 }
 
+static bool blue_mage_key_input(player_type *caster_ptr, learnt_magic_type *lm_ptr)
+{
+    if ((lm_ptr->choice != ' ') && (lm_ptr->choice != '*') && (lm_ptr->choice != '?') && (use_menu || (lm_ptr->ask == 0)))
+        return FALSE;
+
+    if (lm_ptr->redraw && !use_menu) {
+        lm_ptr->redraw = FALSE;
+        screen_load();
+        return TRUE;
+    }
+
+    lm_ptr->redraw = TRUE;
+    if (!use_menu)
+        screen_save();
+
+    describe_blue_magic_name(caster_ptr, lm_ptr);
+    if (lm_ptr->y < 22)
+        prt("", lm_ptr->y + lm_ptr->blue_magic_num + 1, lm_ptr->x);
+
+    return TRUE;
+}
+
 /*!
  * @brief 使用可能な青魔法を選択する /
  * Allow user to choose a imitation.
@@ -354,22 +376,8 @@ bool get_learned_power(player_type *caster_ptr, SPELL_IDX *sn)
         if (use_menu && (lm_ptr->choice != ' ') && !switch_blue_magic_choice(caster_ptr, lm_ptr))
             return FALSE;
 
-        if ((lm_ptr->choice == ' ') || (lm_ptr->choice == '*') || (lm_ptr->choice == '?') || (use_menu && lm_ptr->ask)) {
-            if (!lm_ptr->redraw || use_menu) {
-                lm_ptr->redraw = TRUE;
-                if (!use_menu)
-                    screen_save();
-
-                describe_blue_magic_name(caster_ptr, lm_ptr);
-                if (lm_ptr->y < 22)
-                    prt("", lm_ptr->y + lm_ptr->blue_magic_num + 1, lm_ptr->x);
-            } else {
-                lm_ptr->redraw = FALSE;
-                screen_load();
-            }
-
+        if (blue_mage_key_input(caster_ptr, lm_ptr))
             continue;
-        }
 
         if (!use_menu) {
             lm_ptr->ask = isupper(lm_ptr->choice);