Etterna 0.74.4
Loading...
Searching...
No Matches
ScoreKeeperNormal.h
1/* ScoreKeeperNormal - */
2
3#ifndef SCORE_KEEPER_NORMAL_H
4#define SCORE_KEEPER_NORMAL_H
5
6#include "ScoreKeeper.h"
7#include "Etterna/Screen/Others/ScreenMessage.h"
8#include "Etterna/Models/Misc/ThemeMetric.h"
9class Steps;
10class Song;
11struct RadarValues;
12class TimingData;
13
14AutoScreenMessage(SM_PlayToasty);
15
18{
19 void AddScoreInternal(TapNoteScore score);
20 auto CalcNextToastyAt(int level) -> int;
21
22 int m_iScoreRemainder;
23 int m_iMaxPossiblePoints;
24 int m_iTapNotesHit; // number of notes judged so far, needed by scoring
25
26 int m_iNumTapsAndHolds;
27 int m_iMaxScoreSoFar; // for nonstop scoring
28 int m_iPointBonus; // the difference to award at the end
29 int m_cur_toasty_combo;
30 int m_cur_toasty_level;
31 int m_next_toasty_at;
32 bool m_bIsLastSongInCourse;
33 bool m_bIsBeginner;
34
35 int m_iNumNotesHitThisRow; // Used by Custom Scoring only
36
37 ThemeMetric<TapNoteScore> m_MinScoreToContinueCombo;
38 ThemeMetric<TapNoteScore> m_MinScoreToMaintainCombo;
39 ThemeMetric<TapNoteScore> m_MaxScoreToIncrementMissCombo;
40 ThemeMetric<bool> m_MineHitIncrementsMissCombo;
41 ThemeMetric<bool> m_AvoidMineIncrementsCombo;
42 ThemeMetric<bool> m_UseInternalScoring;
43
44 ThemeMetric<TapNoteScore> m_toasty_min_tns;
45 ThemeMetric<LuaReference> m_toasty_trigger;
46
47 std::vector<Steps*> m_apSteps;
48
49 virtual void AddTapScore(TapNoteScore tns);
50 virtual void AddHoldScore(HoldNoteScore hns);
51 virtual void AddTapRowScore(TapNoteScore tns, const NoteData& nd, int iRow);
52
53 /* Configuration: */
54 /* Score after each tap will be rounded to the nearest m_lroundTo; 1 to do
55 * nothing. */
56 int m_lroundTo;
57 int m_ComboBonusFactor[NUM_TapNoteScore];
58
59 public:
60 ScoreKeeperNormal(PlayerState* pPlayerState,
61 PlayerStageStats* pPlayerStageStats);
62
63 void Load(const std::vector<Song*>& apSongs,
64 const std::vector<Steps*>& apSteps) override;
65
66 // before a song plays (called multiple times if course)
67 void OnNextSong(int iSongInCourseIndex,
68 const Steps* pSteps,
69 const NoteData* pNoteData) override;
70
71 void HandleTapScore(const TapNote& tn) override;
72 void HandleTapRowScore(const NoteData& nd, int iRow) override;
73 void HandleHoldScore(const TapNote& tn) override;
74 void HandleHoldActiveSeconds(float /* fMusicSecondsHeld */) override{};
75 void HandleHoldCheckpointScore(const NoteData& nd,
76 int iRow,
77 int iNumHoldsHeldThisRow,
78 int iNumHoldsMissedThisRow) override;
79 void HandleTapScoreNone() override;
80
81 // This must be calculated using only cached radar values so that we can
82 // do it quickly.
83 static auto GetPossibleDancePoints(NoteData* nd,
84 const TimingData* td) -> int;
85 static auto GetPossibleDancePoints(NoteData* ndPre,
86 NoteData* ndPost,
87 const TimingData* td) -> int;
88 static auto GetPossibleGradePoints(NoteData* nd,
89 const TimingData* td) -> int;
90 static auto GetPossibleGradePoints(NoteData* ndPre,
91 NoteData* ndPost,
92 const TimingData* td) -> int;
93
94 auto TapNoteScoreToDancePoints(TapNoteScore tns) const -> int;
95 auto HoldNoteScoreToDancePoints(HoldNoteScore hns) const -> int;
96 auto TapNoteScoreToGradePoints(TapNoteScore tns) const -> int;
97 auto HoldNoteScoreToGradePoints(HoldNoteScore hns) const -> int;
98 static auto TapNoteScoreToDancePoints(TapNoteScore tns, bool bBeginner)
99 -> int;
100 static auto HoldNoteScoreToDancePoints(HoldNoteScore hns, bool bBeginner)
101 -> int;
102 static auto TapNoteScoreToGradePoints(TapNoteScore tns, bool bBeginner)
103 -> int;
104 static auto HoldNoteScoreToGradePoints(HoldNoteScore hns, bool bBeginner)
105 -> int;
106
107 private:
114 void HandleTapNoteScoreInternal(const NoteData& nd,
115 TapNoteScore tns,
116 TapNoteScore maximum,
117 int row,
118 bool separately);
119 void HandleComboInternal(int iNumHitContinueCombo,
120 int iNumHitMaintainCombo,
121 int iNumBreakCombo,
122 int iRow = -1);
123 void HandleRowComboInternal(TapNoteScore tns,
124 int iNumTapsInRow,
125 int iRow = -1);
126 void GetRowCounts(const NoteData& nd,
127 int iRow,
128 int& iNumHitContinueCombo,
129 int& iNumHitMaintainCombo,
130 int& iNumBreakCombo);
131};
132
133#endif
Holds data about the notes that the player is supposed to hit.
Definition NoteData.h:43
Contains statistics for one stage of play - either one song, or a whole course.
Definition PlayerStageStats.h:19
The player's indivdual state.
Definition PlayerState.h:30
The default ScoreKeeper implementation.
Definition ScoreKeeperNormal.h:18
Abstract class to handle scorekeeping, stat-taking, etc.
Definition ScoreKeeper.h:20
Holds all music metadata and steps for one song.
Definition Song.h:65
Holds note information for a Song.
Definition Steps.h:42
The theme specific data.
Definition ThemeMetric.h:52
Holds data for translating beats<->seconds.
Definition TimingData.h:54
Cached song statistics.
Definition RadarValues.h:14
The various properties of a tap note.
Definition NoteTypes.h:149