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();

}
Пример #2
0
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;
}