OSDN Git Service

Merge branch 'master' of https://github.com/hengband/hengband
[hengbandforosx/hengbandosx.git] / src / core / stuff-handler.cpp
1 #include "core/stuff-handler.h"
2 #include "core/window-redrawer.h"
3 #include "player/player-status.h"
4 #include "system/player-type-definition.h"
5 #include "system/redrawing-flags-updater.h"
6
7 /*!
8  * @brief 全更新処理をチェックして処理していく
9  */
10 void handle_stuff(PlayerType *player_ptr)
11 {
12     auto &rfu = RedrawingFlagsUpdater::get_instance();
13     if (rfu.any_stats()) {
14         update_creature(player_ptr);
15     }
16
17     if (rfu.any_main()) {
18         redraw_stuff(player_ptr);
19     }
20
21     if (player_ptr->window_flags) {
22         window_stuff(player_ptr);
23     }
24 }
25
26 /*
27  * Track the given monster race
28  */
29 void monster_race_track(PlayerType *player_ptr, MonsterRaceId r_idx)
30 {
31     player_ptr->monster_race_idx = r_idx;
32     player_ptr->window_flags |= (PW_MONSTER_LORE);
33 }
34
35 /*
36  * Track the given object kind
37  */
38 void object_kind_track(PlayerType *player_ptr, short bi_id)
39 {
40     player_ptr->tracking_bi_id = bi_id;
41     player_ptr->window_flags |= (PW_ITEM_KNOWLEDGTE);
42 }
43
44 /*
45  * Track a new monster
46  * @param player_ptr プレイヤーへの参照ポインタ
47  * @param m_idx トラッキング対象のモンスターID。0の時キャンセル
48  * @param なし
49  */
50 void health_track(PlayerType *player_ptr, MONSTER_IDX m_idx)
51 {
52     if (m_idx && m_idx == player_ptr->riding) {
53         return;
54     }
55
56     player_ptr->health_who = m_idx;
57     RedrawingFlagsUpdater::get_instance().set_flag(MainWindowRedrawingFlag::HEALTH);
58 }
59
60 bool update_player(PlayerType *player_ptr)
61 {
62     auto &rfu = RedrawingFlagsUpdater::get_instance();
63     const auto flags_srf = {
64         StatusRedrawingFlag::COMBINATION,
65         StatusRedrawingFlag::REORDER,
66     };
67     rfu.set_flags(flags_srf);
68     player_ptr->window_flags |= PW_INVENTORY;
69     return true;
70 }
71
72 bool redraw_player(PlayerType *player_ptr)
73 {
74     if (player_ptr->csp > player_ptr->msp) {
75         player_ptr->csp = player_ptr->msp;
76     }
77
78     auto &rfu = RedrawingFlagsUpdater::get_instance();
79     rfu.set_flag(MainWindowRedrawingFlag::MP);
80     const auto flags_srf = {
81         StatusRedrawingFlag::COMBINATION,
82         StatusRedrawingFlag::REORDER,
83     };
84     rfu.set_flags(flags_srf);
85     player_ptr->window_flags |= PW_INVENTORY;
86     return true;
87 }