<ClCompile Include="..\..\src\action\travel-execution.cpp" />\r
<ClCompile Include="..\..\src\action\tunnel-execution.cpp" />\r
<ClCompile Include="..\..\src\action\weapon-shield.cpp" />\r
- <ClCompile Include="..\..\src\artifact\artifact-info.cpp" />\r
<ClCompile Include="..\..\src\artifact\fixed-art-generator.cpp" />\r
<ClCompile Include="..\..\src\artifact\random-art-activation.cpp" />\r
<ClCompile Include="..\..\src\artifact\random-art-characteristics.cpp" />\r
<ClInclude Include="..\..\src\action\weapon-shield.h" />\r
<ClInclude Include="..\..\src\artifact\fixed-art-types.h" />\r
<ClInclude Include="..\..\src\artifact\random-art-effects.h" />\r
- <ClInclude Include="..\..\src\artifact\artifact-info.h" />\r
<ClInclude Include="..\..\src\artifact\fixed-art-generator.h" />\r
<ClInclude Include="..\..\src\artifact\random-art-activation.h" />\r
<ClInclude Include="..\..\src\artifact\random-art-generator.h" />\r
<ClCompile Include="..\..\src\artifact\fixed-art-generator.cpp">\r
<Filter>artifact</Filter>\r
</ClCompile>\r
- <ClCompile Include="..\..\src\artifact\artifact-info.cpp">\r
- <Filter>artifact</Filter>\r
- </ClCompile>\r
<ClCompile Include="..\..\src\system\artifact-type-definition.cpp">\r
<Filter>system</Filter>\r
</ClCompile>\r
<ClInclude Include="..\..\src\artifact\fixed-art-generator.h">\r
<Filter>artifact</Filter>\r
</ClInclude>\r
- <ClInclude Include="..\..\src\artifact\artifact-info.h">\r
- <Filter>artifact</Filter>\r
- </ClInclude>\r
<ClInclude Include="..\..\src\system\artifact-type-definition.h">\r
<Filter>system</Filter>\r
</ClInclude>\r
action/tunnel-execution.cpp action/tunnel-execution.h \
action/weapon-shield.cpp action/weapon-shield.h \
\
- artifact/artifact-info.cpp artifact/artifact-info.h \
artifact/fixed-art-generator.cpp artifact/fixed-art-generator.h \
artifact/fixed-art-types.h \
artifact/random-art-activation.cpp artifact/random-art-activation.h \
#include "action/activation-execution.h"
#include "action/action-limited.h"
-#include "artifact/artifact-info.h"
#include "artifact/random-art-effects.h"
#include "core/window-redrawer.h"
#include "effect/attribute-types.h"
msg_print(_("始動させた...", "You activate it..."));
sound(SOUND_ZAP);
- if (activation_index(ae_ptr->o_ptr) > RandomArtActType::NONE) {
+ if (ae_ptr->o_ptr->has_activation()) {
(void)activate_artifact(player_ptr, ae_ptr->o_ptr);
static constexpr auto flags = {
SubWindowRedrawingFlag::INVENTORY,
+++ /dev/null
-/*!
- * @file artifact-info.cpp
- * @brief アーティファクトの発動効果取得関数定義
- */
-
-#include "artifact/artifact-info.h"
-#include "artifact/random-art-effects.h"
-#include "object-enchant/activation-info-table.h"
-#include "object-enchant/object-ego.h"
-#include "object-enchant/tr-types.h"
-#include "smith/object-smith.h"
-#include "system/artifact-type-definition.h"
-#include "system/baseitem-info.h"
-#include "system/item-entity.h"
-#include "util/bit-flags-calculator.h"
-#include "util/enum-converter.h"
-
-/*!
- * @brief オブジェクトから能力発動IDを取得する。
- * @details いくつかのケースで定義されている発動効果から、
- * 鍛冶師による付与>固定アーティファクト>エゴ>ランダムアーティファクト>ベースアイテムの優先順位で走査していく。
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 発動効果のIDを返す
- */
-RandomArtActType activation_index(const ItemEntity *o_ptr)
-{
- if (auto act_idx = Smith::object_activation(o_ptr); act_idx) {
- return *act_idx;
- }
-
- if (o_ptr->is_fixed_artifact()) {
- const auto &artifact = o_ptr->get_fixed_artifact();
- if (artifact.flags.has(TR_ACTIVATE)) {
- return artifact.act_idx;
- }
- }
-
- if (o_ptr->is_ego()) {
- const auto &ego = o_ptr->get_ego();
- if (ego.flags.has(TR_ACTIVATE)) {
- return ego.act_idx;
- }
- }
-
- if (!o_ptr->is_random_artifact()) {
- const auto &baseitem = o_ptr->get_baseitem();
- if (baseitem.flags.has(TR_ACTIVATE)) {
- return baseitem.act_idx;
- }
- }
-
- return o_ptr->activation_id;
-}
+++ /dev/null
-/*!
- * @file artifact-info.h
- * @brief アーティファクトの発動効果取得関数ヘッダ
- */
-
-#pragma once
-
-enum class RandomArtActType : short;
-class ItemEntity;
-RandomArtActType activation_index(const ItemEntity *o_ptr);
#include "market/building-craft-fix.h"
-#include "artifact/artifact-info.h"
#include "artifact/fixed-art-types.h"
#include "artifact/random-art-effects.h"
#include "core/asking-player.h"
}
give_one_ability_of_object(o_ptr, mo_ptr);
- if (activation_index(o_ptr) == RandomArtActType::NONE) {
+ if (!o_ptr->has_activation()) {
one_activation(o_ptr);
}
*/
#include "object/object-info.h"
-#include "artifact/artifact-info.h"
#include "artifact/fixed-art-types.h"
#include "artifact/random-art-effects.h"
#include "inventory/inventory-slot-types.h"
return _("なし", "nothing");
}
- if (activation_index(o_ptr) > RandomArtActType::NONE) {
+ if (o_ptr->has_activation()) {
return item_activation_aux(o_ptr);
}
#include "object/object-value-calc.h"
-#include "artifact/artifact-info.h"
#include "object-enchant/activation-info-table.h"
#include "object-enchant/object-ego.h"
#include "object-enchant/tr-types.h"
*/
#include "system/item-entity.h"
-#include "artifact/artifact-info.h" // 暫定的インクルード.
#include "artifact/fixed-art-types.h"
#include "artifact/random-art-effects.h"
#include "monster-race/monster-race.h"
*/
std::vector<activation_type>::const_iterator ItemEntity::find_activation_info() const
{
- const auto index = activation_index(this);
- const auto end = activation_info.end();
- for (auto it = activation_info.begin(); it != end; it++) {
- if (it->index == index) {
- return it;
- }
- }
+ const auto index = this->get_activation_index();
+ return std::find_if(activation_info.begin(), activation_info.end(), [index](const auto &x) { return x.index == index; });
+}
- return end;
+bool ItemEntity::has_activation() const
+{
+ return this->get_activation_index() != RandomArtActType::NONE;
}
BaseitemInfo &ItemEntity::get_baseitem() const
return;
}
}
+
+/*!
+ * @brief オブジェクトから能力発動IDを取得する。
+ * @details いくつかのケースで定義されている発動効果から、
+ * 鍛冶師による付与>固定アーティファクト>エゴ>ランダムアーティファクト>ベースアイテムの優先順位で走査していく。
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return 発動効果のIDを返す
+ */
+RandomArtActType ItemEntity::get_activation_index() const
+{
+ if (auto act_idx = Smith::object_activation(this); act_idx) {
+ return *act_idx;
+ }
+
+ if (this->is_fixed_artifact()) {
+ const auto &artifact = this->get_fixed_artifact();
+ if (artifact.flags.has(TR_ACTIVATE)) {
+ return artifact.act_idx;
+ }
+ }
+
+ if (this->is_ego()) {
+ const auto &ego = this->get_ego();
+ if (ego.flags.has(TR_ACTIVATE)) {
+ return ego.act_idx;
+ }
+ }
+
+ if (!this->is_random_artifact()) {
+ const auto &baseitem = this->get_baseitem();
+ if (baseitem.flags.has(TR_ACTIVATE)) {
+ return baseitem.act_idx;
+ }
+ }
+
+ return this->activation_id;
+}
bool is_cross_bow() const;
bool is_inscribed() const;
std::vector<activation_type>::const_iterator find_activation_info() const;
+ bool has_activation() const;
BaseitemInfo &get_baseitem() const;
EgoItemDefinition &get_ego() const;
int calc_figurine_value() const;
int calc_capture_value() const;
void modify_ego_lite_flags(TrFlags &flags) const;
+ RandomArtActType get_activation_index() const;
};