void CalculateDebugTime(const char * pText) { g_iNowTime = GfxTimeGetMilliseconds(); g_iDebugTime = (g_iNowTime - g_iFirstTime); GfxDbgPrintf("%s take %i milisecond\n", pText, int(g_iDebugTime)); g_iFirstTime = GfxTimeGetMilliseconds(); }
EGame_State TTransition::Update() { switch( m_eState ) { case ETransitionState_DoorClosing: { TDoor * pDoor = nullptr; //get the opposite door to animate if( m_eTransitionType == ERoomResult_EntryDoor ) pDoor = &m_pOtherRoom->GetExitDoor(); else if( m_eTransitionType == ERoomResult_ExitDoor ) pDoor = &m_pOtherRoom->GetEntryDoor(); //check door anim progression int iAnimStep = pDoor->GetAnimStep(); if( iAnimStep == TTextureControler::GetTileCountX( ETextureData_Door ) - 1 )// anim begining { pDoor->SetAnimPlay( true ); } else if( iAnimStep == 0 )//anim ending { pDoor->SetAnimPlay( false ); pDoor->SetAnimReverse( false ); return EGame_State_Playing; } pDoor->PlayAnim(); } break; case ETransitionState_DoorOpening: { TDoor * pDoor = nullptr; //get the door to animate if( m_eTransitionType == ERoomResult_EntryDoor ) pDoor = &m_pCurrentRoom->GetEntryDoor(); else if(m_eTransitionType == ERoomResult_ExitDoor ) pDoor = &m_pCurrentRoom->GetExitDoor(); //check door anim progression int iAnimStep = pDoor->GetAnimStep(); if( iAnimStep == 0 )//anim begining { pDoor->SetAnimPlay( true ); pDoor->SetAnimReverse( false ); } else if( iAnimStep == TTextureControler::GetTileCountX( ETextureData_Door )-1 )// anim ending { pDoor->SetAnimPlay( false ); m_eState = ETransitionState_RoomTransit; int iTime = GfxTimeGetMilliseconds(); m_pTimer->SetStartTime( iTime ); m_pTimer->SetActive( true ); //set opposite door to closing TDoor * OppositepDoor = nullptr; if( m_eTransitionType == ERoomResult_EntryDoor ) OppositepDoor = &m_pOtherRoom->GetExitDoor(); else if( m_eTransitionType == ERoomResult_ExitDoor ) OppositepDoor = &m_pOtherRoom->GetEntryDoor(); OppositepDoor->SetTile( TTextureControler::GetTileCountX( ETextureData_Door ) - 1, OppositepDoor->GetAnimLevel() ); OppositepDoor->SetAnimReverse( true ); } pDoor->PlayAnim(); } break; case ETransitionState_RoomTransit: { //lerp during transition delay if( m_pTimer->Update() == true ) { float fProgression = m_pTimer->GetProgress(); int iDistance = 0; //define the distance of the transition depending of if the transition is vertical or horizontal if (m_tDir.x > 0.f || m_tDir.x < 0.f) iDistance = SCREEN_SIZE_X; else iDistance = SCREEN_SIZE_Y; //set room position float fStep = fProgression * iDistance; m_pOtherRoom->TransitionUpdate( m_tDir * ( fStep - iDistance ) ); m_pCurrentRoom->TransitionUpdate(m_tDir * fStep); } else { //reset room position when transition ends m_pOtherRoom->TransitionUpdate(TGfxVec2(fBACKGROUND_POS_X, fBACKGROUND_POS_Y)); m_pCurrentRoom->TransitionUpdate(TGfxVec2(fBACKGROUND_POS_X, fBACKGROUND_POS_Y)); //reset door sprite TDoor * pDoor = nullptr; if( m_eTransitionType == ERoomResult_EntryDoor ) pDoor = &m_pCurrentRoom->GetEntryDoor(); else if( m_eTransitionType == ERoomResult_ExitDoor ) pDoor = &m_pCurrentRoom->GetExitDoor(); pDoor->SetTile( 0, pDoor->GetAnimLevel() ); m_eState = ETransitionState_DoorClosing; } } break; } return EGame_State_RoomTransition; }