Etterna 0.74.4
Loading...
Searching...
No Matches
NoteDataUtil.h
1#ifndef NOTEDATAUTIL_H
2#define NOTEDATAUTIL_H
3
4#include "Etterna/Models/Misc/GameConstantsAndTypes.h"
5#include "Etterna/Models/Misc/NoteTypes.h"
6
7class PlayerOptions;
8struct RadarValues;
9class NoteData;
10class Song;
11class TimingData;
12
13void
14PlaceAutoKeysound(NoteData& out, int row, TapNote akTap);
15auto
16FindLongestOverlappingHoldNoteForAnyTrack(const NoteData& in, int iRow) -> int;
17void
18LightTransformHelper(const NoteData& in,
19 NoteData& out,
20 const std::vector<int>& aiTracks);
21
28namespace NoteDataUtil {
29auto
30GetSmallestNoteTypeForMeasure(const NoteData& nd, int iMeasureIndex)
31 -> NoteType;
32auto
33GetSmallestNoteTypeInRange(const NoteData& nd, int iStartIndex, int iEndIndex)
34 -> NoteType;
35void
36LoadFromSMNoteDataString(NoteData& out, const std::string& sSMNoteData);
37void
38LoadFromETTNoteDataString(NoteData& out, const std::string& sSMNoteData);
39void
40GetSMNoteDataString(const NoteData& in, std::string& notes_out);
41void
42GetETTNoteDataString(const NoteData& in, std::string& notes_out);
50void
52 NoteData& out,
53 int iNewNumTracks);
61void
62LoadOverlapped(const NoteData& in, NoteData& out, int iNewNumTracks);
63void
64LoadTransformedLights(const NoteData& in, NoteData& out, int iNewNumTracks);
65void
66LoadTransformedLightsFromTwo(const NoteData& marquee,
67 const NoteData& bass,
68 NoteData& out);
69void
70InsertHoldTails(NoteData& inout);
71
72void
73CalculateRadarValues(const NoteData& in,
74 RadarValues& out,
75 TimingData* td = nullptr);
76
82void
84 int iStartIndex = 0,
85 int iEndIndex = MAX_NOTE_ROW);
86void
87ChangeRollsToHolds(NoteData& in, int iStartIndex, int iEndIndex);
88void
89ChangeHoldsToRolls(NoteData& in, int iStartIndex, int iEndIndex);
90void
91RemoveSimultaneousNotes(NoteData& inout,
92 int iMaxSimultaneous,
93 int iStartIndex = 0,
94 int iEndIndex = MAX_NOTE_ROW);
95void
96RemoveJumps(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
97void
98RemoveHands(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
99void
100RemoveQuads(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
107void
109 TapNoteType tn,
110 int iStartIndex = 0,
111 int iEndIndex = MAX_NOTE_ROW);
117void
118RemoveMines(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
124void
125RemoveLifts(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
131void
132RemoveFakes(NoteData& inout,
133 TimingData const& timing_data,
134 int iStartIndex = 0,
135 int iEndIndex = MAX_NOTE_ROW);
136void
137RemoveStretch(NoteData& inout,
138 StepsType st,
139 int iStartIndex = 0,
140 int iEndIndex = MAX_NOTE_ROW);
141void
142RemoveAllButOneTap(NoteData& inout, int row);
143
146{
147 left,
151 backwards,
153 shuffle,
154 soft_shuffle,
155 super_shuffle,
156 stomp,
157 swap_up_down,
158 hran_shuffle, // bms h-random (supershuffle without creating new jacks)
159 NUM_TRACK_MAPPINGS
160};
161void
162Turn(NoteData& inout,
163 StepsType st,
164 TrackMapping tt,
165 int iStartIndex = 0,
166 int iEndIndex = MAX_NOTE_ROW);
167void
168Little(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
169void
170Wide(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
171void
172Big(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
173void
174Quick(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
175void
176BMRize(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
177void
178Skippy(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
179void
180InsertIntelligentTaps(NoteData& in,
181 int iWindowSizeRows,
182 int iInsertOffsetRows,
183 int iWindowStrideRows,
184 bool bSkippy,
185 int iStartIndex = 0,
186 int iEndIndex = MAX_NOTE_ROW);
187void
188AddMines(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
189void
190Echo(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
191void
192Stomp(NoteData& inout,
193 StepsType st,
194 int iStartIndex = 0,
195 int iEndIndex = MAX_NOTE_ROW);
196void
197JackJS(NoteData& inout,
198 StepsType st,
199 TimingData const& timing_data,
200 int iStartIndex = 0,
201 int iEndIndex = MAX_NOTE_ROW);
202void
203AnchorJS(NoteData& inout,
204 StepsType st,
205 TimingData const& timing_data,
206 int iStartIndex = 0,
207 int iEndIndex = MAX_NOTE_ROW);
208void
209IcyWorld(NoteData& inout,
210 StepsType st,
211 TimingData const& timing_data,
212 int iStartIndex = 0,
213 int iEndIndex = MAX_NOTE_ROW);
214void
215Planted(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
216void
217Floored(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
218void
219Twister(NoteData& inout, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW);
220void
221ConvertTapsToHolds(NoteData& inout,
222 int iSimultaneousHolds,
223 int iStartIndex = 0,
224 int iEndIndex = MAX_NOTE_ROW);
225
229void
231
232void
233Backwards(NoteData& inout);
234void
235SwapSides(NoteData& inout);
236void
237CopyLeftToRight(NoteData& inout);
238void
239CopyRightToLeft(NoteData& inout);
240void
241ClearLeft(NoteData& inout);
242void
243ClearRight(NoteData& inout);
244void
245CollapseToOne(NoteData& inout);
246void
247CollapseLeft(NoteData& inout);
248void
249ShiftTracks(NoteData& inout, int iShiftBy);
250void
251ShiftLeft(NoteData& inout);
252void
253ShiftRight(NoteData& inout);
254void
255SwapUpDown(NoteData& inout, StepsType st);
256void
257ArbitraryRemap(NoteData& inout, int* mapping);
258
259void
260SnapToNearestNoteType(NoteData& inout,
261 NoteType nt1,
262 NoteType nt2,
263 int iStartIndex,
264 int iEndIndex);
265
266inline void
267SnapToNearestNoteType(NoteData& inout,
268 NoteType nt,
269 int iStartIndex,
270 int iEndIndex)
271{
272 SnapToNearestNoteType(inout, nt, NoteType_Invalid, iStartIndex, iEndIndex);
273}
274
275// True if no notes in row that aren't true in the mask
276auto
277RowPassesValidMask(NoteData& inout, int row, const bool bValidMask[]) -> bool;
278
279void
280TransformNoteData(NoteData& nd,
281 TimingData const& timing_data,
282 const PlayerOptions& po,
283 StepsType st,
284 int iStartIndex = 0,
285 int iEndIndex = MAX_NOTE_ROW);
286
287void
288Scale(NoteData& nd, float fScale);
289void
290ScaleRegion(NoteData& nd,
291 float fScale,
292 int iStartIndex = 0,
293 int iEndIndex = MAX_NOTE_ROW);
294
295void
296InsertRows(NoteData& nd, int iStartIndex, int iRowsToShift);
297void
298DeleteRows(NoteData& nd, int iStartIndex, int iRowsToShift);
299
300void
301RemoveAllButRange(NoteData& nd, int iStartIndex, int iEndIndex);
302
303void
304RemoveAllTapsOfType(NoteData& ndInOut, TapNoteType typeToRemove);
305void
306RemoveAllTapsExceptForType(NoteData& ndInOut, TapNoteType typeToKeep);
307
308auto
309GetMaxNonEmptyTrack(const NoteData& in) -> int;
310auto
311AnyTapsAndHoldsInTrackRange(const NoteData& in,
312 int iTrack,
313 int iStart,
314 int iEnd) -> bool;
315
316auto
317GetNextEditorPosition(const NoteData& in, int& rowInOut) -> bool;
318auto
319GetPrevEditorPosition(const NoteData& in, int& rowInOut) -> bool;
320
324auto
325GetTotalHoldTicks(NoteData* nd, const TimingData* td) -> unsigned int;
326} // namespace NoteDataUtil
327
328#endif
Holds data about the notes that the player is supposed to hit.
Definition NoteData.h:43
Per-player options that are not saved between sessions.
Definition PlayerOptions.h:48
Holds all music metadata and steps for one song.
Definition Song.h:65
Holds data for translating beats<->seconds.
Definition TimingData.h:54
Utility functions that deal with NoteData.
Definition NoteDataUtil.h:28
auto GetTotalHoldTicks(NoteData *nd, const TimingData *td) -> unsigned int
Count the number of hold ticks that will fire, assuming that tickholds are on.
Definition NoteDataUtil.cpp:3368
TrackMapping
The types of transformations available for the NoteData.
Definition NoteDataUtil.h:146
@ backwards
Definition NoteDataUtil.h:151
@ right
Definition NoteDataUtil.h:149
@ left
Definition NoteDataUtil.h:147
@ mirror
Definition NoteDataUtil.h:150
void LoadTransformedSlidingWindow(const NoteData &in, NoteData &out, int iNewNumTracks)
Autogenerate notes from one type to another.
Definition NoteDataUtil.cpp:848
void LoadOverlapped(const NoteData &in, NoteData &out, int iNewNumTracks)
Autogenerate notes from one type to another.
Definition NoteDataUtil.cpp:951
void RemoveFakes(NoteData &inout, TimingData const &timing_data, int iStartIndex=0, int iEndIndex=MAX_NOTE_ROW)
Remove all of the fakes from the chart.
Definition NoteDataUtil.cpp:1319
void ConvertAdditionsToRegular(NoteData &inout)
Convert all taps added via transforms into original style tap notes.
Definition NoteDataUtil.cpp:3019
void RemoveHoldNotes(NoteData &inout, int iStartIndex=0, int iEndIndex=MAX_NOTE_ROW)
Remove all of the Hold notes.
Definition NoteDataUtil.cpp:1189
void RemoveMines(NoteData &inout, int iStartIndex=0, int iEndIndex=MAX_NOTE_ROW)
Remove all of the mines from the chart.
Definition NoteDataUtil.cpp:1307
void RemoveLifts(NoteData &inout, int iStartIndex=0, int iEndIndex=MAX_NOTE_ROW)
Remove all of the lifts from the chart.
Definition NoteDataUtil.cpp:1313
void RemoveSpecificTapNotes(NoteData &inout, TapNoteType tn, int iStartIndex=0, int iEndIndex=MAX_NOTE_ROW)
Remove all of a specific TapNote Type.
Definition NoteDataUtil.cpp:1290
Cached song statistics.
Definition RadarValues.h:14
The various properties of a tap note.
Definition NoteTypes.h:149