The-Simpsons-Hit-and-Run/game/code/presentation/gui/guisystem.h

321 lines
9.0 KiB
C++

//===========================================================================
// Copyright (C) 2000 Radical Entertainment Ltd. All rights reserved.
//
// Component: CGuiSystem
//
// Description: Interface for the CGuiSystem class.
//
// Authors: Darwin Chau
// Tony Chu
//
// Revisions Date Author Revision
// 2000/09/20 DChau Created
// 2002/05/29 TChu Modified for SRR2
//
//===========================================================================
#ifndef GUISYSTEM_H
#define GUISYSTEM_H
//===========================================================================
// Nested Includes
//===========================================================================
#include <presentation/gui/guientity.h>
#include <data/gamedata.h>
#include <app.h>
//===========================================================================
// External Constants
//===========================================================================
extern unsigned int g_scroobySimulationTime;
static const char* SCROOBY_INVENTORY_LANGUAGE = "ScroobyLanguage";
static const char* SCROOBY_INVENTORY_BOOTUP = "ScroobyBootup";
static const char* SCROOBY_INVENTORY_BACKEND = "ScroobyBackend";
static const char* SCROOBY_INVENTORY_FRONTEND = "ScroobyFrontend";
static const char* SCROOBY_INVENTORY_MINIGAME = "ScroobyMiniGame";
static const char* SCROOBY_INVENTORY_INGAME = "ScroobyIngame";
static const char* SCROOBY_INVENTORY_INGAME_LEVEL = "ScroobyIngameLevel";
//===========================================================================
// Forward References
//===========================================================================
class CGuiTextBible;
class CGuiManager;
class CGuiManagerLanguage;
class CGuiManagerBootUp;
class CGuiManagerBackEnd;
class CGuiManagerFrontEnd;
class CGuiManagerMiniGame;
class CGuiManagerInGame;
class CGuiUserInputHandler;
class CGuiScreenMultiHud;
// Implement this interface to be called back when the
// async loading of the GUI system is complete.
//
struct IGuiLoadingCallback
{
enum eGameMode
{
GUI_LOADED_FRONT_END,
GUI_LOADED_IN_GAME,
GUI_LOADED_MINI_GAME,
NUM_GAME_MODES
};
virtual void OnGuiLoadComplete( eGameMode mode ) = 0;
};
//===========================================================================
// Interface Definitions
//===========================================================================
class CGuiSystem : public CGuiEntity,
public Scrooby::LoadProjectCallback,
public GameDataHandler
{
public:
// Static Methods for accessing this singleton.
static CGuiSystem* CreateInstance();
static void DestroyInstance();
static CGuiSystem* GetInstance();
void Init();
void Update( unsigned int elapsedTime );
virtual void HandleMessage( eGuiMessage message,
unsigned int param1 = 0,
unsigned int param2 = 0 );
// Implements Scrooby::LoadProjectCallback interface.
//
virtual void OnProjectLoadComplete( Scrooby::Project* pProject );
void GotoScreen( unsigned int screenID,
unsigned int param1 = 0,
unsigned int param2 = 0,
unsigned int windowOptions = 0 );
Scrooby::Project* GetCurrentScroobyProject() const { return m_pProject; }
void SetCurrentScroobyProject( Scrooby::Project* pProject ) { m_pProject = pProject; }
Scrooby::Project* GetScroobyLevelProject() const { return m_pLevelProject; }
void SwitchToCurrentProject();
void SwitchToLevelProject();
void SwitchToBackendProject();
// Registration of Client Loading Callback Routine
//
void RegisterLoadingCallback( IGuiLoadingCallback* pCallback );
void UnregisterLoadingCallback();
// Accessors to GUI System Managers
//
CGuiManager* GetCurrentManager() const;
inline CGuiManagerBootUp* GetBootupManager() const { return m_pManagerBootUp; }
inline CGuiManagerBackEnd* GetBackendManager() const { return m_pManagerBackEnd; }
inline CGuiManagerFrontEnd* GetFrontEndManager() const { return m_pManagerFrontEnd; }
inline CGuiManagerInGame* GetInGameManager() const { return m_pManagerInGame; }
inline CGuiManagerMiniGame* GetMiniGameManager() const { return m_pManagerMiniGame; }
// Registration of GUI User Input Handlers
//
void RegisterUserInputHandlers( int controllerIDs = ~0 );
void UnregisterUserInputHandlers( int controllerIDs = ~0 );
// Accessor to GUI User Input Handlers
//
CGuiUserInputHandler* GetUserInputHandler( int controllerId ) const;
int GetNumUserInputHandlers() const { return m_numUserInputHandlers; }
// Splash Screen
//
inline void SetSplashScreenFinished() { m_isSplashScreenFinished = true; }
inline bool IsSplashScreenFinished() const { return m_isSplashScreenFinished; }
// Credits Screen
//
void ShowCreditsUponReturnToFE( bool enable );
bool IsShowCreditsUponReturnToFE() const;
// Enabling/Disabling HUD Radar
//
void SetRadarEnabled( bool isEnabled );
bool IsRadarEnabled() const;
// Implements GameDataHandler
//
virtual void LoadData( const GameDataByte* dataBuffer, unsigned int numBytes );
virtual void SaveData( GameDataByte* dataBuffer, unsigned int numBytes );
virtual void ResetData();
int GetPrimaryController() const;
void SetPrimaryController(int id);
enum eGuiSystemState
{
GUI_UNINITIALIZED,
GUI_IDLE,
LANGUAGE_LOADING,
LANGUAGE_ACTIVE,
BOOTUP_LOADING,
BOOTUP_ACTIVE,
BACKEND_LOADING,
FRONTEND_LOADING_DURING_BOOTUP,
FRONTEND_LOADING,
FRONTEND_ACTIVE,
MINIGAME_LOADING,
MINIGAME_ACTIVE,
INGAME_LOADING,
INGAME_ACTIVE,
DEMO_ACTIVE,
NUM_GUI_STATES
};
eGuiSystemState GetCurrentState() const { return m_state; }
private:
//---------------------------------------------------------------------
// Private Functions
//---------------------------------------------------------------------
// No public access; use singleton interface.
//
CGuiSystem();
virtual ~CGuiSystem();
// No copying or assignment. Declare but don't define.
//
CGuiSystem( const CGuiSystem& );
CGuiSystem& operator= ( const CGuiSystem& );
void OnInitBootUp();
void OnReleaseBootUp();
void OnInitFrontEnd();
void OnReleaseFrontEnd();
void OnInitMiniGame();
void OnReleaseMiniGame();
void OnInitInGame();
void OnReleaseInGame();
void FormatTutorialTextWithLineBreaks();
#ifdef DEBUGWATCH
void RegisterWatcherStuff();
#endif
//---------------------------------------------------------------------
// Private Data
//---------------------------------------------------------------------
// Pointer to the one and only instance of this singleton.
static CGuiSystem* spInstance;
eGuiSystemState m_state;
CGuiTextBible* m_pTextBible;
CGuiManagerLanguage* m_pManagerLanguage;
CGuiManagerBootUp* m_pManagerBootUp;
CGuiManagerBackEnd* m_pManagerBackEnd;
CGuiManagerFrontEnd* m_pManagerFrontEnd;
CGuiManagerMiniGame* m_pManagerMiniGame;
CGuiManagerInGame* m_pManagerInGame;
CGuiUserInputHandler** m_pUserInputHandlers;
int m_numUserInputHandlers;
int m_registeredUserInputHandlers;
int m_primaryController;
Scrooby::App* m_pApp;
Scrooby::Project* m_pProject;
Scrooby::Project* m_pLevelProject;
Scrooby::Project* m_pBackendProject;
IGuiLoadingCallback* m_pLoadingCallback;
bool m_isSplashScreenFinished : 1;
bool m_isRadarEnabled : 1;
bool m_isShowCreditsUponReturnToFE : 1;
};
//===========================================================================
// Inline Methods
//===========================================================================
// A little syntactic sugar for getting at this singleton.
//
inline CGuiSystem* GetGuiSystem() { return( CGuiSystem::GetInstance() ); }
inline void CGuiSystem::SwitchToCurrentProject()
{
rAssert( m_pProject != NULL );
rAssert( m_pApp != NULL );
m_pApp->SetProject( m_pProject );
}
inline void CGuiSystem::SwitchToLevelProject()
{
if( m_pLevelProject != NULL )
{
rAssert( m_pApp != NULL );
m_pApp->SetProject( m_pLevelProject );
}
}
inline void CGuiSystem::SwitchToBackendProject()
{
rAssert( m_pBackendProject != NULL );
rAssert( m_pApp != NULL );
m_pApp->SetProject( m_pBackendProject );
}
inline void CGuiSystem::RegisterLoadingCallback( IGuiLoadingCallback* pCallback )
{
m_pLoadingCallback = pCallback;
}
inline void CGuiSystem::UnregisterLoadingCallback()
{
m_pLoadingCallback = NULL;
}
inline void CGuiSystem::SetRadarEnabled( bool isEnabled )
{
m_isRadarEnabled = isEnabled;
}
inline bool CGuiSystem::IsRadarEnabled() const
{
return m_isRadarEnabled;
}
inline void CGuiSystem::ShowCreditsUponReturnToFE( bool enable )
{
m_isShowCreditsUponReturnToFE = enable;
}
inline bool CGuiSystem::IsShowCreditsUponReturnToFE() const
{
return m_isShowCreditsUponReturnToFE;
}
#endif // GUISYSTEM_H