The-Simpsons-Hit-and-Run/game/code/presentation/transitionplayer.cpp

162 lines
4.1 KiB
C++

//=============================================================================
// Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved.
//
// File: transitionplayer.cpp
//
// Description: Implement TransitionPlayer
//
// History: 02/05/2002 + Created -- NAME
//
//=============================================================================
//========================================
// System Includes
//========================================
// Foundation Tech
#include <raddebug.hpp>
#include <p3d/view.hpp>
//========================================
// Project Includes
//========================================
#include <presentation/transitionplayer.h>
#include <render/rendermanager/rendermanager.h>
#include <render/rendermanager/renderlayer.h>
//******************************************************************************
//
// Global Data, Local Data, Local Classes
//
//******************************************************************************
//******************************************************************************
//
// Public Member Functions
//
//******************************************************************************
//==============================================================================
// TransitionPlayer::TransitionPlayer
//==============================================================================
// Description: Constructor.
//
// Parameters: None.
//
// Return: N/A.
//
//==============================================================================
TransitionPlayer::TransitionPlayer() :
mpLayer1( NULL ),
mpLayer2( NULL ),
miIndex( static_cast< unsigned int >( -1 ) )
{
//init msInfo?
}
//==============================================================================
// TransitionPlayer::~TransitionPlayer
//==============================================================================
// Description: Destructor.
//
// Parameters: None.
//
// Return: N/A.
//
//==============================================================================
TransitionPlayer::~TransitionPlayer()
{
}
void TransitionPlayer::SetTransition( TransitionInfo* info )
{
rAssert( GetState() != ANIM_IDLE );
msInfo = *info;
RenderManager* rm = GetRenderManager();
mpLayer1 = rm->mpLayer( msInfo.layer1 );
mpLayer2 = rm->mpLayer( msInfo.layer2 );
miIndex = 0;
rAssert( msInfo.length != 0 );
}
void TransitionPlayer::Update( unsigned int elapsedTime )
{
if ( GetState() == ANIM_PLAYING )
{
if (miIndex == 0)
{
if ( mpLayer2->IsFrozen() )
{
mpLayer2->Thaw();
}
else if ( mpLayer2->IsDead() )
{
mpLayer2->Resurrect();
}
}
miIndex += elapsedTime;
if ( miIndex < msInfo.length )
{
DoUpdate( elapsedTime );
}
else
{
mpLayer1->Freeze();
Stop();
}
}
}
//******************************************************************************
//
// Private Member Functions
//
//******************************************************************************
void TransitionPlayer::DoUpdate( unsigned int elapsedTime )
{
switch ( msInfo.type )
{
case TRANS_WIPE_RIGHT:
{
float f1 = static_cast<float>( miIndex );
float f2 = static_cast<float>( msInfo.length );
float r = f1 / f2;
tView* view = mpLayer2->pView( 0 );
view->SetWindow( 0.0f, 0.0f, r, 1.0f );
view = mpLayer1->pView( 0 );
view->SetWindow( r, 0.0f, 1.0f, 1.0f );
break;
}
default :
{
//nothing
}
}
}
//=============================================================================
// TransitionPlayer::DoRender
//=============================================================================
// Description: Comment
//
// Parameters: ()
//
// Return: void
//
//=============================================================================
void TransitionPlayer::DoRender()
{
}