OSDN Git Service

Merge branch 'develop' into macos-develop
[hengbandforosx/hengbandosx.git] / src / player-status / player-stealth.cpp
index 315d439..89dd9f3 100644 (file)
@@ -1,37 +1,37 @@
-#include "player-status/player-stealth.h"
+#include "player-status/player-stealth.h"
 #include "mind/mind-ninja.h"
 #include "mutation/mutation-flag-types.h"
+#include "player-base/player-class.h"
+#include "player-base/player-race.h"
+#include "player-info/class-info.h"
 #include "player-info/equipment-info.h"
-#include "player/mimic-info-table.h"
-#include "player/player-class.h"
+#include "player-info/mimic-info-table.h"
+#include "player-info/race-types.h"
 #include "player/player-personality.h"
-#include "player/player-race-types.h"
 #include "player/player-skill.h"
 #include "player/player-status-flags.h"
 #include "player/player-status.h"
 #include "player/race-info-table.h"
 #include "spell-realm/spells-hex.h"
-#include "system/object-type-definition.h"
+#include "system/item-entity.h"
 #include "system/player-type-definition.h"
 #include "util/bit-flags-calculator.h"
 #include "util/enum-converter.h"
 
+PlayerStealth::PlayerStealth(PlayerType *player_ptr)
+    : PlayerStatusBase(player_ptr)
+{
+}
+
 /*!
  * @brief 隠密能力計算 - 種族
  * @return 隠密能力の増分
  * @details
  * * 種族による加算
  */
-int16_t PlayerStealth::race_value()
+int16_t PlayerStealth::race_bonus()
 {
-    const player_race *tmp_rp_ptr;
-
-    if (this->owner_ptr->mimic_form)
-        tmp_rp_ptr = &mimic_info[this->owner_ptr->mimic_form];
-    else
-        tmp_rp_ptr = &race_info[enum2i(this->owner_ptr->prace)];
-
-    return tmp_rp_ptr->r_stl;
+    return PlayerRace(this->player_ptr).get_info()->r_stl;
 }
 
 /*!
@@ -40,9 +40,9 @@ int16_t PlayerStealth::race_value()
  * @details
  * * 性格による加算
  */
-int16_t PlayerStealth::personality_value()
+int16_t PlayerStealth::personality_bonus()
 {
-    const player_personality *a_ptr = &personality_info[this->owner_ptr->pseikaku];
+    const player_personality *a_ptr = &personality_info[this->player_ptr->ppersonality];
     return a_ptr->a_stl;
 }
 
@@ -52,10 +52,10 @@ int16_t PlayerStealth::personality_value()
  * @details
  * * 職業による加算
  */
-int16_t PlayerStealth::class_base_value()
+int16_t PlayerStealth::class_base_bonus()
 {
-    const player_class *c_ptr = &class_info[this->owner_ptr->pclass];
-    return c_ptr->c_stl + (c_ptr->x_stl * this->owner_ptr->lev / 10);
+    const player_class_info *c_ptr = &class_info[enum2i(this->player_ptr->pclass)];
+    return c_ptr->c_stl + (c_ptr->x_stl * this->player_ptr->lev / 10);
 }
 
 /*!
@@ -65,20 +65,21 @@ int16_t PlayerStealth::class_base_value()
  * * 忍者がheavy_armorならば減算(-レベル/10)
  * * 忍者がheavy_armorでなく適正な武器を持っていれば加算(+レベル/10)
  */
