472 lines
16 KiB
C++
472 lines
16 KiB
C++
#ifndef _CRY_SYSTEM_H_
|
|
#define _CRY_SYSTEM_H_
|
|
|
|
#ifdef WIN32
|
|
#ifdef CRYSYSTEM_EXPORTS
|
|
#define CRYSYSTEM_API __declspec(dllexport)
|
|
#else
|
|
#define CRYSYSTEM_API __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define CRYSYSTEM_API
|
|
#endif
|
|
|
|
#include "platform.h" // Needed for LARGE_INTEGER (for consoles).
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Forward declarations
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#include <IXMLDOM.h>
|
|
#include <IXml.h>
|
|
#include <IValidator.h>
|
|
#include <ILog.h>
|
|
|
|
struct ISystem;
|
|
struct ILog;
|
|
struct IEntitySystem;
|
|
struct IEntity;
|
|
struct ICryPak;
|
|
struct IKeyboard;
|
|
struct IMouse;
|
|
struct IConsole;
|
|
struct IInput;
|
|
struct IRenderer;
|
|
struct IConsole;
|
|
struct IProcess;
|
|
struct I3DEngine;
|
|
struct ITimer;
|
|
struct IGame;
|
|
struct IScriptSystem;
|
|
struct IAISystem;
|
|
struct IFlash;
|
|
struct INetwork;
|
|
struct ICryFont;
|
|
struct IMovieSystem;
|
|
class IPhysicalWorld;
|
|
struct IMemoryManager;
|
|
struct ISoundSystem;
|
|
struct IMusicSystem;
|
|
struct XDOM::IXMLDOMDocument;
|
|
struct IFrameProfileSystem;
|
|
struct FrameProfiler;
|
|
struct IStreamEngine;
|
|
struct ICryCharManager;
|
|
struct SFileVersion;
|
|
struct IDataProbe;
|
|
|
|
class CFrameProfilerSection;
|
|
|
|
#define DEFAULT_GAME_PATH "FarCry"
|
|
#define DATA_FOLDER "FCData"
|
|
|
|
#define PROC_MENU 1
|
|
#define PROC_3DENGINE 2
|
|
|
|
//ID for script userdata typing (maybe they should be moved into the game.dll)
|
|
#define USER_DATA_SOUND 1
|
|
#define USER_DATA_TEXTURE 2
|
|
#define USER_DATA_OBJECT 3
|
|
#define USER_DATA_LIGHT 4
|
|
#define USER_DATA_BONEHANDLER 5
|
|
#define USER_DATA_POINTER 6
|
|
|
|
enum ESystemUpdateFlags
|
|
{
|
|
ESYSUPDATE_IGNORE_AI = 0x0001,
|
|
ESYSUPDATE_IGNORE_PHYSICS = 0x0002,
|
|
// Special update mode for editor.
|
|
ESYSUPDATE_EDITOR = 0x0004,
|
|
ESYSUPDATE_MULTIPLAYER = 0x0008
|
|
};
|
|
|
|
enum ESystemConfigSpec
|
|
{
|
|
CONFIG_LOW_SPEC = 0,
|
|
CONFIG_MEDIUM_SPEC = 1,
|
|
CONFIG_HIGH_SPEC = 2,
|
|
CONFIG_VERYHIGH_SPEC = 3,
|
|
};
|
|
|
|
// User defined callback, which can be passed to ISystem.
|
|
struct ISystemUserCallback
|
|
{
|
|
/** Signals to User that engine error occured.
|
|
@return true to Halt execution or false to ignore this error.
|
|
*/
|
|
virtual bool OnError( const char *szErrorString ) = 0;
|
|
/** If working in Editor environment notify user that engine want to Save current document.
|
|
This happens if critical error have occured and engine gives a user way to save data and not lose it
|
|
due to crash.
|
|
*/
|
|
virtual void OnSaveDocument() = 0;
|
|
|
|
/** Notify user that system wants to switch out of current process.
|
|
(For ex. Called when pressing ESC in game mode to go to Menu).
|
|
*/
|
|
virtual void OnProcessSwitch() = 0;
|
|
};
|
|
|
|
|
|
// Structure passed to Init method of ISystem interface.
|
|
struct SSystemInitParams
|
|
{
|
|
void *hInstance; //
|
|
void *hWnd; //
|
|
char szSystemCmdLine[512]; // command line, used to execute the early commands e.g. -DEVMODE "g_gametype ASSAULT"
|
|
ISystemUserCallback *pUserCallback; //
|
|
ILog *pLog; // You can specify your own ILog to be used by System.
|
|
IValidator *pValidator; // You can specify different validator object to use by System.
|
|
const char* sLogFileName; // File name to use for log.
|
|
bool bEditor; // When runing in Editor mode.
|
|
bool bPreview; // When runing in Preview mode (Minimal initialization).
|
|
bool bTestMode; // When runing in Automated testing mode.
|
|
bool bDedicatedServer; // When runing a dedicated server.
|
|
ISystem *pSystem; // Pointer to existing ISystem interface, it will be reused if not NULL.
|
|
// char szLocalIP[256]; // local IP address (needed if we have several servers on one machine)
|
|
#if defined(LINUX)
|
|
void (*pCheckFunc)(void*); // authentication function (must be set).
|
|
#else
|
|
void *pCheckFunc; // authentication function (must be set).
|
|
#endif
|
|
|
|
// Initialization defaults.
|
|
SSystemInitParams()
|
|
{
|
|
hInstance = 0;
|
|
hWnd = 0;
|
|
memset(szSystemCmdLine,0,sizeof(szSystemCmdLine));
|
|
pLog = 0;
|
|
pValidator = 0;
|
|
pUserCallback = 0;
|
|
sLogFileName = 0;
|
|
bEditor = false;
|
|
bPreview = false;
|
|
bTestMode = false;
|
|
bDedicatedServer = false;
|
|
pSystem = 0;
|
|
pCheckFunc = 0;
|
|
// memset(szLocalIP,0,256);
|
|
}
|
|
};
|
|
|
|
|
|
// Structure passed to CreateGame method of ISystem interface.
|
|
struct SGameInitParams
|
|
{
|
|
const char * sGameDLL; // Name of Game DLL. (Win32 Only)
|
|
IGame * pGame; // Pointer to already created game interface.
|
|
bool bDedicatedServer; // When runing a dedicated server.
|
|
char szGameCmdLine[256]; // command line, used to execute the console commands after game creation e.g. -DEVMODE "g_gametype ASSAULT"
|
|
|
|
SGameInitParams()
|
|
{
|
|
sGameDLL = NULL;
|
|
pGame = NULL;
|
|
bDedicatedServer = false;
|
|
memset(szGameCmdLine,0,256);
|
|
}
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Main Engine Interface
|
|
// initialize and dispatch all engine's subsystems
|
|
struct ISystem
|
|
{
|
|
// Loads GameDLL and creates game instance.
|
|
virtual bool CreateGame( const SGameInitParams ¶ms ) = 0;
|
|
|
|
// Release ISystem.
|
|
virtual void Release() = 0;
|
|
|
|
// Update all subsystems (including the ScriptSink() )
|
|
// @param flags one or more flags from ESystemUpdateFlags sructure.
|
|
// @param boolean to set when in pause or cutscene mode in order to avoid
|
|
// certain subsystem updates 0=menu/pause, 1=cutscene mode
|
|
virtual bool Update( int updateFlags=0,int nPauseMode=0) = 0;
|
|
|
|
// update _time, _frametime (useful after loading level to apply the time value)
|
|
virtual void UpdateScriptSink()=0;
|
|
|
|
// Begin rendering frame.
|
|
virtual void RenderBegin() = 0;
|
|
// Render subsystems.
|
|
virtual void Render() = 0;
|
|
// End rendering frame and swap back buffer.
|
|
virtual void RenderEnd() = 0;
|
|
|
|
// Renders the statistics; this is called from RenderEnd, but if the
|
|
// Host application (Editor) doesn't employ the Render cycle in ISystem,
|
|
// it may call this method to render the essencial statistics
|
|
virtual void RenderStatistics () = 0;
|
|
|
|
// Retrieve the name of the user currently logged in to the computer
|
|
virtual const char *GetUserName() = 0;
|
|
|
|
// Gets current supported CPU features flags. (CPUF_SSE, CPUF_SSE2, CPUF_3DNOW, CPUF_MMX)
|
|
virtual int GetCPUFlags() = 0;
|
|
|
|
// Get seconds per processor tick
|
|
virtual double GetSecondsPerCycle() = 0;
|
|
|
|
// dumps the memory usage statistics to the log
|
|
virtual void DumpMemoryUsageStatistics() = 0;
|
|
|
|
// Quit the appliacation
|
|
virtual void Quit() = 0;
|
|
// Tells the system if it is relaunching or not
|
|
virtual void Relaunch(bool bRelaunch) = 0;
|
|
// return true if the application is in the shutdown phase
|
|
virtual bool IsQuitting() = 0;
|
|
|
|
// Display error message.
|
|
// Logs it to console and file and error message box.
|
|
// Then terminates execution.
|
|
virtual void Error( const char *sFormat,... ) = 0;
|
|
|
|
//DOC-IGNORE-BEGIN
|
|
//[Timur] DEPRECATED! Use Validator Warning instead.
|
|
// Display warning message.
|
|
// Logs it to console and file and display a warning message box.
|
|
// Not terminates execution.
|
|
//__declspec(deprecated) virtual void Warning( const char *sFormat,... ) = 0;
|
|
//DOC-IGNORE-END
|
|
|
|
// Report warning to current Validator object.
|
|
// Not terminates execution.
|
|
virtual void Warning( EValidatorModule module,EValidatorSeverity severity,int flags,const char *file,const char *format,... ) = 0;
|
|
// Compare specified verbosity level to the one currently set.
|
|
virtual bool CheckLogVerbosity( int verbosity ) = 0;
|
|
|
|
// returns true if this is dedicated server application
|
|
virtual bool IsDedicated() {return false;}
|
|
|
|
// return the related subsystem interface
|
|
virtual IGame *GetIGame() = 0;
|
|
virtual INetwork *GetINetwork() = 0;
|
|
virtual IRenderer *GetIRenderer() = 0;
|
|
virtual IInput *GetIInput() = 0;
|
|
virtual ITimer *GetITimer() = 0;
|
|
virtual IConsole *GetIConsole() = 0;
|
|
virtual IScriptSystem *GetIScriptSystem() = 0;
|
|
virtual I3DEngine *GetI3DEngine() = 0;
|
|
virtual ISoundSystem *GetISoundSystem() = 0;
|
|
virtual IMusicSystem *GetIMusicSystem() = 0;
|
|
virtual IPhysicalWorld *GetIPhysicalWorld() = 0;
|
|
virtual IMovieSystem *GetIMovieSystem() = 0;
|
|
virtual IAISystem *GetAISystem() = 0;
|
|
virtual IMemoryManager *GetIMemoryManager() = 0;
|
|
virtual IEntitySystem *GetIEntitySystem() = 0;
|
|
virtual ICryFont *GetICryFont() = 0;
|
|
virtual ICryPak *GetIPak() = 0;
|
|
virtual ILog *GetILog() = 0;
|
|
virtual IStreamEngine *GetStreamEngine() = 0;
|
|
virtual ICryCharManager *GetIAnimationSystem() = 0;
|
|
virtual IValidator *GetIValidator() = 0;
|
|
virtual IFrameProfileSystem* GetIProfileSystem() = 0;
|
|
|
|
//virtual const char *GetGamePath()=0;
|
|
|
|
virtual void DebugStats(bool checkpoint, bool leaks) = 0;
|
|
virtual void DumpWinHeaps() = 0;
|
|
virtual int DumpMMStats(bool log) = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// @param bValue set to true when running on a cheat protected server or a client that is connected to it (not used in singlplayer)
|
|
virtual void SetForceNonDevMode( const bool bValue )=0;
|
|
// @return is true when running on a cheat protected server or a client that is connected to it (not used in singlplayer)
|
|
virtual bool GetForceNonDevMode() const=0;
|
|
virtual bool WasInDevMode() const=0;
|
|
virtual bool IsDevMode() const=0;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
virtual XDOM::IXMLDOMDocument *CreateXMLDocument() = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// IXmlNode interface.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Creates new xml node.
|
|
virtual XmlNodeRef CreateXmlNode( const char *sNodeName="" ) = 0;
|
|
// Load xml file, return 0 if load failed.
|
|
virtual XmlNodeRef LoadXmlFile( const char *sFilename ) = 0;
|
|
// Load xml from string, return 0 if load failed.
|
|
virtual XmlNodeRef LoadXmlFromString( const char *sXmlString ) = 0;
|
|
|
|
virtual void SetViewCamera(class CCamera &Camera) = 0;
|
|
virtual CCamera& GetViewCamera() = 0;
|
|
|
|
virtual void CreateEntityScriptBinding(IEntity *pEntity)=0;
|
|
// When ignore update sets to true, system will ignore and updates and render calls.
|
|
virtual void IgnoreUpdates( bool bIgnore ) = 0;
|
|
|
|
// Set rate of Garbage Collection for script system.
|
|
// @param fRate in seconds
|
|
virtual void SetGCFrequency( const float fRate ) = 0;
|
|
|
|
/* Set the active process
|
|
@param process a pointer to a class that implement the IProcess interface
|
|
*/
|
|
virtual void SetIProcess(IProcess *process) = 0;
|
|
/* Get the active process
|
|
@return a pointer to the current active process
|
|
*/
|
|
virtual IProcess* GetIProcess() = 0;
|
|
|
|
#if defined (WIN32) || defined (PS2)
|
|
virtual IRenderer* CreateRenderer(bool fullscreen, void* hinst, void* hWndAttach = 0) = 0;
|
|
#endif
|
|
|
|
// Returns true if system running in Test mode.
|
|
virtual bool IsTestMode() const = 0;
|
|
|
|
virtual void ShowDebugger(const char *pszSourceFile, int iLine, const char *pszReason) = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Frame profiler functions
|
|
virtual void SetFrameProfiler(bool on, bool display, char *prefix) = 0;
|
|
|
|
// Starts section profiling.
|
|
virtual void StartProfilerSection( CFrameProfilerSection *pProfileSection ) = 0;
|
|
// Stops section profiling.
|
|
virtual void EndProfilerSection( CFrameProfilerSection *pProfileSection ) = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// VTune Profiling interface.
|
|
// Resume vtune data collection.
|
|
virtual void VTuneResume() = 0;
|
|
// Pauses vtune data collection.
|
|
virtual void VTunePause() = 0;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
virtual void Deltree(const char *szFolder, bool bRecurse) = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// File version.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
virtual const SFileVersion& GetFileVersion() = 0;
|
|
virtual const SFileVersion& GetProductVersion() = 0;
|
|
|
|
// Compressed file read & write
|
|
virtual bool WriteCompressedFile(char *filename, void *data, unsigned int bitlen) = 0;
|
|
virtual unsigned int ReadCompressedFile(char *filename, void *data, unsigned int maxbitlen) = 0;
|
|
virtual unsigned int GetCompressedFileSize(char *filename)=0;
|
|
|
|
// Sample: char str[256]; bool bRet=GetSSFileInfo("C:\\mastercd\\materials\\compound_indoor.xml",str,256);
|
|
// get info about the last SourceSafe action for a specifed file (Name,Comment,Date)
|
|
// @param inszFileName inszFileName!=0, e.g. "c:\\mastercd\\AssMan\\AssManShellExt\\AssManMenu.cpp"
|
|
// @param outszInfo outszInfo!=0, [0..indwBufferSize-1]
|
|
// @param indwBufferSize >0
|
|
// @return true=success, false otherwise (output parameter is set to empty strings)
|
|
virtual bool GetSSFileInfo( const char *inszFileName, char *outszInfo, const DWORD indwBufferSize )=0;
|
|
|
|
// Retrieve IDataProbe interface.
|
|
virtual IDataProbe* GetIDataProbe() = 0;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Configuration.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Saves system configuration.
|
|
virtual void SaveConfiguration() = 0;
|
|
// Loads system configuration
|
|
virtual void LoadConfiguration(const string &sFilename)=0;
|
|
|
|
// Get current configuration specification.
|
|
virtual ESystemConfigSpec GetConfigSpec() = 0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CrySystem DLL Exports.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
typedef ISystem* (*PFNCREATESYSTEMINTERFACE)( SSystemInitParams &initParams );
|
|
|
|
// Get the system interface (must be defined locally in each module)
|
|
extern ISystem *GetISystem();
|
|
|
|
// interface of the DLL
|
|
extern "C"
|
|
{
|
|
CRYSYSTEM_API ISystem* CreateSystemInterface( SSystemInitParams &initParams );
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Display error message.
|
|
// Logs it to console and file and error message box.
|
|
// Then terminates execution.
|
|
inline void CryError( const char *format,... )
|
|
{
|
|
if (!GetISystem())
|
|
return;
|
|
|
|
va_list ArgList;
|
|
char szBuffer[MAX_WARNING_LENGTH];
|
|
va_start(ArgList, format);
|
|
vsprintf(szBuffer, format, ArgList);
|
|
va_end(ArgList);
|
|
|
|
GetISystem()->Error( "%s",szBuffer );
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Display warning message.
|
|
// Logs it to console and file and display a warning message box.
|
|
// Not terminates execution.
|
|
inline void CryWarning( EValidatorModule module,EValidatorSeverity severity,const char *format,... )
|
|
{
|
|
if (!GetISystem() || !format)
|
|
return;
|
|
va_list ArgList;
|
|
char szBuffer[MAX_WARNING_LENGTH];
|
|
va_start(ArgList, format);
|
|
vsprintf(szBuffer, format, ArgList);
|
|
va_end(ArgList);
|
|
GetISystem()->Warning( module,severity,0,0,szBuffer );
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Simple log of data with low verbosity.
|
|
inline void CryLog( const char *format,... )
|
|
{
|
|
if (GetISystem() && GetISystem()->CheckLogVerbosity(8))
|
|
{
|
|
va_list args;
|
|
va_start(args,format);
|
|
GetISystem()->GetILog()->LogV( ILog::eMessage,format,args );
|
|
va_end(args);
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Very rarely used log comment.
|
|
inline void CryLogComment( const char *format,... )
|
|
{
|
|
if (GetISystem() && GetISystem()->CheckLogVerbosity(9))
|
|
{
|
|
va_list args;
|
|
va_start(args,format);
|
|
GetISystem()->GetILog()->LogV( ILog::eMessage,format,args );
|
|
va_end(args);
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Logs important data that must be printed regardless verbosity.
|
|
inline void CryLogAlways( const char *format,... )
|
|
{
|
|
if (GetISystem())
|
|
{
|
|
va_list args;
|
|
va_start(args,format);
|
|
GetISystem()->GetILog()->LogV( ILog::eAlways,format,args );
|
|
va_end(args);
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Additional headers.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
#include <FrameProfiler.h>
|
|
|
|
#endif //_CRY_SYSTEM_H_
|