OSDN Git Service

Merge pull request #2122 from sikabane-works/release/3.0.0Alpha52
[hengbandforosx/hengbandosx.git] / src / load / monster / monster-loader-factory.cpp
1 /*!
2  * @brief モンスター情報をセーブデータから読み込むクラスを選択するファクトリクラス
3  * @date 2021/10/16
4  * @author Hourier
5  */
6
7 #include "load/monster/monster-loader-factory.h"
8 #include "load/load-util.h"
9 #include "load/monster/monster-loader-base.h"
10 #include "load/monster/monster-loader-version-types.h"
11 #include "load/old/monster-loader-savefile50.h"
12
13 /*!
14  * @brief アイテム読み込みクラスを返却する.
15  * @return アイテム読み込みクラスへの参照ポインタ.
16  * @details MonsterLoaderBaseは純粋仮想関数を含むので参照を返す必要がある.
17  * (値を返す設計はコンパイルエラー)
18  */
19 std::shared_ptr<MonsterLoaderBase> MonsterLoaderFactory::create_loader(PlayerType *player_ptr)
20 {
21     auto version = get_version();
22     switch (version) {
23     case MonsterLoaderVersionType::LOAD50:
24         return std::make_shared<MonsterLoader50>(player_ptr);
25     case MonsterLoaderVersionType::LOAD51:
26         // dummy yet.
27     default:
28         throw("Invalid loader version was specified!");
29     }
30 }
31
32 /*!
33  * @brief MonsterLoaderのバージョン切り替え.
34  * @return セーブファイルバージョン群の中で互換性のある最古のバージョン.
35  * @details (備忘録)例えばバージョン15で更に変更された場合、以下のように書き換えること.
36  *
37  * if (loading_savefile_version_is_older_than(15)) {
38  *   return MonsterLoaderVersionType::LOAD11;
39  * } else if (loading_savefile_version_is_older_than(11)) {
40  *   return MonsterLoaderVersionType::LOAD10;
41  * } else {
42  *   return MonsterLoaderVersionType::LOAD15;
43  * }
44  */
45 MonsterLoaderVersionType MonsterLoaderFactory::get_version()
46 {
47     if (loading_savefile_version_is_older_than(51)) {
48         return MonsterLoaderVersionType::LOAD50;
49     } else {
50         return MonsterLoaderVersionType::LOAD51;
51     }
52 }