#include "stdafx.h" /* ----------------------------------------------------------------------------- Class: Combo Desc: See header. Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Chris Danford ----------------------------------------------------------------------------- */ #include "Combo.h" #include "PrefsManager.h" #include "ScreenManager.h" #include "ScreenGameplay.h" #include "GameState.h" void Combo::Reset() { m_iCurCombo = m_iMaxCombo = m_iCurComboOfPerfects = 0; m_textComboNumber.SetDiffuse( D3DXCOLOR(1,1,1,0) ); // invisible m_sprCombo.SetDiffuse( D3DXCOLOR(1,1,1,0) ); // invisible } Combo::Combo() { Reset(); m_sprCombo.Load( THEME->GetPathTo("Graphics", "gameplay combo label") ); m_sprCombo.TurnShadowOn(); m_sprCombo.StopAnimating(); m_sprCombo.SetX( 40 ); m_sprCombo.SetZoom( 1.0f ); m_textComboNumber.LoadFromTextureAndChars( THEME->GetPathTo("Graphics","gameplay combo numbers 5x2"), "0123456789" ); m_textComboNumber.TurnShadowOn(); m_textComboNumber.SetHorizAlign( Actor::align_right ); m_textComboNumber.SetX( 0 ); this->AddChild( &m_textComboNumber ); this->AddChild( &m_sprCombo ); } void Combo::UpdateScore( TapNoteScore score ) { if( PREFSMAN->m_bAutoPlay && !GAMESTATE->m_bDemonstration ) // cheaters never prosper { m_iCurCombo = 0; m_iCurComboOfPerfects = 0; return; } switch( score ) { case TNS_PERFECT: case TNS_GREAT: // continue combo m_iCurCombo++; if( score == TNS_PERFECT ) m_iCurComboOfPerfects++; else m_iCurComboOfPerfects = 0; if( m_iCurComboOfPerfects>=150 && (m_iCurComboOfPerfects%150)==0 && RandomFloat(0,1) > 0.5 && !GAMESTATE->m_bDemonstration ) SCREENMAN->SendMessageToTopScreen( SM_BeginToasty, 0 ); switch( m_iCurCombo ) { case 100: SCREENMAN->SendMessageToTopScreen( SM_100Combo, 0 ); break; case 200: SCREENMAN->SendMessageToTopScreen( SM_200Combo, 0 ); break; case 300: SCREENMAN->SendMessageToTopScreen( SM_300Combo, 0 ); break; case 400: SCREENMAN->SendMessageToTopScreen( SM_400Combo, 0 ); break; case 500: SCREENMAN->SendMessageToTopScreen( SM_500Combo, 0 ); break; case 600: SCREENMAN->SendMessageToTopScreen( SM_600Combo, 0 ); break; case 700: SCREENMAN->SendMessageToTopScreen( SM_700Combo, 0 ); break; case 800: SCREENMAN->SendMessageToTopScreen( SM_800Combo, 0 ); break; case 900: SCREENMAN->SendMessageToTopScreen( SM_900Combo, 0 ); break; case 1000: SCREENMAN->SendMessageToTopScreen( SM_1000Combo, 0 ); break; } // new max combo m_iMaxCombo = max(m_iMaxCombo, m_iCurCombo); if( m_iCurCombo <= 4 ) { m_textComboNumber.SetDiffuse( D3DXCOLOR(1,1,1,0) ); // invisible m_sprCombo.SetDiffuse( D3DXCOLOR(1,1,1,0) ); // invisible } else { m_textComboNumber.SetDiffuse( D3DXCOLOR(1,1,1,1) ); // visible m_sprCombo.SetDiffuse( D3DXCOLOR(1,1,1,1) ); // visible m_textComboNumber.SetText( ssprintf("%d", m_iCurCombo) ); float fNewZoom = min( 0.5f + m_iCurCombo/800.0f, 1.0f ); m_textComboNumber.SetZoom( fNewZoom ); //this->SetZoom( 1.2f ); //this->BeginTweening( 0.3f ); //this->SetTweenZoom( 1 ); } break; case TNS_GOOD: case TNS_BOO: case TNS_MISS: // end combo if( m_iCurCombo > 50 ) SCREENMAN->SendMessageToTopScreen( SM_ComboStopped, 0 ); m_iCurCombo = 0; m_textComboNumber.SetDiffuse( D3DXCOLOR(1,1,1,0) ); // invisible m_sprCombo.SetDiffuse( D3DXCOLOR(1,1,1,0) ); // invisible break; default: ASSERT(0); } }