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

241 lines
6.4 KiB
C++

//===========================================================================
// Copyright (C) 2000 Radical Entertainment Ltd. All rights reserved.
//
// Component: CGuiWindow
//
// Description: Implementation of the CGuiWindow class.
//
// Authors: Darwin Chau
// Tony Chu
//
// Revisions Date Author Revision
// 2000/09/21 DChau Created
// 2002/05/29 TChu Modified for SRR2
//
//===========================================================================
//===========================================================================
// Includes
//===========================================================================
#include <memory/classsizetracker.h>
#include <presentation/gui/guiwindow.h>
#include <presentation/gui/guimanager.h>
#include <raddebug.hpp> // Foundation
//===========================================================================
// Global Data, Local Data, Local Classes
//===========================================================================
//===========================================================================
// Public Member Functions
//===========================================================================
//===========================================================================
// CGuiWindow::CGuiWindow
//===========================================================================
// Description: Constructor.
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
CGuiWindow::CGuiWindow
(
eGuiWindowID id,
CGuiEntity* pParent
)
:
CGuiEntity( pParent ),
m_state( GUI_WINDOW_STATE_UNITIALIZED ),
m_ID( id ),
m_numTransitionsPending( 0 ),
m_firstTimeEntered( true )
{
CLASSTRACKER_CREATE( CGuiWindow );
}
//===========================================================================
// CGuiWindow::~CGuiWindow
//===========================================================================
// Description: Destructor.
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
CGuiWindow::~CGuiWindow()
{
CLASSTRACKER_CREATE( CGuiWindow );
}
//===========================================================================
// CGuiWindow::HandleMessage
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters:
//
// Return: N/A.
//
//===========================================================================
void CGuiWindow::HandleMessage
(
eGuiMessage message,
unsigned int param1,
unsigned int param2
)
{
switch( message )
{
case GUI_MSG_WINDOW_ENTER:
{
/*
// Ignore multiple enter requests.
//
if( GUI_WINDOW_STATE_UNITIALIZED != m_state )
{
break;
}
*/
m_state = GUI_WINDOW_STATE_INTRO;
this->InitIntro();
break;
}
case GUI_MSG_WINDOW_EXIT:
{
/*
if( GUI_WINDOW_STATE_OUTRO == m_state ||
GUI_WINDOW_STATE_UNITIALIZED == m_state )
{
// Ignore multiple exit requests.
//
break;
}
*/
m_state = GUI_WINDOW_STATE_OUTRO;
this->InitOutro();
break;
}
case GUI_MSG_WINDOW_PAUSE:
{
m_prevState = m_state;
m_state = GUI_WINDOW_STATE_PAUSED;
break;
}
case GUI_MSG_WINDOW_RESUME:
{
m_state = m_prevState;
break;
}
case GUI_MSG_UPDATE:
{
if( GUI_WINDOW_STATE_UNITIALIZED == m_state
|| GUI_WINDOW_STATE_PAUSED == m_state )
{
return;
}
switch( m_state )
{
case GUI_WINDOW_STATE_INTRO:
{
// The intro transition is complete if there are no more
// non-persistent sequencers running.
//
if( m_numTransitionsPending == 0 )
{
m_state = GUI_WINDOW_STATE_RUNNING;
this->InitRunning();
}
break;
}
case GUI_WINDOW_STATE_OUTRO:
{
// The outro transition is complete if there are no more
// non-persistent sequencers running.
//
if( m_numTransitionsPending == 0 )
{
// wait one more frame for last transition update to get rendered
//
m_numTransitionsPending--;
CleanUp();
}
else if( m_numTransitionsPending < 0 )
{
m_state = GUI_WINDOW_STATE_UNITIALIZED;
m_firstTimeEntered = false;
m_pParent->HandleMessage( GUI_MSG_WINDOW_FINISHED );
}
break;
}
default:
{
break;
}
}
break;
}
default:
{
break;
}
}
}
//===========================================================================
// CGuiWindow::CleanUp
//===========================================================================
// Description: Called after the last outro transition is done
//
// Constraints: None.
//
// Parameters:
//
// Return: N/A.
//
//===========================================================================
void CGuiWindow::CleanUp()
{
//do nothing
}
//===========================================================================
// CGuiWindow::ForceClearTransitions
//===========================================================================
// Description: Forces all transitions to think they are done
//
// Constraints: None.
//
// Parameters:
//
// Return: N/A.
//
//===========================================================================
void CGuiWindow::ForceClearTransitions()
{
m_numTransitionsPending = 0;
}