Permalink
Fetching contributors…
Cannot retrieve contributors at this time
700 lines (556 sloc) 28.4 KB
// Copyright 2001-2017 Crytek GmbH / Crytek Group. All rights reserved.
/*************************************************************************
-------------------------------------------------------------------------
$Id$
$DateTime$
Description: Implementation of the IGameFramework interface. CCryAction
provides a generic game framework for action based games
such as 1st and 3rd person shooters.
-------------------------------------------------------------------------
History:
- 20:7:2004 10:51 : Created by Marco Koegler
- 3:8:2004 11:11 : Taken-over by Marcio Martins
*************************************************************************/
#ifndef __CRYACTION_H__
#define __CRYACTION_H__
#if _MSC_VER > 1000
#pragma once
#endif
#include <CrySystem/ISystem.h>
#include <CrySystem/ICmdLine.h>
#include <CryGame/IGameFramework.h>
#include <CrySystem/File/ICryPak.h>
#include "ISaveGame.h"
struct IFlowSystem;
struct IGameTokenSystem;
struct IEffectSystem;
struct IBreakableGlassSystem;
struct IForceFeedbackSystem;
struct IGameVolumes;
class CAIDebugRenderer;
class CAINetworkDebugRenderer;
class CGameRulesSystem;
class CScriptBind_Action;
class CScriptBind_ActorSystem;
class CScriptBind_ItemSystem;
class CScriptBind_ActionMapManager;
class CScriptBind_Network;
class CScriptBind_VehicleSystem;
class CScriptBind_Vehicle;
class CScriptBind_VehicleSeat;
class CScriptBind_Inventory;
class CScriptBind_DialogSystem;
class CScriptBind_MaterialEffects;
class CScriptBind_UIAction;
class CFlowSystem;
class CDevMode;
class CTimeDemoRecorder;
class CGameQueryListener;
class CScriptRMI;
class CGameSerialize;
class CMaterialEffects;
class CMaterialEffectsCVars;
class CGameObjectSystem;
class CActionMapManager;
class CActionGame;
class CActorSystem;
class CallbackTimer;
class CGameClientNub;
class CGameContext;
class CGameServerNub;
class CItemSystem;
class CLevelSystem;
class CUIDraw;
class CVehicleSystem;
class CViewSystem;
class CGameplayRecorder;
class CPersistantDebug;
class CPlayerProfileManager;
class CDialogSystem;
class CSubtitleManager;
class CGameplayAnalyst;
class CTimeOfDayScheduler;
class CNetworkCVars;
class CCryActionCVars;
class CGameStatsConfig;
class CSignalTimer;
class CRangeSignaling;
class CAIProxy;
class CommunicationVoiceLibrary;
class CCustomActionManager;
class CCustomEventManager;
class CAIProxyManager;
class CForceFeedBackSystem;
class CCryActionPhysicQueues;
class CNetworkStallTickerThread;
class CSharedParamsManager;
struct ICooperativeAnimationManager;
struct IGameSessionHandler;
class CRuntimeAreaManager;
class CColorGradientManager;
struct CAnimationGraphCVars;
struct IRealtimeRemoteUpdate;
struct ISerializeHelper;
struct ITimeDemoRecorder;
class CSegmentedWorld;
class CNetMessageDistpatcher;
class CManualFrameStepController;
class CEntityContainerMgr;
class CEntityAttachmentExNodeRegistry;
class CCryAction :
public IGameFramework
{
public:
CCryAction();
~CCryAction();
// IGameFramework
void ClearTimers();
virtual TimerID AddTimer(CTimeValue interval, bool repeat, TimerCallback callback, void* userdata);
virtual void* RemoveTimer(TimerID timerID);
virtual uint32 GetPreUpdateTicks();
virtual void RegisterFactory(const char* name, IActorCreator* pCreator, bool isAI);
virtual void RegisterFactory(const char* name, IItemCreator* pCreator, bool isAI);
virtual void RegisterFactory(const char* name, IVehicleCreator* pCreator, bool isAI);
virtual void RegisterFactory(const char* name, IGameObjectExtensionCreator* pCreator, bool isAI);
virtual void RegisterFactory(const char* name, ISaveGame*(*func)(), bool);
virtual void RegisterFactory(const char* name, ILoadGame*(*func)(), bool);
virtual bool StartEngine(SSystemInitParams& startupParams);
virtual void InitGameType(bool multiplayer, bool fromInit);
virtual bool CompleteInit();
virtual void ShutdownEngine();
virtual void ShutdownEngineFast();
virtual void PrePhysicsUpdate() /*override*/;
virtual int ManualFrameUpdate(bool haveFocus, unsigned int updateFlags);
virtual void Reset(bool clients);
virtual void GetMemoryUsage(ICrySizer* pSizer) const;
virtual void PauseGame(bool pause, bool force, unsigned int nFadeOutInMS = 0);
virtual bool IsGamePaused();
virtual bool IsGameStarted();
virtual bool IsInLevelLoad();
virtual bool IsLoadingSaveGame();
virtual const char* GetLevelName();
virtual void GetAbsLevelPath(char* pPathBuffer, uint32 pathBufferSize);
virtual bool IsInTimeDemo(); // Check if time demo is in progress (either playing or recording);
virtual bool IsTimeDemoRecording(); // Check if time demo is recording;
virtual ISystem* GetISystem() { return m_pSystem; }
virtual ILanQueryListener* GetILanQueryListener() { return m_pLanQueryListener; }
virtual IUIDraw* GetIUIDraw();
virtual IMannequin& GetMannequinInterface();
virtual ILevelSystem* GetILevelSystem();
virtual IActorSystem* GetIActorSystem();
virtual IItemSystem* GetIItemSystem();
virtual IBreakReplicator* GetIBreakReplicator();
virtual IVehicleSystem* GetIVehicleSystem();
virtual IActionMapManager* GetIActionMapManager();
virtual IViewSystem* GetIViewSystem();
virtual IGameplayRecorder* GetIGameplayRecorder();
virtual IGameRulesSystem* GetIGameRulesSystem();
virtual IGameObjectSystem* GetIGameObjectSystem();
virtual IFlowSystem* GetIFlowSystem();
virtual IGameTokenSystem* GetIGameTokenSystem();
virtual IEffectSystem* GetIEffectSystem();
virtual IMaterialEffects* GetIMaterialEffects();
virtual IBreakableGlassSystem* GetIBreakableGlassSystem();
virtual IPlayerProfileManager* GetIPlayerProfileManager();
virtual ISubtitleManager* GetISubtitleManager();
virtual IDialogSystem* GetIDialogSystem();
virtual ICooperativeAnimationManager* GetICooperativeAnimationManager();
virtual ICheckpointSystem* GetICheckpointSystem();
virtual IForceFeedbackSystem* GetIForceFeedbackSystem() const;
virtual ICustomActionManager* GetICustomActionManager() const;
virtual ICustomEventManager* GetICustomEventManager() const;
virtual IRealtimeRemoteUpdate* GetIRealTimeRemoteUpdate();
virtual ITimeDemoRecorder* GetITimeDemoRecorder() const;
virtual bool StartGameContext(const SGameStartParams* pGameStartParams);
virtual bool ChangeGameContext(const SGameContextParams* pGameContextParams);
virtual void EndGameContext();
virtual bool StartedGameContext() const;
virtual bool StartingGameContext() const;
virtual bool BlockingSpawnPlayer();
virtual void ReleaseGameStats();
virtual void ResetBrokenGameObjects();
virtual void CloneBrokenObjectsAndRevertToStateAtTime(int32 iFirstBreakEventIndex, uint16* pBreakEventIndices, int32& iNumBreakEvents, IRenderNode** outClonedNodes, int32& iNumClonedNodes, SRenderNodeCloneLookup& renderNodeLookup);
virtual void ApplySingleProceduralBreakFromEventIndex(uint16 uBreakEventIndex, const SRenderNodeCloneLookup& renderNodeLookup);
virtual void UnhideBrokenObjectsByIndex(uint16* ObjectIndicies, int32 iNumObjectIndices);
void Serialize(TSerialize ser); // defined in ActionGame.cpp
virtual void FlushBreakableObjects(); // defined in ActionGame.cpp
void ClearBreakHistory();
IGameToEditorInterface* GetIGameToEditor() { return m_pGameToEditor; }
virtual void InitEditor(IGameToEditorInterface* pGameToEditor);
virtual void SetEditorLevel(const char* levelName, const char* levelFolder);
virtual void GetEditorLevel(char** levelName, char** levelFolder);
virtual void BeginLanQuery();
virtual void EndCurrentQuery();
virtual IActor* GetClientActor() const;
virtual EntityId GetClientActorId() const;
virtual IEntity* GetClientEntity() const;
virtual EntityId GetClientEntityId() const;
virtual INetChannel* GetClientChannel() const;
virtual CTimeValue GetServerTime();
virtual uint16 GetGameChannelId(INetChannel* pNetChannel);
virtual INetChannel* GetNetChannel(uint16 channelId);
virtual void SetServerChannelPlayerId(uint16 channelId, EntityId id);
virtual const SEntitySchedulingProfiles* GetEntitySchedulerProfiles(IEntity* pEnt);
virtual bool IsChannelOnHold(uint16 channelId);
virtual IGameObject* GetGameObject(EntityId id);
virtual bool GetNetworkSafeClassId(uint16& id, const char* className);
virtual bool GetNetworkSafeClassName(char* className, size_t classNameSizeInBytes, uint16 id);
virtual IGameObjectExtension* QueryGameObjectExtension(EntityId id, const char* name);
virtual INetContext* GetNetContext();
virtual bool SaveGame(const char* path, bool bQuick = false, bool bForceImmediate = false, ESaveGameReason reason = eSGR_QuickSave, bool ignoreDelay = false, const char* checkpointName = NULL);
virtual ELoadGameResult LoadGame(const char* path, bool quick = false, bool ignoreDelay = false);
virtual TSaveGameName CreateSaveGameName();
virtual void ScheduleEndLevel(const char* nextLevel);
virtual void ScheduleEndLevelNow(const char* nextLevel);
virtual void OnEditorSetGameMode(int iMode);
virtual bool IsEditing() { return m_isEditing; }
virtual void OnBreakageSpawnedEntity(IEntity* pEntity, IPhysicalEntity* pPhysEntity, IPhysicalEntity* pSrcPhysEntity);
bool IsImmersiveMPEnabled();
virtual void AllowSave(bool bAllow = true)
{
m_bAllowSave = bAllow;
}
virtual void AllowLoad(bool bAllow = true)
{
m_bAllowLoad = bAllow;
}
virtual bool CanSave();
virtual bool CanLoad();
virtual ISerializeHelper* GetSerializeHelper() const;
virtual bool CanCheat();
INetNub* GetServerNetNub();
INetNub* GetClientNetNub();
void SetGameGUID(const char* gameGUID);
const char* GetGameGUID() { return m_gameGUID; }
virtual bool IsVoiceRecordingEnabled() { return m_VoiceRecordingEnabled != 0; }
virtual bool IsGameSession(CrySessionHandle sessionHandle);
virtual bool ShouldMigrateNub(CrySessionHandle sessionHandle);
virtual ISharedParamsManager* GetISharedParamsManager();
virtual IGame* GetIGame();
virtual float GetLoadSaveDelay() const { return m_lastSaveLoad; }
virtual IGameVolumes* GetIGameVolumesManager() const;
virtual void PreloadAnimatedCharacter(IScriptTable* pEntityScript);
virtual void PrePhysicsTimeStep(float deltaTime);
virtual void RegisterExtension(ICryUnknownPtr pExtension);
virtual void ReleaseExtensions();
virtual void AddNetworkedClientListener(INetworkedClientListener& listener) { stl::push_back_unique(m_networkClientListeners, &listener); }
virtual void RemoveNetworkedClientListener(INetworkedClientListener& listener) { stl::find_and_erase(m_networkClientListeners, &listener); }
void DefineProtocolRMI(IProtocolBuilder* pBuilder);
virtual void DoInvokeRMI(_smart_ptr<IRMIMessageBody> pBody, unsigned where, int channel, const bool isGameObjectRmi);
protected:
virtual ICryUnknownPtr QueryExtensionInterfaceById(const CryInterfaceID& interfaceID) const;
// ~IGameFramework
public:
static CCryAction* GetCryAction() { return m_pThis; }
virtual CGameServerNub* GetGameServerNub();
CGameClientNub* GetGameClientNub();
CGameContext* GetGameContext();
CScriptBind_Vehicle* GetVehicleScriptBind() { return m_pScriptBindVehicle; }
CScriptBind_VehicleSeat* GetVehicleSeatScriptBind() { return m_pScriptBindVehicleSeat; }
CScriptBind_Inventory* GetInventoryScriptBind() { return m_pScriptInventory; }
CPersistantDebug* GetPersistantDebug() { return m_pPersistantDebug; }
CSignalTimer* GetSignalTimer();
CRangeSignaling* GetRangeSignaling();
virtual IPersistantDebug* GetIPersistantDebug();
virtual IGameStatsConfig* GetIGameStatsConfig();
CColorGradientManager* GetColorGradientManager() const { return m_pColorGradientManager; }
virtual void AddBreakEventListener(IBreakEventListener* pListener);
virtual void RemoveBreakEventListener(IBreakEventListener* pListener);
void OnBreakEvent(uint16 uBreakEventIndex);
void OnPartRemoveEvent(int32 iPartRemoveEventIndex);
virtual void RegisterListener(IGameFrameworkListener* pGameFrameworkListener, const char* name, EFRAMEWORKLISTENERPRIORITY eFrameworkListenerPriority);
virtual void UnregisterListener(IGameFrameworkListener* pGameFrameworkListener);
CDialogSystem* GetDialogSystem() { return m_pDialogSystem; }
CTimeOfDayScheduler* GetTimeOfDayScheduler() const { return m_pTimeOfDayScheduler; }
CGameStatsConfig* GetGameStatsConfig();
IGameStatistics* GetIGameStatistics();
IGameSessionHandler* GetIGameSessionHandler();
void SetGameSessionHandler(IGameSessionHandler* pSessionHandler);
CNetMessageDistpatcher* GetNetMessageDispatcher() { return m_pNetMsgDispatcher; }
CManualFrameStepController* GetManualFrameStepController() { return m_pManualFrameStepController; }
CEntityContainerMgr& GetEntityContainerMgr() { return *m_pEntityContainerMgr; }
CEntityAttachmentExNodeRegistry& GetEntityAttachmentExNodeRegistry() { return *m_pEntityAttachmentExNodeRegistry; }
// INetQueryListener* GetLanQueryListener() {return m_pLanQueryListener;}
bool LoadingScreenEnabled() const;
int NetworkExposeClass(IFunctionHandler* pFH);
void NotifyGameFrameworkListeners(ISaveGame* pSaveGame);
void NotifyGameFrameworkListeners(ILoadGame* pLoadGame);
void NotifySavegameFileLoadedToListeners(const char* pLevelName);
void NotifyForceFlashLoadingListeners();
virtual void EnableVoiceRecording(const bool enable);
virtual void MutePlayerById(EntityId mutePlayer);
virtual IDebugHistoryManager* CreateDebugHistoryManager();
virtual void ExecuteCommandNextFrame(const char* cmd);
virtual const char* GetNextFrameCommand() const;
virtual void ClearNextFrameCommand();
virtual void PrefetchLevelAssets(const bool bEnforceAll);
virtual void ShowPageInBrowser(const char* URL);
virtual bool StartProcess(const char* cmd_line);
virtual bool SaveServerConfig(const char* path);
void OnActionEvent(const SActionEvent& ev);
bool IsPbSvEnabled() const { return m_pbSvEnabled; }
bool IsPbClEnabled() const { return m_pbClEnabled; }
void DumpMemInfo(const char* format, ...) PRINTF_PARAMS(2, 3);
const char* GetStartLevelSaveGameName();
virtual IAIActorProxy* GetAIActorProxy(EntityId entityid) const;
CAIProxyManager* GetAIProxyManager() { return m_pAIProxyManager; }
const CAIProxyManager* GetAIProxyManager() const { return m_pAIProxyManager; }
void CreatePhysicsQueues();
void ClearPhysicsQueues();
CCryActionPhysicQueues& GetPhysicQueues();
bool IsGameSessionMigrating();
void StartNetworkStallTicker(bool includeMinimalUpdate);
void StopNetworkStallTicker();
void GoToSegment(int x, int y);
bool PreUpdate(bool haveFocus, unsigned int updateFlags);
int Update(bool haveFocus, unsigned int updateFlags);
void PostUpdate(bool haveFocus, unsigned int updateFlags);
const std::vector<INetworkedClientListener*>& GetNetworkClientListeners() const { return m_networkClientListeners; }
private:
void InitScriptBinds();
void ReleaseScriptBinds();
bool InitGame(SSystemInitParams& startupParams);
bool ShutdownGame();
void Run(const char* szAutoStartLevelName);
void InitForceFeedbackSystem();
void InitGameVolumesManager();
void InitCVars();
void ReleaseCVars();
void InitCommands();
// console commands provided by CryAction
static void DumpMapsCmd(IConsoleCmdArgs* args);
static void MapCmd(IConsoleCmdArgs* args);
static void ReloadReadabilityXML(IConsoleCmdArgs* args);
static void UnloadCmd(IConsoleCmdArgs* args);
static void PlayCmd(IConsoleCmdArgs* args);
static void ConnectCmd(IConsoleCmdArgs* args);
static void DisconnectCmd(IConsoleCmdArgs* args);
static void DisconnectChannelCmd(IConsoleCmdArgs* args);
static void StatusCmd(IConsoleCmdArgs* args);
static void LegacyStatusCmd(IConsoleCmdArgs* args);
static void VersionCmd(IConsoleCmdArgs* args);
static void SaveTagCmd(IConsoleCmdArgs* args);
static void LoadTagCmd(IConsoleCmdArgs* args);
static void SaveGameCmd(IConsoleCmdArgs* args);
static void GenStringsSaveGameCmd(IConsoleCmdArgs* args);
static void LoadGameCmd(IConsoleCmdArgs* args);
static void KickPlayerCmd(IConsoleCmdArgs* args);
static void LegacyKickPlayerCmd(IConsoleCmdArgs* args);
static void KickPlayerByIdCmd(IConsoleCmdArgs* args);
static void LegacyKickPlayerByIdCmd(IConsoleCmdArgs* args);
static void BanPlayerCmd(IConsoleCmdArgs* args);
static void LegacyBanPlayerCmd(IConsoleCmdArgs* args);
static void BanStatusCmd(IConsoleCmdArgs* args);
static void LegacyBanStatusCmd(IConsoleCmdArgs* args);
static void UnbanPlayerCmd(IConsoleCmdArgs* args);
static void LegacyUnbanPlayerCmd(IConsoleCmdArgs* args);
static void OpenURLCmd(IConsoleCmdArgs* args);
static void TestResetCmd(IConsoleCmdArgs* args);
static void DumpAnalysisStatsCmd(IConsoleCmdArgs* args);
#if !defined(_RELEASE)
static void ConnectRepeatedlyCmd(IConsoleCmdArgs* args);
#endif
static void TestTimeout(IConsoleCmdArgs* args);
static void TestNSServerBrowser(IConsoleCmdArgs* args);
static void TestNSServerReport(IConsoleCmdArgs* args);
static void TestNSChat(IConsoleCmdArgs* args);
static void TestNSStats(IConsoleCmdArgs* args);
static void TestNSNat(IConsoleCmdArgs* args);
static void TestPlayerBoundsCmd(IConsoleCmdArgs* args);
static void DelegateCmd(IConsoleCmdArgs* args);
static void DumpStatsCmd(IConsoleCmdArgs* args);
// console commands for the remote control system
//static void rcon_password(IConsoleCmdArgs* args);
static void rcon_startserver(IConsoleCmdArgs* args);
static void rcon_stopserver(IConsoleCmdArgs* args);
static void rcon_connect(IConsoleCmdArgs* args);
static void rcon_disconnect(IConsoleCmdArgs* args);
static void rcon_command(IConsoleCmdArgs* args);
static struct IRemoteControlServer* s_rcon_server;
static struct IRemoteControlClient* s_rcon_client;
static class CRConClientListener* s_rcon_client_listener;
//static string s_rcon_password;
// console commands for the simple http server
static void http_startserver(IConsoleCmdArgs* args);
static void http_stopserver(IConsoleCmdArgs* args);
static struct ISimpleHttpServer* s_http_server;
// change the game query (better than setting it explicitly)
void SetGameQueryListener(CGameQueryListener*);
void CheckEndLevelSchedule();
#if !defined(_RELEASE)
void CheckConnectRepeatedly();
#endif
static void MutePlayer(IConsoleCmdArgs* pArgs);
static void VerifyMaxPlayers(ICVar* pVar);
static void ResetComments(ICVar* pVar);
static void StaticSetPbSvEnabled(IConsoleCmdArgs* pArgs);
static void StaticSetPbClEnabled(IConsoleCmdArgs* pArgs);
// NOTE: anything owned by this class should be a pointer or a simple
// type - nothing that will need its constructor called when CryAction's
// constructor is called (we don't have access to malloc() at that stage)
bool m_paused;
bool m_forcedpause;
static CCryAction* m_pThis;
ISystem* m_pSystem;
INetwork* m_pNetwork;
I3DEngine* m_p3DEngine;
IScriptSystem* m_pScriptSystem;
IEntitySystem* m_pEntitySystem;
ITimer* m_pTimer;
ILog* m_pLog;
void* m_systemDll;
IGameToEditorInterface* m_pGameToEditor;
_smart_ptr<CActionGame> m_pGame;
char m_editorLevelName[512]; // to avoid having to call string constructor, or allocating memory.
char m_editorLevelFolder[512];
char m_gameGUID[128];
CLevelSystem* m_pLevelSystem;
CActorSystem* m_pActorSystem;
CItemSystem* m_pItemSystem;
CVehicleSystem* m_pVehicleSystem;
CSharedParamsManager* m_pSharedParamsManager;
CActionMapManager* m_pActionMapManager;
CViewSystem* m_pViewSystem;
CGameplayRecorder* m_pGameplayRecorder;
CGameRulesSystem* m_pGameRulesSystem;
CGameObjectSystem* m_pGameObjectSystem;
CUIDraw* m_pUIDraw;
CScriptRMI* m_pScriptRMI;
CAnimationGraphCVars* m_pAnimationGraphCvars;
IMannequin* m_pMannequin;
CMaterialEffects* m_pMaterialEffects;
IBreakableGlassSystem* m_pBreakableGlassSystem;
CPlayerProfileManager* m_pPlayerProfileManager;
CDialogSystem* m_pDialogSystem;
CSubtitleManager* m_pSubtitleManager;
IEffectSystem* m_pEffectSystem;
CGameSerialize* m_pGameSerialize;
CallbackTimer* m_pCallbackTimer;
CGameplayAnalyst* m_pGameplayAnalyst;
CForceFeedBackSystem* m_pForceFeedBackSystem;
// INetQueryListener *m_pLanQueryListener;
ILanQueryListener* m_pLanQueryListener;
CCustomActionManager* m_pCustomActionManager;
CCustomEventManager* m_pCustomEventManager;
CGameStatsConfig* m_pGameStatsConfig;
IGameStatistics* m_pGameStatistics;
ICooperativeAnimationManager* m_pCooperativeAnimationManager;
IGameSessionHandler* m_pGameSessionHandler;
CAIProxyManager* m_pAIProxyManager;
CSegmentedWorld* m_pSegmentedWorld;
IGameVolumes* m_pGameVolumesManager;
// developer mode
CDevMode* m_pDevMode;
// TimeDemo recorder.
CTimeDemoRecorder* m_pTimeDemoRecorder;
// game queries
CGameQueryListener* m_pGameQueryListener;
// Currently handles the automatic creation of vegetation areas
CRuntimeAreaManager* m_pRuntimeAreaManager;
// script binds
CScriptBind_Action* m_pScriptA;
CScriptBind_ItemSystem* m_pScriptIS;
CScriptBind_ActorSystem* m_pScriptAS;
CScriptBind_Network* m_pScriptNet;
CScriptBind_ActionMapManager* m_pScriptAMM;
CScriptBind_VehicleSystem* m_pScriptVS;
CScriptBind_Vehicle* m_pScriptBindVehicle;
CScriptBind_VehicleSeat* m_pScriptBindVehicleSeat;
CScriptBind_Inventory* m_pScriptInventory;
CScriptBind_DialogSystem* m_pScriptBindDS;
CScriptBind_MaterialEffects* m_pScriptBindMFX;
CScriptBind_UIAction* m_pScriptBindUIAction;
CTimeOfDayScheduler* m_pTimeOfDayScheduler;
CPersistantDebug* m_pPersistantDebug;
CAIDebugRenderer* m_pAIDebugRenderer;
CAINetworkDebugRenderer* m_pAINetworkDebugRenderer;
CNetworkCVars* m_pNetworkCVars;
CCryActionCVars* m_pCryActionCVars;
CColorGradientManager* m_pColorGradientManager;
//-- Network Stall ticker thread
#ifdef USE_NETWORK_STALL_TICKER_THREAD
CNetworkStallTickerThread* m_pNetworkStallTickerThread;
uint32 m_networkStallTickerReferences;
#endif // #ifdef USE_NETWORK_STALL_TICKER_THREAD
// Console Variables with some CryAction as owner
CMaterialEffectsCVars* m_pMaterialEffectsCVars;
CCryActionPhysicQueues* m_pPhysicsQueues;
typedef std::vector<ICryUnknownPtr> TFrameworkExtensions;
TFrameworkExtensions m_frameworkExtensions;
// console variables
ICVar* m_pEnableLoadingScreen;
ICVar* m_pCheats;
ICVar* m_pShowLanBrowserCVAR;
ICVar* m_pDebugSignalTimers;
ICVar* m_pDebugRangeSignaling;
ICVar* m_pAsyncLevelLoad;
bool m_bShowLanBrowser;
//
bool m_isEditing;
bool m_bScheduleLevelEnd;
enum ESaveGameMethod
{
eSGM_NoSave = 0,
eSGM_QuickSave,
eSGM_Save
};
ESaveGameMethod m_delayedSaveGameMethod; // 0 -> no save, 1=quick save, 2=save, not quick
ESaveGameReason m_delayedSaveGameReason;
int m_delayedSaveCountDown;
struct SExternalGameLibrary
{
string dllName;
HMODULE dllHandle;
IGameStartup* pGameStartup;
IGame* pGame;
SExternalGameLibrary() : dllName(""), dllHandle(0), pGameStartup(nullptr), pGame(nullptr) {}
bool IsValid() const { return (pGameStartup != nullptr && pGame != nullptr); }
void Reset() { dllName = ""; dllHandle = 0; pGameStartup = nullptr; pGame = nullptr; }
};
struct SLocalAllocs
{
string m_delayedSaveGameName;
string m_checkPointName;
string m_nextLevelToLoad;
};
SLocalAllocs* m_pLocalAllocs;
struct SGameFrameworkListener
{
IGameFrameworkListener* pListener;
CryStackStringT<char, 64> name;
EFRAMEWORKLISTENERPRIORITY eFrameworkListenerPriority;
SGameFrameworkListener() : pListener(0), eFrameworkListenerPriority(FRAMEWORKLISTENERPRIORITY_DEFAULT) {}
void GetMemoryUsage(ICrySizer* pSizer) const {}
};
typedef std::vector<SGameFrameworkListener> TGameFrameworkListeners;
TGameFrameworkListeners* m_pGFListeners;
IBreakEventListener* m_pBreakEventListener;
std::vector<bool> m_validListeners;
int m_VoiceRecordingEnabled;
bool m_bAllowSave;
bool m_bAllowLoad;
string* m_nextFrameCommand;
string* m_connectServer;
#if !defined(_RELEASE)
struct SConnectRepeatedly
{
bool m_enabled;
int m_numAttemptsLeft;
float m_timeForNextAttempt;
SConnectRepeatedly() : m_enabled(false), m_numAttemptsLeft(0), m_timeForNextAttempt(0.0f) {}
} m_connectRepeatedly;
#endif
float m_lastSaveLoad;
float m_lastFrameTimeUI;
bool m_pbSvEnabled;
bool m_pbClEnabled;
uint32 m_PreUpdateTicks;
SExternalGameLibrary m_externalGameLibrary;
CNetMessageDistpatcher* m_pNetMsgDispatcher;
CManualFrameStepController* m_pManualFrameStepController;
CEntityContainerMgr* m_pEntityContainerMgr;
CEntityAttachmentExNodeRegistry* m_pEntityAttachmentExNodeRegistry;
CTimeValue m_levelStartTime;
std::vector<INetworkedClientListener*> m_networkClientListeners;
};
#endif //__CRYACTION_H__