OSDN Git Service

Merge pull request #3788 from hengband/release/3.0.1.3-Beta
[hengbandforosx/hengbandosx.git] / src / system / terrain-type-definition.h
1 #pragma once
2
3 #include "grid/feature-flag-types.h"
4 #include "system/angband.h"
5 #include "util/flag-group.h"
6
7 /* Number of feats we change to (Excluding default). Used in TerrainDefinitions.txt. */
8 constexpr auto MAX_FEAT_STATES = 8;
9
10 constexpr auto F_LIT_MAX = 3;
11
12 /*!
13  * @brief 地形状態変化指定構造体
14  */
15 class TerrainState {
16 public:
17     TerrainState() = default;
18     TerrainCharacteristics action{}; /*!< 変化条件をFF_*のIDで指定 */
19     std::string result_tag{}; /*!< 変化先ID */
20     FEAT_IDX result{}; /*!< 変化先ID */
21 };
22
23 /*!
24  * @brief 地形情報の構造体
25  */
26 class TerrainType {
27 public:
28     TerrainType() = default;
29     FEAT_IDX idx{};
30     std::string name; /*!< 地形名 */
31     std::string text; /*!< 地形説明 */
32     std::string tag; /*!< 地形特性タグ */
33     std::string mimic_tag;
34     std::string destroyed_tag;
35     FEAT_IDX mimic{}; /*!< 未確定時の外形地形ID / Feature to mimic */
36     FEAT_IDX destroyed{}; /*!< *破壊*に巻き込まれた時の地形移行先(未実装?) / Default destroyed state */
37     EnumClassFlagGroup<TerrainCharacteristics> flags{}; /*!< 地形の基本特性ビット配列 / Flags */
38     int16_t priority{}; /*!< 縮小表示で省略する際の表示優先度 / Map priority */
39     TerrainState state[MAX_FEAT_STATES]{}; /*!< TerrainState テーブル */
40     FEAT_SUBTYPE subtype{}; /*!< 副特性値 */
41     FEAT_POWER power{}; /*!< 地形強度 */
42     TERM_COLOR d_attr[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルカラー / Default feature attribute */
43     char d_char[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルアルファベット / Default feature character */
44     TERM_COLOR x_attr[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルカラー / Desired feature attribute */
45     char x_char[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルアルファベット / Desired feature character */
46
47     bool is_permanent_wall() const;
48 };
49
50 class TerrainList {
51 public:
52     TerrainList(const TerrainList &) = delete;
53     TerrainList(TerrainList &&) = delete;
54     TerrainList operator=(const TerrainList &) = delete;
55     TerrainList operator=(TerrainList &&) = delete;
56     TerrainType &operator[](short terrain_id);
57     const TerrainType &operator[](short terrain_id) const;
58
59     static TerrainList &get_instance();
60     std::vector<TerrainType> &get_raw_vector();
61     std::vector<TerrainType>::iterator begin();
62     const std::vector<TerrainType>::const_iterator begin() const;
63     std::vector<TerrainType>::iterator end();
64     const std::vector<TerrainType>::const_iterator end() const;
65     size_t size() const;
66     bool empty() const;
67     void resize(size_t new_size);
68
69 private:
70     TerrainList() = default;
71
72     static TerrainList instance;
73     std::vector<TerrainType> terrains{};
74 };