2002-04-16 17:31:00 +00:00
|
|
|
#pragma once
|
|
|
|
|
/*
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
File: NoteData.h
|
|
|
|
|
|
|
|
|
|
Desc: Holds data about the notes that the player is supposed to hit. NoteData
|
|
|
|
|
is organized by:
|
|
|
|
|
track - corresponds to different columns of notes on the screen
|
|
|
|
|
index - corresponds to subdivisions of beats
|
|
|
|
|
|
2002-05-19 01:59:48 +00:00
|
|
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
2002-04-16 17:31:00 +00:00
|
|
|
Chris Danford
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
2002-08-13 23:26:46 +00:00
|
|
|
//#include "GameConstantsAndTypes.h"
|
2002-07-27 19:29:51 +00:00
|
|
|
#include "PlayerOptions.h"
|
2002-08-13 23:26:46 +00:00
|
|
|
#include "NoteTypes.h"
|
2002-04-16 17:31:00 +00:00
|
|
|
|
|
|
|
|
// '1' = tap note
|
|
|
|
|
// '2' = hold note begin
|
2002-06-14 22:25:22 +00:00
|
|
|
// '3' = hold note end ('1' can also end a HoldNote) ('3' without a matching '2' is ignored
|
2002-04-16 17:31:00 +00:00
|
|
|
// ... for future expansion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NoteData
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
NoteData();
|
2002-06-24 22:04:31 +00:00
|
|
|
void Init();
|
2002-05-19 01:59:48 +00:00
|
|
|
~NoteData();
|
|
|
|
|
|
|
|
|
|
int m_iNumTracks;
|
|
|
|
|
TapNote m_TapNotes[MAX_NOTE_TRACKS][MAX_TAP_NOTE_ROWS];
|
2002-07-11 19:02:26 +00:00
|
|
|
HoldNote m_HoldNotes[MAX_HOLD_NOTES];
|
2002-05-19 01:59:48 +00:00
|
|
|
int m_iNumHoldNotes;
|
2002-04-16 17:31:00 +00:00
|
|
|
|
2002-07-03 03:13:13 +00:00
|
|
|
void LoadFromSMNoteDataString( CString sSMNoteData );
|
|
|
|
|
CString GetSMNoteDataString();
|
|
|
|
|
|
2002-05-27 08:23:27 +00:00
|
|
|
void ClearRange( int iNoteIndexBegin, int iNoteIndexEnd );
|
2002-05-19 01:59:48 +00:00
|
|
|
void ClearAll() { ClearRange( 0, MAX_TAP_NOTE_ROWS ); };
|
2002-06-29 11:59:09 +00:00
|
|
|
void CopyRange( NoteData* pFrom, int iFromIndexBegin, int iFromIndexEnd, int iToIndexBegin = -1 );
|
2002-06-24 22:04:31 +00:00
|
|
|
void CopyAll( NoteData* pFrom ) { m_iNumTracks = pFrom->m_iNumTracks; m_iNumHoldNotes = 0; CopyRange( pFrom, 0, MAX_TAP_NOTE_ROWS ); };
|
2002-04-16 17:31:00 +00:00
|
|
|
|
2002-05-27 08:23:27 +00:00
|
|
|
inline bool IsRowEmpty( int index )
|
2002-04-16 17:31:00 +00:00
|
|
|
{
|
|
|
|
|
for( int t=0; t<m_iNumTracks; t++ )
|
|
|
|
|
if( m_TapNotes[t][index] != '0' )
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// used in edit/record
|
|
|
|
|
void AddHoldNote( HoldNote newNote ); // add note hold note merging overlapping HoldNotes and destroying TapNotes underneath
|
|
|
|
|
void RemoveHoldNote( int index );
|
|
|
|
|
|
|
|
|
|
// statistics
|
2002-10-11 20:51:12 +00:00
|
|
|
bool IsThereANoteAtRow( int iRow ) const;
|
2002-10-05 14:47:03 +00:00
|
|
|
|
2002-07-11 19:02:26 +00:00
|
|
|
float GetFirstBeat(); // return the beat number of the first note
|
|
|
|
|
int GetFirstRow();
|
2002-05-19 01:59:48 +00:00
|
|
|
float GetLastBeat(); // return the beat number of the last note
|
|
|
|
|
int GetLastRow();
|
|
|
|
|
int GetNumTapNotes( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
|
|
|
|
int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
|
|
|
|
int GetNumHoldNotes( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
|
|
|
|
|
2002-06-14 22:25:22 +00:00
|
|
|
int GetPossibleDancePoints();
|
|
|
|
|
|
2002-05-19 01:59:48 +00:00
|
|
|
// radar values - return between 0.0 and 1.2
|
2002-07-02 00:27:58 +00:00
|
|
|
float GetRadarValue( RadarCategory rv, float fSongSeconds )
|
2002-06-14 22:25:22 +00:00
|
|
|
{
|
|
|
|
|
switch( rv )
|
|
|
|
|
{
|
|
|
|
|
case RADAR_STREAM: return GetStreamRadarValue( fSongSeconds ); break;
|
|
|
|
|
case RADAR_VOLTAGE: return GetVoltageRadarValue( fSongSeconds ); break;
|
|
|
|
|
case RADAR_AIR: return GetAirRadarValue( fSongSeconds ); break;
|
2002-06-23 11:43:53 +00:00
|
|
|
case RADAR_FREEZE: return GetFreezeRadarValue( fSongSeconds ); break;
|
2002-06-24 22:04:31 +00:00
|
|
|
case RADAR_CHAOS: return GetChaosRadarValue( fSongSeconds ); break;
|
2002-06-14 22:25:22 +00:00
|
|
|
default: ASSERT(0); return 0;
|
|
|
|
|
}
|
|
|
|
|
};
|
2002-05-19 01:59:48 +00:00
|
|
|
float GetStreamRadarValue( float fSongSeconds );
|
|
|
|
|
float GetVoltageRadarValue( float fSongSeconds );
|
|
|
|
|
float GetAirRadarValue( float fSongSeconds );
|
2002-06-23 11:43:53 +00:00
|
|
|
float GetFreezeRadarValue( float fSongSeconds );
|
2002-06-24 22:04:31 +00:00
|
|
|
float GetChaosRadarValue( float fSongSeconds );
|
2002-04-16 17:31:00 +00:00
|
|
|
|
|
|
|
|
// Transformations
|
2002-08-25 19:00:12 +00:00
|
|
|
void LoadTransformed( NoteData* pOriginal, int iNewNumTracks, const int iOriginalTrackToTakeFrom[] ); // -1 for iOriginalTracksToTakeFrom means no track
|
2002-10-05 20:03:14 +00:00
|
|
|
void LoadTransformedSlidingWindow( NoteData* pOriginal, int iNewNumTracks ); // used by autogen
|
2002-10-05 14:47:03 +00:00
|
|
|
|
2002-04-16 17:31:00 +00:00
|
|
|
|
|
|
|
|
void CropToLeftSide();
|
|
|
|
|
void CropToRightSide();
|
|
|
|
|
void RemoveHoldNotes();
|
|
|
|
|
void Turn( PlayerOptions::TurnType tt );
|
|
|
|
|
void MakeLittle();
|
|
|
|
|
|
|
|
|
|
void SnapToNearestNoteType( NoteType nt1, NoteType nt2, float fBeginBeat, float fEndBeat );
|
|
|
|
|
|
2002-08-23 20:18:29 +00:00
|
|
|
NoteType GetSmallestNoteTypeForMeasure( int iMeasureIndex );
|
|
|
|
|
|
2002-04-16 17:31:00 +00:00
|
|
|
// Convert between HoldNote representation and '2' and '3' markers in TapNotes
|
|
|
|
|
void Convert2sAnd3sToHoldNotes();
|
|
|
|
|
void ConvertHoldNotesTo2sAnd3s();
|
|
|
|
|
|
2002-08-25 05:00:23 +00:00
|
|
|
void Convert4sToHoldNotes();
|
|
|
|
|
void ConvertHoldNotesTo4s();
|
2002-04-16 17:31:00 +00:00
|
|
|
};
|
2002-06-24 22:04:31 +00:00
|
|
|
|