big checkin - new noteskin format and XY positioning. I probably broke a lot of things.

This commit is contained in:
Chris Danford
2002-08-13 23:26:46 +00:00
parent 9346564080
commit 7c1bfb3a0d
133 changed files with 4813 additions and 2626 deletions
+158 -55
View File
@@ -31,6 +31,15 @@ const ScreenMessage SM_StartFadingOut = ScreenMessage(SM_User + 1);
const ScreenMessage SM_DoneFadingIn = ScreenMessage(SM_User + 2);
const ScreenMessage SM_GoToNextState = ScreenMessage(SM_User + 3);
enum StageType
{
TYPE_NORMAL,
TYPE_FINAL,
TYPE_EXTRA1,
TYPE_EXTRA2,
TYPE_ONI,
TYPE_ENDLESS
};
ScreenStage::ScreenStage()
{
@@ -38,79 +47,174 @@ ScreenStage::ScreenStage()
m_pNextScreen = NULL;
m_textStage.Load( THEME->GetPathTo(FONT_STAGE) );
m_textStage.TurnShadowOff();
if( GAMESTATE->m_PlayMode == PLAY_MODE_ONI )
for( int i=0; i<4; i++ )
{
m_textStage.SetText( "Nonstop Challenge" );
m_textStage.SetDiffuseColor( D3DXCOLOR(0.8f,0.8f,1,1) ); // light blue
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_ONI) );
m_sprNumbers[i].Load( THEME->GetPathTo("Graphics","stage numbers") );
m_sprNumbers[i].StopAnimating();
}
else if( GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS )
{
m_textStage.SetText( "Endless Challenge" );
m_textStage.SetDiffuseColor( D3DXCOLOR(0.8f,0.8f,1,1) ); // light blue
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_ENDLESS) );
}
else if( GAMESTATE->IsExtraStage() )
{
m_textStage.SetText( "Extra Stage" );
m_textStage.SetDiffuseColor( D3DXCOLOR(1,0.1f,0.1f,1) ); // red
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_EXTRA) );
}
else if( GAMESTATE->IsExtraStage2() )
{
m_textStage.SetText( "Another Extra Stage" ); // red
m_textStage.SetDiffuseColor( D3DXCOLOR(1,0.1f,0.1f,1) );
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_ANOTHER_EXTRA) );
}
else if( GAMESTATE->IsFinalStage() )
{
m_textStage.SetText( "Final Stage" );
m_textStage.SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_FINAL) );
}
else
{
m_textStage.SetText( GAMESTATE->GetStageText() + " Stage" );
m_textStage.SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
m_sprStage.Load( THEME->GetPathTo("Graphics","stage stage") ); // we may load a different graphic into here later
const float fStageHeight = m_sprStage.GetUnzoomedHeight();
const int iStageNo = GAMESTATE->GetStageIndex()+1;
switch( iStageNo )
const float fStageOffScreenY = CENTER_Y+fStageHeight;
m_quadMask.SetDiffuseColor( D3DXCOLOR(0,0,0,0) );
m_quadMask.StretchTo( CRect(SCREEN_LEFT, roundf(fStageOffScreenY-fStageHeight/2), SCREEN_RIGHT, roundf(fStageOffScreenY+fStageHeight/2)) );
m_quadMask.SetZ( -1 ); // important: fill Z buffer with values that will cause subsequent draws to fail the Z test
m_frameStage.SetXY( CENTER_X, fStageOffScreenY );
m_frameStage.BeginTweening(0.8f, Actor::TWEEN_BIAS_BEGIN );
m_frameStage.SetTweenY( CENTER_Y );
StageType stage_type;
if( GAMESTATE->m_PlayMode == PLAY_MODE_ONI ) stage_type = TYPE_ONI;
else if( GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS ) stage_type = TYPE_ENDLESS;
else if( GAMESTATE->IsExtraStage() ) stage_type = TYPE_EXTRA1;
else if( GAMESTATE->IsExtraStage2() ) stage_type = TYPE_EXTRA2;
else if( GAMESTATE->IsFinalStage() ) stage_type = TYPE_FINAL;
else stage_type = TYPE_NORMAL;
switch( stage_type )
{
case TYPE_NORMAL:
{
case 1: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_1) ); break;
case 2: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_2) ); break;
case 3: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_3) ); break;
case 4: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_4) ); break;
case 5: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_5) ); break;
default: ; break; // play nothing
const int iStageNo = GAMESTATE->GetStageIndex()+1;
switch( iStageNo )
{
case 1: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_1) ); break;
case 2: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_2) ); break;
case 3: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_3) ); break;
case 4: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_4) ); break;
case 5: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_5) ); break;
default: ; break; // play nothing
}
}
break;
case TYPE_FINAL:
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_FINAL) );
break;
case TYPE_EXTRA1:
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_EXTRA1) );
break;
case TYPE_EXTRA2:
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_EXTRA2) );
break;
case TYPE_ONI:
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_ONI) );
break;
case TYPE_ENDLESS:
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_STAGE_ENDLESS) );
break;
default:
ASSERT(0);
}
switch( stage_type )
{
case TYPE_NORMAL:
{
const int iStageNo = GAMESTATE->GetStageIndex()+1;
CString sStageNo = ssprintf("%d", iStageNo);
m_textStage.SetXY( CENTER_X, CENTER_Y );
m_textStage.SetZoomX( 2 );
m_textStage.SetZoomY( 0 );
m_textStage.SetDiffuseColor( D3DXCOLOR(0,0,0,1) );
m_textStage.BeginTweening( 0.5f );
m_textStage.SetTweenZoom( 2 );
m_textStage.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
this->AddSubActor( &m_textStage );
// Set frame of numbers
int i;
for( i=0; i<sStageNo.GetLength(); i++ )
m_sprNumbers[i].SetState( atoi(CString(sStageNo[i])) );
this->SendScreenMessage( SM_DoneFadingIn, 0.6f );
// Set frame of suffix
int iIndexOfSuffix = sStageNo.GetLength();
if( ( (iStageNo/10) % 10 ) == 1 ) // in the teens (e.g. 19, 213)
m_sprNumbers[iIndexOfSuffix].SetState( 13 ); // th
else // not in the teens
{
const int iLastDigit = iStageNo%10;
switch( iLastDigit )
{
case 1: m_sprNumbers[iIndexOfSuffix].SetState( 10 ); break; // st
case 2: m_sprNumbers[iIndexOfSuffix].SetState( 11 ); break; // nd
case 3: m_sprNumbers[iIndexOfSuffix].SetState( 12 ); break; // rd
default: m_sprNumbers[iIndexOfSuffix].SetState( 13 ); break; // th
}
}
// Set X positions
const float fFrameWidth = m_sprNumbers[0].GetUnzoomedWidth();
const int iNumChars = iIndexOfSuffix+1;
const float fTotalCharsWidth = m_sprNumbers[0].GetUnzoomedWidth();
const float fSpaceBetweenNumsAndStage = fFrameWidth;
const float fStageWidth = m_sprStage.GetUnzoomedWidth();
const float fTotalWidth = fTotalCharsWidth + fSpaceBetweenNumsAndStage + fStageWidth;
const float fCharsCenterX = -fTotalWidth/2.0f + fTotalCharsWidth/2.0f;
const float fStageCenterX = +fTotalWidth/2.0f - fStageWidth/2.0f;
for( i=0; i<iNumChars; i++ )
{
float fOffsetX = SCALE(i, 0, iNumChars-1, -(iNumChars-1)/2.0f*fFrameWidth, (iNumChars-1)/2.0f*fFrameWidth);
m_sprNumbers[i].SetX( fCharsCenterX + fOffsetX );
}
m_sprStage.SetX( fStageCenterX );
for( i=0; i<iNumChars; i++ )
m_frameStage.AddSubActor( &m_sprNumbers[i] );
m_frameStage.AddSubActor( &m_sprStage );
}
break;
case TYPE_FINAL:
m_sprStage.Load( THEME->GetPathTo("Graphics","stage final") );
m_frameStage.AddSubActor( &m_sprStage );
break;
case TYPE_EXTRA1:
m_sprStage.Load( THEME->GetPathTo("Graphics","stage extra1") );
m_frameStage.AddSubActor( &m_sprStage );
break;
case TYPE_EXTRA2:
m_sprStage.Load( THEME->GetPathTo("Graphics","stage extra2") );
m_frameStage.AddSubActor( &m_sprStage );
break;
case TYPE_ONI:
m_sprStage.Load( THEME->GetPathTo("Graphics","stage oni") );
m_frameStage.AddSubActor( &m_sprStage );
break;
case TYPE_ENDLESS:
m_sprStage.Load( THEME->GetPathTo("Graphics","stage endless") );
m_frameStage.AddSubActor( &m_sprStage );
break;
default:
ASSERT(0);
}
m_Fade.SetOpened();
this->SendScreenMessage( SM_DoneFadingIn, 1.0f );
this->SendScreenMessage( SM_StartFadingOut, 1.2f );
}
void ScreenStage::Update( float fDeltaTime )
{
Screen::Update( fDeltaTime );
m_quadMask.Update( fDeltaTime );
m_frameStage.Update( fDeltaTime );
m_Fade.Update( fDeltaTime );
}
void ScreenStage::DrawPrimitives()
{
DISPLAY->EnableZBuffer();
m_quadMask.Draw();
m_frameStage.Draw();
DISPLAY->DisableZBuffer();
m_Fade.Draw();
}
void ScreenStage::HandleScreenMessage( const ScreenMessage SM )
{
switch( SM )
{
case SM_StartFadingOut:
m_textStage.BeginTweening( 0.8f );
m_textStage.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,0) );
this->SendScreenMessage( SM_GoToNextState, 0.8f );
m_Fade.CloseWipingRight( SM_GoToNextState );
break;
case SM_DoneFadingIn:
m_pNextScreen = new ScreenGameplay;
@@ -120,4 +224,3 @@ void ScreenStage::HandleScreenMessage( const ScreenMessage SM )
break;
}
}