clean up EditMode transitions
don't explicitly draw and update Actors - add as children so that Z ordering is correct
This commit is contained in:
+83
-107
@@ -528,7 +528,7 @@ void ScreenEdit::Init()
|
|||||||
m_pSteps->GetNoteData( noteData );
|
m_pSteps->GetNoteData( noteData );
|
||||||
|
|
||||||
|
|
||||||
m_EditMode = MODE_EDITING;
|
TransitionEditMode( MODE_EDITING );
|
||||||
GAMESTATE->m_bPastHereWeGo = false;
|
GAMESTATE->m_bPastHereWeGo = false;
|
||||||
|
|
||||||
GAMESTATE->m_bEditing = true;
|
GAMESTATE->m_bEditing = true;
|
||||||
@@ -547,21 +547,27 @@ void ScreenEdit::Init()
|
|||||||
g_iShiftAnchor = -1;
|
g_iShiftAnchor = -1;
|
||||||
|
|
||||||
|
|
||||||
|
this->AddChild( &m_Background );
|
||||||
|
|
||||||
m_SnapDisplay.SetXY( EDIT_X, PLAYER_Y_STANDARD );
|
m_SnapDisplay.SetXY( EDIT_X, PLAYER_Y_STANDARD );
|
||||||
m_SnapDisplay.Load( PLAYER_1 );
|
m_SnapDisplay.Load( PLAYER_1 );
|
||||||
m_SnapDisplay.SetZoom( 0.5f );
|
m_SnapDisplay.SetZoom( 0.5f );
|
||||||
|
this->AddChild( &m_SnapDisplay );
|
||||||
|
|
||||||
|
m_NoteDataEdit.CopyAll( noteData );
|
||||||
|
|
||||||
m_NoteFieldEdit.SetXY( EDIT_X, PLAYER_Y );
|
m_NoteFieldEdit.SetXY( EDIT_X, PLAYER_Y );
|
||||||
m_NoteFieldEdit.SetZoom( 0.5f );
|
m_NoteFieldEdit.SetZoom( 0.5f );
|
||||||
m_NoteDataEdit.CopyAll( noteData );
|
|
||||||
|
|
||||||
m_NoteFieldEdit.Init( GAMESTATE->m_pPlayerState[PLAYER_1], PLAYER_HEIGHT*2 );
|
m_NoteFieldEdit.Init( GAMESTATE->m_pPlayerState[PLAYER_1], PLAYER_HEIGHT*2 );
|
||||||
m_NoteFieldEdit.Load( &m_NoteDataEdit, -240, 800 );
|
m_NoteFieldEdit.Load( &m_NoteDataEdit, -240, 800 );
|
||||||
|
this->AddChild( &m_NoteFieldEdit );
|
||||||
|
|
||||||
|
m_NoteDataRecord.CopyAll( noteData );
|
||||||
|
|
||||||
m_NoteFieldRecord.SetXY( EDIT_X, PLAYER_Y );
|
m_NoteFieldRecord.SetXY( EDIT_X, PLAYER_Y );
|
||||||
m_NoteDataRecord.CopyAll( noteData );
|
|
||||||
m_NoteFieldRecord.Init( GAMESTATE->m_pPlayerState[PLAYER_1], 350 );
|
m_NoteFieldRecord.Init( GAMESTATE->m_pPlayerState[PLAYER_1], 350 );
|
||||||
m_NoteFieldRecord.Load( &m_NoteDataRecord, -150, 350 );
|
m_NoteFieldRecord.Load( &m_NoteDataRecord, -150, 350 );
|
||||||
|
this->AddChild( &m_NoteFieldRecord );
|
||||||
|
|
||||||
m_Clipboard.SetNumTracks( m_NoteDataEdit.GetNumTracks() );
|
m_Clipboard.SetNumTracks( m_NoteDataEdit.GetNumTracks() );
|
||||||
|
|
||||||
@@ -577,6 +583,9 @@ void ScreenEdit::Init()
|
|||||||
m_Player.Load( noteData );
|
m_Player.Load( noteData );
|
||||||
GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PC_HUMAN;
|
GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PC_HUMAN;
|
||||||
m_Player.SetXY( PLAYER_X, PLAYER_Y );
|
m_Player.SetXY( PLAYER_X, PLAYER_Y );
|
||||||
|
this->AddChild( &m_Player );
|
||||||
|
|
||||||
|
this->AddChild( &m_Foreground );
|
||||||
|
|
||||||
m_textHelp.LoadFromFont( THEME->GetPathF("Common","normal") );
|
m_textHelp.LoadFromFont( THEME->GetPathF("Common","normal") );
|
||||||
m_textHelp.SetXY( HELP_TEXT_X, HELP_TEXT_Y );
|
m_textHelp.SetXY( HELP_TEXT_X, HELP_TEXT_Y );
|
||||||
@@ -585,6 +594,7 @@ void ScreenEdit::Init()
|
|||||||
m_textHelp.SetZoom( 0.5f );
|
m_textHelp.SetZoom( 0.5f );
|
||||||
m_textHelp.SetText( HELP_TEXT );
|
m_textHelp.SetText( HELP_TEXT );
|
||||||
m_textHelp.SetShadowLength( 0 );
|
m_textHelp.SetShadowLength( 0 );
|
||||||
|
this->AddChild( &m_textHelp );
|
||||||
|
|
||||||
m_textInfo.LoadFromFont( THEME->GetPathF("Common","normal") );
|
m_textInfo.LoadFromFont( THEME->GetPathF("Common","normal") );
|
||||||
m_textInfo.SetXY( INFO_TEXT_X, INFO_TEXT_Y );
|
m_textInfo.SetXY( INFO_TEXT_X, INFO_TEXT_Y );
|
||||||
@@ -592,16 +602,20 @@ void ScreenEdit::Init()
|
|||||||
m_textInfo.SetVertAlign( Actor::align_top );
|
m_textInfo.SetVertAlign( Actor::align_top );
|
||||||
m_textInfo.SetZoom( 0.5f );
|
m_textInfo.SetZoom( 0.5f );
|
||||||
m_textInfo.SetShadowLength( 0 );
|
m_textInfo.SetShadowLength( 0 );
|
||||||
//m_textInfo.SetText(); // set this below every frame
|
this->AddChild( &m_textInfo );
|
||||||
|
|
||||||
m_soundChangeLine.Load( THEME->GetPathS("ScreenEdit","line") );
|
|
||||||
m_soundChangeSnap.Load( THEME->GetPathS("ScreenEdit","snap") );
|
this->SortByDrawOrder();
|
||||||
m_soundMarker.Load( THEME->GetPathS("ScreenEdit","marker") );
|
|
||||||
|
|
||||||
|
m_soundChangeLine.Load( THEME->GetPathS("ScreenEdit","line"), true );
|
||||||
|
m_soundChangeSnap.Load( THEME->GetPathS("ScreenEdit","snap"), true );
|
||||||
|
m_soundMarker.Load( THEME->GetPathS("ScreenEdit","marker"), true );
|
||||||
|
|
||||||
|
|
||||||
m_soundMusic.Load( m_pSong->GetMusicPath() );
|
m_soundMusic.Load( m_pSong->GetMusicPath() );
|
||||||
|
|
||||||
m_soundAssistTick.Load( THEME->GetPathS("ScreenEdit","assist tick") );
|
m_soundAssistTick.Load( THEME->GetPathS("ScreenEdit","assist tick"), true );
|
||||||
|
|
||||||
this->HandleScreenMessage( SM_DoUpdateTextInfo );
|
this->HandleScreenMessage( SM_DoUpdateTextInfo );
|
||||||
}
|
}
|
||||||
@@ -702,41 +716,15 @@ void ScreenEdit::Update( float fDeltaTime )
|
|||||||
|
|
||||||
if( m_EditMode == MODE_RECORDING || m_EditMode == MODE_PLAYING )
|
if( m_EditMode == MODE_RECORDING || m_EditMode == MODE_PLAYING )
|
||||||
{
|
{
|
||||||
if( PREFSMAN->m_bEditorShowBGChangesPlay )
|
|
||||||
{
|
|
||||||
m_Background.Update( fDeltaTime );
|
|
||||||
m_Foreground.Update( fDeltaTime );
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for end of playback/record
|
// check for end of playback/record
|
||||||
|
|
||||||
if( GAMESTATE->m_fSongBeat > NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) + 4 ) // give a one measure lead out
|
if( GAMESTATE->m_fSongBeat > NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) + 4 ) // give a one measure lead out
|
||||||
{
|
{
|
||||||
if( m_EditMode == MODE_RECORDING )
|
TransitionEditMode( MODE_EDITING );
|
||||||
{
|
|
||||||
TransitionFromRecordToEdit();
|
|
||||||
}
|
|
||||||
else if( m_EditMode == MODE_PLAYING )
|
|
||||||
{
|
|
||||||
TransitionToEdit();
|
|
||||||
}
|
|
||||||
GAMESTATE->m_fSongBeat = NoteRowToBeat( m_NoteFieldEdit.m_iEndMarker );
|
GAMESTATE->m_fSongBeat = NoteRowToBeat( m_NoteFieldEdit.m_iEndMarker );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_SnapDisplay.Update( fDeltaTime );
|
|
||||||
m_NoteFieldEdit.Update( fDeltaTime );
|
|
||||||
m_textHelp.Update( fDeltaTime );
|
|
||||||
m_textInfo.Update( fDeltaTime );
|
|
||||||
|
|
||||||
|
|
||||||
if( m_EditMode == MODE_RECORDING )
|
|
||||||
m_NoteFieldRecord.Update( fDeltaTime );
|
|
||||||
|
|
||||||
if( m_EditMode == MODE_PLAYING )
|
|
||||||
{
|
|
||||||
m_Player.Update( fDeltaTime );
|
|
||||||
}
|
|
||||||
|
|
||||||
//LOG->Trace( "ScreenEdit::Update(%f)", fDeltaTime );
|
//LOG->Trace( "ScreenEdit::Update(%f)", fDeltaTime );
|
||||||
ScreenWithMenuElements::Update( fDeltaTime );
|
ScreenWithMenuElements::Update( fDeltaTime );
|
||||||
@@ -785,47 +773,13 @@ void ScreenEdit::UpdateTextInfo()
|
|||||||
|
|
||||||
void ScreenEdit::DrawPrimitives()
|
void ScreenEdit::DrawPrimitives()
|
||||||
{
|
{
|
||||||
switch( m_EditMode )
|
// HACK: Draw using the trailing beat
|
||||||
{
|
float fSongBeat = GAMESTATE->m_fSongBeat; // save song beat
|
||||||
case MODE_EDITING:
|
GAMESTATE->m_fSongBeat = m_fTrailingBeat; // put trailing beat in effect
|
||||||
{
|
|
||||||
m_sprOverlay->Draw();
|
|
||||||
m_textHelp.Draw();
|
|
||||||
m_textInfo.Draw();
|
|
||||||
m_SnapDisplay.Draw();
|
|
||||||
|
|
||||||
// HACK: Make NoteFieldEdit draw using the trailing beat
|
|
||||||
float fSongBeat = GAMESTATE->m_fSongBeat; // save song beat
|
|
||||||
GAMESTATE->m_fSongBeat = m_fTrailingBeat; // put trailing beat in effect
|
|
||||||
m_NoteFieldEdit.Draw();
|
|
||||||
GAMESTATE->m_fSongBeat = fSongBeat; // restore real song beat
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MODE_RECORDING:
|
|
||||||
if( PREFSMAN->m_bEditorShowBGChangesPlay )
|
|
||||||
m_Background.Draw();
|
|
||||||
|
|
||||||
m_sprOverlay->Draw();
|
|
||||||
|
|
||||||
m_NoteFieldRecord.Draw();
|
|
||||||
if( PREFSMAN->m_bEditorShowBGChangesPlay )
|
|
||||||
m_Foreground.Draw();
|
|
||||||
break;
|
|
||||||
case MODE_PLAYING:
|
|
||||||
if( PREFSMAN->m_bEditorShowBGChangesPlay )
|
|
||||||
m_Background.Draw();
|
|
||||||
|
|
||||||
m_sprOverlay->Draw();
|
|
||||||
|
|
||||||
m_Player.Draw();
|
|
||||||
if( PREFSMAN->m_bEditorShowBGChangesPlay )
|
|
||||||
m_Foreground.Draw();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
ScreenWithMenuElements::DrawPrimitives();
|
ScreenWithMenuElements::DrawPrimitives();
|
||||||
|
|
||||||
|
GAMESTATE->m_fSongBeat = fSongBeat; // restore real song beat
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||||
@@ -1355,7 +1309,7 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t
|
|||||||
{
|
{
|
||||||
if( EditB == EDIT_BUTTON_RETURN_TO_EDIT )
|
if( EditB == EDIT_BUTTON_RETURN_TO_EDIT )
|
||||||
{
|
{
|
||||||
TransitionFromRecordToEdit();
|
TransitionEditMode( MODE_EDITING );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1397,7 +1351,7 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
switch( EditB )
|
switch( EditB )
|
||||||
{
|
{
|
||||||
case EDIT_BUTTON_RETURN_TO_EDIT:
|
case EDIT_BUTTON_RETURN_TO_EDIT:
|
||||||
TransitionToEdit();
|
TransitionEditMode( MODE_EDITING );
|
||||||
break;
|
break;
|
||||||
case EDIT_BUTTON_TOGGLE_ASSIST_TICK:
|
case EDIT_BUTTON_TOGGLE_ASSIST_TICK:
|
||||||
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
||||||
@@ -1443,44 +1397,66 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenEdit::TransitionEditMode( EditMode em )
|
||||||
/* Switch to editing. */
|
|
||||||
void ScreenEdit::TransitionToEdit()
|
|
||||||
{
|
{
|
||||||
m_sprOverlay->PlayCommand( "Edit" );
|
EditMode old = m_EditMode;
|
||||||
|
|
||||||
/* Important: people will stop playing, change the BG and start again; make sure we reload */
|
switch( em )
|
||||||
m_Background.Unload();
|
{
|
||||||
m_Foreground.Unload();
|
case MODE_EDITING:
|
||||||
|
m_sprOverlay->PlayCommand( "Edit" );
|
||||||
|
|
||||||
m_EditMode = MODE_EDITING;
|
/* Important: people will stop playing, change the BG and start again; make sure we reload */
|
||||||
GAMESTATE->m_bPastHereWeGo = false;
|
m_Background.Unload();
|
||||||
m_soundMusic.StopPlaying();
|
m_Foreground.Unload();
|
||||||
m_soundAssistTick.StopPlaying(); /* Stop any queued assist ticks. */
|
|
||||||
|
|
||||||
/* Make sure we're snapped. */
|
GAMESTATE->m_bPastHereWeGo = false;
|
||||||
GAMESTATE->m_fSongBeat = Quantize( GAMESTATE->m_fSongBeat, NoteTypeToBeat(m_SnapDisplay.GetNoteType()) );
|
m_soundMusic.StopPlaying();
|
||||||
|
m_soundAssistTick.StopPlaying(); /* Stop any queued assist ticks. */
|
||||||
|
|
||||||
/* Playing and recording have lead-ins, which may start before beat 0;
|
/* Make sure we're snapped. */
|
||||||
* make sure we don't stay there if we escaped out early. */
|
GAMESTATE->m_fSongBeat = Quantize( GAMESTATE->m_fSongBeat, NoteTypeToBeat(m_SnapDisplay.GetNoteType()) );
|
||||||
GAMESTATE->m_fSongBeat = max( GAMESTATE->m_fSongBeat, 0 );
|
|
||||||
|
|
||||||
/* Stop displaying course attacks, if any. */
|
/* Playing and recording have lead-ins, which may start before beat 0;
|
||||||
GAMESTATE->RemoveAllActiveAttacks();
|
* make sure we don't stay there if we escaped out early. */
|
||||||
GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( PLAYER_1 );
|
GAMESTATE->m_fSongBeat = max( GAMESTATE->m_fSongBeat, 0 );
|
||||||
GAMESTATE->m_pPlayerState[PLAYER_1]->m_CurrentPlayerOptions = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScreenEdit::TransitionFromRecordToEdit()
|
/* Stop displaying course attacks, if any. */
|
||||||
{
|
GAMESTATE->RemoveAllActiveAttacks();
|
||||||
TransitionToEdit();
|
GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( PLAYER_1 );
|
||||||
|
GAMESTATE->m_pPlayerState[PLAYER_1]->m_CurrentPlayerOptions = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions;
|
||||||
|
|
||||||
// delete old TapNotes in the range
|
if( old == MODE_RECORDING )
|
||||||
m_NoteDataEdit.ClearRange( m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
{
|
||||||
|
// delete old TapNotes in the range
|
||||||
|
m_NoteDataEdit.ClearRange( m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||||
|
m_NoteDataEdit.CopyRange( m_NoteDataRecord, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker, m_NoteFieldEdit.m_iBeginMarker );
|
||||||
|
m_NoteDataRecord.ClearAll();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MODE_RECORDING:
|
||||||
|
break;
|
||||||
|
case MODE_PLAYING:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
m_NoteDataEdit.CopyRange( m_NoteDataRecord, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker, m_NoteFieldEdit.m_iBeginMarker );
|
|
||||||
|
|
||||||
m_NoteDataRecord.ClearAll();
|
//
|
||||||
|
// Show/hide depending on em
|
||||||
|
//
|
||||||
|
m_Background.SetHidden( !PREFSMAN->m_bEditorShowBGChangesPlay || em == MODE_EDITING );
|
||||||
|
m_textHelp.SetHidden( em != MODE_EDITING );
|
||||||
|
m_textInfo.SetHidden( em != MODE_EDITING );
|
||||||
|
m_SnapDisplay.SetHidden( em != MODE_EDITING );
|
||||||
|
m_NoteFieldEdit.SetHidden( em != MODE_EDITING );
|
||||||
|
m_NoteFieldRecord.SetHidden( em != MODE_RECORDING );
|
||||||
|
m_Player.SetHidden( em != MODE_PLAYING );
|
||||||
|
m_Foreground.SetHidden( !PREFSMAN->m_bEditorShowBGChangesPlay || em == MODE_EDITING );
|
||||||
|
|
||||||
|
|
||||||
|
m_EditMode = em;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
||||||
@@ -2149,7 +2125,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
|||||||
|
|
||||||
SOUND->PlayMusic("");
|
SOUND->PlayMusic("");
|
||||||
|
|
||||||
m_EditMode = MODE_PLAYING;
|
TransitionEditMode( MODE_PLAYING );
|
||||||
m_sprOverlay->PlayCommand( "Play" );
|
m_sprOverlay->PlayCommand( "Play" );
|
||||||
|
|
||||||
GAMESTATE->m_bPastHereWeGo = true;
|
GAMESTATE->m_bPastHereWeGo = true;
|
||||||
@@ -2201,7 +2177,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
|||||||
|
|
||||||
SOUND->PlayMusic("");
|
SOUND->PlayMusic("");
|
||||||
|
|
||||||
m_EditMode = MODE_RECORDING;
|
TransitionEditMode( MODE_RECORDING );
|
||||||
m_sprOverlay->PlayCommand( "Record" );
|
m_sprOverlay->PlayCommand( "Record" );
|
||||||
GAMESTATE->m_bPastHereWeGo = true;
|
GAMESTATE->m_bPastHereWeGo = true;
|
||||||
|
|
||||||
|
|||||||
@@ -139,8 +139,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
ThemeMetric<CString> PREV_SCREEN;
|
ThemeMetric<CString> PREV_SCREEN;
|
||||||
|
|
||||||
void TransitionFromRecordToEdit();
|
enum EditMode { MODE_EDITING, MODE_RECORDING, MODE_PLAYING };
|
||||||
void TransitionToEdit();
|
void TransitionEditMode( EditMode em );
|
||||||
void PlayTicks();
|
void PlayTicks();
|
||||||
void PlayPreviewMusic();
|
void PlayPreviewMusic();
|
||||||
void UpdateTextInfo();
|
void UpdateTextInfo();
|
||||||
@@ -150,7 +150,6 @@ protected:
|
|||||||
void MenuItemLoseFocus( BitmapText* menuitem );
|
void MenuItemLoseFocus( BitmapText* menuitem );
|
||||||
|
|
||||||
|
|
||||||
enum EditMode { MODE_EDITING, MODE_RECORDING, MODE_PLAYING };
|
|
||||||
EditMode m_EditMode;
|
EditMode m_EditMode;
|
||||||
|
|
||||||
Song* m_pSong;
|
Song* m_pSong;
|
||||||
|
|||||||
Reference in New Issue
Block a user