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"
11 * @brief プレイヤー用光源処理配列サイズ / Max array size of player's lite
12 * @details 光源の最大半径は14,実グリッド数では581である.
14 constexpr auto LITE_MAX = 600;
17 * @brief モンスター用光源処理配列サイズ / Max array size of monster's lite
18 * @details 視界の最大半径は20、実際は8角形で1520グリッドである.
19 * モンスターの可視範囲はCAVE_VIEWフラグに依存する.
21 constexpr auto MON_LITE_MAX = 1536;
24 * @brief 視界処理配列サイズ / Max array size of the "view"
25 * @details 視界の最大半径は20、実際は8角形で1520グリッドである.
27 constexpr auto VIEW_MAX = 1536;
30 * @brief 再描画処理用配列サイズ / Max array size of the "redraw"
31 * @details 遅延再描画を適切に機能させるため、最大ビュー領域の 2倍の大きさにする.
32 * ビューグリッド数の最大値は1149なのでその2倍とする.
34 constexpr auto REDRAW_MAX = 2298;
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 */
53 GAME_TURN generated_turn = 0; /* Turn when level began */
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 */
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 */
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 */
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{};
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{};
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{};
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{};
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? */
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;