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 #include "tracking/baseitem-tracker.h"
7 #include "tracking/health-bar-tracker.h"
8
9 /*!
10  * @brief 全更新処理をチェックして処理していく
11  */
12 void handle_stuff(PlayerType *player_ptr)
13 {
14     auto &rfu = RedrawingFlagsUpdater::get_instance();
15     if (rfu.any_stats()) {
16         update_creature(player_ptr);
17     }
18
19     if (rfu.any_main()) {
20         redraw_stuff(player_ptr);
21     }
22
23     if (rfu.any_sub()) {
24         window_stuff(player_ptr);
25     }
26 }
27
28 /*
29  * Track a new monster
30  * @param player_ptr プレイヤーへの参照ポインタ
31  * @param m_idx トラッキング対象のモンスターID。0の時キャンセル
32  * @param なし
33  */
34 void health_track(PlayerType *player_ptr, short m_idx)
35 {
36     if (m_idx && m_idx == player_ptr->riding) {
37         return;
38     }
39
40     HealthBarTracker::get_instance().set_trackee(m_idx);
41 }
42
43 bool update_player()
44 {
45     auto &rfu = RedrawingFlagsUpdater::get_instance();
46     static constexpr auto flags_srf = {
47         StatusRecalculatingFlag::COMBINATION,
48         StatusRecalculatingFlag::REORDER,
49     };
50     rfu.set_flags(flags_srf);
51     rfu.set_flag(SubWindowRedrawingFlag::INVENTORY);
52     return true;
53 }
54
55 bool redraw_player(PlayerType *player_ptr)
56 {
57     if (player_ptr->csp > player_ptr->msp) {
58         player_ptr->csp = player_ptr->msp;
59     }
60
61     auto &rfu = RedrawingFlagsUpdater::get_instance();
62     rfu.set_flag(MainWindowRedrawingFlag::MP);
63     static constexpr auto flags_srf = {
64         StatusRecalculatingFlag::COMBINATION,
65         StatusRecalculatingFlag::REORDER,
66     };
67     rfu.set_flags(flags_srf);
68     rfu.set_flag(SubWindowRedrawingFlag::INVENTORY);
69     return true;
70 }