-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathstatus_manager.cpp
More file actions
103 lines (91 loc) · 1.97 KB
/
Copy pathstatus_manager.cpp
File metadata and controls
103 lines (91 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "status_manager.h"
#include "debug_params.h"
#include "debug_ostream.h"
void StatusManager::Init(int maxHP)
{
m_MaxHP = maxHP;
m_HP = maxHP;
m_Score = 0;
m_Combo = 0;
m_MaxCombo = 0;
m_Hits = 0;
m_Misses = 0;
m_OrbGets = 0;
m_OrbLosses = 0;
m_LastJudge = JUDGE_NONE;
m_HasNewJudge = false;
}
void StatusManager::Finalize()
{
}
void StatusManager::OnJudge(JUDGE result)
{
if (result == JUDGE_NONE)
return;
if (result == JUDGE_SILENT_COMBO)
{
float multiplier = 1.0f + m_Combo * D_PARAMS.comboMultiplier;
m_Score += static_cast<int>(D_PARAMS.baseScore * multiplier);
m_Combo++;
if (m_Combo > m_MaxCombo)
m_MaxCombo = m_Combo;
m_Hits++;
return;
}
m_LastJudge = result;
m_HasNewJudge = true;
if (result == JUDGE_MISS || result == JUDGE_PASS_MISS || result == JUDGE_HOLD_MISS)
{
if (result == JUDGE_MISS)
{
m_HP-=50;
}
else if (result == JUDGE_HOLD_MISS)
{
m_HP-=20;
}
m_Combo = 0;
m_Misses++;
return;
}
// HIT
float multiplier = 1.0f + m_Combo * D_PARAMS.comboMultiplier;
m_Score += static_cast<int>(D_PARAMS.baseScore * multiplier);
m_Combo++;
if (m_Combo > m_MaxCombo)
m_MaxCombo = m_Combo;
m_Hits++;
}
void StatusManager::OnJudgeHold(JUDGE result)
{
OnJudge(result);
}
void StatusManager::OnOrbHit()
{
// スコア・コンボは変化させずHP回復のみ行う
m_HP += D_PARAMS.orbHealAmount;
if (m_HP > m_MaxHP)
m_HP = m_MaxHP;
m_OrbGets++;
#ifdef _DEBUG
hal::dout << "[Orb] HIT HP=" << m_HP << "/" << m_MaxHP << " orbGets=" << m_OrbGets << std::endl;
#endif
}
void StatusManager::OnOrbMiss()
{
// HP・コンボは変化させず取り逃し数のみ加算する
m_OrbLosses++;
#ifdef _DEBUG
hal::dout << "[Orb] MISS orbLosses=" << m_OrbLosses << std::endl;
#endif
}
SendResult StatusManager::GetResult() const
{
SendResult r;
r.maxCombo = m_MaxCombo;
r.hits = m_Hits;
r.misses = m_Misses;
r.orbgets = m_OrbGets;
r.orblosses = m_OrbLosses;
return r;
}