Files
itgmania212121/stepmania/src/Combo.cpp
T

125 lines
3.4 KiB
C++

#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);
}
}