-int16_t PlayerStealth::class_value()
+int16_t PlayerStealth::class_bonus()
 {
-    ACTION_SKILL_POWER result = 0;
-
-    if (this->owner_ptr->pclass == CLASS_NINJA) {
-        if (heavy_armor(this->owner_ptr)) {
-            result -= (this->owner_ptr->lev) / 10;
-        } else if ((!this->owner_ptr->inventory_list[INVEN_MAIN_HAND].k_idx || can_attack_with_main_hand(this->owner_ptr))
-            && (!this->owner_ptr->inventory_list[INVEN_SUB_HAND].k_idx || can_attack_with_sub_hand(this->owner_ptr))) {
-            result += (this->owner_ptr->lev) / 10;
-        }
+    PlayerClass pc(this->player_ptr);
+    if (!pc.equals(PlayerClassType::NINJA)) {
+        return 0;
+    }
+
+    int16_t bonus = 0;
+    if (heavy_armor(this->player_ptr)) {
+        bonus -= (this->player_ptr->lev) / 10;
+    } else if (pc.has_ninja_speed()) {
+        bonus += (this->player_ptr->lev) / 10;
     }
 
-    return result;
+    return bonus;
 }
 
 /*!
@@ -88,17 +89,19 @@ int16_t PlayerStealth::class_value()
  * * 変異MUT3_XTRA_NOISで減算(-3)
  * * 変異MUT3_MOTIONで加算(+1)
  */
-int16_t PlayerStealth::mutation_value()
+int16_t PlayerStealth::mutation_bonus()
 {
-    int16_t result = 0;
-    const auto &muta = this->owner_ptr->muta;
-    if (muta.has(MUTA::XTRA_NOIS)) {
-        result -= 3;
+    int16_t bonus = 0;
+    const auto &muta = this->player_ptr->muta;
+    if (muta.has(PlayerMutationType::XTRA_NOIS)) {
+        bonus -= 3;
     }
-    if (muta.has(MUTA::MOTION)) {
-        result += 1;
+
+    if (muta.has(PlayerMutationType::MOTION)) {
+        bonus += 1;
     }
-    return result;
+
+    return bonus;
 }
 
 /*!
@@ -109,25 +112,30 @@ int16_t PlayerStealth::mutation_value()
  * * 狂戦士化で減算(-7)
  * * 隠密の歌で加算(+999)
  */
-int16_t PlayerStealth::time_effect_value()
+int16_t PlayerStealth::time_effect_bonus()
 {
-    int16_t result = 0;
-    if (this->owner_ptr->realm1 == REALM_HEX) {
-        if (RealmHex(this->owner_ptr).is_spelling_any())
-            result -= (1 + casting_hex_num(this->owner_ptr));
+    int16_t bonus = 0;
+    if (this->player_ptr->realm1 == REALM_HEX) {
+        SpellHex spell_hex(this->player_ptr);
+        if (spell_hex.is_spelling_any()) {
+            bonus -= spell_hex.get_casting_num() + 1;
+        }
     }
-    if (is_shero(this->owner_ptr)) {
-        result -= 7;
+
+    if (is_shero(this->player_ptr)) {
+        bonus -= 7;
+    }
+
+    if (is_time_limit_stealth(this->player_ptr)) {
+        bonus += 999;
     }
-    if (is_time_limit_stealth(this->owner_ptr))
-        result += 999;
 
-    return result;
+    return bonus;
 }
 
 bool PlayerStealth::is_aggravated_s_fairy()
 {
-    return player_aggravate_state(this->owner_ptr) == AGGRAVATE_S_FAIRY;
+    return player_aggravate_state(this->player_ptr) == AGGRAVATE_S_FAIRY;
 }
 
 /*!
@@ -136,11 +144,12 @@ bool PlayerStealth::is_aggravated_s_fairy()
  * @details
  * * セクシーギャルでない影フェアリーがTRC_AGGRAVATE持ちの時、別処理でTRC_AGGRAVATEを無効にする代わりに減算(-3か3未満なら(現在値+2)/2)
  */
-int16_t PlayerStealth::set_exception_value(int16_t value)
+int16_t PlayerStealth::set_exception_bonus(int16_t value)
 {
     if (this->is_aggravated_s_fairy()) {
-        value = MIN(value - 3, (value + 2) / 2);
+        value = std::min<int16_t>(value - 3, (value + 2) / 2);
     }
+
     return value;
 }
 
@@ -152,12 +161,12 @@ int16_t PlayerStealth::set_exception_value(int16_t value)
  */
 BIT_FLAGS PlayerStealth::get_bad_flags()
 {
-    BIT_FLAGS result = PlayerStatusBase::get_bad_flags();
-
-    if (this->is_aggravated_s_fairy())
-        set_bits(result, FLAG_CAUSE_RACE);
+    auto flags = PlayerStatusBase::get_bad_flags();
+    if (this->is_aggravated_s_fairy()) {
+        set_bits(flags, FLAG_CAUSE_RACE);
+    }
 
-    return result;
+    return flags;
 }
 
 /*!