experimental: save NoteData to XML for recording played games

This commit is contained in:
Chris Danford
2005-11-22 21:18:45 +00:00
parent 90ad56522c
commit 1ad58b4631
6 changed files with 114 additions and 0 deletions
+30
View File
@@ -8,6 +8,8 @@
#include "NoteData.h"
#include "RageUtil.h"
#include "RageLog.h"
#include "XmlFile.h"
#include "Foreach.h"
#include "RageUtil_AutoPtr.h"
REGISTER_CLASS_TRAITS( NoteData, new NoteData(*pCopy) )
@@ -877,6 +879,34 @@ bool NoteData::GetPrevTapNoteRowForAllTracks( int &rowInOut ) const
}
}
XNode* NoteData::CreateNode() const
{
XNode *p = new XNode;
p->m_sName = "NoteData";
FOREACH_NONEMPTY_ROW_ALL_TRACKS( *this, row )
{
set<int> s;
GetTapNonEmptyTracks( row, s );
FOREACHS_CONST( int, s, t )
{
TapNote tn = this->GetTapNote(*t, row);
XNode *p2 = tn.CreateNode();
p2->AppendAttr( "Track", *t );
p2->AppendAttr( "Row", row );
p->AppendChild( p2 );
}
}
return p;
}
void NoteData::LoadFromNode( const XNode* pNode )
{
ASSERT(0);
}
/*
* (c) 2001-2004 Chris Danford, Glenn Maynard
* All rights reserved.
+4
View File
@@ -150,6 +150,10 @@ public:
// Transformations
void LoadTransformed( const NoteData& original, int iNewNumTracks, const int iOriginalTrackToTakeFrom[] ); // -1 for iOriginalTracksToTakeFrom means no track
// XML
XNode* CreateNode() const;
void LoadFromNode( const XNode* pNode );
};
+47
View File
@@ -3,6 +3,7 @@
#include "RageUtil.h"
#include "LuaManager.h"
#include "LuaFunctions.h"
#include "XmlFile.h"
TapNote TAP_EMPTY ( TapNote::empty, TapNote::SubType_invalid, TapNote::original, "", 0, false, 0 );
TapNote TAP_ORIGINAL_TAP ( TapNote::tap, TapNote::SubType_invalid, TapNote::original, "", 0, false, 0 );
@@ -75,6 +76,52 @@ bool IsNoteOfType( int row, NoteType t )
return GetNoteType(row) == t;
}
XNode* TapNoteResult::CreateNode() const
{
XNode *p = new XNode;
p->m_sName = "TapNoteResult";
p->AppendAttr( "TapNoteScore", TapNoteScoreToString(tns) );
p->AppendAttr( "TapNoteOffset", fTapNoteOffset );
return p;
}
void TapNoteResult::LoadFromNode( const XNode* pNode )
{
ASSERT(0);
}
XNode* HoldNoteResult::CreateNode() const
{
XNode *p = new XNode;
p->m_sName = "HoldNoteResult";
return p;
}
void HoldNoteResult::LoadFromNode( const XNode* pNode )
{
ASSERT(0);
}
XNode* TapNote::CreateNode() const
{
XNode *p = new XNode;
p->m_sName = "TapNote";
p->AppendChild( result.CreateNode() );
p->AppendChild( HoldResult.CreateNode() );
return p;
}
void TapNote::LoadFromNode( const XNode* pNode )
{
ASSERT(0);
}
float HoldNoteResult::GetLastHeldBeat() const
{
return NoteRowToBeat(iLastHeldRow);
+14
View File
@@ -4,6 +4,7 @@
#define NOTE_TYPES_H
#include "GameConstantsAndTypes.h"
struct XNode;
struct TapNoteResult
{
@@ -21,6 +22,10 @@ struct TapNoteResult
/* If the whole row has been judged, all taps on the row will be set to hidden. */
bool bHidden;
// XML
XNode* CreateNode() const;
void LoadFromNode( const XNode* pNode );
};
struct HoldNoteResult
@@ -49,6 +54,10 @@ struct HoldNoteResult
bool bHeld;
bool bActive;
// XML
XNode* CreateNode() const;
void LoadFromNode( const XNode* pNode );
};
@@ -102,6 +111,11 @@ struct TapNote
/* hold_head only: */
HoldNoteResult HoldResult;
// XML
XNode* CreateNode() const;
void LoadFromNode( const XNode* pNode );
TapNote() {}
TapNote(
+18
View File
@@ -50,6 +50,7 @@
#include "DifficultyMeter.h"
#include "PlayerScoreList.h"
#include "InputEventPlus.h"
#include "XmlFile.h"
//
// Defines
@@ -2533,6 +2534,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
{
SongFinished();
StageFinished( false );
//SaveRecordedResults();
}
else if( SM == SM_GainFocus )
{
@@ -2686,6 +2688,22 @@ Song *ScreenGameplay::GetNextCourseSong() const
return m_apSongsQueue[iPlaySongIndex];
}
void ScreenGameplay::SaveRecordedResults()
{
FOREACH_HumanPlayer( pn )
{
FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi )
{
XNode *p = pi->m_pPlayer->m_NoteData.CreateNode();
DISP_OPT opt;
p->SaveToFile( "Save/LastSongRecording.xml", opt );
SAFE_DELETE( p );
return;
}
}
}
// lua start
#include "LuaBinding.h"
+1
View File
@@ -151,6 +151,7 @@ protected:
void UpdateLyrics( float fDeltaTime );
void SongFinished();
void StageFinished( bool bBackedOut );
void SaveRecordedResults();
virtual void InitSongQueues();