Move SM writing into a writer
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#include "stdafx.h"
|
||||
#include "NotesWriterSM.h"
|
||||
#include "Notes.h"
|
||||
|
||||
void NotesWriterSM::WriteGlobalTags(FILE *fp, const Song &out)
|
||||
{
|
||||
fprintf( fp, "#TITLE:%s;\n", out.m_sMainTitle.GetString() );
|
||||
fprintf( fp, "#SUBTITLE:%s;\n", out.m_sSubTitle.GetString() );
|
||||
fprintf( fp, "#ARTIST:%s;\n", out.m_sArtist.GetString() );
|
||||
fprintf( fp, "#TITLETRANSLIT:%s;\n", out.m_sMainTitleTranslit.GetString() );
|
||||
fprintf( fp, "#SUBTITLETRANSLIT:%s;\n", out.m_sSubTitleTranslit.GetString() );
|
||||
fprintf( fp, "#ARTISTTRANSLIT:%s;\n", out.m_sArtistTranslit.GetString() );
|
||||
fprintf( fp, "#CREDIT:%s;\n", out.m_sCredit.GetString() );
|
||||
fprintf( fp, "#BANNER:%s;\n", out.m_sBannerFile.GetString() );
|
||||
fprintf( fp, "#BACKGROUND:%s;\n", out.m_sBackgroundFile.GetString() );
|
||||
fprintf( fp, "#CDTITLE:%s;\n", out.m_sCDTitleFile.GetString() );
|
||||
fprintf( fp, "#MUSIC:%s;\n", out.m_sMusicFile.GetString() );
|
||||
fprintf( fp, "#MUSICBYTES:%u;\n", out.m_iMusicBytes );
|
||||
fprintf( fp, "#MUSICLENGTH:%.3f;\n", out.m_fMusicLengthSeconds );
|
||||
fprintf( fp, "#OFFSET:%.3f;\n", out.m_fBeat0OffsetInSeconds );
|
||||
fprintf( fp, "#SAMPLESTART:%.3f;\n", out.m_fMusicSampleStartSeconds );
|
||||
fprintf( fp, "#SAMPLELENGTH:%.3f;\n", out.m_fMusicSampleLengthSeconds );
|
||||
fprintf( fp, "#SELECTABLE:" );
|
||||
|
||||
switch(out.m_SelectionDisplay) {
|
||||
default: ASSERT(0); /* fallthrough */
|
||||
case Song::SHOW_ALWAYS:
|
||||
fprintf( fp, "YES" ); break;
|
||||
case Song::SHOW_NEVER:
|
||||
fprintf( fp, "NO" ); break;
|
||||
case Song::SHOW_ROULETTE:
|
||||
fprintf( fp, "ROULETTE" ); break;
|
||||
}
|
||||
fprintf( fp, ";\n" );
|
||||
|
||||
fprintf( fp, "#BPMS:" );
|
||||
unsigned i;
|
||||
for( i=0; i<out.m_BPMSegments.size(); i++ )
|
||||
{
|
||||
const BPMSegment &bs = out.m_BPMSegments[i];
|
||||
|
||||
fprintf( fp, "%.3f=%.3f", bs.m_fStartBeat, bs.m_fBPM );
|
||||
if( i != out.m_BPMSegments.size()-1 )
|
||||
fprintf( fp, "," );
|
||||
}
|
||||
fprintf( fp, ";\n" );
|
||||
|
||||
fprintf( fp, "#STOPS:" );
|
||||
for( i=0; i<out.m_StopSegments.size(); i++ )
|
||||
{
|
||||
const StopSegment &fs = out.m_StopSegments[i];
|
||||
|
||||
fprintf( fp, "%.3f=%.3f", fs.m_fStartBeat, fs.m_fStopSeconds );
|
||||
if( i != out.m_StopSegments.size()-1 )
|
||||
fprintf( fp, "," );
|
||||
}
|
||||
fprintf( fp, ";\n" );
|
||||
|
||||
fprintf( fp, "#BGCHANGES:" );
|
||||
for( i=0; i<out.m_BackgroundChanges.size(); i++ )
|
||||
{
|
||||
const BackgroundChange &seg = out.m_BackgroundChanges[i];
|
||||
|
||||
fprintf( fp, "%.3f=%s", seg.m_fStartBeat, seg.m_sBGName.GetString() );
|
||||
if( i != out.m_BackgroundChanges.size()-1 )
|
||||
fprintf( fp, "," );
|
||||
}
|
||||
fprintf( fp, ";\n" );
|
||||
|
||||
}
|
||||
|
||||
bool NotesWriterSM::Write(CString sPath, const Song &out, bool bSavingCache)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
FILE* fp = fopen( sPath, "w" );
|
||||
if( fp == NULL )
|
||||
throw RageException( "Error opening song file '%s' for writing.", sPath.GetString() );
|
||||
|
||||
WriteGlobalTags(fp, out);
|
||||
if(bSavingCache) {
|
||||
fprintf( fp, "#FIRSTBEAT:%.3f;\n", out.m_fFirstBeat );
|
||||
fprintf( fp, "#LASTBEAT:%.3f;\n", out.m_fLastBeat );
|
||||
}
|
||||
|
||||
//
|
||||
// Save all Notes for this file
|
||||
//
|
||||
for( i=0; i<out.m_apNotes.size(); i++ )
|
||||
{
|
||||
Notes* pNotes = out.m_apNotes[i];
|
||||
if( bSavingCache || !pNotes->m_bAutoGen ) // If notes aren't autogen
|
||||
out.m_apNotes[i]->WriteSMNotesTag( fp );
|
||||
}
|
||||
|
||||
fclose( fp );
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#ifndef NOTES_WRITER_SM_H
|
||||
#define NOTES_WRITER_SM_H
|
||||
|
||||
#include "Song.h"
|
||||
|
||||
class NotesWriterSM
|
||||
{
|
||||
void WriteGlobalTags(FILE *fp, const Song &out);
|
||||
|
||||
public:
|
||||
bool Write( CString sPath, const Song &out, bool bSavingCache );
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user