OSDN Git Service

Merge branch 'master' of https://github.com/hengband/hengband
[hengbandforosx/hengbandosx.git] / src / world / world.h
1 #pragma once
2
3 #include "market/bounty-type-definition.h"
4 #include "player-info/class-types.h"
5 #include "system/angband.h"
6 #include "util/flag-group.h"
7 #include <tuple>
8
9 constexpr auto MAX_BOUNTY = 20;
10
11 /*!
12  * @brief 世界情報構造体
13  */
14 enum term_color_type : unsigned char;
15 enum class PlayerRaceType;
16 class AngbandWorld {
17 public:
18     AngbandWorld() = default;
19
20     POSITION max_wild_x{}; /*!< Maximum size of the wilderness */
21     POSITION max_wild_y{}; /*!< Maximum size of the wilderness */
22     GAME_TURN game_turn{}; /*!< 画面表示上のゲーム時間基準となるターン / Current game turn */
23     GAME_TURN game_turn_limit{}; /*!< game_turnの最大値 / Limit of game_turn */
24     GAME_TURN dungeon_turn{}; /*!< NASTY生成の計算に関わる内部ターン値 / Game turn in dungeon */
25     GAME_TURN dungeon_turn_limit{}; /*!< dungeon_turnの最大値 / Limit of game_turn in dungeon */
26     GAME_TURN arena_start_turn{}; /*!< 闘技場賭博の開始ターン値 */
27     uint32_t start_time{};
28     uint16_t noscore{}; /* Cheating flags */
29     uint16_t total_winner{}; /* Total winner */
30
31     MONSTER_IDX timewalk_m_idx{}; /*!< 現在時間停止を行っているモンスターのID */
32
33     bounty_type bounties[MAX_BOUNTY]{};
34     MonsterRaceId today_mon{}; //!< 実際の日替わり賞金首
35
36     uint32_t play_time{}; /*!< 実プレイ時間 */
37
38     bool is_loading_now{}; /*!< ロード処理中フラグ...ロード直後にcalc_bonus()時の徳変化、及びsanity_blast()による異常を抑止する */
39
40     uint32_t sf_system{}; //!< OS情報 / OS information
41     uint32_t sf_when{}; //!< 作成日時 / Created Date
42     uint16_t sf_lives{}; //!< このセーブファイルで何人プレイしたか / Number of past "lives" with this file
43     uint16_t sf_saves{}; //!< 現在のプレイで何回セーブしたか / Number of "saves" during this life
44     uint32_t sf_play_time{}; //!< このセーブファイルで遊んだ合計のプレイ時間
45     EnumClassFlagGroup<PlayerClassType> sf_winner{}; //!< このセーブファイルで*勝利*した職業
46     EnumClassFlagGroup<PlayerClassType> sf_retired{}; //!< このセーブファイルで引退した職業
47
48     bool character_generated{}; /* The character exists */
49     bool character_dungeon{}; /* The character has a dungeon */
50     bool character_loaded{}; /* The character was loaded from a savefile */
51     bool character_saved{}; /* The character was just saved to a savefile */
52
53     byte character_icky_depth{}; /* The game is in an icky full screen mode */
54     bool character_xtra{}; /* The game is in an icky startup mode */
55
56     bool creating_savefile{}; /* New savefile is currently created */
57
58     bool wizard{}; /* This world under wizard mode */
59
60     void set_arena(const bool new_status);
61     bool get_arena() const;
62     std::tuple<int, int, int> extract_date_time(PlayerRaceType start_race) const;
63     bool is_daytime() const;
64     void update_playtime();
65     void add_winner_class(PlayerClassType c);
66     void add_retired_class(PlayerClassType c);
67     term_color_type get_birth_class_color(PlayerClassType c) const;
68
69 private:
70     bool is_out_arena = false; // アリーナ外部にいる時だけtrue.
71
72     bool is_winner_class(PlayerClassType c) const;
73     bool is_retired_class(PlayerClassType c) const;
74 };
75
76 extern AngbandWorld *w_ptr;