Files
o3de/Code/Editor/Settings.h
T
lumberyard-employee-dm 447832dd81 Updated the GameApplication to mount the engine.pak (#4128)
* Updated the GameApplication to mount the engine.pak

This allows loading the autoexec.cfg and bootstrap.game.<config>.<platform>.setreg from the engine.pak files
The engine.pak is searched for in the following order: <ExecutableDirectory>/engine.pak, followed by <ProjectCacheRoot>/engine.pak

Removed a lot of unused APIs from the AZ::IO::Archive feature suite
Updated many of the AZ::IO::Archive classes to use AZ::IO::Path internally.
The logic to search for files within an Archive has been updated to use AZ::IO::Path and to remove case-insensitve string comparisons
Somehow removed the CryFile dependency on anything Cry

Updated the Settings Registry to support reading from the FileIOBase and therefore Archive files in the GameLauncher via the `SetUseFileIO` function

Removed AzFramework Dependency on md5 3rdParty library

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Linux build fix

Added an include of <stdio.h> before the <rapidxml/rapidxml.h> include as it usesnprintf.

Added `static` to the constexpr constants in ExtractFileDescription in SettingsRegistryImpl.cpp to fix clang compile issue

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Updated the case used to mount the Engine PAK file in the GameApplication to be Engine.pak to match the other locations where it is mounted

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Updated the proper FFont call to FileIOBase::Size to supply the correct
integer type of AZ::u64 instead of size_t
This fixes building on platforms where size_t is type defined to be
unsigned long

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Fixed segmentation fault in Archive::Unregister when outputing the filename of the Archive file being closed

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Fix calls to OpenPack in the Legacy LevelSystem

The LevelSystem was calling the incorrect overload of OpenPack that
accepts BindRoot for the mounted level.pak instead of the overload that
that passes a memory block object.

This was causing the level pak files to be mounted using an invalid
directory, causing file accesses inside the level pak to fail.

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Updated the error messages in the ZipDir CacheFactory class to use AZ_Warning directly

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Updated the ArchiveFileIO m_trackedFiles container to store mapped type as an AZ::IO::Path

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
2021-09-16 11:01:00 -05:00

493 lines
16 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
#ifndef CRYINCLUDE_EDITOR_SETTINGS_H
#define CRYINCLUDE_EDITOR_SETTINGS_H
#include "SettingsManager.h"
#include <QColor>
#include <QFont>
#include <QRect>
#include <QSettings>
#include <AzToolsFramework/Editor/EditorSettingsAPIBus.h>
#include <AzToolsFramework/Prefab/PrefabLoaderInterface.h>
#include <AzCore/JSON/document.h>
#include <AzQtComponents/Components/Widgets/ToolBar.h>
//////////////////////////////////////////////////////////////////////////
// Settings for snapping in the viewports.
//////////////////////////////////////////////////////////////////////////
struct SSnapSettings
{
SSnapSettings()
{
constructPlaneDisplay = false;
constructPlaneSize = 5;
markerDisplay = false;
markerColor = QColor(0, 200, 200);
markerSize = 1.0f;
bGridUserDefined = false;
bGridGetFromSelected = false;
}
// Display settings for construction plane.
bool constructPlaneDisplay;
float constructPlaneSize;
// Display settings for snapping marker.
bool markerDisplay;
QColor markerColor;
float markerSize;
bool bGridUserDefined;
bool bGridGetFromSelected;
};
//////////////////////////////////////////////////////////////////////////
// Settings for View of Tools
//////////////////////////////////////////////////////////////////////////
struct SToolViewSettings
{
SToolViewSettings()
{
}
int nFrameRate;
QString codec;
};
//////////////////////////////////////////////////////////////////////////
// Settings for deep selection.
//////////////////////////////////////////////////////////////////////////
struct SDeepSelectionSettings
{
SDeepSelectionSettings()
: fRange(1.f)
, bStickDuplicate(false) {}
//! If there are other objects hit within this value, one of them needs
//! to be selected by user.
//! If this value is 0.f, then deep selection mode won't work.
float fRange;
bool bStickDuplicate;
};
//////////////////////////////////////////////////////////////////////////
struct SObjectColors
{
SObjectColors()
{
groupHighlight = QColor(0, 255, 0);
entityHighlight = QColor(112, 117, 102);
fBBoxAlpha = 0.3f;
geometryHighlightColor = QColor(192, 0, 192);
solidBrushGeometryColor = QColor(192, 0, 192);
fGeomAlpha = 0.2f;
fChildGeomAlpha = 0.4f;
}
QColor groupHighlight;
QColor entityHighlight;
QColor geometryHighlightColor;
QColor solidBrushGeometryColor;
float fBBoxAlpha;
float fGeomAlpha;
float fChildGeomAlpha;
};
//////////////////////////////////////////////////////////////////////////
struct SViewportsSettings
{
//! If enabled always show entity radiuse.
bool bAlwaysShowRadiuses;
//! True if 2D viewports will be synchronized with same view and origin.
bool bSync2DViews;
//! Camera FOV for perspective View.
float fDefaultFov;
//! Camera Aspect Ratio for perspective View.
float fDefaultAspectRatio;
//! Show safe frame.
bool bShowSafeFrame;
//! To highlight selected geometry.
bool bHighlightSelectedGeometry;
//! To highlight selected vegetation.
bool bHighlightSelectedVegetation;
//! To highlight selected geometry.
int bHighlightMouseOverGeometry;
//! Show triangle count on mouse over
bool bShowMeshStatsOnMouseOver;
//! If enabled will always display entity labels.
bool bDrawEntityLabels;
//! Show Trigger bounds.
bool bShowTriggerBounds;
//! Show Icons in viewport.
bool bShowIcons;
//! Scale icons with distance, so they aren't a fixed size no matter how far away you are
bool bDistanceScaleIcons;
//! Show Size-based Icons in viewport.
bool bShowSizeBasedIcons;
//! Show Helpers in viewport for frozen objects.
int nShowFrozenHelpers;
//! Fill Selected Shapes.
bool bFillSelectedShapes;
// Swap X/Y in map viewport.
bool bTopMapSwapXY;
// Texture resolution in the Top map viewport.
int nTopMapTextureResolution;
// Whether the grid guide (for move/rotate tool) will be shown or not.
bool bShowGridGuide;
// Whether the mouse cursor will be hidden when capturing the mouse.
bool bHideMouseCursorWhenCaptured;
// Size of square which the mouse must leave before a drag operation begins.
int nDragSquareSize;
// Enable context menu in the viewport
bool bEnableContextMenu;
//! Warning icons draw distance
float fWarningIconsDrawDistance;
//! Warnings for scale != 1
bool bShowScaleWarnings;
//! Warnings for rotation != 0
bool bShowRotationWarnings;
};
struct SSelectObjectDialogSettings
{
QString columns;
int nLastColumnSortDirection;
SSelectObjectDialogSettings()
: nLastColumnSortDirection(0)
{
}
};
//////////////////////////////////////////////////////////////////////////
struct SGUI_Settings
{
bool bWindowsVista; // true when running on windows Vista
QFont hSystemFont; // Default system GUI font.
QFont hSystemFontBold; // Default system GUI bold font.
QFont hSystemFontItalic; // Default system GUI italic font.
int nDefaultFontHieght; // Default font height for 8 logical units.
int nToolbarIconSize; // Override size of the toolbar icons
};
//////////////////////////////////////////////////////////////////////////
struct STextureBrowserSettings
{
int nCellSize; // Stores the default texture maximum cell size for
};
//////////////////////////////////////////////////////////////////////////
struct SExperimentalFeaturesSettings
{
bool bTotalIlluminationEnabled;
};
//////////////////////////////////////////////////////////////////////////
struct SSliceSettings
{
bool dynamicByDefault;
};
struct SLevelSaveSettings
{
AzToolsFramework::Prefab::SaveAllPrefabsPreference saveAllPrefabsPreference;
};
//////////////////////////////////////////////////////////////////////////
struct SAssetBrowserSettings
{
// stores the default thumb size
int nThumbSize;
// the current filename search filter in the search edit box
QString sFilenameSearch,
// the current filter preset name
sPresetName;
// current selected/checked/visible databases, db names separated by comma (,), Ex: "Textures,Models,Sounds"
QString sVisibleDatabaseNames;
// current visible columns in asset list
QString sVisibleColumnNames;
// current columns in asset list, in their actual order (including visible and hidden columns)
QString sColumnNames;
// check to show only the assets used in current level
bool bShowUsedInLevel,
// check to show only the assets loaded in the current level
bShowLoadedInLevel,
// check to filter only the favorite assets
bShowFavorites,
// hide LODs from thumbs view, for CGFs for example
bHideLods,
// true when the edited filter preset was changed, it will be saved automatically, without the user to push the "Save" button
bAutoSaveFilterPreset,
// true when we want sync between asset browser selection and viewport selection
bAutoChangeViewportSelection,
// true when we want sync between viewport selection and asset browser visible thumbs
bAutoFilterFromViewportSelection;
};
struct SSmartOpenDialogSettings
{
QRect rect;
QString lastSearchTerm;
};
//////////////////////////////////////////////////////////////////////////
/** Various editor settings.
*/
AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING
struct SANDBOX_API SEditorSettings
: AzToolsFramework::EditorSettingsAPIBus::Handler
{
AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING
SEditorSettings();
~SEditorSettings() = default;
void Save();
void Load();
void LoadCloudSettings();
void Connect();
void Disconnect();
// EditorSettingsAPIBus...
AZStd::vector<AZStd::string> BuildSettingsList() override;
SettingOutcome GetValue(const AZStd::string_view path) override;
SettingOutcome SetValue(const AZStd::string_view path, const AZStd::any& value) override;
AzToolsFramework::ConsoleColorTheme GetConsoleColorTheme() const override;
int GetMaxNumberOfItemsShownInSearchView() const override;
void ConvertPath(const AZStd::string_view sourcePath, AZStd::string& category, AZStd::string& attribute);
// needs to be called after crysystem has been loaded
void LoadDefaultGamePaths();
// need to expose updating of the source control enable/disable flag
// because its state is updateable through the main status bar
void SaveEnableSourceControlFlag(bool triggerUpdate = false);
void LoadEnableSourceControlFlag();
void PostInitApply();
bool BrowseTerrainTexture(bool bIsSave);
//////////////////////////////////////////////////////////////////////////
// Variables.
//////////////////////////////////////////////////////////////////////////
int undoLevels;
bool m_undoSliceOverrideSaveValue;
bool bShowDashboardAtStartup;
bool m_showCircularDependencyError;
bool bAutoloadLastLevelAtStartup;
bool bMuteAudio;
bool bEnableGameModeVR;
//! Speed of camera movement.
float cameraMoveSpeed;
float cameraRotateSpeed;
float cameraFastMoveSpeed;
float wheelZoomSpeed;
bool invertYRotation;
bool invertPan;
bool stylusMode; // if stylus mode is enabled, no setCursorPos will be performed (WACOM tablets, etc)
bool restoreViewportCamera; // When true, restore the original editor viewport camera when exiting game mode
//! Hide mask for objects.
int objectHideMask;
//! Selection mask for objects.
int objectSelectMask;
//////////////////////////////////////////////////////////////////////////
// Viewport settings.
//////////////////////////////////////////////////////////////////////////
SViewportsSettings viewports;
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
SToolViewSettings toolViewSettings;
//////////////////////////////////////////////////////////////////////////
// Files.
//////////////////////////////////////////////////////////////////////////
//! Before saving, make a backup into a subfolder
bool bBackupOnSave;
//! how many save backups to keep
int backupOnSaveMaxCount;
//////////////////////////////////////////////////////////////////////////
// Autobackup.
//////////////////////////////////////////////////////////////////////////
//! Save auto backup file every autoSaveTime minutes.
int autoBackupTime;
//! Keep only several last autobackups.
int autoBackupMaxCount;
//! When this variable set to true automatic file backup is enabled.
bool autoBackupEnabled;
//! After this amount of minutes message box with reminder to save will pop on.
int autoRemindTime;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Asset Browser Search View.
//////////////////////////////////////////////////////////////////////////
//! Current maximum number of items that can be displayed in the AssetBrowser Search View.
int maxNumberOfItemsShownInSearch;
//////////////////////////////////////////////////////////////////////////
//! If true preview windows is displayed when browsing geometries.
bool bPreviewGeometryWindow;
int showErrorDialogOnLoad;
//! Keeps the editor active even if no focus is set
int keepEditorActive;
// Settings of the snapping.
SSnapSettings snap;
//! Source Control Enabling.
bool enableSourceControl;
bool clearConsoleOnGameModeStart;
//! Text editor.
QString textEditorForScript;
QString textEditorForShaders;
QString textEditorForBspaces;
//! Asset editors
QString textureEditor;
QString animEditor;
//////////////////////////////////////////////////////////////////////////
//! Editor data search paths.
QStringList searchPaths[10]; // EDITOR_PATH_LAST
// This directory is related to the editor root.
QString strStandardTempDirectory;
SGUI_Settings gui;
bool bApplyConfigSpecInEditor;
ESystemConfigSpec editorConfigSpec;
//! Terrain Texture Export/Import filename.
QString terrainTextureExport;
// Read only parameter.
// Refects the status of GetIEditor()->GetOperationMode
// To change current operation mode use GetIEditor()->SetOperationMode
// see EOperationMode
int operationMode;
// For the texture browser configurations.
STextureBrowserSettings sTextureBrowserSettings;
// Experimental features configurations.
SExperimentalFeaturesSettings sExperimentalFeaturesSettings;
// For the asset browser configurations.
SAssetBrowserSettings sAssetBrowserSettings;
SSelectObjectDialogSettings selectObjectDialog;
// For Terrain Texture Generation Multiplier.
float fBrMultiplier;
AzToolsFramework::ConsoleColorTheme consoleBackgroundColorTheme;
bool bShowTimeInConsole;
// Enable the option do get detailed information about the loaded scene data in the Scene Settings window.
bool enableSceneInspector;
// Deep Selection Mode Settings
SDeepSelectionSettings deepSelectionSettings;
// Object Highlight Settings
SObjectColors objectColorSettings;
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
SSmartOpenDialogSettings smartOpenSettings;
bool bSettingsManagerMode;
bool bAutoSaveTagPoints;
bool bNavigationContinuousUpdate;
bool bNavigationShowAreas;
bool bNavigationDebugDisplay;
bool bVisualizeNavigationAccessibility;
int navigationDebugAgentType;
int backgroundUpdatePeriod;
const char* g_TemporaryLevelName;
SSliceSettings sliceSettings;
SLevelSaveSettings levelSaveSettings;
bool prefabSystem = true; ///< Toggle to enable/disable the Prefab system for level entities.
private:
void SaveValue(const char* sSection, const char* sKey, int value);
void SaveValue(const char* sSection, const char* sKey, const QColor& value);
void SaveValue(const char* sSection, const char* sKey, float value);
void SaveValue(const char* sSection, const char* sKey, const QString& value);
void LoadValue(const char* sSection, const char* sKey, int& value);
void LoadValue(const char* sSection, const char* sKey, QColor& value);
void LoadValue(const char* sSection, const char* sKey, float& value);
void LoadValue(const char* sSection, const char* sKey, bool& value);
void LoadValue(const char* sSection, const char* sKey, QString& value);
void LoadValue(const char* sSection, const char* sKey, ESystemConfigSpec& value);
void SaveCloudSettings();
void SaveSettingsRegistryFile();
//! Set a boolean setting value from the registry.
//! \param key[in] The key to set.
//! \param value[in] The new value for the setting.
//! \return Whether the value for the key was correctly set in the registry.
bool SetSettingsRegistry_Bool(const char* key, bool value);
//! Gets a boolean setting value from the registry.
//! \param key[in] The key to query.
//! \param value[out] The variable the queried value will be saved to, by reference.
//! \return Whether a value for the key was found in the registry.
bool GetSettingsRegistry_Bool(const char* key, bool& value);
};
//! Single instance of editor settings for fast access.
SANDBOX_API extern SEditorSettings gSettings;
#endif // CRYINCLUDE_EDITOR_SETTINGS_H