OSDN Git Service

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