Etterna 0.74.4
Loading...
Searching...
No Matches
NotesLoaderSM.h
1#ifndef NotesLoaderSM_H
2#define NotesLoaderSM_H
3
4#include "Etterna/Models/Misc/BackgroundUtil.h"
5#include "Etterna/Models/Misc/GameConstantsAndTypes.h"
6
7#include "Etterna/FileTypes/MsdFile.h" // we require the struct from here.
8
9class Song;
10class Steps;
11class TimingData;
12
17const float FAST_BPM_WARP = 9999999.f;
18
20const int MAX_EDIT_STEPS_SIZE_BYTES = 60 * 1024; // 60KB
21
24{
25 SMLoader()
26 : fileExt(".sm")
27 {
28 }
29
30 SMLoader(std::string ext)
31 : fileExt(ext)
32 {
33 }
34
35 virtual ~SMLoader() = default;
36
44 virtual bool LoadFromDir(const std::string& sPath, Song& out);
51 static void TidyUpData(Song& song, bool bFromCache);
52
57 virtual bool LoadNoteDataFromSimfile(const std::string& path, Steps& out);
58
68 virtual bool LoadFromSimfile(const std::string& sPath,
69 Song& out,
70 bool bFromCache = false);
76 virtual void GetApplicableFiles(const std::string& sPath,
77 std::vector<std::string>& out);
78 virtual bool LoadFromBGChangesString(
79 BackgroundChange& change,
80 const std::string& sBGChangeExpression);
81
87 void ParseBPMs(std::vector<std::pair<float, float>>& out,
88 const std::string& line,
89 const int rowsPerBeat = -1);
95 const std::vector<std::pair<float, float>>& vBPMChanges);
101 void ParseStops(std::vector<std::pair<float, float>>& out,
102 const std::string& line,
103 const int rowsPerBeat = -1);
109 const std::vector<std::pair<float, float>>& vStops);
116 std::vector<std::pair<float, float>>& vBPMs,
117 std::vector<std::pair<float, float>>& vStops);
123 void ProcessDelays(TimingData& out,
124 const std::string& line,
125 const int rowsPerBeat = -1);
126 static void ProcessDelays(TimingData& out,
127 const std::string& line,
128 const std::string& songname,
129 const int rowsPerBeat = -1);
136 const std::string& line,
137 const int rowsPerBeat = -1);
138 static void ProcessTimeSignatures(TimingData& out,
139 const std::string& line,
140 const std::string& songname,
141 const int rowsPerBeat = -1);
148 const std::string& line,
149 const int rowsPerBeat = -1);
150 static void ProcessTickcounts(TimingData& out,
151 const std::string& line,
152 const std::string& songname,
153 const int rowsPerBeat = -1);
154
160 virtual void ProcessSpeeds(TimingData& out,
161 const std::string& line,
162 const int rowsPerBeat = -1);
163 static void ProcessSpeeds(TimingData& out,
164 const std::string& line,
165 const std::string& songname,
166 const int rowsPerBeat = -1);
167
168 virtual void ProcessCombos(TimingData& /* out */,
169 const std::string& line,
170 const int /* rowsPerBeat */ = -1)
171 {
172 }
173
179 virtual void ProcessFakes(TimingData& out,
180 const std::string& line,
181 const int rowsPerBeat = -1);
182 static void ProcessFakes(TimingData& out,
183 const std::string& line,
184 const std::string& songname,
185 const int rowsPerBeat = -1);
186
187 virtual void ProcessBGChanges(Song& out,
188 const std::string& sValueName,
189 const std::string& sPath,
190 const std::string& sParam);
191
192 void ProcessInstrumentTracks(Song& out, const std::string& sParam);
193
202 static float RowToBeat(const std::string& line, const int rowsPerBeat);
203
204 protected:
214 virtual void LoadFromTokens(std::string sStepsType,
215 std::string sDescription,
216 std::string sDifficulty,
217 std::string sMeter,
218 std::string sNoteData,
219 Steps& out);
220
224 std::string GetFileExtension() const { return fileExt; }
225
229 std::string GetChartPath() const { return chartPath; }
230
231 public:
232 // SetSongTitle and GetSongTitle changed to public to allow the functions
233 // used by the parser helper to access them. -Kyz
237 virtual void SetSongTitle(const std::string& title);
238
242 virtual std::string GetSongTitle() const;
243
244 private:
246 const std::string fileExt;
248 std::string songTitle;
250 std::string chartPath;
251};
252
253#endif
Holds all music metadata and steps for one song.
Definition Song.h:65
Holds note information for a Song.
Definition Steps.h:42
Holds data for translating beats<->seconds.
Definition TimingData.h:54
Definition BackgroundUtil.h:62
Reads a Song from an .SM file.
Definition NotesLoaderSM.h:24
virtual bool LoadFromDir(const std::string &sPath, Song &out)
Attempt to load a song from a specified path.
Definition NotesLoaderSM.cpp:302
void ProcessStops(TimingData &out, const std::vector< std::pair< float, float > > &vStops)
Process the Stop Segments from the data.
virtual std::string GetSongTitle() const
Get the song title.
Definition NotesLoaderSM.cpp:296
static float RowToBeat(const std::string &line, const int rowsPerBeat)
Convert a row value to the proper beat value.
Definition NotesLoaderSM.cpp:310
virtual void ProcessFakes(TimingData &out, const std::string &line, const int rowsPerBeat=-1)
Process the Fake Segments from the string.
Definition NotesLoaderSM.cpp:931
virtual void GetApplicableFiles(const std::string &sPath, std::vector< std::string > &out)
Retrieve the list of .sm files.
Definition NotesLoaderSM.cpp:1228
static void TidyUpData(Song &song, bool bFromCache)
Perform some cleanup on the loaded song.
Definition NotesLoaderSM.cpp:1235
void ParseBPMs(std::vector< std::pair< float, float > > &out, const std::string &line, const int rowsPerBeat=-1)
Parse BPM Changes data from a string.
Definition NotesLoaderSM.cpp:433
void ParseStops(std::vector< std::pair< float, float > > &out, const std::string &line, const int rowsPerBeat=-1)
Parse Stops data from a string.
Definition NotesLoaderSM.cpp:465
std::string GetFileExtension() const
Retrieve the file extension associated with this loader.
Definition NotesLoaderSM.h:224
void ProcessTickcounts(TimingData &out, const std::string &line, const int rowsPerBeat=-1)
Process the Tickcount Segments from the string.
Definition NotesLoaderSM.cpp:824
virtual bool LoadFromSimfile(const std::string &sPath, Song &out, bool bFromCache=false)
Attempt to load the specified sm file.
Definition NotesLoaderSM.cpp:1158
virtual void SetSongTitle(const std::string &title)
Set the song title.
Definition NotesLoaderSM.cpp:290
void ProcessBPMsAndStops(TimingData &out, std::vector< std::pair< float, float > > &vBPMs, std::vector< std::pair< float, float > > &vStops)
Process BPM and stop segments from the data.
Definition NotesLoaderSM.cpp:511
void ProcessTimeSignatures(TimingData &out, const std::string &line, const int rowsPerBeat=-1)
Process the Time Signature Segments from the string.
Definition NotesLoaderSM.cpp:759
virtual bool LoadNoteDataFromSimfile(const std::string &path, Steps &out)
Retrieve the relevant notedata from the simfile.
Definition NotesLoaderSM.cpp:1063
void ProcessDelays(TimingData &out, const std::string &line, const int rowsPerBeat=-1)
Process the Delay Segments from the string.
Definition NotesLoaderSM.cpp:712
virtual void LoadFromTokens(std::string sStepsType, std::string sDescription, std::string sDifficulty, std::string sMeter, std::string sNoteData, Steps &out)
Process the different tokens we have available to get NoteData.
Definition NotesLoaderSM.cpp:323
void ProcessBPMs(TimingData &out, const std::vector< std::pair< float, float > > &vBPMChanges)
Process the BPM Segments from the string.
virtual void ProcessSpeeds(TimingData &out, const std::string &line, const int rowsPerBeat=-1)
Process the Speed Segments from the string.
Definition NotesLoaderSM.cpp:861
std::string GetChartPath() const
Get the chart path.
Definition NotesLoaderSM.h:229