OSDN Git Service

[Refactor] PlayerRaceクラスに速度腕力器用耐久の修正計算を集約
authordis- <dis.rogue@gmail.com>
Fri, 29 Oct 2021 09:38:16 +0000 (18:38 +0900)
committerdis- <dis.rogue@gmail.com>
Fri, 29 Oct 2021 09:38:16 +0000 (18:38 +0900)
表題の通り、PlayerRaceクラスに該当分の処理を集約した。

動作変更はしていない。

src/player-ability/player-constitution.cpp
src/player-ability/player-dexterity.cpp
src/player-ability/player-strength.cpp
src/player-base/player-race.cpp
src/player-base/player-race.h
src/player-status/player-speed.cpp

index f655e41..e963579 100644 (file)
@@ -31,22 +31,12 @@ void PlayerConstitution::set_locals()
 /*!
  * @brief 耐久力補正計算 - 種族
  * @return 耐久力補正値
- * @details
- * * 種族による耐久力修正値。
- * * エントは別途レベル26,41,46到達ごとに加算(+1)
  */
 int16_t PlayerConstitution::race_value()
 {
     int16_t result = PlayerBasicStatistics::race_value();
 
-    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
-        if (this->player_ptr->lev > 25)
-            result++;
-        if (this->player_ptr->lev > 40)
-            result++;
-        if (this->player_ptr->lev > 45)
-            result++;
-    }
+    result += PlayerRace(this->player_ptr).additional_constitution();
 
     return result;
 }
index fcae38c..ecb381f 100644 (file)
@@ -31,22 +31,12 @@ void PlayerDexterity::set_locals()
 /*!
  * @brief 器用さ補正計算 - 種族
  * @return 器用さ補正値
- * @details
- * * 種族による器用さ修正値。
- * * エントは別途レベル26,41,46到達ごとに減算(-1)
  */
 int16_t PlayerDexterity::race_value()
 {
     int16_t result = PlayerBasicStatistics::race_value();
 
-    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
-        if (this->player_ptr->lev > 25)
-            result--;
-        if (this->player_ptr->lev > 40)
-            result--;
-        if (this->player_ptr->lev > 45)
-            result--;
-    }
+    result += PlayerRace(this->player_ptr).additional_dexterity();
 
     return result;
 }
index 4a29e46..caa2cea 100644 (file)
@@ -31,22 +31,12 @@ void PlayerStrength::set_locals()
 /*!
  * @brief 腕力補正計算 - 種族
  * @return 腕力補正値
- * @details
- * * 種族による腕力修正値。
- * * エントは別途レベル26,41,46到達ごとに加算(+1)
  */
 int16_t PlayerStrength::race_value()
 {
     int16_t result = PlayerBasicStatistics::race_value();
 
-    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
-        if (this->player_ptr->lev > 25)
-            result++;
-        if (this->player_ptr->lev > 40)
-            result++;
-        if (this->player_ptr->lev > 45)
-            result++;
-    }
+    result += PlayerRace(this->player_ptr).additional_strength();
 
     return result;
 }
index 103f2a8..6c48758 100644 (file)
@@ -5,8 +5,12 @@
  * @details 本クラス作成時点で責務に対する余裕はかなりあるので、適宜ここへ移してくること.
  */
 #include "player-base/player-race.h"
+#include "grid/feature-flag-types.h"
+#include "grid/feature.h"
 #include "player-info/mimic-info-table.h"
 #include "player/race-info-table.h"
+#include "system/floor-type-definition.h"
+#include "system/grid-type-definition.h"
 #include "system/player-type-definition.h"
 #include "util/bit-flags-calculator.h"
 
@@ -111,3 +115,115 @@ bool PlayerRace::equals(PlayerRaceType prace) const
 {
     return (this->player_ptr->mimic_form == MIMIC_NONE) && (this->player_ptr->prace == prace);
 }
