6d592d78cd
* This set of changes is work toward allowing release builds to work with asset bundler generated bundles and legacy, non-prefab levels. This requires some other in-flight changes before this work is complete.
Updated engine seed list + fixed automated test
ComponentApplicationLifecycle has the ability to automatically register events if asked to register a handler and the event doesn't exist. This is only intended for cases where you need to register a handler early in startup before the settings registry file is loaded.
Added two new lifecycle events: One after the system entity has been activated, and one after the system interface has been created.
If you load an archive before the system entity has been activated, archive.cpp caches information about those archives until that time, so it can finish registration. This is because the serialization system and BundlingSystemComponent both need to be available to do this registration, but the bundles have to be loaded before those are initialized so that the settings registry file can be loaded.
Fixed an error were mounted pak files were searching for levels.pak and not level.pak, and not finding them. I'm pretty sure this logic doesn't do anything functional either way, but I've been testing legacy levels with this change and they work now.
Moved wildcard pak loading to where engine.pak is loaded. This is because the settings registry file that defines the IO stack to spin up must be available early in application startup, and this file must be within a mounted pak file. If you're using asset bundler generated bundles, they need to be loaded at this time so that file can be loaded.
Atom's BootstrapSystemComponent.cpp no longer initializes on AssetCatalogLoaded, and instead initializes on the ApplicationLifecycle event SystemInterfaceCreated. This is because the base assetcatalog.xml file is really just a development time concept, this file should not be used in packaged release builds, because those builds will make use of delta catalogs in each bundle loaded. The asset catalog contains the list of all assets that were in the cache at development time, and this contains content that developers don't want to ship, and they may want to specifically hide from their customers, so data miners don't find secrets about upcoming game content.
Recovering from a branch that had incorrect DCO
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
* Fixed an incorrect ebus disconnect and removed an include that's no longer needed
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
* Fixed a copy and paste typo from trying to recover the previous pull request
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
* Updated product IDs for the settings registry builder to no longer collide with the JSON builder. Now they are based on a hash of the configuration.
Updated the engine default seed list to include the new asset ID info for the renamed bootstrap file
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
* Updated the path to the application lifecycle events, because runtime settings aren't included in the merged bootstrap file.
Addressed some feedback on printing out a string view on an error
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
* Removed a test that uses old assets that aren't relevant. We may not need this test anymore, but if we do we've backlogged a task to create a new test to cover this behavior without using old assets.
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
* Renamed SystemInterfaceCreated event to LegacySystemInterfaceCreated
Removed SystemEntityActivated event. Now that I have the rest of the fixes in this pull request, this new event wasn't needed, the already existing SystemComponentsActivated event does what I need.
Changed list to vector
Signed-off-by: stankowi <4838196+AMZN-stankowi@users.noreply.github.com>
665 lines
23 KiB
C++
665 lines
23 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
|
|
|
|
#pragma once
|
|
|
|
#include <ISystem.h>
|
|
#include <IRenderer.h>
|
|
#include <IWindowMessageHandler.h>
|
|
|
|
#include "Timer.h"
|
|
#include <CryVersion.h>
|
|
#include "CmdLine.h"
|
|
|
|
#include <AzFramework/Archive/ArchiveVars.h>
|
|
#include <LoadScreenBus.h>
|
|
|
|
#include <AzCore/Module/DynamicModuleHandle.h>
|
|
#include <AzCore/Math/Crc.h>
|
|
|
|
#include <list>
|
|
#include <map>
|
|
|
|
namespace AzFramework
|
|
{
|
|
class MissingAssetLogger;
|
|
}
|
|
|
|
struct IConsoleCmdArgs;
|
|
struct ICVar;
|
|
struct IFFont;
|
|
class CWatchdogThread;
|
|
|
|
#if defined(AZ_RESTRICTED_PLATFORM)
|
|
#undef AZ_RESTRICTED_SECTION
|
|
#define SYSTEM_H_SECTION_1 1
|
|
#define SYSTEM_H_SECTION_2 2
|
|
#define SYSTEM_H_SECTION_3 3
|
|
#define SYSTEM_H_SECTION_4 4
|
|
#endif
|
|
|
|
#if defined(AZ_RESTRICTED_PLATFORM)
|
|
#define AZ_RESTRICTED_SECTION SYSTEM_H_SECTION_1
|
|
#include AZ_RESTRICTED_FILE(System_h)
|
|
#else
|
|
#if defined(WIN32) || defined(LINUX) || defined(APPLE)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_ALLOW_CREATE_BACKUP_LOG_FILE 1
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
#if defined(WIN32) || defined(APPLE) || defined(LINUX)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_DO_PREASSERT 1
|
|
#endif
|
|
|
|
#if defined(LINUX) || defined(APPLE)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_FORWARD_EXCEPTION_POINTERS 1
|
|
#endif
|
|
|
|
#if !defined(_WIN32)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_DEBUGCALLSTACK_SINGLETON 1
|
|
#endif
|
|
#if !defined(LINUX) && !defined(APPLE)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_DEBUGCALLSTACK_TRANSLATE 1
|
|
#endif
|
|
#if !defined(LINUX) && !defined(APPLE)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_DEBUGCALLSTACK_APPEND_MODULENAME 1
|
|
#endif
|
|
|
|
#if 1
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_USE_EXCLUDEUPDATE_ON_CONSOLE 0
|
|
#endif
|
|
#if defined(WIN32)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_USE_MESSAGE_HANDLER 1
|
|
#endif
|
|
#if defined(WIN64) || defined(WIN32)
|
|
#define AZ_LEGACY_CRYSYSTEM_TRAIT_CAPTURESTACK 1
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif
|
|
|
|
#if defined(LINUX)
|
|
#include "CryLibrary.h"
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
using WIN_HMODULE = void*;
|
|
#else
|
|
typedef void* WIN_HMODULE;
|
|
#endif
|
|
|
|
//forward declarations
|
|
namespace Audio
|
|
{
|
|
struct IAudioSystem;
|
|
struct IMusicSystem;
|
|
} // namespace Audio
|
|
struct IDataProbe;
|
|
|
|
#define PHSYICS_OBJECT_ENTITY 0
|
|
|
|
using VTuneFunction = void (__cdecl *)(void);
|
|
extern VTuneFunction VTResume;
|
|
extern VTuneFunction VTPause;
|
|
|
|
#define MAX_STREAMING_POOL_INDEX 6
|
|
#define MAX_THREAD_POOL_INDEX 6
|
|
|
|
struct SSystemCVars
|
|
{
|
|
int sys_streaming_requests_grouping_time_period;
|
|
int sys_streaming_sleep;
|
|
int sys_streaming_memory_budget;
|
|
int sys_streaming_max_finalize_per_frame;
|
|
float sys_streaming_max_bandwidth;
|
|
int sys_streaming_cpu;
|
|
int sys_streaming_cpu_worker;
|
|
int sys_streaming_debug;
|
|
int sys_streaming_resetstats;
|
|
int sys_streaming_debug_filter;
|
|
float sys_streaming_debug_filter_min_time;
|
|
int sys_streaming_use_optical_drive_thread;
|
|
ICVar* sys_streaming_debug_filter_file_name;
|
|
ICVar* sys_localization_folder;
|
|
int sys_streaming_in_blocks;
|
|
|
|
int sys_float_exceptions;
|
|
int sys_no_crash_dialog;
|
|
int sys_no_error_report_window;
|
|
int sys_dump_aux_threads;
|
|
int sys_WER;
|
|
int sys_dump_type;
|
|
int sys_ai;
|
|
int sys_entitysystem;
|
|
int sys_trackview;
|
|
int sys_vtune;
|
|
float sys_update_profile_time;
|
|
int sys_limit_phys_thread_count;
|
|
int sys_MaxFPS;
|
|
float sys_maxTimeStepForMovieSystem;
|
|
int sys_force_installtohdd_mode;
|
|
int sys_report_files_not_found_in_paks = 0;
|
|
|
|
#ifdef USE_HTTP_WEBSOCKETS
|
|
int sys_simple_http_base_port;
|
|
#endif
|
|
|
|
int sys_asserts;
|
|
int sys_error_debugbreak;
|
|
|
|
int sys_FilesystemCaseSensitivity;
|
|
|
|
AZ::IO::ArchiveVars archiveVars;
|
|
|
|
#if defined(WIN32)
|
|
int sys_display_threads;
|
|
#elif defined(AZ_RESTRICTED_PLATFORM)
|
|
#define AZ_RESTRICTED_SECTION SYSTEM_H_SECTION_2
|
|
#include AZ_RESTRICTED_FILE(System_h)
|
|
#endif
|
|
};
|
|
extern SSystemCVars g_cvars;
|
|
|
|
class CSystem;
|
|
|
|
struct CProfilingSystem
|
|
: public IProfilingSystem
|
|
{
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// VTune Profiling interface.
|
|
|
|
// Summary:
|
|
// Resumes vtune data collection.
|
|
void VTuneResume() override;
|
|
// Summary:
|
|
// Pauses vtune data collection.
|
|
void VTunePause() override;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
};
|
|
|
|
class AssetSystem;
|
|
|
|
/*
|
|
===========================================
|
|
The System interface Class
|
|
===========================================
|
|
*/
|
|
class CXConsole;
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//! ISystem implementation
|
|
class CSystem
|
|
: public ISystem
|
|
, public ILoadConfigurationEntrySink
|
|
, public ISystemEventListener
|
|
, public IWindowMessageHandler
|
|
, public CrySystemRequestBus::Handler
|
|
{
|
|
public:
|
|
CSystem(SharedEnvironmentInstance* pSharedEnvironment);
|
|
~CSystem();
|
|
|
|
static void OnLanguageCVarChanged(ICVar* language);
|
|
static void OnLocalizationFolderCVarChanged(ICVar* const pLocalizationFolder);
|
|
// adding CVAR to toggle assert verbosity level
|
|
static void OnAssertLevelCvarChanged(ICVar* pArgs);
|
|
static void SetAssertLevel(int _assertlevel);
|
|
static void OnLogLevelCvarChanged(ICVar* pArgs);
|
|
static void SetLogLevel(int _logLevel);
|
|
|
|
// interface ILoadConfigurationEntrySink ----------------------------------
|
|
|
|
void OnLoadConfigurationEntry(const char* szKey, const char* szValue, const char* szGroup) override;
|
|
|
|
// ISystemEventListener
|
|
void OnSystemEvent(ESystemEvent event, UINT_PTR wparam, UINT_PTR lparam) override;
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
//! @name ISystem implementation
|
|
//@{
|
|
virtual bool Init(const SSystemInitParams& startupParams);
|
|
void Release() override;
|
|
|
|
SSystemGlobalEnvironment* GetGlobalEnvironment() override { return &m_env; }
|
|
|
|
bool UpdatePreTickBus(int updateFlags = 0, int nPauseMode = 0) override;
|
|
bool UpdatePostTickBus(int updateFlags = 0, int nPauseMode = 0) override;
|
|
bool UpdateLoadtime() override;
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// CrySystemRequestBus interface implementation
|
|
ISystem* GetCrySystem() override;
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
void Relaunch(bool bRelaunch) override;
|
|
bool IsRelaunch() const override { return m_bRelaunch; };
|
|
|
|
void SerializingFile(int mode) override { m_iLoadingMode = mode; }
|
|
int IsSerializingFile() const override { return m_iLoadingMode; }
|
|
void Quit() override;
|
|
bool IsQuitting() const override;
|
|
void ShutdownFileSystem(); // used to cleanup any file resources, such as cache handle.
|
|
void SetAffinity();
|
|
const char* GetUserName() override;
|
|
int GetApplicationInstance() override;
|
|
int GetApplicationLogInstance(const char* logFilePath) override;
|
|
|
|
ITimer* GetITimer() override{ return m_env.pTimer; }
|
|
AZ::IO::IArchive* GetIPak() override { return m_env.pCryPak; };
|
|
IConsole* GetIConsole() override { return m_env.pConsole; };
|
|
IRemoteConsole* GetIRemoteConsole() override;
|
|
IMovieSystem* GetIMovieSystem() override { return m_env.pMovieSystem; };
|
|
ICryFont* GetICryFont() override{ return m_env.pCryFont; }
|
|
ILog* GetILog() override{ return m_env.pLog; }
|
|
ICmdLine* GetICmdLine() override{ return m_pCmdLine; }
|
|
IViewSystem* GetIViewSystem() override;
|
|
ILevelSystem* GetILevelSystem() override;
|
|
ISystemEventDispatcher* GetISystemEventDispatcher() override { return m_pSystemEventDispatcher; }
|
|
IProfilingSystem* GetIProfilingSystem() override { return &m_ProfilingSystem; }
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// retrieves the perlin noise singleton instance
|
|
CPNoise3* GetNoiseGen() override;
|
|
uint64 GetUpdateCounter() override { return m_nUpdateCounter; };
|
|
|
|
void DetectGameFolderAccessRights();
|
|
|
|
void ExecuteCommandLine(bool deferred=true) override;
|
|
|
|
void GetUpdateStats(SSystemUpdateStats& stats) override;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
XmlNodeRef CreateXmlNode(const char* sNodeName = "", bool bReuseStrings = false, bool bIsProcessingInstruction = false) override;
|
|
XmlNodeRef LoadXmlFromFile(const char* sFilename, bool bReuseStrings = false) override;
|
|
XmlNodeRef LoadXmlFromBuffer(const char* buffer, size_t size, bool bReuseStrings = false, bool bSuppressWarnings = false) override;
|
|
IXmlUtils* GetXmlUtils() override;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void IgnoreUpdates(bool bIgnore) override { m_bIgnoreUpdates = bIgnore; };
|
|
|
|
void SetIProcess(IProcess* process) override;
|
|
IProcess* GetIProcess() override{ return m_pProcess; }
|
|
|
|
bool IsTestMode() const override { return m_bTestMode; }
|
|
//@}
|
|
|
|
void SleepIfNeeded();
|
|
|
|
void FatalError(const char* format, ...) override PRINTF_PARAMS(2, 3);
|
|
void ReportBug(const char* format, ...) override PRINTF_PARAMS(2, 3);
|
|
// Validator Warning.
|
|
void WarningV(EValidatorModule module, EValidatorSeverity severity, int flags, const char* file, const char* format, va_list args) override;
|
|
void Warning(EValidatorModule module, EValidatorSeverity severity, int flags, const char* file, const char* format, ...) override;
|
|
int ShowMessage(const char* text, const char* caption, unsigned int uType) override;
|
|
bool CheckLogVerbosity(int verbosity) override;
|
|
|
|
//! Return pointer to user defined callback.
|
|
ISystemUserCallback* GetUserCallback() const { return m_pUserCallback; };
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void SaveConfiguration() override;
|
|
void LoadConfiguration(const char* sFilename, ILoadConfigurationEntrySink* pSink = nullptr, bool warnIfMissing = true) override;
|
|
ESystemConfigSpec GetMaxConfigSpec() const override;
|
|
ESystemConfigPlatform GetConfigPlatform() const override;
|
|
void SetConfigPlatform(ESystemConfigPlatform platform) override;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
bool IsPaused() const override { return m_bPaused; };
|
|
|
|
ILocalizationManager* GetLocalizationManager() override;
|
|
void debug_GetCallStack(const char** pFunctions, int& nCount) override;
|
|
void debug_LogCallStack(int nMaxFuncs = 32, int nFlags = 0) override;
|
|
// Get the current callstack in raw address form (more lightweight than the above functions)
|
|
// static as memReplay needs it before CSystem has been setup - expose a ISystem interface to this function if you need it outside CrySystem
|
|
static void debug_GetCallStackRaw(void** callstack, uint32& callstackLength);
|
|
|
|
public:
|
|
#if !defined(RELEASE)
|
|
void SetVersionInfo(const char* const szVersion);
|
|
#endif
|
|
|
|
void ShutdownModuleLibraries();
|
|
|
|
#if defined(WIN32)
|
|
friend LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
#endif
|
|
void* GetRootWindowMessageHandler() override;
|
|
void RegisterWindowMessageHandler(IWindowMessageHandler* pHandler) override;
|
|
void UnregisterWindowMessageHandler(IWindowMessageHandler* pHandler) override;
|
|
|
|
// IWindowMessageHandler
|
|
#if defined(WIN32)
|
|
bool HandleMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult) override;
|
|
#endif
|
|
// ~IWindowMessageHandler
|
|
|
|
private:
|
|
|
|
// Release all resources.
|
|
void ShutDown();
|
|
|
|
bool LoadEngineDLLs();
|
|
|
|
//! @name Initialization routines
|
|
//@{
|
|
bool InitConsole();
|
|
bool InitFileSystem();
|
|
bool InitFileSystem_LoadEngineFolders(const SSystemInitParams& initParams);
|
|
bool InitAudioSystem(const SSystemInitParams& initParams);
|
|
|
|
//@}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Helper functions.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CreateSystemVars();
|
|
void CreateAudioVars();
|
|
|
|
AZStd::unique_ptr<AZ::DynamicModuleHandle> LoadDLL(const char* dllName);
|
|
|
|
void FreeLib(AZStd::unique_ptr<AZ::DynamicModuleHandle>& hLibModule);
|
|
|
|
bool UnloadDLL(const char* dllName);
|
|
void QueryVersionInfo();
|
|
void LogVersion();
|
|
void LogBuildInfo();
|
|
void SetDevMode(bool bEnable);
|
|
|
|
#ifndef _RELEASE
|
|
static void SystemVersionChanged(ICVar* pCVar);
|
|
#endif // #ifndef _RELEASE
|
|
|
|
bool ReLaunchMediaCenter();
|
|
void UpdateAudioSystems();
|
|
|
|
void AddCVarGroupDirectory(const AZStd::string& sPath) override;
|
|
|
|
AZStd::unique_ptr<AZ::DynamicModuleHandle> LoadDynamiclibrary(const char* dllName) const;
|
|
|
|
#if defined(AZ_RESTRICTED_PLATFORM)
|
|
#define AZ_RESTRICTED_SECTION SYSTEM_H_SECTION_3
|
|
#include AZ_RESTRICTED_FILE(System_h)
|
|
#elif defined(WIN32)
|
|
bool GetWinGameFolder(char* szMyDocumentsPath, int maxPathSize);
|
|
#endif
|
|
|
|
public:
|
|
void EnableFloatExceptions(int type);
|
|
|
|
// interface ISystem -------------------------------------------
|
|
virtual IDataProbe* GetIDataProbe() { return m_pDataProbe; };
|
|
void SetForceNonDevMode(bool bValue) override;
|
|
bool GetForceNonDevMode() const override;
|
|
bool WasInDevMode() const override { return m_bWasInDevMode; };
|
|
bool IsDevMode() const override { return m_bInDevMode && !GetForceNonDevMode(); }
|
|
|
|
void SetConsoleDrawEnabled(bool enabled) override { m_bDrawConsole = enabled; }
|
|
void SetUIDrawEnabled(bool enabled) override { m_bDrawUI = enabled; }
|
|
|
|
// -------------------------------------------------------------
|
|
|
|
//! attaches the given variable to the given container;
|
|
//! recreates the variable if necessary
|
|
ICVar* attachVariable (const char* szVarName, int* pContainer, const char* szComment, int dwFlags = 0);
|
|
|
|
const CTimeValue& GetLastTickTime() const { return m_lastTickTime; }
|
|
const ICVar* GetDedicatedMaxRate() const { return m_svDedicatedMaxRate; }
|
|
|
|
std::shared_ptr<AZ::IO::FileIOBase> CreateLocalFileIO() override;
|
|
|
|
private: // ------------------------------------------------------
|
|
|
|
// System environment.
|
|
SSystemGlobalEnvironment m_env;
|
|
|
|
CTimer m_Time; //!<
|
|
bool m_bInitializedSuccessfully; //!< true if the system completed all initialization steps
|
|
bool m_bRelaunch; //!< relaunching the app or not (true beforerelaunch)
|
|
int m_iLoadingMode; //!< Game is loading w/o changing context (0 not, 1 quickloading, 2 full loading)
|
|
bool m_bTestMode; //!< If running in testing mode.
|
|
bool m_bEditor; //!< If running in Editor.
|
|
bool m_bNoCrashDialog;
|
|
bool m_bNoErrorReportWindow;
|
|
bool m_bPreviewMode; //!< If running in Preview mode.
|
|
bool m_bDedicatedServer; //!< If running as Dedicated server.
|
|
bool m_bIgnoreUpdates; //!< When set to true will ignore Update and Render calls,
|
|
bool m_bForceNonDevMode; //!< true when running on a cheat protected server or a client that is connected to it (not used in singlplayer)
|
|
bool m_bWasInDevMode; //!< Set to true if was in dev mode.
|
|
bool m_bInDevMode; //!< Set to true if was in dev mode.
|
|
bool m_bGameFolderWritable;//!< True when verified that current game folder have write access.
|
|
int m_ttMemStatSS; //!< Time to memstat screenshot
|
|
bool m_bDrawConsole; //!< Set to true if OK to draw the console.
|
|
bool m_bDrawUI; //!< Set to true if OK to draw UI.
|
|
|
|
|
|
std::map<AZ::Crc32, AZStd::unique_ptr<AZ::DynamicModuleHandle> > m_moduleDLLHandles;
|
|
|
|
//! current active process
|
|
IProcess* m_pProcess;
|
|
|
|
CCamera m_PhysRendererCamera;
|
|
ICVar* m_p_draw_helpers_str;
|
|
int m_iJumpToPhysProfileEnt;
|
|
|
|
CTimeValue m_lastTickTime;
|
|
|
|
//! system event dispatcher
|
|
ISystemEventDispatcher* m_pSystemEventDispatcher;
|
|
|
|
//! The default mono-spaced font for internal usage (profiling, debug info, etc.)
|
|
IFFont* m_pIFont;
|
|
|
|
//! The default font for end-user UI interfaces
|
|
IFFont* m_pIFontUi;
|
|
|
|
//! System to manage levels.
|
|
ILevelSystem* m_pLevelSystem;
|
|
|
|
//! System to manage views.
|
|
IViewSystem* m_pViewSystem;
|
|
|
|
// XML Utils interface.
|
|
class CXmlUtils* m_pXMLUtils;
|
|
|
|
int m_iApplicationInstance;
|
|
|
|
//! to hold the values stored in system.cfg
|
|
//! because editor uses it's own values,
|
|
//! and then saves them to file, overwriting the user's resolution.
|
|
int m_iHeight;
|
|
int m_iWidth;
|
|
int m_iColorBits;
|
|
|
|
// System console variables.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// DLL names
|
|
ICVar* m_sys_dll_response_system;
|
|
#if !defined(_RELEASE)
|
|
ICVar* m_sys_resource_cache_folder;
|
|
#endif
|
|
|
|
#if AZ_LOADSCREENCOMPONENT_ENABLED
|
|
ICVar* m_game_load_screen_uicanvas_path;
|
|
ICVar* m_level_load_screen_uicanvas_path;
|
|
ICVar* m_game_load_screen_sequence_to_auto_play;
|
|
ICVar* m_level_load_screen_sequence_to_auto_play;
|
|
ICVar* m_game_load_screen_sequence_fixed_fps;
|
|
ICVar* m_level_load_screen_sequence_fixed_fps;
|
|
ICVar* m_game_load_screen_max_fps;
|
|
ICVar* m_level_load_screen_max_fps;
|
|
ICVar* m_game_load_screen_minimum_time{};
|
|
ICVar* m_level_load_screen_minimum_time{};
|
|
#endif // if AZ_LOADSCREENCOMPONENT_ENABLED
|
|
|
|
ICVar* m_sys_initpreloadpacks;
|
|
ICVar* m_sys_menupreloadpacks;
|
|
|
|
ICVar* m_cvAIUpdate;
|
|
ICVar* m_rWidth;
|
|
ICVar* m_rHeight;
|
|
ICVar* m_rWidthAndHeightAsFractionOfScreenSize;
|
|
ICVar* m_rTabletWidthAndHeightAsFractionOfScreenSize;
|
|
ICVar* m_rHDRDolby;
|
|
ICVar* m_rMaxWidth;
|
|
ICVar* m_rMaxHeight;
|
|
ICVar* m_rColorBits;
|
|
ICVar* m_rDepthBits;
|
|
ICVar* m_rStencilBits;
|
|
ICVar* m_rFullscreen;
|
|
ICVar* m_rFullscreenWindow;
|
|
ICVar* m_rFullscreenNativeRes;
|
|
ICVar* m_rDisplayInfo;
|
|
ICVar* m_rOverscanBordersDrawDebugView;
|
|
ICVar* m_sysNoUpdate;
|
|
ICVar* m_cvEntitySuppressionLevel;
|
|
ICVar* m_pCVarQuit;
|
|
ICVar* m_cvMemStats;
|
|
ICVar* m_cvMemStatsThreshold;
|
|
ICVar* m_cvMemStatsMaxDepth;
|
|
ICVar* m_sysKeyboard;
|
|
ICVar* m_sysWarnings; //!< might be 0, "sys_warnings" - Treat warning as errors.
|
|
ICVar* m_cvSSInfo; //!< might be 0, "sys_SSInfo" 0/1 - get file sourcesafe info
|
|
ICVar* m_svDedicatedMaxRate;
|
|
ICVar* m_sys_firstlaunch;
|
|
ICVar* m_sys_asset_processor;
|
|
ICVar* m_sys_load_files_to_memory;
|
|
|
|
#if defined(AZ_RESTRICTED_PLATFORM)
|
|
#define AZ_RESTRICTED_SECTION SYSTEM_H_SECTION_4
|
|
#include AZ_RESTRICTED_FILE(System_h)
|
|
#endif
|
|
|
|
ICVar* m_sys_audio_disable;
|
|
|
|
ICVar* m_sys_min_step;
|
|
ICVar* m_sys_max_step;
|
|
ICVar* m_sys_enable_budgetmonitoring;
|
|
ICVar* m_sys_memory_debug;
|
|
ICVar* m_sys_preload;
|
|
|
|
// ICVar *m_sys_filecache;
|
|
ICVar* m_gpu_particle_physics;
|
|
|
|
AZStd::string m_sSavedRDriver; //!< to restore the driver when quitting the dedicated server
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//! User define callback for system events.
|
|
ISystemUserCallback* m_pUserCallback;
|
|
|
|
SFileVersion m_fileVersion;
|
|
SFileVersion m_productVersion;
|
|
SFileVersion m_buildVersion;
|
|
IDataProbe* m_pDataProbe;
|
|
|
|
class CLocalizedStringsManager* m_pLocalizationManager;
|
|
|
|
ESystemConfigSpec m_nServerConfigSpec;
|
|
ESystemConfigSpec m_nMaxConfigSpec;
|
|
ESystemConfigPlatform m_ConfigPlatform;
|
|
|
|
CProfilingSystem m_ProfilingSystem;
|
|
|
|
// Pause mode.
|
|
bool m_bPaused;
|
|
bool m_bNoUpdate;
|
|
|
|
uint64 m_nUpdateCounter;
|
|
|
|
bool m_executedCommandLine = false;
|
|
|
|
AZStd::unique_ptr<AzFramework::MissingAssetLogger> m_missingAssetLogger;
|
|
|
|
public:
|
|
ICVar* m_sys_main_CPU;
|
|
ICVar* m_sys_streaming_CPU;
|
|
ICVar* m_sys_TaskThread_CPU[MAX_THREAD_POOL_INDEX];
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// File version.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
const SFileVersion& GetFileVersion() override;
|
|
const SFileVersion& GetProductVersion() override;
|
|
const SFileVersion& GetBuildVersion() override;
|
|
|
|
bool InitVTuneProfiler();
|
|
|
|
void OpenPlatformPaks();
|
|
void OpenLanguagePak(const char* sLanguage);
|
|
void OpenLanguageAudioPak(const char* sLanguage);
|
|
void GetLocalizedPath(const char* sLanguage, AZStd::string& sLocalizedPath);
|
|
void GetLocalizedAudioPath(const char* sLanguage, AZStd::string& sLocalizedPath);
|
|
void CloseLanguagePak(const char* sLanguage);
|
|
void CloseLanguageAudioPak(const char* sLanguage);
|
|
void UpdateMovieSystem(const int updateFlags, const float fFrameTime, const bool bPreUpdate);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CryAssert and error related.
|
|
bool RegisterErrorObserver(IErrorObserver* errorObserver) override;
|
|
bool UnregisterErrorObserver(IErrorObserver* errorObserver) override;
|
|
void OnAssert(const char* condition, const char* message, const char* fileName, unsigned int fileLineNumber) override;
|
|
void OnFatalError(const char* message);
|
|
|
|
bool IsAssertDialogVisible() const override;
|
|
void SetAssertVisible(bool bAssertVisble) override;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void ClearErrorMessages() override
|
|
{
|
|
m_ErrorMessages.clear();
|
|
}
|
|
|
|
bool IsLoading()
|
|
{
|
|
return m_eRuntimeState == ESYSTEM_EVENT_LEVEL_LOAD_START_LOADINGSCREEN;
|
|
}
|
|
|
|
ESystemGlobalState GetSystemGlobalState() override;
|
|
void SetSystemGlobalState(ESystemGlobalState systemGlobalState) override;
|
|
|
|
#if !defined(_RELEASE)
|
|
bool IsSavingResourceList() const override { return (g_cvars.archiveVars.nSaveLevelResourceList != 0); }
|
|
#endif
|
|
|
|
private:
|
|
std::vector<IErrorObserver*> m_errorObservers;
|
|
ESystemGlobalState m_systemGlobalState;
|
|
static const char* GetSystemGlobalStateName(const ESystemGlobalState systemGlobalState);
|
|
|
|
public:
|
|
void InitLocalization();
|
|
|
|
protected: // -------------------------------------------------------------
|
|
|
|
CCmdLine* m_pCmdLine;
|
|
|
|
AZStd::string m_currentLanguageAudio;
|
|
AZStd::string m_systemConfigName; // computed from system_(hardwareplatform)_(assetsPlatform) - eg, system_android_android.cfg or system_windows_pc.cfg
|
|
|
|
std::vector< std::pair<CTimeValue, float> > m_updateTimes;
|
|
|
|
struct SErrorMessage
|
|
{
|
|
AZStd::string m_Message;
|
|
float m_fTimeToShow;
|
|
float m_Color[4];
|
|
bool m_HardFailure;
|
|
};
|
|
using TErrorMessages = std::list<SErrorMessage>;
|
|
TErrorMessages m_ErrorMessages;
|
|
bool m_bHasRenderedErrorMessage;
|
|
|
|
ESystemEvent m_eRuntimeState;
|
|
bool m_bIsAsserting;
|
|
|
|
std::vector<IWindowMessageHandler*> m_windowMessageHandlers;
|
|
bool m_initedOSAllocator = false;
|
|
bool m_initedSysAllocator = false;
|
|
};
|