diff --git a/stepmania/src/BeginnerHelper.cpp b/stepmania/src/BeginnerHelper.cpp index 229911f65a..0819b05263 100644 --- a/stepmania/src/BeginnerHelper.cpp +++ b/stepmania/src/BeginnerHelper.cpp @@ -9,6 +9,7 @@ #include "ThemeManager.h" #include "Steps.h" #include "Style.h" +#include "Model.h" // "PLAYER_X" offsets are relative to the pad.. ex: Setting this to 10, and the HELPER to 300, will put the dancer at 310 #define PLAYER_X( px ) THEME->GetMetricF("BeginnerHelper",ssprintf("Player%d_X",px+1)) @@ -59,8 +60,11 @@ BeginnerHelper::BeginnerHelper() m_bShowBackground = true; m_bInitialized = false; m_iLastRowChecked = m_iLastRowFlashed = 0; - for(int pn=0; pnLoadMilkshapeAscii(GetAnimPath(ANIM_DANCE_PAD)); break; + case 2: m_pDancePad->LoadMilkshapeAscii(GetAnimPath(ANIM_DANCE_PADS)); break; } - m_mDancePad.SetHorizAlign( align_left ); - m_mDancePad.SetRotationX( DANCEPAD_ANGLE ); - m_mDancePad.SetX(HELPER_X); - m_mDancePad.SetY(HELPER_Y); - m_mDancePad.SetZoom(23); // Pad should always be 3 units bigger in zoom than the dancer. + m_pDancePad->SetHorizAlign( align_left ); + m_pDancePad->SetRotationX( DANCEPAD_ANGLE ); + m_pDancePad->SetX(HELPER_X); + m_pDancePad->SetY(HELPER_Y); + m_pDancePad->SetZoom(23); // Pad should always be 3 units bigger in zoom than the dancer. for( int pl=0; plGetModelPath() ); + m_pDancer[pl]->SetHorizAlign( align_left ); + m_pDancer[pl]->LoadMilkshapeAscii( Character->GetModelPath() ); // Load needed animations - m_mDancer[pl].LoadMilkshapeAsciiBones("Step-LEFT", GetAnimPath(ANIM_LEFT)); - m_mDancer[pl].LoadMilkshapeAsciiBones("Step-DOWN", GetAnimPath(ANIM_DOWN)); - m_mDancer[pl].LoadMilkshapeAsciiBones("Step-UP", GetAnimPath(ANIM_UP)); - m_mDancer[pl].LoadMilkshapeAsciiBones("Step-RIGHT", GetAnimPath(ANIM_RIGHT)); - m_mDancer[pl].LoadMilkshapeAsciiBones("Step-JUMPLR", GetAnimPath(ANIM_JUMPLR)); - m_mDancer[pl].LoadMilkshapeAsciiBones("rest", Character->GetRestAnimationPath()); - m_mDancer[pl].SetDefaultAnimation("rest"); - m_mDancer[pl].PlayAnimation("rest"); - m_mDancer[pl].SetRotationX(PLAYER_ANGLE); - m_mDancer[pl].SetX(HELPER_X+PLAYER_X(pl)); - m_mDancer[pl].SetY(HELPER_Y+10); - m_mDancer[pl].SetZoom(20); - m_mDancer[pl].SetCullMode(CULL_NONE); // many of the DDR PC character models have the vertex order flipped - m_mDancer[pl].m_bRevertToDefaultAnimation = true; // Stay bouncing after a step has finished animating. + m_pDancer[pl]->LoadMilkshapeAsciiBones("Step-LEFT", GetAnimPath(ANIM_LEFT)); + m_pDancer[pl]->LoadMilkshapeAsciiBones("Step-DOWN", GetAnimPath(ANIM_DOWN)); + m_pDancer[pl]->LoadMilkshapeAsciiBones("Step-UP", GetAnimPath(ANIM_UP)); + m_pDancer[pl]->LoadMilkshapeAsciiBones("Step-RIGHT", GetAnimPath(ANIM_RIGHT)); + m_pDancer[pl]->LoadMilkshapeAsciiBones("Step-JUMPLR", GetAnimPath(ANIM_JUMPLR)); + m_pDancer[pl]->LoadMilkshapeAsciiBones("rest", Character->GetRestAnimationPath()); + m_pDancer[pl]->SetDefaultAnimation("rest"); + m_pDancer[pl]->PlayAnimation("rest"); + m_pDancer[pl]->SetRotationX(PLAYER_ANGLE); + m_pDancer[pl]->SetX(HELPER_X+PLAYER_X(pl)); + m_pDancer[pl]->SetY(HELPER_Y+10); + m_pDancer[pl]->SetZoom(20); + m_pDancer[pl]->SetCullMode(CULL_NONE); // many of the DDR PC character models have the vertex order flipped + m_pDancer[pl]->m_bRevertToDefaultAnimation = true; // Stay bouncing after a step has finished animating-> } m_bInitialized = true; @@ -219,7 +223,7 @@ void BeginnerHelper::DrawPrimitives() bool DrawCelShaded = PREFSMAN->m_bCelShadeModels; if(DrawCelShaded) - m_mDancePad.DrawCelShaded(); + m_pDancePad->DrawCelShaded(); else { DISPLAY->SetLighting( true ); @@ -230,7 +234,7 @@ void BeginnerHelper::DrawPrimitives() RageColor(0,0,0,1), RageVector3(0, 0, 1) ); - m_mDancePad.Draw(); + m_pDancePad->Draw(); DISPLAY->ClearZBuffer(); // So character doesn't step "into" the dance pad. DISPLAY->SetLightOff(0); DISPLAY->SetLighting(false); @@ -244,7 +248,7 @@ void BeginnerHelper::DrawPrimitives() if(DrawCelShaded) FOREACH_PlayerNumber(pn) // Draw each dancer if(GAMESTATE->IsHumanPlayer(pn)) - m_mDancer[pn].DrawCelShaded(); + m_pDancer[pn]->DrawCelShaded(); else { DISPLAY->SetLighting( true ); @@ -257,7 +261,7 @@ void BeginnerHelper::DrawPrimitives() FOREACH_PlayerNumber(pn) // Draw each dancer if(GAMESTATE->IsHumanPlayer(pn)) - m_mDancer[pn].Draw(); + m_pDancer[pn]->Draw(); DISPLAY->SetLightOff(0); DISPLAY->SetLighting(false); @@ -266,42 +270,42 @@ void BeginnerHelper::DrawPrimitives() void BeginnerHelper::Step( int pn, int CSTEP ) { - m_mDancer[pn].StopTweening(); - m_mDancer[pn].SetRotationY(0); // Make sure we're not still inside of a JUMPUD tween. + m_pDancer[pn]->StopTweening(); + m_pDancer[pn]->SetRotationY(0); // Make sure we're not still inside of a JUMPUD tween. switch(CSTEP) { case ST_LEFT: ShowStepCircle(pn, ST_LEFT); - m_mDancer[pn].PlayAnimation("Step-LEFT", 1.5f); + m_pDancer[pn]->PlayAnimation("Step-LEFT", 1.5f); break; case ST_RIGHT: ShowStepCircle(pn, ST_RIGHT); - m_mDancer[pn].PlayAnimation("Step-RIGHT", 1.5f); + m_pDancer[pn]->PlayAnimation("Step-RIGHT", 1.5f); break; case ST_UP: ShowStepCircle(pn, ST_UP); - m_mDancer[pn].PlayAnimation("Step-UP", 1.5f); + m_pDancer[pn]->PlayAnimation("Step-UP", 1.5f); break; case ST_DOWN: ShowStepCircle(pn, ST_DOWN); - m_mDancer[pn].PlayAnimation("Step-DOWN", 1.5f); + m_pDancer[pn]->PlayAnimation("Step-DOWN", 1.5f); break; case ST_JUMPLR: ShowStepCircle(pn, ST_LEFT); ShowStepCircle(pn, ST_RIGHT); - m_mDancer[pn].PlayAnimation("Step-JUMPLR", 1.5f); + m_pDancer[pn]->PlayAnimation("Step-JUMPLR", 1.5f); break; case ST_JUMPUD: ShowStepCircle(pn, ST_UP); ShowStepCircle(pn, ST_DOWN); - m_mDancer[pn].StopTweening(); - m_mDancer[pn].PlayAnimation("Step-JUMPLR", 1.5f); - m_mDancer[pn].BeginTweening((GAMESTATE->m_fCurBPS /8), TWEEN_LINEAR); - m_mDancer[pn].SetRotationY(90); - m_mDancer[pn].BeginTweening((1/(GAMESTATE->m_fCurBPS * 2))); //sleep between jump-frames - m_mDancer[pn].BeginTweening(GAMESTATE->m_fCurBPS /6, TWEEN_LINEAR); - m_mDancer[pn].SetRotationY(0); + m_pDancer[pn]->StopTweening(); + m_pDancer[pn]->PlayAnimation("Step-JUMPLR", 1.5f); + m_pDancer[pn]->BeginTweening((GAMESTATE->m_fCurBPS /8), TWEEN_LINEAR); + m_pDancer[pn]->SetRotationY(90); + m_pDancer[pn]->BeginTweening((1/(GAMESTATE->m_fCurBPS * 2))); //sleep between jump-frames + m_pDancer[pn]->BeginTweening(GAMESTATE->m_fCurBPS /6, TWEEN_LINEAR); + m_pDancer[pn]->SetRotationY(0); break; } @@ -349,7 +353,7 @@ void BeginnerHelper::Update( float fDeltaTime ) // Update animations ActorFrame::Update(fDeltaTime); - m_mDancePad.Update(fDeltaTime); + m_pDancePad->Update(fDeltaTime); m_sFlash.Update(fDeltaTime); float beat = (fDeltaTime*GAMESTATE->m_fCurBPS); @@ -360,7 +364,7 @@ void BeginnerHelper::Update( float fDeltaTime ) continue; // Update dancer's animation and StepCircles - m_mDancer[pu].Update( beat ); + m_pDancer[pu]->Update( beat ); for(int scu=0; scuGetMetricF("DancingCharacters",ssprintf("2DCharacterXP%d",choice+1)) #define DC_Y( choice ) THEME->GetMetricF("DancingCharacters",ssprintf("2DCharacterYP%d",choice+1)) @@ -48,6 +49,7 @@ DancingCharacters::DancingCharacters() FOREACH_PlayerNumber( p ) { + m_pCharacter[p] = new Model; m_2DIdleTimer[p].SetZero(); m_i2DAnimState[p] = AS2D_IDLE; // start on idle state m_bHasIdleAnim[p] = m_bHas2DElements[p] = false; @@ -129,26 +131,32 @@ DancingCharacters::DancingCharacters() continue; if( GAMESTATE->GetNumPlayersEnabled()==2 ) - m_Character[p].SetX( MODEL_X_TWO_PLAYERS[p] ); + m_pCharacter[p]->SetX( MODEL_X_TWO_PLAYERS[p] ); else - m_Character[p].SetX( MODEL_X_ONE_PLAYER ); + m_pCharacter[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] ); + m_pCharacter[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].SetCullMode( CULL_NONE ); // many of the DDR PC character models have the vertex order flipped + m_pCharacter[p]->LoadMilkshapeAscii( pChar->GetModelPath() ); + m_pCharacter[p]->LoadMilkshapeAsciiBones( "rest", pChar->GetRestAnimationPath() ); + m_pCharacter[p]->LoadMilkshapeAsciiBones( "warmup", pChar->GetWarmUpAnimationPath() ); + m_pCharacter[p]->LoadMilkshapeAsciiBones( "dance", pChar->GetDanceAnimationPath() ); + m_pCharacter[p]->SetCullMode( CULL_NONE ); // many of the DDR PC character models have the vertex order flipped } } +DancingCharacters::~DancingCharacters() +{ + FOREACH_PlayerNumber( p ) + delete m_pCharacter[p]; +} + void DancingCharacters::LoadNextSong() { // initial camera sweep is still @@ -166,7 +174,7 @@ void DancingCharacters::LoadNextSong() FOREACH_PlayerNumber( p ) if( GAMESTATE->IsPlayerEnabled(p) ) - m_Character[p].PlayAnimation( "rest" ); + m_pCharacter[p]->PlayAnimation( "rest" ); } int Neg1OrPos1() { return rand()%2 ? -1 : +1; } @@ -193,7 +201,7 @@ void DancingCharacters::Update( float fDelta ) FOREACH_PlayerNumber( p ) { if( GAMESTATE->IsPlayerEnabled(p) ) - m_Character[p].Update( fDelta*fUpdateScale ); + m_pCharacter[p]->Update( fDelta*fUpdateScale ); } } @@ -203,7 +211,7 @@ void DancingCharacters::Update( float fDelta ) { FOREACH_PlayerNumber( p ) if( GAMESTATE->IsPlayerEnabled(p) ) - m_Character[p].PlayAnimation( "warmup" ); + m_pCharacter[p]->PlayAnimation( "warmup" ); } bWasHereWeGo = bIsHereWeGo; @@ -214,7 +222,7 @@ void DancingCharacters::Update( float fDelta ) fThisBeat >= GAMESTATE->m_pCurSong->m_fFirstBeat ) { FOREACH_PlayerNumber( p ) - m_Character[p].PlayAnimation( "dance" ); + m_pCharacter[p]->PlayAnimation( "dance" ); } fLastBeat = fThisBeat; @@ -330,7 +338,7 @@ void DancingCharacters::DrawPrimitives() { if( PREFSMAN->m_bCelShadeModels ) { - m_Character[p].DrawCelShaded(); + m_pCharacter[p]->DrawCelShaded(); continue; } @@ -348,7 +356,7 @@ void DancingCharacters::DrawPrimitives() specular, RageVector3(+1, 0, +1) ); - m_Character[p].Draw(); + m_pCharacter[p]->Draw(); DISPLAY->SetLightOff( 0 ); DISPLAY->SetLighting( false ); diff --git a/stepmania/src/DancingCharacters.h b/stepmania/src/DancingCharacters.h index c174261eb7..dec8a57686 100644 --- a/stepmania/src/DancingCharacters.h +++ b/stepmania/src/DancingCharacters.h @@ -1,12 +1,12 @@ #ifndef DancingCharacters_H #define DancingCharacters_H -#include "Model.h" #include "ActorFrame.h" #include "PlayerNumber.h" #include "BGAnimation.h" #include "ThemeManager.h" #include "RageTimer.h" +class Model; enum ANIM_STATES_2D { @@ -26,6 +26,7 @@ class DancingCharacters : public ActorFrame { public: DancingCharacters(); + virtual ~DancingCharacters(); virtual void LoadNextSong(); @@ -35,7 +36,7 @@ public: void Change2DAnimState(int iPlayerNum, int iState); protected: - Model m_Character[NUM_PLAYERS]; + Model *m_pCharacter[NUM_PLAYERS]; float m_CameraDistance; float m_CameraPanYStart;