66 std::string m_sSongDir;
69 void SetSongDir(
const std::string& sDir) { m_sSongDir = sDir; }
70 auto GetSongDir() ->
const std::string& {
return m_sSongDir; }
91 auto LoadFromSongDir(std::string sDir,
Calc* calc =
nullptr) -> bool;
93 auto ReloadFromSongDir(
const std::string& sDir) -> bool;
94 auto ReloadFromSongDir() ->
bool {
return ReloadFromSongDir(GetSongDir()); }
95 void ReloadIfNoMusic();
97 std::string m_sFileHash;
98 auto GetFileHash() -> std::string;
101 auto GetDateAdded() const ->
DateTime {
return dateAdded; };
108 bool duringCache =
false,
109 Calc* calc =
nullptr);
117 bool duringCache =
false,
118 Calc* calc =
nullptr);
129 auto SaveToSSCFile(
const std::string& sPath,
bool bSavingCache) -> bool;
130 auto SaveToETTFile(
const std::string& sPath,
bool bSavingCache) -> bool;
147 [[nodiscard]]
auto GetSongFilePath() const -> const std::
string&;
148 [[nodiscard]] auto GetCacheFilePath() const -> std::
string;
151 [[nodiscard]] auto GetSongDir() const -> const std::
string&
189 [[nodiscard]]
auto GetDisplayMainTitle() const -> const std::
string&;
190 [[nodiscard]] auto GetDisplaySubTitle() const -> const std::
string&;
191 [[nodiscard]] auto GetDisplayArtist() const -> const std::
string&;
192 [[nodiscard]] auto GetMainTitle() const -> const std::
string&;
205 auto GetStepsToSave(
bool bSavingCache =
true,
const std::string& path =
"")
206 -> std::vector<Steps*>;
230 std::string displayfulltitle;
231 std::string translitfulltitle;
232 [[nodiscard]]
auto GetDisplayFullTitle() const -> const std::
string&
234 return displayfulltitle;
236 [[nodiscard]]
auto GetTranslitFullTitle() const -> const std::
string&
238 return translitfulltitle;
251 std::string m_sOrigin;
253 std::string m_sMusicFile;
254 std::string m_PreviewFile;
255 std::string m_sInstrumentTrackFile[NUM_InstrumentTrack];
259 float m_fMusicSampleStartSeconds;
260 float m_fMusicSampleLengthSeconds;
261 DisplayBPM m_DisplayBPMType;
262 float m_fSpecifiedBPMMin;
263 float m_fSpecifiedBPMMax;
265 std::string m_sBannerFile;
266 std::string m_sJacketFile;
267 std::string m_sCDFile;
270 std::string m_sLyricsFile;
271 std::string m_sBackgroundFile;
272 std::string m_sCDTitleFile;
273 std::string m_sPreviewVidFile;
275 std::string m_sMusicPath;
276 std::string m_PreviewPath;
277 std::string m_sInstrumentTrackPath[NUM_InstrumentTrack];
278 std::string m_sBannerPath;
279 std::string m_sJacketPath;
280 std::string m_sCDPath;
283 std::string m_sLyricsPath;
284 std::string m_sBackgroundPath;
285 std::string m_sCDTitlePath;
286 std::string m_sPreviewVidPath;
288 std::vector<std::string> ImageDir;
290 static auto GetSongAssetPath(std::string sPath,
291 const std::string& sSongPath) -> std::string;
292 [[nodiscard]]
auto GetMusicPath() const -> const std::
string&
296 [[nodiscard]]
auto GetInstrumentTrackPath(InstrumentTrack it)
const
297 ->
const std::string&
300 return m_sInstrumentTrackPath[it];
302 [[nodiscard]]
auto GetBannerPath() const -> const std::
string&
304 return m_sBannerPath;
306 [[nodiscard]]
auto GetJacketPath() const -> const std::
string&
308 return m_sJacketPath;
310 [[nodiscard]]
auto GetCDImagePath() const -> const std::
string&
314 [[nodiscard]]
auto GetDiscPath() const -> const std::
string&
318 [[nodiscard]]
auto GetLyricsPath() const -> const std::
string&
320 return m_sLyricsPath;
322 [[nodiscard]]
auto GetBackgroundPath() const -> const std::
string&
324 return m_sBackgroundPath;
326 [[nodiscard]]
auto GetCDTitlePath() const -> const std::
string&
328 return m_sCDTitlePath;
330 [[nodiscard]]
auto GetPreviewVidPath() const -> const std::
string&
332 return m_sPreviewVidPath;
334 [[nodiscard]]
auto GetPreviewMusicPath() const -> const std::
string&
336 return m_PreviewPath;
338 [[nodiscard]]
auto GetCredits() const -> const std::
string&
342 [[nodiscard]]
auto GetPreviewStartSeconds() const ->
float;
343 auto GetCacheFile(const std::
string& sType) -> std::
string;
349 [[nodiscard]] auto HighestMSDOfSkillset(Skillset x,
351 bool filtered_charts_only) const
353 [[nodiscard]] auto IsSkillsetHighestOfChart(
Steps* chart,
355 float rate) const ->
bool;
360 std::vector<
Steps*>* vMatchingStepsOut =
nullptr) const ->
bool;
361 [[nodiscard]] auto ChartMatchesFilter(
Steps* chart,
float rate) const
363 [[nodiscard]] auto IsChartHighestDifficulty(
Steps* chart,
365 float rate) const ->
bool;
366 auto HasChartByHash(const std::
string& hash) ->
bool;
369 bool m_bHasMusic, m_bHasBanner, m_bHasBackground;
371 [[nodiscard]] auto HasMusic() const ->
bool;
372 [[nodiscard]] auto HasInstrumentTrack(InstrumentTrack it) const ->
bool;
373 [[nodiscard]] auto HasBanner() const ->
bool;
374 [[nodiscard]] auto HasBackground() const ->
bool;
375 [[nodiscard]] auto HasJacket() const ->
bool;
376 [[nodiscard]] auto HasCDImage() const ->
bool;
377 [[nodiscard]] auto HasDisc() const ->
bool;
378 [[nodiscard]] auto HasCDTitle() const ->
bool;
379 [[nodiscard]] auto HasBGChanges() const ->
bool;
380 [[nodiscard]] auto HasLyrics() const ->
bool;
381 [[nodiscard]] auto HasPreviewVid() const ->
bool;
383 [[nodiscard]] auto Matches(const std::
string& sGroup,
384 const std::
string& sSong) const ->
bool;
389 [[nodiscard]] auto GetFirstBeat() const ->
float;
390 [[nodiscard]] auto GetFirstSecond() const ->
float;
391 [[nodiscard]] auto GetLastBeat() const ->
float;
392 [[nodiscard]] auto GetLastSecond() const ->
float;
393 [[nodiscard]] auto GetSpecifiedLastBeat() const ->
float;
394 [[nodiscard]] auto GetSpecifiedLastSecond() const ->
float;
396 void SetFirstSecond(
float f);
397 void SetLastSecond(
float f);
398 void SetSpecifiedLastSecond(
float f);
408 float specifiedLastSecond;
414 std::shared_ptr<VBackgroundChange>
415 m_BackgroundChanges[NUM_BackgroundLayer];
421 std::shared_ptr<VBackgroundChange> m_ForegroundChanges;
423 [[nodiscard]] auto GetChangesToVectorString(
425 -> std::vector<std::
string>;
428 [[nodiscard]] auto GetBackgroundChanges(BackgroundLayer bl) const
430 auto GetBackgroundChanges(BackgroundLayer bl)
432 [[nodiscard]] auto GetForegroundChanges() const
436 [[nodiscard]] auto GetBGChanges1ToVectorString() const
437 -> std::vector<std::
string>;
438 [[nodiscard]] auto GetBGChanges2ToVectorString() const
439 -> std::vector<std::
string>;
440 [[nodiscard]] auto GetFGChanges1ToVectorString() const
441 -> std::vector<std::
string>;
443 [[nodiscard]] auto GetInstrumentTracksToVectorString() const
444 -> std::vector<std::
string>;
451 void AddBackgroundChange(BackgroundLayer blLayer,
457 bool bIgnoreCurrentRate = false) const;
458 [[nodiscard]] auto GetBackgroundAtBeat(BackgroundLayer iLayer,
462 auto CreateSteps() ->
Steps*;
463 void InitSteps(
Steps* pSteps);
465 auto GetOrTryAtLeastToGetSimfileAuthor() const -> const std::
string;
467 [[nodiscard]] auto HasSignificantBpmChangesOrStops() const ->
bool;
468 [[nodiscard]] auto GetStepsSeconds() const ->
float;
469 [[nodiscard]] auto IsLong() const ->
bool;
470 [[nodiscard]] auto IsMarathon() const ->
bool;
473 void PlaySampleMusicExtended();
475 auto SongCompleteForStyle(const
Style* st) const ->
bool;
476 [[nodiscard]] auto HasStepsType(StepsType st) const ->
bool;
477 [[nodiscard]] auto HasStepsTypeAndDifficulty(StepsType st,
478 Difficulty dc) const ->
bool;
479 [[nodiscard]] auto GetAllSteps() const -> const std::vector<
Steps*>&
483 [[nodiscard]]
auto GetStepsByStepsType(StepsType st)
const
484 ->
const std::vector<Steps*>&
486 return m_vpStepsByType[st];
490 -> std::vector<
Steps*>;
491 [[nodiscard]] auto GetChartsMatchingFilter() const -> std::vector<
Steps*>;
492 [[nodiscard]] auto HasEdits(StepsType st) const ->
bool;
494 auto HasFavoritedChart() const ->
bool {
return isfavorited; }
495 void SetHasFavoritedChart(
bool b) { isfavorited = b; }
496 auto HasGoal() const ->
bool {
return hasgoal; }
497 void SetHasGoal(
bool b) { hasgoal = b; }
498 auto HasPermaMirrorChart() const ->
bool {
return permamirror; }
499 void SetHasPermaMirrorChart(
bool b) { permamirror = b; }
501 void SetEnabled(
bool b) { m_bEnabled = b; }
502 [[nodiscard]]
auto GetEnabled() const ->
bool {
return m_bEnabled; }
509 void DeleteSteps(
const Steps* pSteps,
bool bReAutoGen =
true);
511 auto IsEditAlreadyLoaded(
Steps* pSteps)
const -> bool;
513 auto IsStepsUsingDifferentTiming(
Steps* pSteps)
const -> bool;
514 [[nodiscard]]
auto AnyChartUsesSplitTiming() const ->
bool;
515 void UnloadAllCalcDebugOutput();
527 void PushSelf(lua_State* L);
529 std::vector<
Steps*> m_vpSteps;
530 std::vector<
Steps*> m_UnknownStyleSteps;
533 bool isfavorited = false;
534 bool permamirror = false;
535 bool hasgoal = false;
538 std::vector<
Steps*> m_vpStepsByType[NUM_StepsType];