OSDN Git Service

[Refactor] #3334 FloorType にset/reset/get_dungeon() メソッドを追加した
[hengbandforosx/hengbandosx.git] / src / system / floor-type-definition.h
1 #pragma once
2
3 #include "dungeon/quest.h"
4 #include "floor/floor-base-definitions.h"
5 #include "monster/monster-timed-effect-types.h"
6 #include "system/angband.h"
7 #include <array>
8 #include <vector>
9
10 /*!
11  * @brief プレイヤー用光源処理配列サイズ / Max array size of player's lite
12  * @details 光源の最大半径は14,実グリッド数では581である.
13  */
14 constexpr auto LITE_MAX = 600;
15
16 /*!
17  * @brief モンスター用光源処理配列サイズ / Max array size of monster's lite
18  * @details 視界の最大半径は20、実際は8角形で1520グリッドである.
19  * モンスターの可視範囲はCAVE_VIEWフラグに依存する.
20  */
21 constexpr auto MON_LITE_MAX = 1536;
22
23 /*!
24  * @brief 視界処理配列サイズ / Max array size of the "view"
25  * @details 視界の最大半径は20、実際は8角形で1520グリッドである.
26  */
27 constexpr auto VIEW_MAX = 1536;
28
29 /*!
30  * @brief 再描画処理用配列サイズ / Max array size of the "redraw"
31  * @details 遅延再描画を適切に機能させるため、最大ビュー領域の 2倍の大きさにする.
32  * ビューグリッド数の最大値は1149なのでその2倍とする.
33  */
34 constexpr auto REDRAW_MAX = 2298;
35
36 struct dungeon_type;
37 struct grid_type;
38 class MonsterEntity;
39 class ItemEntity;
40 class FloorType {
41 public:
42     FloorType() = default;
43     short dungeon_idx = 0;
44     std::vector<std::vector<grid_type>> grid_array;
45     DEPTH dun_level = 0; /*!< 現在の実ダンジョン階層 base_level の参照元となる / Current dungeon level */
46     DEPTH base_level = 0; /*!< 基本生成レベル、後述のobject_level, monster_levelの参照元となる / Base dungeon level */
47     DEPTH object_level = 0; /*!< アイテムの生成レベル、 base_level を起点に一時変更する時に参照 / Current object creation level */
48     DEPTH monster_level = 0; /*!< モンスターの生成レベル、 base_level を起点に一時変更する時に参照 / Current monster creation level */
49     POSITION width = 0; /*!< Current dungeon width */
50     POSITION height = 0; /*!< Current dungeon height */
51     MONSTER_NUMBER num_repro = 0; /*!< Current reproducer count */
52
53     GAME_TURN generated_turn = 0; /* Turn when level began */
54
55     std::vector<ItemEntity> o_list; /*!< The array of dungeon items [max_o_idx] */
56     OBJECT_IDX o_max = 0; /* Number of allocated objects */
57     OBJECT_IDX o_cnt = 0; /* Number of live objects */
58
59     std::vector<MonsterEntity> m_list; /*!< The array of dungeon monsters [max_m_idx] */
60     MONSTER_IDX m_max = 0; /* Number of allocated monsters */
61     MONSTER_IDX m_cnt = 0; /* Number of live monsters */
62
63     std::vector<int16_t> mproc_list[MAX_MTIMED]{}; /*!< The array to process dungeon monsters[max_m_idx] */
64     int16_t mproc_max[MAX_MTIMED]{}; /*!< Number of monsters to be processed */
65
66     POSITION_IDX lite_n = 0; //!< Array of grids lit by player lite
67     std::array<POSITION, LITE_MAX> lite_y{};
68     std::array<POSITION, LITE_MAX> lite_x{};
69
70     POSITION_IDX mon_lite_n = 0; //!< Array of grids lit by player lite
71     std::array<POSITION, MON_LITE_MAX> mon_lite_y{};
72     std::array<POSITION, MON_LITE_MAX> mon_lite_x{};
73
74     POSITION_IDX view_n = 0; //!< Array of grids viewable to the player
75     std::array<POSITION, VIEW_MAX> view_y{};
76     std::array<POSITION, VIEW_MAX> view_x{};
77
78     POSITION_IDX redraw_n = 0; //!< Array of grids for delayed visual updating
79     std::array<POSITION, REDRAW_MAX> redraw_y{};
80     std::array<POSITION, REDRAW_MAX> redraw_x{};
81
82     bool monster_noise = false;
83     QuestId quest_number = QuestId::NONE; /* Inside quest level */
84     bool inside_arena = false; /* Is character inside on_defeat_arena_monster? */
85
86     bool is_in_dungeon() const;
87     void set_dungeon_index(short dungeon_idx_); /*!< @todo 後でenum class にする */
88     void reset_dungeon_index();
89     dungeon_type &get_dungeon_definition() const;
90 };