|
|
//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
// $NoKeywords: $
//===========================================================================//
#ifndef GAMEUISYSTEMMANAGER_H
#define GAMEUISYSTEMMANAGER_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/utlvector.h"
#include "tier1/timeutils.h"
#include "rendersystem/vertexdata.h"
#include "rendersystem/indexdata.h"
#include "inputsystem/buttoncode.h"
#include "gameuischeme.h"
#include "igameuisystemmgr.h"
#include "appframework/iappsystem.h"
#include "tier3/tier3dm.h"
#include "tier1/utlstring.h"
#include "tier1/utlmap.h"
#include "gameuidynamictextures.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class IGameUIScreenController; class IRenderContext; class CGameUISystem; class CGameGraphic; class CHitArea; class CGameText; class CGameUIDefinition; FORWARD_DECLARE_HANDLE( InputContextHandle_t );
//-----------------------------------------------------------------------------
// Global interfaces...
//-----------------------------------------------------------------------------
class IScriptManager; extern IScriptManager *g_pScriptManager;
abstract_class IGameUIGraphicClassFactory { public: // Returns an instance of a graphic interface (keyvalues owned by caller)
virtual CGameGraphic * CreateNewGraphicClass( KeyValues *kvRequest, CGameUIDefinition *pMenu ) = 0; };
//-----------------------------------------------------------------------------
//
// Game UI system manager
//
//-----------------------------------------------------------------------------
class CGameUISystemMgr : public CTier3AppSystem< IGameUISystemMgr > { typedef CTier3AppSystem< IGameUISystemMgr > BaseClass; public: // Constructor, destructor
CGameUISystemMgr(); virtual ~CGameUISystemMgr();
virtual bool Connect( CreateInterfaceFn factory ); virtual void Disconnect(); virtual const AppSystemInfo_t* GetDependencies(); virtual void *QueryInterface( const char *pInterfaceName ); virtual InitReturnVal_t Init( ); virtual void Shutdown();
virtual void SetGameUIVisible( bool bVisible ); virtual bool GetGameUIVisible(){ return IsMenuVisible(); }
// Load the game UI menu screen
// key values are owned and released by caller
virtual IGameUISystem * LoadGameUIScreen( KeyValues *kvScreenLoadSettings ); virtual void ReleaseAllGameUIScreens();
virtual void RunFrame();
virtual void RegisterScreenControllerFactory( char const *szControllerName, IGameUIScreenControllerFactory *pFactory ); virtual IGameUIScreenControllerFactory * GetScreenControllerFactory( char const *szControllerName );
virtual IGameUISystemSurface * GetSurface(); virtual IGameUISchemeMgr * GetSchemeMgr(); virtual IGameUIMiscUtils * GetMiscUtils();
virtual void Render( const Rect_t &viewport, DmeTime_t flCurrentTime ); virtual void Render( IRenderContext *pRenderContext, PlatWindow_t hWnd, const Rect_t &viewport, DmeTime_t flCurrentTime );
virtual void UseGameInputSystemEventQueue( bool bEnable ); virtual void RegisterInputEvent( const InputEvent_t &iEvent ); virtual void SendEventToAllScreens( KeyValues *kvGlobalEvent ); virtual void PostEventToAllScreens( KeyValues *kvGlobalEvent ); virtual void SetSoundPlayback( IGameUISoundPlayback *pPlayback ); virtual bool IsMenuVisible() const; virtual void SetInputContext( InputContextHandle_t hInputContext );
CHitArea *GetMouseFocus(); CHitArea *GetMouseFocus( int x, int y ); CHitArea *GetKeyFocus(); CHitArea *GetRequestedKeyFocus(); void RequestKeyFocus( CHitArea *pGraphic, KeyValues *args = NULL );
void GetScreenHeightForFontLoading( int &nTall ); void SetScheme( IGameUIScheme * scheme ); IGameUIScheme * GetCurrentScheme(); DmeTime_t GetTime();
// Render system stuff
RenderInputLayout_t m_hInputLayout; RenderShaderHandle_t m_hVertexShader; RenderShaderHandle_t m_hPixelShader; ConstantBufferHandle_t m_hConstBuffer;
void OnMouseFocusGained( CHitArea *mouseFocus ); void OnMouseFocusLost( CHitArea *mouseFocus );
bool OnKeyCodeTyped( const ButtonCode_t &code ); bool OnKeyTyped( const wchar_t &unichar );
bool OnGameGraphicScriptEvent( CGameGraphic *pGraphic, KeyValues *kvEvent );
// Force focus to update on the next frame
void ForceFocusUpdate(){ m_bForceFocusUpdate = true; }
void PlayMenuSound( const char *pSoundFileName ); void StopMenuSound( const char *pSoundFileName );
void SetWindowSize( int nWidth, int nHeight ); void GetWindowSize( int &nWidth, int &nHeight ); void SetViewportSize( int nWidth, int nHeight ); void GetViewportSize( int &nWidth, int &nHeight );
// Returns the input context to use to control the cursor
InputContextHandle_t GetInputContext( ) const;
void OnScreenReleased( CGameUISystem *pScreen );
// Dynamic texture management.
void InitImageAlias( const char *pAlias ); void LoadImageAliasTexture( const char *pAlias, const char *pBaseTextureName ); void ReleaseImageAlias( const char *pAlias); IMaterial *GetImageAliasMaterial( const char *pAlias ); ImageAliasData_t *GetImageAliasData( const char *pAlias ); void TexCoordsToSheetTexCoords( const char *pAlias, Vector2D texCoords, Vector2D &sheetTexCoords ); void DrawDynamicTexture( const char *pAlias, int x, int y );
void ShowCursorCoords(); void ShowGraphicName();
virtual void RegisterGraphicClassFactory( char const *szGraphicClassName, IGameUIGraphicClassFactory *pFactory ); virtual IGameUIGraphicClassFactory *GetGraphicClassFactory( char const *szGraphicClassName );
virtual void InitRenderTargets(); virtual IMaterialProxy *CreateProxy( const char *proxyName );
private: void GetScreenSize( int &nWide, int &nTall );
Vector2D CursorToStage( Vector2D cursorPos );
// We may wind up with multiple viewports and multiple lists?
Rect_t m_Viewport; int m_nWindowWidth, m_nWindowHeight; CUtlVector< CGameUISystem * > m_ActiveMenuList; CUtlVector< CGameUISystem * > m_ReleasedMenuList;
DmeTime_t m_flCurrentTime; IGameUIScheme *m_Scheme;
CHitArea *m_RequestedKeyFocus;
bool m_bForceFocusUpdate; bool m_bUseGameInputQueue;
InputContextHandle_t m_hInputContext;
IGameUISoundPlayback *m_pSoundPlayback; CUtlVector< InputEvent_t > m_InputQueue; CUtlVector< KeyValues * > m_GameUIEventMainQueue; CUtlVector< CUtlString > m_MenuFileNames; CUtlMap< CUtlString, void * > m_MenuSoundMap;
typedef CUtlMap< CUtlString, IGameUIScreenControllerFactory * > ScreenControllerFactoryMap; ScreenControllerFactoryMap m_ScreenControllerMap;
typedef CUtlMap< CUtlString, IGameUIGraphicClassFactory * > GameUIGraphicClassFactoryMap; GameUIGraphicClassFactoryMap m_GraphicClassMap;
bool m_bVisible;
bool m_bSetReleaseTimer; DmeTime_t m_ReleaseStartTime; DmeTime_t m_ReleaseTime;
CGameText *m_pCursorText; };
extern CGameUISystemMgr *g_pGameUISystemMgrImpl;
bool UtlStringLessFunc( const CUtlString &lhs, const CUtlString &rhs );
#endif // GAMEUISYSTEMMANAGER_H
|