+
+/*!
+ * @brief 速度計算 - 種族
+ * @return 速度値の増減分
+ * @details
+ * ** クラッコンと妖精に加算(+レベル/10)
+ * ** 悪魔変化/吸血鬼変化で加算(+3)
+ * ** 魔王変化で加算(+5)
+ * ** マーフォークがFF_WATER地形にいれば加算(+2+レベル/10)
+ * ** そうでなく浮遊を持っていないなら減算(-2)
+ */
+int16_t PlayerRace::speed() const
+{
+    int16_t result = 0;
+
+    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::KLACKON) || PlayerRace(this->player_ptr).equals(PlayerRaceType::SPRITE))
+        result += (this->player_ptr->lev) / 10;
+
+    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::MERFOLK)) {
+        floor_type *floor_ptr = this->player_ptr->current_floor_ptr;
+        feature_type *f_ptr = &f_info[floor_ptr->grid_array[this->player_ptr->y][this->player_ptr->x].feat];
+        if (f_ptr->flags.has(FF::WATER)) {
+            result += (2 + this->player_ptr->lev / 10);
+        } else if (!this->player_ptr->levitation) {
+            result -= 2;
+        }
+    }
+
+    if (this->player_ptr->mimic_form) {
+        switch (this->player_ptr->mimic_form) {
+        case MIMIC_DEMON:
+            result += 3;
+            break;
+        case MIMIC_DEMON_LORD:
+            result += 5;
+            break;
+        case MIMIC_VAMPIRE:
+            result += 3;
+            break;
+        }
+    }
+    return result;
+}
+
+/*!
+ * @brief 腕力補正計算 - 種族
+ * @return 腕力補正値
+ * @details
+ * * 種族による腕力修正値。
+ * * エントはレベル26,41,46到達ごとに加算(+1)
+ */
+int16_t PlayerRace::additional_strength() const
+{
+    int16_t result = 0;
+
+    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
+        if (this->player_ptr->lev > 25)
+            result++;
+        if (this->player_ptr->lev > 40)
+            result++;
+        if (this->player_ptr->lev > 45)
+            result++;
+    }
+
+    return result;
+}
+
+/*!
+ * @brief 器用さ補正計算 - 種族
+ * @return 器用さ補正値
+ * @details
+ * * 種族による器用さ修正値。
+ * * エントはレベル26,41,46到達ごとに減算(-1)
+ */
+int16_t PlayerRace::additional_dexterity() const
+{
+    int16_t result = 0;
+
+    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
+        if (this->player_ptr->lev > 25)
+            result--;
+        if (this->player_ptr->lev > 40)
+            result--;
+        if (this->player_ptr->lev > 45)
+            result--;
+    }
+
+    return result;
+}
+
+/*!
+ * @brief 耐久力補正計算 - 種族
+ * @return 耐久力補正値
+ * @details
+ * * 種族による耐久力修正値。
+ * * エントはレベル26,41,46到達ごとに加算(+1)
+ */
+int16_t PlayerRace::additional_constitution() const
+{
+    int16_t result = 0;
+
+    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::ENT)) {
+        if (this->player_ptr->lev > 25)
+            result++;
+        if (this->player_ptr->lev > 40)
+            result++;
+        if (this->player_ptr->lev > 45)
+            result++;
+    }
+
+    return result;
+}
index e5092fb..f775106 100644 (file)
@@ -21,6 +21,11 @@ public:
     bool can_resist_cut() const;
     bool equals(PlayerRaceType prace) const;
 
+    int16_t speed() const;
+    int16_t additional_strength() const;
+    int16_t additional_dexterity() const;
+    int16_t additional_constitution() const;
+
 private:
     player_type *player_ptr;
     bool base_race;
index 5b89edd..a516d9b 100644 (file)
@@ -54,44 +54,10 @@ void PlayerSpeed::set_locals()
 /*!
  * @brief 速度計算 - 種族
  * @return 速度値の増減分
- * @details
- * ** クラッコンと妖精に加算(+レベル/10)
- * ** 悪魔変化/吸血鬼変化で加算(+3)
- * ** 魔王変化で加算(+5)
- * ** マーフォークがFF_WATER地形にいれば加算(+2+レベル/10)
- * ** そうでなく浮遊を持っていないなら減算(-2)
  */
 int16_t PlayerSpeed::race_value()
 {
-    int16_t result = 0;
-
-    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::KLACKON) || PlayerRace(this->player_ptr).equals(PlayerRaceType::SPRITE))
-        result += (this->player_ptr->lev) / 10;
-
-    if (PlayerRace(this->player_ptr).equals(PlayerRaceType::MERFOLK)) {
-        floor_type *floor_ptr = this->player_ptr->current_floor_ptr;
-        feature_type *f_ptr = &f_info[floor_ptr->grid_array[this->player_ptr->y][this->player_ptr->x].feat];
-        if (f_ptr->flags.has(FF::WATER)) {
-            result += (2 + this->player_ptr->lev / 10);
-        } else if (!this->player_ptr->levitation) {
-            result -= 2;
-        }
-    }
-
-    if (this->player_ptr->mimic_form) {
-        switch (this->player_ptr->mimic_form) {
-        case MIMIC_DEMON:
-            result += 3;
-            break;
-        case MIMIC_DEMON_LORD:
-            result += 5;
-            break;
-        case MIMIC_VAMPIRE:
-            result += 3;
-            break;
-        }
-    }
-    return result;
+    return PlayerRace(this->player_ptr).speed();
 }
 
 /*!