diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 07cc20b797..166921e61e 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -139,7 +139,7 @@ float Player::GetWindowSeconds( TimingWindow tw ) return fSecs; } -Player::Player( NoteData &nd, bool bShowNoteField, bool bShowJudgment ) : m_NoteData(nd) +Player::Player( NoteData &nd, bool bShowNoteField ) : m_NoteData(nd) { m_bLoaded = false; @@ -157,20 +157,6 @@ Player::Player( NoteData &nd, bool bShowNoteField, bool bShowJudgment ) : m_Note m_bPaused = false; - m_pJudgment = NULL; - if( bShowJudgment ) - { - m_pJudgment = new Judgment; - this->AddChild( m_pJudgment ); - } - - m_pCombo = NULL; - if( bShowJudgment ) - { - m_pCombo = new Combo; - this->AddChild( m_pCombo ); - } - m_pAttackDisplay = NULL; if( bShowNoteField ) { @@ -191,8 +177,6 @@ Player::Player( NoteData &nd, bool bShowNoteField, bool bShowJudgment ) : m_Note Player::~Player() { - SAFE_DELETE( m_pJudgment ); - SAFE_DELETE( m_pCombo ); SAFE_DELETE( m_pAttackDisplay ); SAFE_DELETE( m_pNoteField ); for( unsigned i = 0; i < m_vHoldJudgment.size(); ++i ) @@ -231,7 +215,6 @@ void Player::Init( DRAW_DISTANCE_AFTER_TARGET_PIXELS.Load( sType, "DrawDistanceAfterTargetsPixels" ); DRAW_DISTANCE_BEFORE_TARGET_PIXELS.Load( sType, "DrawDistanceBeforeTargetsPixels" ); - if( m_pJudgment ) { // // Init judgment positions @@ -379,18 +362,19 @@ void Player::Init( m_soundAttackLaunch.SetProperty( "Pan", fBalance ); m_soundAttackEnding.SetProperty( "Pan", fBalance ); - if( m_pCombo ) { - m_pCombo->SetName( "Combo" ); - m_pCombo->Load( THEME->GetPathG(sType,"combo"), m_pPlayerState, m_pPlayerStageStats ); - ActorUtil::LoadAllCommandsAndOnCommand( m_pCombo, sType ); + m_Combo.SetName( "Combo" ); + m_Combo.Load( THEME->GetPathG(sType,"combo"), m_pPlayerState, m_pPlayerStageStats ); + ActorUtil::LoadAllCommandsAndOnCommand( m_Combo, sType ); + this->AddChild( &m_Combo ); } - if( m_pJudgment ) { + LuaThreadVariable var( "Player", LuaReference::Create(m_pPlayerState->m_PlayerNumber) ); + m_pJudgment.Load( THEME->GetPathG(sType,"judgment") ); m_pJudgment->SetName( "Judgment" ); - m_pJudgment->LoadNormal(); ActorUtil::LoadAllCommandsAndOnCommand( m_pJudgment, sType ); + this->AddChild( m_pJudgment ); } // Load HoldJudgments @@ -436,18 +420,14 @@ void Player::Load() /* The editor reuses Players ... so we really need to make sure everything * is reset and not tweening. Perhaps ActorFrame should recurse to subactors; * then we could just this->StopTweening()? -glenn */ - if( m_pJudgment ) - m_pJudgment->StopTweening(); -// m_pCombo->Reset(); // don't reset combos between songs in a course! + m_pJudgment->PlayCommand("Reset"); +// m_Combo.Reset(); // don't reset combos between songs in a course! if( m_pPlayerStageStats ) { - if( m_pCombo ) - m_pCombo->SetCombo( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo ); // combo can persist between songs and games + m_Combo.SetCombo( m_pPlayerStageStats->m_iCurCombo, m_pPlayerStageStats->m_iCurMissCombo ); // combo can persist between songs and games } if( m_pAttackDisplay ) m_pAttackDisplay->Init( m_pPlayerState ); - if( m_pJudgment ) - m_pJudgment->Reset(); /* Don't re-init this; that'll reload graphics. Add a separate Reset() call * if some ScoreDisplays need it. */ @@ -503,11 +483,8 @@ void Player::Load() const bool bReverse = m_pPlayerState->m_PlayerOptions.GetStage().GetReversePercentForColumn( 0 ) == 1; bool bPlayerUsingBothSides = GAMESTATE->GetCurrentStyle()->m_StyleType==StyleType_OnePlayerTwoSides; - if( m_pCombo ) - { - m_pCombo->SetX( COMBO_X.GetValue(pn, bPlayerUsingBothSides) ); - m_pCombo->SetY( bReverse ? COMBO_Y_REVERSE : COMBO_Y ); - } + m_Combo.SetX( COMBO_X.GetValue(pn, bPlayerUsingBothSides) ); + m_Combo.SetY( bReverse ? COMBO_Y_REVERSE : COMBO_Y ); if( m_pAttackDisplay ) m_pAttackDisplay->SetX( ATTACK_DISPLAY_X.GetValue(pn, bPlayerUsingBothSides) - 40 ); // set this in Update //m_pAttackDisplay->SetY( bReverse ? ATTACK_DISPLAY_Y_REVERSE : ATTACK_DISPLAY_Y ); @@ -622,14 +599,11 @@ void Player::Update( float fDeltaTime ) const bool bReverse = m_pPlayerState->m_PlayerOptions.GetCurrent().GetReversePercentForColumn(0) == 1; float fPercentCentered = m_pPlayerState->m_PlayerOptions.GetCurrent().m_fScrolls[PlayerOptions::SCROLL_CENTERED]; - if( m_pCombo ) - { - m_pCombo->SetY( - bReverse ? - COMBO_Y_REVERSE + fPercentCentered * COMBO_CENTERED_ADDY_REVERSE : - COMBO_Y + fPercentCentered * COMBO_CENTERED_ADDY ); - } - if( m_pJudgment ) + m_Combo.SetY( + bReverse ? + COMBO_Y_REVERSE + fPercentCentered * COMBO_CENTERED_ADDY_REVERSE : + COMBO_Y + fPercentCentered * COMBO_CENTERED_ADDY ); + { const Actor::TweenState &ts1 = m_tsJudgment[bReverse?1:0][0]; const Actor::TweenState &ts2 = m_tsJudgment[bReverse?1:0][1]; @@ -642,8 +616,7 @@ void Player::Update( float fDeltaTime ) float fNoteFieldZoom = 1 - fTinyPercent*0.5f; if( m_pNoteField ) m_pNoteField->SetZoom( fNoteFieldZoom ); - if( m_pJudgment ) - m_pJudgment->SetZoom( m_pJudgment->GetZoom() * fJudgmentZoom ); + m_pJudgment->SetZoom( m_pJudgment->GetZoom() * fJudgmentZoom ); if( m_sprJudgmentFrame.IsLoaded() ) m_sprJudgmentFrame->SetZoom( m_sprJudgmentFrame->GetZoom() * fJudgmentZoom ); @@ -1032,10 +1005,7 @@ void Player::DrawPrimitives() // Draw these below everything else. if( m_pPlayerState->m_PlayerOptions.GetCurrent().m_fBlind == 0 ) - { - if( m_pCombo ) - m_pCombo->Draw(); - } + m_Combo.Draw(); if( m_pAttackDisplay ) m_pAttackDisplay->Draw(); @@ -1102,8 +1072,7 @@ void Player::DrawTapJudgments() if( m_sprJudgmentFrame.IsLoaded() ) m_sprJudgmentFrame->Draw(); - if( m_pJudgment ) - m_pJudgment->Draw(); + m_pJudgment->Draw(); } void Player::DrawHoldJudgments() @@ -2365,9 +2334,9 @@ void Player::HandleTapRowScore( unsigned row ) SendComboMessages( iOldCombo, iOldMissCombo ); - if( m_pPlayerStageStats && m_pCombo ) + if( m_pPlayerStageStats ) { - m_pCombo->SetCombo( iCurCombo, iCurMissCombo ); + m_Combo.SetCombo( iCurCombo, iCurMissCombo ); } #define CROSSED( x ) (iOldCombo=x) @@ -2474,8 +2443,7 @@ void Player::FadeToFail() m_pNoteField->FadeToFail(); // clear miss combo - if( m_pCombo ) - m_pCombo->SetCombo( 0, 0 ); + m_Combo.SetCombo( 0, 0 ); } void Player::CacheAllUsedNoteSkins() @@ -2503,9 +2471,6 @@ bool Player::IsPlayingBeginner() const void Player::SetJudgment( TapNoteScore tns, bool bEarly ) { - if( m_pJudgment ) - m_pJudgment->SetJudgment( tns, bEarly ); - Message msg("Judgment"); msg.SetParam( "Player", m_pPlayerState->m_PlayerNumber ); msg.SetParam( "MultiPlayer", m_pPlayerState->m_mp ); diff --git a/stepmania/src/Player.h b/stepmania/src/Player.h index 8a59380654..5fc1c7d320 100644 --- a/stepmania/src/Player.h +++ b/stepmania/src/Player.h @@ -4,7 +4,6 @@ #define PLAYER_H #include "ActorFrame.h" -#include "Judgment.h" #include "HoldJudgment.h" #include "Combo.h" #include "NoteDataWithScoring.h" @@ -41,7 +40,7 @@ class Player: public ActorFrame { public: // The passed in NoteData isn't touched until Load() is called. - Player( NoteData &nd, bool bShowNoteField = true, bool bShowJudgment = true ); + Player( NoteData &nd, bool bShowNoteField = true ); ~Player(); virtual void Update( float fDeltaTime ); @@ -144,10 +143,10 @@ protected: vector m_vHoldJudgment; - Judgment *m_pJudgment; + AutoActor m_pJudgment; AutoActor m_sprJudgmentFrame; - Combo *m_pCombo; + Combo m_Combo; AttackDisplay *m_pAttackDisplay; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 5305ea61fb..f6d7816bf4 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -179,7 +179,7 @@ void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField ) m_ptextPlayerOptions = NULL; m_pActiveAttackList = NULL; - m_pPlayer = new Player( m_NoteData, bShowNoteField, true ); + m_pPlayer = new Player( m_NoteData, bShowNoteField ); m_pInventory = NULL; m_pDifficultyIcon = NULL; m_pDifficultyMeter = NULL; @@ -196,7 +196,7 @@ void PlayerInfo::LoadDummyP1() m_bIsDummy = true; // don't init any of the scoring objects - m_pPlayer = new Player( m_NoteData, true, false ); + m_pPlayer = new Player( m_NoteData, true ); m_PlayerStateDummy = *GAMESTATE->m_pPlayerState[PLAYER_1]; m_PlayerStateDummy.m_PlayerController = PC_AUTOPLAY; @@ -743,8 +743,11 @@ void ScreenGameplay::Init() FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) { + RString sType = PLAYER_TYPE; + if( pi->m_bIsDummy ) + sType += "Dummy"; pi->m_pPlayer->Init( - PLAYER_TYPE, + sType, pi->GetPlayerState(), pi->GetPlayerStageStats(), pi->m_pLifeMeter, diff --git a/stepmania/src/ScreenGameplayShared.cpp b/stepmania/src/ScreenGameplayShared.cpp index acf6734676..26419efeb3 100644 --- a/stepmania/src/ScreenGameplayShared.cpp +++ b/stepmania/src/ScreenGameplayShared.cpp @@ -26,7 +26,7 @@ void ScreenGameplayShared::FillPlayerInfo( vector &vPlayerInfoOut ) pi.m_pPrimaryScoreDisplay = new ScoreDisplayNormal; pi.m_pPrimaryScoreDisplay->Init( pPlayerState, pPlayerStageStats ); pi.m_pPrimaryScoreKeeper = new ScoreKeeperShared( pPlayerState, pPlayerStageStats ); - pi.m_pPlayer = new Player( mpi.m_NoteData, pn == mpn, true ); + pi.m_pPlayer = new Player( mpi.m_NoteData, pn == mpn ); } }