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

316 lines
8.4 KiB
C++

//===========================================================================
// Copyright (C) 2000 Radical Entertainment Ltd. All rights reserved.
//
// Component: CGuiScreenPauseOptions
//
// Description: Implementation of the CGuiScreenPauseOptions class.
//
// Authors: Tony Chu
//
// Revisions Date Author Revision
// 2002/07/04 TChu Created for SRR2
//
//===========================================================================
//===========================================================================
// Includes
//===========================================================================
#include <presentation/gui/ingame/guiscreenpauseoptions.h>
#include <presentation/gui/guimenu.h>
#include <cheats/cheatinputsystem.h>
#include <memory/srrmemory.h>
#include <raddebug.hpp> // Foundation
#include <group.h>
#include <screen.h>
#include <page.h>
#include <text.h>
//===========================================================================
// Global Data, Local Data, Local Classes
//===========================================================================
enum ePauseMenuItem
{
#ifdef RAD_WIN32
MENU_ITEM_DISPLAY,
#endif
MENU_ITEM_CONTROLLER,
MENU_ITEM_SOUND,
MENU_ITEM_SETTINGS,
// MENU_ITEM_CAMERA,
NUM_PAUSE_MENU_ITEMS
};
static const char* PAUSE_MENU_ITEMS[] =
{
#ifdef RAD_WIN32
"Display",
#endif
"Controller",
"Sound",
"Settings",
// "Camera",
""
};
//===========================================================================
// Public Member Functions
//===========================================================================
//===========================================================================
// CGuiScreenPauseOptions::CGuiScreenPauseOptions
//===========================================================================
// Description: Constructor.
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
CGuiScreenPauseOptions::CGuiScreenPauseOptions
(
Scrooby::Screen* pScreen,
CGuiEntity* pParent
)
: CGuiScreen( pScreen, pParent, GUI_SCREEN_ID_OPTIONS ),
m_pMenu( NULL )
{
MEMTRACK_PUSH_GROUP( "CGUIScreenPauseOptions" );
// Retrieve the Scrooby drawing elements.
//
Scrooby::Page* pPage;
pPage = m_pScroobyScreen->GetPage( "PauseOptions" );
rAssert( pPage );
// Create a menu.
//
m_pMenu = new(GMA_LEVEL_HUD) CGuiMenu( this, NUM_PAUSE_MENU_ITEMS );
rAssert( m_pMenu != NULL );
// Add menu items
//
Scrooby::Group* menu = pPage->GetGroup( "Menu" );
rAssert( menu != NULL );
char itemName[ 32 ];
for( int i = 0; i < NUM_PAUSE_MENU_ITEMS; i++ )
{
sprintf( itemName, "%s_Value", PAUSE_MENU_ITEMS[ i ] );
Scrooby::Text* pTextValue = pPage->GetText( itemName );
sprintf( itemName, "%s_LArrow", PAUSE_MENU_ITEMS[ i ] );
Scrooby::Sprite* pLArrow = pPage->GetSprite( itemName );
sprintf( itemName, "%s_RArrow", PAUSE_MENU_ITEMS[ i ] );
Scrooby::Sprite* pRArrow = pPage->GetSprite( itemName );
m_pMenu->AddMenuItem( menu->GetText( PAUSE_MENU_ITEMS[ i ] ),
pTextValue,
NULL,
NULL,
pLArrow,
pRArrow );
}
// TC: [TEMP] disable controller screen for now to free up some memory for HUD map
//
#ifndef RAD_WIN32
m_pMenu->SetMenuItemEnabled( MENU_ITEM_CONTROLLER, false, true );
#endif
#ifdef RAD_E3
// disable pause menu settings for E3 build
//
m_pMenu->SetMenuItemEnabled( MENU_ITEM_SETTINGS, false );
#endif
MEMTRACK_POP_GROUP("CGUIScreenPauseOptions");
}
//===========================================================================
// CGuiScreenPauseOptions::~CGuiScreenPauseOptions
//===========================================================================
// Description: Destructor.
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
CGuiScreenPauseOptions::~CGuiScreenPauseOptions()
{
if( m_pMenu != NULL )
{
delete m_pMenu;
m_pMenu = NULL;
}
}
//===========================================================================
// CGuiScreenPauseOptions::HandleMessage
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenPauseOptions::HandleMessage
(
eGuiMessage message,
unsigned int param1,
unsigned int param2
)
{
if( this->IsControllerMessage( message ) &&
GetCheatInputSystem()->IsActivated( param1 ) )
{
// ignore all controller inputs when cheat input system is activated
return;
}
if( m_state == GUI_WINDOW_STATE_RUNNING )
{
switch( message )
{
case GUI_MSG_CONTROLLER_START:
{
if( !m_pMenu->HasSelectionBeenMade() )
{
// resume game
m_pParent->HandleMessage( GUI_MSG_UNPAUSE_INGAME );
}
break;
}
case GUI_MSG_MENU_SELECTION_MADE:
{
if( param1 == MENU_ITEM_CONTROLLER )
{
m_pParent->HandleMessage( GUI_MSG_GOTO_SCREEN, GUI_SCREEN_ID_CONTROLLER );
}
else if( param1 == MENU_ITEM_SOUND )
{
m_pParent->HandleMessage( GUI_MSG_GOTO_SCREEN, GUI_SCREEN_ID_SOUND );
}
else if( param1 == MENU_ITEM_SETTINGS )
{
m_pParent->HandleMessage( GUI_MSG_GOTO_SCREEN, GUI_SCREEN_ID_SETTINGS );
}
#ifdef RAD_WIN32
else if( param1 == MENU_ITEM_DISPLAY )
{
m_pParent->HandleMessage( GUI_MSG_GOTO_SCREEN, GUI_SCREEN_ID_DISPLAY );
}
#endif
else
{
rAssertMsg( false, "Invalid menu selection!" );
}
break;
}
/*
case GUI_MSG_MENU_SELECTION_CHANGED:
{
this->SetButtonVisible( BUTTON_ICON_ACCEPT, (param1 != MENU_ITEM_CAMERA) );
break;
}
*/
default:
{
break;
}
}
// relay message to menu
if( m_pMenu != NULL )
{
m_pMenu->HandleMessage( message, param1, param2 );
}
}
// Propogate the message up the hierarchy.
//
CGuiScreen::HandleMessage( message, param1, param2 );
}
//===========================================================================
// CGuiScreenPauseOptions::InitIntro
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenPauseOptions::InitIntro()
{
// this->SetButtonVisible( BUTTON_ICON_ACCEPT, (m_pMenu->GetSelection() != MENU_ITEM_CAMERA) );
#ifndef RAD_E3
GetCheatInputSystem()->SetEnabled( true );
#endif
}
//===========================================================================
// CGuiScreenPauseOptions::InitRunning
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenPauseOptions::InitRunning()
{
}
//===========================================================================
// CGuiScreenPauseOptions::InitOutro
//===========================================================================
// Description:
//
// Constraints: None.
//
// Parameters: None.
//
// Return: N/A.
//
//===========================================================================
void CGuiScreenPauseOptions::InitOutro()
{
#ifndef RAD_E3
GetCheatInputSystem()->SetEnabled( false );
#endif
}
//---------------------------------------------------------------------
// Private Functions
//---------------------------------------------------------------------