diff --git a/stepmania/src/DancingCharacters.cpp b/stepmania/src/DancingCharacters.cpp index 1b319b5b04..ab135682af 100644 --- a/stepmania/src/DancingCharacters.cpp +++ b/stepmania/src/DancingCharacters.cpp @@ -38,6 +38,7 @@ const float CAMERA_STILL_LOOK_AT_HEIGHT = -14.f; const float MODEL_X_ONE_PLAYER = 0; const float MODEL_X_TWO_PLAYERS[NUM_PLAYERS] = { +8, -8 }; +const float MODEL_ROTATIONY_TWO_PLAYERS[NUM_PLAYERS] = { -90, 90 }; DancingCharacters::DancingCharacters() @@ -56,12 +57,20 @@ DancingCharacters::DancingCharacters() m_Character[p].SetX( MODEL_X_TWO_PLAYERS[p] ); else m_Character[p].SetX( MODEL_X_ONE_PLAYER ); + + switch( GAMESTATE->m_PlayMode ) + { + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + m_Character[p].SetRotationY( MODEL_ROTATIONY_TWO_PLAYERS[p] ); + break; + } + m_Character[p].LoadMilkshapeAscii( pChar->GetModelPath() ); m_Character[p].LoadMilkshapeAsciiBones( "rest", pChar->GetRestAnimationPath() ); m_Character[p].LoadMilkshapeAsciiBones( "warmup", pChar->GetWarmUpAnimationPath() ); m_Character[p].LoadMilkshapeAsciiBones( "dance", pChar->GetDanceAnimationPath() ); m_Character[p].LoadMilkshapeAsciiBones( "howtoplay", pChar->GetHowToPlayAnimationPath() ); - this->AddChild( &m_Character[p] ); } } @@ -108,7 +117,11 @@ void DancingCharacters::Update( float fDelta ) * at a very low music rate. */ fUpdateScale *= GAMESTATE->m_SongOptions.m_fMusicRate; - ActorFrame::Update( fDelta*fUpdateScale ); + for( int p=0; pIsPlayerEnabled(p) ) + m_Character[p].Update( fDelta ); + } } static bool bWasHereWeGo = false; @@ -116,10 +129,12 @@ void DancingCharacters::Update( float fDelta ) if( !bWasHereWeGo && bIsHereWeGo ) { for( int p=0; pIsPlayerEnabled(p) ) + m_Character[p].PlayAnimation( "warmup" ); } bWasHereWeGo = bIsHereWeGo; + static float fLastBeat = GAMESTATE->m_fSongBeat; float fThisBeat = GAMESTATE->m_fSongBeat; if( fLastBeat < GAMESTATE->m_pCurSong->m_fFirstBeat && @@ -191,23 +206,32 @@ void DancingCharacters::DrawPrimitives() m_LookAt, RageVector3(0,1,0) ); - RageColor DL; - DL = RageColor(0.8f,0.8f,0.8f,0.8f); - if( m_bDrawDangerLight ) - DL = RageColor(1,0,0,1); + for( int p=0; pIsPlayerEnabled(p) ) + { + bool bFailed = GAMESTATE->m_CurStageStats.bFailed[p]; + bool bDanger = m_bDrawDangerLight; - DISPLAY->SetLighting( true ); - DISPLAY->SetLightDirectional( - 0, - RageColor(0.4f,0.4f,0.4f,1), - DL, - RageColor(0.8f,0.8f,0.8f,0.8f), - RageVector3(+1, 0, +1) ); + DISPLAY->SetLighting( true ); + RageColor ambient = bFailed ? RageColor(0.2f,0.0f,0.0f,1) : (bDanger ? RageColor(0.4f,0.0f,0.0f,1) : RageColor(0.4f,0.4f,0.4f,1)); + RageColor diffuse = bFailed ? RageColor(0.4f,0.0f,0.0f,1) : (bDanger ? RageColor(0.8f,0.0f,0.0f,1) : RageColor(0.8f,0.8f,0.8f,1)); + RageColor specular = RageColor(0.8f,0.8f,0.8f,1); - ActorFrame::DrawPrimitives(); + DISPLAY->SetLightDirectional( + 0, + ambient, + diffuse, + specular, + RageVector3(+1, 0, +1) ); + + m_Character[p].Draw(); + + DISPLAY->SetLightOff( 0 ); + DISPLAY->SetLighting( false ); + } + } - DISPLAY->SetLightOff( 0 ); - DISPLAY->SetLighting( false ); DISPLAY->ExitPerspective(); }