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

350 lines
9.3 KiB
C++

//===========================================================================
// Copyright (C) 2000 Radical Entertainment Ltd. All rights reserved.
//
// Component: CGuiScreenMultiChooseChar
//
// Description: Implementation of the CGuiScreenMultiChooseChar class.
//
// Authors: Tony Chu
//
// Revisions Date Author Revision
// 2002/07/04 TChu Created for SRR2
//
//===========================================================================
//===========================================================================
// Includes
//===========================================================================
#include <presentation/gui/frontend/guiscreenmultichoosechar.h>
#include <presentation/gui/guimenu.h>
#include <presentation/gui/guisystem.h>
#include <memory/srrmemory.h>
#include <raddebug.hpp> // Foundation
//===========================================================================
// Global Data, Local Data, Local Classes
//===========================================================================
/*
static const char* MENU_ITEMS[] =
{
"Character"
};
static const int NUM_MENU_ITEMS = sizeof( MENU_ITEMS ) / sizeof( MENU_ITEMS[ 0 ] );
/*
static const char* MENU_CURSOR = "Cursor";
*/
//===========================================================================
// Public Member Functions
//===========================================================================
//===========================================================================
// CGuiScreenMultiChooseChar::CGuiScreenMultiChooseChar
//===========================================================================
// Description: Constructor.
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
CGuiScreenMultiChooseChar::CGuiScreenMultiChooseChar
(
Scrooby::Screen* pScreen,
CGuiEntity* pParent
)
:
CGuiScreen( pScreen, pParent, GUI_SCREEN_ID_MULTIPLAYER_CHOOSE_CHARACTER )
{
memset( m_pMenu, 0, sizeof( m_pMenu ) );
// Retrieve the Scrooby drawing elements.
//
Scrooby::Page* pPage;
pPage = m_pScroobyScreen->GetPage( "MultiChooseCharacter" );
rAssert( pPage );
// Get character selection for all players
//
char itemName[ 32 ];
for( int i = 0; i < MAX_PLAYERS; i++ )
{
sprintf( itemName, "Character%d", i );
m_pCharacter[ i ] = pPage->GetSprite( itemName );
rAssert( m_pCharacter[ i ] );
}
/*
Scrooby::Text* pText = NULL;
char menuItemName[ 32 ];
// Create and add menu items for all players
//
for( int i = 0; i < MAX_PLAYERS; i++ )
{
m_pMenu[ i] = new(GMA_LEVEL_FE) CGuiMenu( this, NUM_MENU_ITEMS );
rAssert( m_pMenu[ i ] != NULL );
for( int j = 0; j < NUM_MENU_ITEMS; j++ )
{
sprintf( menuItemName, "%s%d", MENU_ITEMS[ j ], i );
pText = pPage->GetText( menuItemName );
rAssert( pText );
m_pMenu[ i ]->AddMenuItem( pText );
}
}
/*
// Set menu cursor
//
Scrooby::Sprite* pSprite = pPage->GetSprite( MENU_CURSOR );
rAssert( pSprite != NULL );
m_pMenu->SetCursor( pSprite );
*/
}
//===========================================================================
// CGuiScreenMultiChooseChar::~CGuiScreenMultiChooseChar
//===========================================================================
// Description: Destructor.
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
CGuiScreenMultiChooseChar::~CGuiScreenMultiChooseChar()
{
for( int i = 0; i < MAX_PLAYERS; i++ )
{
if( m_pMenu[ i ] != NULL )
{
delete m_pMenu[ i ];
m_pMenu[ i ] = NULL;
}
}
}
//===========================================================================
// CGuiScreenMultiChooseChar::HandleMessage
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenMultiChooseChar::HandleMessage
(
eGuiMessage message,
unsigned int param1,
unsigned int param2
)
{
if( m_state == GUI_WINDOW_STATE_RUNNING )
{
switch( message )
{
case GUI_MSG_CONTROLLER_SELECT:
{
// send message to front-end manager to quit front-end and
// start multiplayer head-to-head
//
m_pParent->HandleMessage( GUI_MSG_QUIT_FRONTEND, 2 ); // 2 = two players
this->StartTransitionAnimation( 600, 640 );
break;
}
case GUI_MSG_CONTROLLER_BACK:
{
this->StartTransitionAnimation( 420, 450 );
break;
}
default:
{
break;
}
}
// relay message to menu
if( this->IsControllerMessage( message ) )
{
int controllerId = param1;
/*
// register player 2, if not already done so and if controller ID different from player 1
if( GetGuiSystem()->GetControllerId( PLAYER_2 ) == -1 &&
GetGuiSystem()->GetControllerId( PLAYER_1 ) != controllerId )
{
GetGuiSystem()->RegisterControllerId( PLAYER_2, controllerId );
}
*/
// send controller messages only to corresponding player menu
for( int i = 0; i < MAX_PLAYERS; i++ )
{
if( GetGuiSystem()->GetControllerId( static_cast<ePlayer>( i ) ) == controllerId )
{
/*
rAssert( m_pMenu[ i ] != NULL );
m_pMenu[ i ]->HandleMessage( message, param1, param2 );
*/
this->HandleControllerMessage( i, message );
break;
}
}
}
/*
else
{
// send all other messages to all menus
for( int i = 0; i < MAX_PLAYERS; i++ )
{
rAssert( m_pMenu[ i ] != NULL );
m_pMenu[ i ]->HandleMessage( message, param1, param2 );
}
}
*/
}
// Propogate the message up the hierarchy.
//
CGuiScreen::HandleMessage( message, param1, param2 );
}
//===========================================================================
// CGuiScreenMultiChooseChar::InitIntro
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenMultiChooseChar::InitIntro()
{
// get character selection (for all players)
for( int i = 0; i < MAX_PLAYERS; i++ )
{
}
}
//===========================================================================
// CGuiScreenMultiChooseChar::InitRunning
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenMultiChooseChar::InitRunning()
{
}
//===========================================================================
// CGuiScreenMultiChooseChar::InitOutro
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenMultiChooseChar::InitOutro()
{
// set character selection (for all players)
for( int i = 0; i < MAX_PLAYERS; i++ )
{
}
}
//===========================================================================
// CGuiScreenMultiChooseChar::HandleControllerMessage
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenMultiChooseChar::HandleControllerMessage( int player, eGuiMessage message )
{
switch( message )
{
case GUI_MSG_CONTROLLER_LEFT:
{
// decrement character selection
rAssert( m_pCharacter[ player ] );
int newIndex = m_pCharacter[ player ]->GetIndex() - 1;
if( newIndex < 0 )
{
newIndex = m_pCharacter[ player ]->GetNumOfImages() - 1;
}
m_pCharacter[ player ]->SetIndex( newIndex );
break;
}
case GUI_MSG_CONTROLLER_RIGHT:
{
// increment character selection
rAssert( m_pCharacter[ player ] );
int newIndex = (m_pCharacter[ player ]->GetIndex() + 1) % m_pCharacter[ player ]->GetNumOfImages();
m_pCharacter[ player ]->SetIndex( newIndex );
break;
}
default:
{
break;
}
}
}
//---------------------------------------------------------------------
// Private Functions
//---------------------------------------------------------------------