|
|
//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose: Defines the application object.
//
//===========================================================================//
#ifndef HAMMER_H
#define HAMMER_H
#ifdef _WIN32
#pragma once
#endif
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
#include "RunCommands.h"
#include "IHammer.h"
#include "tier1/utlmap.h"
#include "tier3/tier3dm.h"
//-----------------------------------------------------------------------------
// Forward declarations...
//-----------------------------------------------------------------------------
class CMapDoc; class IStudioRender; class IBaseFileSystem; class IEngineAPI; class IMDLCache; class CGameConfig;
//
// Values for retrieving specific directories using GetDirectory.
//
enum DirIndex_t { DIR_PROGRAM, // The editor install directory.
DIR_PREFABS, // The directory for prefabs.
DIR_GAME_EXE, // The location of the game executable.
DIR_MOD, // The location of the mod currently being worked on.
DIR_GAME, // The location of the base game currently being worked on.
DIR_MATERIALS, // The location of the mod's materials.
DIR_AUTOSAVE // The location of autosave files.
};
// combines a list of commands & a name:
class CCommandSequence { public:
CCommandArray m_Commands; char m_szName[128]; };
class CHammerDocTemplate : public CMultiDocTemplate { public: CHammerDocTemplate( UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass ) : CMultiDocTemplate( nIDResource, pDocClass, pFrameClass, pViewClass ) { }
virtual CDocument *OpenDocumentFile( LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE ); virtual void CloseAllDocuments( BOOL bEndSession ); virtual void InitialUpdateFrame( CFrameWnd* pFrame, CDocument* pDoc, BOOL bMakeVisible = TRUE ); void UpdateInstanceMap( CMapDoc *pInstanceMapDoc ); };
void AppRegisterPostInitFn( void (*)() ); void AppRegisterMessageLoopFn( void (*)() ); void AppRegisterMessagePretranslateFn( void (*)( MSG * ) ); void AppRegisterPreShutdownFn( void (*)() );
class CHammer : public CWinApp, public CTier3AppSystem< IHammer > { typedef CTier3AppSystem< IHammer > BaseClass;
public: CHammer(void); virtual ~CHammer(void);
// Methods of IAppSystem
virtual bool Connect( CreateInterfaceFn factory ); virtual void Disconnect(); virtual void *QueryInterface( const char *pInterfaceName ); virtual InitReturnVal_t Init(); virtual void Shutdown();
// Methods of IHammer
virtual void InitFoundryMode( CreateInterfaceFn factory, void *hGameWnd, const char *szGameDir ); virtual void NoteEngineGotFocus(); virtual bool IsHammerVisible(); virtual void ToggleHammerVisible(); virtual bool HammerPreTranslateMessage( MSG * pMsg ); virtual bool HammerIsIdleMessage( MSG * pMsg ); virtual bool HammerOnIdle( long count ); virtual void RunFrame(); virtual int MainLoop(); virtual const char *GetDefaultMod(); virtual const char *GetDefaultGame(); virtual RequestRetval_t RequestNewConfig(); virtual const char *GetDefaultModFullPath(); virtual bool InitSessionGameConfig(const char *szGame);
virtual BOOL PreTranslateMessage(MSG *pMsg);
// Are we running in Foundry mode?
bool IsFoundryMode() const { return m_bFoundryMode; }
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHammer)
public: virtual BOOL InitInstance(); virtual int ExitInstance(); virtual CDocument *OpenDocumentFile(LPCTSTR lpszFileName); // Called by the framework
virtual CDocument *OpenDocumentOrInstanceFile(LPCTSTR lpszFileName); // Called by instances or other Hammer code
virtual BOOL OnIdle(LONG lCount); virtual int Run(void); //}}AFX_VIRTUAL
void GetDirectory(DirIndex_t dir, char *p); void SetDirectory(DirIndex_t dir, const char *p);
COLORREF GetProfileColor(const char *pszSection, const char *pszKey, int r, int g, int b);
void OnActivateApp(bool bActive); bool IsActiveApp();
void BeginImportWCSettings(); void BeginImportVHESettings(); void EndImportSettings();
void BeginClosing(); bool IsClosing();
void Enable3DRender(bool bEnable); void ReleaseVideoMemory(); void SuppressVideoAllocation( bool bSuppress ); bool CanAllocateVideo() const;
void Help(const char *pszTopic);
CGameConfig *PromptForGameConfig();
void OpenURL(const char *pszURL, HWND hwnd); void OpenURL(UINT nID, HWND hwnd); // list of "command arrays" for compiling files:
CTypedPtrArray<CPtrArray,CCommandSequence*> m_CmdSequences; void SaveSequences(); bool LoadSequences( const char *szSeqFileName );
void Autosave(); void LoadLastGoodSave(); void ResetAutosaveTimer(); bool VerifyAutosaveDirectory( char *szAutosaveDir = 0 ) const; int GetNextAutosaveNumber( CUtlMap<FILETIME, WIN32_FIND_DATA, int> *pFileMap, DWORD *pdwTotalDirSize, const CString * ) const;
// When in lighting preview, it will avoid rendering frames.
// This forces it to render the next frame.
void SetForceRenderNextFrame(); bool GetForceRenderNextFrame();
static void SetIsNewDocumentVisible( bool bIsVisible ); static bool IsNewDocumentVisible( void );
void SetCustomAccelerator( HWND hWnd, WORD nID ); void ClearCustomAccelerator( );
CHammerDocTemplate *pMapDocTemplate; CHammerDocTemplate *pManifestDocTemplate;
//{{AFX_MSG(CHammer)
afx_msg void OnAppAbout(); afx_msg void OnFileOpen(); afx_msg void OnFileNew(); //}}AFX_MSG
DECLARE_MESSAGE_MAP()
protected:
// These execute inside a minidump handler.
static int StaticHammerInternalInit( void *pParam ); InitReturnVal_t HammerInternalInit();
static int StaticInternalMainLoop( void *pParam ); int InternalMainLoop();
static bool m_bIsNewDocumentVisible;
// Check for 16-bit color or higher.
bool Check16BitColor();
void UpdateLighting(CMapDoc *pDoc);
bool m_bClosing; // The user has initiated app shutdown.
bool m_bActiveApp; bool m_SuppressVideoAllocation;
bool m_bForceRenderNextFrame;
char m_szAppDir[MAX_PATH]; char m_szAutosaveDir[MAX_PATH];
bool m_bFoundryMode;
HWND m_CustomAcceleratorWindow; HACCEL m_CustomAccelerator; };
#define APP() ((CHammer *)AfxGetApp())
//-----------------------------------------------------------------------------
// Global interfaces...
//-----------------------------------------------------------------------------
#define HAMMER_FILESYSTEM_DEFINED
extern IBaseFileSystem *g_pFileSystem; extern IEngineAPI *g_pEngineAPI; extern CreateInterfaceFn g_Factory; bool IsRunningInEngine();
// event update system - lets you check for events such as gemoetry modification for updating stuff.
void SignalUpdate(int ev); // EVTYPE_xx
int GetUpdateCounter(int ev); // return timestamp
float GetUpdateTime(int ev); // return floating point time event was signalled
void SignalGlobalUpdate(void); // flag ALL events, such as on map load
#define EVTYPE_FACE_CHANGED 0
#define EVTYPE_LIGHTING_CHANGED 1
#define EVTYPE_BITMAP_RECEIVED_FROM_LPREVIEW 2
extern bool g_bHDR; // should we act like we're in hdr mode?
extern int g_nBitmapGenerationCounter;
#endif // HAMMER_H
|