summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorZerophase2019-06-23 15:02:22 -0500
committerZerophase2019-06-23 15:02:22 -0500
commitb1fb64f2e510850b18ce8407aa1ef7763734f9da (patch)
tree6198103f554dee535a16666b6c5db20edb6e2db7
parent9793067e5147c667d96944cd0fe5db3ce839a0bb (diff)
downloadaur-b1fb64f2e510850b18ce8407aa1ef7763734f9da.tar.gz
Update to 4.22.3
-rw-r--r--.SRCINFO14
-rw-r--r--0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch29
-rw-r--r--0002-fixes-shadowing-issues-with-enums.patch2190
-rw-r--r--PKGBUILD14
-rw-r--r--clang-70-support.patch346
-rw-r--r--use-arch-mono.patch2
6 files changed, 2411 insertions, 184 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 75c9a19d762..4b649dbde99 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,8 +1,6 @@
-# Generated by mksrcinfo v8
-# Wed Jan 30 01:30:04 UTC 2019
pkgbase = unreal-engine
pkgdesc = A 3D game engine by Epic Games which can be used non-commercially for free.
- pkgver = 4.21.2
+ pkgver = 4.22.3
pkgrel = 1
url = https://www.unrealengine.com/
install = unreal-engine.install
@@ -20,7 +18,7 @@ pkgbase = unreal-engine
depends = xdg-user-dirs
options = strip
options = staticlibs
- source = git+ssh://git@github.com/EpicGames/UnrealEngine.git#tag=4.21.2-release
+ source = git+ssh://git@github.com/EpicGames/UnrealEngine.git#tag=4.22.3-release
source = UE4Editor.desktop
source = html5-build.patch
source = recompile-version-selector.patch
@@ -28,14 +26,18 @@ pkgbase = unreal-engine
source = ignore-clang50-install.patch
source = use-arch-mono.patch
source = clang-70-support.patch
+ source = 0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch
+ source = 0002-fixes-shadowing-issues-with-enums.patch
sha256sums = SKIP
sha256sums = 46871ed662a3c97698be609d27da280d9000ec97183f1fa6592986f9910a2118
sha256sums = 9fd6d16d56fbe0489a2580b86359df84b83a6987b5760a9e57ae0898f51943ac
sha256sums = 1dd876fa48c6fb4fcd4ccbdb8ed4ceccfa294685911e91be58bbc5e95726c279
sha256sums = 9654226ef3318389aa8fe15f3d4d14e7ac2113520ee5ebf2899d42273a2a6fb0
sha256sums = 71a7304deebb00234c323eed9a73cdbd022099ba65f62fc90e78069eceed1f5d
- sha256sums = 006bfc6dc6c4258b55768cac34a3c42f033a2777332272d8c47c340282bf400f
- sha256sums = deb74af4561beb2eb62fdc3bee45347785b9bd07443939ad0bf0f1fd9f72a859
+ sha256sums = c2a8ba1aba8fbda51270ec49e745ffba96e89cd627efe0d6a801d7629494a620
+ sha256sums = 5d86920545fa341a7ae39f198bab61ef2e41b165f41805c2b64c137599eff61e
+ sha256sums = 926c513cc59dcbde0dbac44b6201089a0381ea992ef3353919c049a25fa6c364
+ sha256sums = 871e1a95f1761a613cfc2f0209f22e4afbacd102f2d3239bf27e3b16202e28ad
pkgname = unreal-engine
diff --git a/0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch b/0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch
new file mode 100644
index 00000000000..355e4d792cb
--- /dev/null
+++ b/0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch
@@ -0,0 +1,29 @@
+From 7fc25807e40a76c31e2a11ceb19b136c0baf68bd Mon Sep 17 00:00:00 2001
+From: Zerophase <mikelojkovic@gmail.com>
+Date: Fri, 14 Jun 2019 14:20:26 -0500
+Subject: [PATCH 1/2] Updates UBT Linux tool chain for supporting clang 8
+
+---
+ .../Platform/Linux/LinuxToolChain.cs | 26 +++++++++----------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
+
+diff --git a/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs b/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs
+index 3665228dd4b..de4346698a2 100644
+--- a/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs
++++ b/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs
+@@ -176,10 +176,10 @@ namespace UnrealBuildTool
+ throw new BuildException("Unable to build: no compatible clang version found. Please run Setup.sh");
+ }
+ // prevent unknown clangs since the build is likely to fail on too old or too new compilers
+- else if ((CompilerVersionMajor * 10 + CompilerVersionMinor) > 70 || (CompilerVersionMajor * 10 + CompilerVersionMinor) < 60)
++ else if ((CompilerVersionMajor * 10 + CompilerVersionMinor) > 80 || (CompilerVersionMajor * 10 + CompilerVersionMinor) < 60)
+ {
+ throw new BuildException(
+- string.Format("This version of the Unreal Engine can only be compiled with clang 7.0 and 6.0. clang {0} may not build it - please use a different version.",
++ string.Format("This version of the Unreal Engine can only be compiled with clang 8.0, 7.0, and 6.0. clang {0} may not build it - please use a different version.",
+ CompilerVersionString)
+ );
+ }
+--
+2.22.0
+
diff --git a/0002-fixes-shadowing-issues-with-enums.patch b/0002-fixes-shadowing-issues-with-enums.patch
new file mode 100644
index 00000000000..4fb9c09175d
--- /dev/null
+++ b/0002-fixes-shadowing-issues-with-enums.patch
@@ -0,0 +1,2190 @@
+From 7d402476104b7611b2ff7ed0770d9e8282c572a3 Mon Sep 17 00:00:00 2001
+From: Zerophase <mikelojkovic@gmail.com>
+Date: Fri, 14 Jun 2019 14:20:51 -0500
+Subject: [PATCH 2/2] fixes shadowing issues with enums
+
+---
+ .../Private/SpeedTreeImportFactory.cpp | 4 +-
+ .../AlembicLibrary/Private/AbcImporter.cpp | 2 +-
+ .../ProceduralMeshComponentDetails.cpp | 2 +-
+ /* .../Private/HierarchicalLODUtilities.cpp | 2 +- */
+ .../Private/MeshMergeUtilities.cpp | 2 +-
+ .../Private/ProxyGenerationProcessor.cpp | 2 +-
+ .../MeshUtilities/Private/MeshUtilities.cpp | 6 +-
+ .../Profiler/Private/ProfilerDataSource.cpp | 57 ++++----
+ .../Profiler/Private/ProfilerDataSource.h | 18 +--
+ .../Profiler/Private/Widgets/SDataGraph.cpp | 2 +-
+ .../Profiler/Private/Widgets/SEventGraph.cpp | 47 +++----
+ .../MaterialEditor/Private/MaterialEditor.cpp | 22 +--
+ ...erialEditorInstanceDetailCustomization.cpp | 6 +-
+ .../Private/MaterialPropertyHelpers.cpp | 8 +-
+ .../Private/SMaterialLayersFunctionsTree.cpp | 4 +-
+ .../Source/Editor/Matinee/Private/Matinee.cpp | 42 +++---
+ .../Editor/Matinee/Private/MatineeActions.h | 4 +-
+ .../Editor/Matinee/Private/MatineeMenus.cpp | 78 +++++------
+ .../Private/Factories/EditorFactories.cpp | 4 +-
+ .../Private/Fbx/FbxStaticMeshImport.cpp | 2 +-
+ .../UnrealEd/Private/StaticMeshEdit.cpp | 8 +-
+ .../MaterialFunctionThumbnailRenderer.cpp | 4 +-
+ .../VREditor/Public/VREditorInteractor.h | 21 +--
+ .../Editor/VREditor/VREditorInteractor.cpp | 16 +--
+ .../Tiles/WorldTileCollectionModel.cpp | 2 +-
+ .../Runtime/Engine/Classes/Engine/Engine.h | 77 ++++++-----
+ .../Engine/Classes/Engine/StaticMesh.h | 126 +++++++++---------
+ .../Classes/Materials/MaterialFunction.h | 4 +-
+ .../Materials/MaterialFunctionInstance.h | 4 +-
+ .../Materials/MaterialFunctionInterface.h | 19 +--
+ .../Components/StaticMeshComponent.cpp | 2 +-
+ .../Runtime/Engine/Private/GameInstance.cpp | 2 +-
+ .../Engine/Private/GameViewportClient.cpp | 12 +-
+ .../Private/Materials/MaterialExpressions.cpp | 10 +-
+ .../Runtime/Engine/Private/PendingNetGame.cpp | 2 +-
+ .../Runtime/Engine/Private/StaticMesh.cpp | 2 +-
+ .../Runtime/Engine/Private/UnrealEngine.cpp | 18 +--
+ .../Private/MovieSceneSequencePlayer.cpp | 10 +-
+ .../Public/MovieSceneSequencePlayer.h | 5 +-
+ .../Private/Common/StatsCollector.h | 2 +-
+ .../OpenGLDrv/Private/OpenGLUniformBuffer.cpp | 2 +-
+ .../OpenGLDrv/Private/OpenGLVertexBuffer.cpp | 2 +-
+ .../Source/Runtime/OpenGLDrv/Public/OpenGL.h | 2 +-
+ .../Source/Runtime/OpenGLDrv/Public/OpenGL3.h | 10 +-
+ .../OpenGLDrv/Public/OpenGLResources.h | 4 +-
+ 45 files changed, 347 insertions(+), 333 deletions(-)
+
+diff --git a/Engine/Plugins/Editor/SpeedTreeImporter/Source/SpeedTreeImporter/Private/SpeedTreeImportFactory.cpp b/Engine/Plugins/Editor/SpeedTreeImporter/Source/SpeedTreeImporter/Private/SpeedTreeImportFactory.cpp
+index 5fd4228a025..8520f493dd1 100644
+--- a/Engine/Plugins/Editor/SpeedTreeImporter/Source/SpeedTreeImporter/Private/SpeedTreeImportFactory.cpp
++++ b/Engine/Plugins/Editor/SpeedTreeImporter/Source/SpeedTreeImporter/Private/SpeedTreeImportFactory.cpp
+@@ -1973,7 +1973,7 @@ UObject* USpeedTreeImportFactory::FactoryCreateBinary7(UClass* InClass, UObject*
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ StaticMesh->Build();
+
+@@ -2347,7 +2347,7 @@ UObject* USpeedTreeImportFactory::FactoryCreateBinary8(UClass* InClass, UObject*
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+ StaticMesh->Build();
+
+ // collision objects
+diff --git a/Engine/Plugins/Experimental/AlembicImporter/Source/AlembicLibrary/Private/AbcImporter.cpp b/Engine/Plugins/Experimental/AlembicImporter/Source/AlembicLibrary/Private/AbcImporter.cpp
+index cfca9a9955a..9d52334ebf9 100644
+--- a/Engine/Plugins/Experimental/AlembicImporter/Source/AlembicLibrary/Private/AbcImporter.cpp
++++ b/Engine/Plugins/Experimental/AlembicImporter/Source/AlembicLibrary/Private/AbcImporter.cpp
+@@ -247,7 +247,7 @@ UStaticMesh* FAbcImporter::CreateStaticMeshFromSample(UObject* InParent, const F
+ StaticMesh->CommitMeshDescription(LODIndex);
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ // Build the static mesh (using the build setting etc.) this generates correct tangents using the extracting smoothing group along with the imported Normals data
+ StaticMesh->Build(false);
+diff --git a/Engine/Plugins/Runtime/ProceduralMeshComponent/Source/ProceduralMeshComponentEditor/Private/ProceduralMeshComponentDetails.cpp b/Engine/Plugins/Runtime/ProceduralMeshComponent/Source/ProceduralMeshComponentEditor/Private/ProceduralMeshComponentDetails.cpp
+index 68bd724e6bc..f48097656cf 100644
+--- a/Engine/Plugins/Runtime/ProceduralMeshComponent/Source/ProceduralMeshComponentEditor/Private/ProceduralMeshComponentDetails.cpp
++++ b/Engine/Plugins/Runtime/ProceduralMeshComponent/Source/ProceduralMeshComponentEditor/Private/ProceduralMeshComponentDetails.cpp
+@@ -269,7 +269,7 @@ FReply FProceduralMeshComponentDetails::ClickedOnConvertToStaticMesh()
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ // Build mesh from source
+ StaticMesh->Build(false);
+/* diff --git a/Engine/Source/Developer/HierarchicalLODUtilities/Private/HierarchicalLODUtilities.cpp b/Engine/Source/Developer/HierarchicalLODUtilities/Private/HierarchicalLODUtilities.cpp */
+/* index 1fd032e63ef..c58bade5ae7 100644 */
+/* --- a/Engine/Source/Developer/HierarchicalLODUtilities/Private/HierarchicalLODUtilities.cpp */
+/* +++ b/Engine/Source/Developer/HierarchicalLODUtilities/Private/HierarchicalLODUtilities.cpp */
+/* @@ -312,7 +312,7 @@ UStaticMesh* CreateImposterStaticMesh(UStaticMeshComponent* InComponent, UMateri */
+ /* StaticMesh->StaticMaterials = { InMaterial }; */
+
+ /* //Set the Imported version before calling the build */
+/* - StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion; */
+/* + StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion; */
+
+ /* StaticMesh->PostEditChange(); */
+
+diff --git a/Engine/Source/Developer/MeshMergeUtilities/Private/MeshMergeUtilities.cpp b/Engine/Source/Developer/MeshMergeUtilities/Private/MeshMergeUtilities.cpp
+index f787722bb03..cc5b4e8e69f 100644
+--- a/Engine/Source/Developer/MeshMergeUtilities/Private/MeshMergeUtilities.cpp
++++ b/Engine/Source/Developer/MeshMergeUtilities/Private/MeshMergeUtilities.cpp
+@@ -2574,7 +2574,7 @@ void FMeshMergeUtilities::MergeComponentsToStaticMesh(const TArray<UPrimitiveCom
+ StaticMesh->OriginalSectionInfoMap.CopyFrom(SectionInfoMap);
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+ StaticMesh->LightMapResolution = InSettings.bComputedLightMapResolution ? DataTracker.GetLightMapDimension() : InSettings.TargetLightMapResolution;
+
+ #if WITH_EDITOR
+diff --git a/Engine/Source/Developer/MeshMergeUtilities/Private/ProxyGenerationProcessor.cpp b/Engine/Source/Developer/MeshMergeUtilities/Private/ProxyGenerationProcessor.cpp
+index 7f04aaaaafd..c8cfdd6bc56 100644
+--- a/Engine/Source/Developer/MeshMergeUtilities/Private/ProxyGenerationProcessor.cpp
++++ b/Engine/Source/Developer/MeshMergeUtilities/Private/ProxyGenerationProcessor.cpp
+@@ -277,7 +277,7 @@ void FProxyGenerationProcessor::ProcessJob(const FGuid& JobGuid, FProxyGeneratio
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ // setup section info map
+ TPolygonGroupAttributesConstRef<FName> PolygonGroupImportedMaterialSlotNames = Data->RawMesh.PolygonGroupAttributes().GetAttributesRef<FName>(MeshAttribute::PolygonGroup::ImportedMaterialSlotName);
+diff --git a/Engine/Source/Developer/MeshUtilities/Private/MeshUtilities.cpp b/Engine/Source/Developer/MeshUtilities/Private/MeshUtilities.cpp
+index 79adce36b1d..3d45f78ba64 100644
+--- a/Engine/Source/Developer/MeshUtilities/Private/MeshUtilities.cpp
++++ b/Engine/Source/Developer/MeshUtilities/Private/MeshUtilities.cpp
+@@ -561,7 +561,7 @@ UStaticMesh* FMeshUtilities::ConvertMeshesToStaticMesh(const TArray<UMeshCompone
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ // Set light map coordinate index to match DstLightmapIndex
+ StaticMesh->LightMapCoordinateIndex = LightMapIndex;
+@@ -2309,7 +2309,7 @@ void FMeshUtilities::BuildStaticMeshVertexAndIndexBuffers(
+
+ // Put the indices in the material index buffer.
+ uint32 SectionIndex = 0;
+- if (ImportVersion < RemoveStaticMeshSkinxxWorkflow)
++ if (ImportVersion < StaticMesh::RemoveStaticMeshSkinxxWorkflow)
+ {
+ SectionIndex = FMath::Clamp(RawMesh.FaceMaterialIndices[FaceIndex], 0, OutPerSectionIndices.Num() - 1);
+ }
+@@ -2715,7 +2715,7 @@ public:
+ const int32 MaterialIndex = MaterialIndices[Index];
+ FStaticMeshSection* Section = new(LODModel.Sections) FStaticMeshSection();
+ Section->MaterialIndex = MaterialIndex;
+- if (ImportVersion < RemoveStaticMeshSkinxxWorkflow)
++ if (ImportVersion < StaticMesh::RemoveStaticMeshSkinxxWorkflow)
+ {
+ MaterialToSectionMapping.Add(MaterialIndex, MaterialIndex);
+ }
+diff --git a/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.cpp b/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.cpp
+index daefe07c24b..c1200bd4e9b 100644
+--- a/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.cpp
++++ b/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.cpp
+@@ -27,7 +27,7 @@ const int32 FTimeAccuracy::_FPS120 = 120;
+ FGraphDataSource::FGraphDataSource( const TSharedRef<FProfilerSession>& InProfilerSession, const uint32 InStatID )
+ : FGraphDataSourceDescription( InStatID )
+ , ThisCachedDataByIndex()
+- , ThisCachedDataByTime( FTimeAccuracy::FPS060 )
++ , ThisCachedDataByTime( FTimeAccuracy::Type::FPS060 )
+ , ProfilerSession( InProfilerSession )
+ {
+ const TSharedRef<FProfilerStatMetaData> MetaData = ProfilerSession->GetMetaData();
+@@ -220,7 +220,7 @@ FName FEventGraphConsts::FakeRoot = TEXT("FakeRoot");
+ FEventGraphSample
+ -----------------------------------------------------------------------------*/
+
+-FEventProperty FEventGraphSample::Properties[ EEventPropertyIndex::InvalidOrMax ] =
++FEventProperty FEventGraphSample::Properties[ (int)EEventPropertyIndex::InvalidOrMax ] =
+ {
+ // Properties
+ FEventProperty( EEventPropertyIndex::StatName, TEXT( "StatName" ), STRUCT_OFFSET( FEventGraphSample, _StatName ), EEventPropertyFormatters::Name ),
+@@ -264,41 +264,42 @@ void FEventGraphSample::InitializePropertyManagement()
+ static bool bInitialized = false;
+ if( !bInitialized )
+ {
++ // FIXME remove (int) conversions
+ NamedProperties = TMapBuilder<FName,const FEventProperty*>()
+ // Properties
+- .Add( TEXT( "StatName" ), &Properties[EEventPropertyIndex::StatName] )
+- .Add( TEXT( "InclusiveTimeMS" ), &Properties[EEventPropertyIndex::InclusiveTimeMS] )
+- .Add( TEXT( "InclusiveTimePct" ), &Properties[EEventPropertyIndex::InclusiveTimePct] )
+- .Add( TEXT( "ExclusiveTimeMS" ), &Properties[EEventPropertyIndex::ExclusiveTimeMS] )
+- .Add( TEXT( "ExclusiveTimePct" ), &Properties[EEventPropertyIndex::ExclusiveTimePct] )
+- .Add( TEXT( "NumCallsPerFrame" ), &Properties[EEventPropertyIndex::NumCallsPerFrame] )
++ .Add( TEXT( "StatName" ), &Properties[(int)EEventPropertyIndex::StatName] )
++ .Add( TEXT( "InclusiveTimeMS" ), &Properties[(int)EEventPropertyIndex::InclusiveTimeMS] )
++ .Add( TEXT( "InclusiveTimePct" ), &Properties[(int)EEventPropertyIndex::InclusiveTimePct] )
++ .Add( TEXT( "ExclusiveTimeMS" ), &Properties[(int)EEventPropertyIndex::ExclusiveTimeMS] )
++ .Add( TEXT( "ExclusiveTimePct" ), &Properties[(int)EEventPropertyIndex::ExclusiveTimePct] )
++ .Add( TEXT( "NumCallsPerFrame" ), &Properties[(int)EEventPropertyIndex::NumCallsPerFrame] )
+
+ // Special none property
+- .Add( NAME_None, &Properties[EEventPropertyIndex::None] )
++ .Add( NAME_None, &Properties[(int)EEventPropertyIndex::None] )
+
+- .Add( TEXT( "MinInclusiveTimeMS" ), &Properties[EEventPropertyIndex::MinInclusiveTimeMS] )
+- .Add( TEXT( "MaxInclusiveTimeMS" ), &Properties[EEventPropertyIndex::MaxInclusiveTimeMS] )
+- .Add( TEXT( "AvgInclusiveTimeMS" ), &Properties[EEventPropertyIndex::AvgInclusiveTimeMS] )
++ .Add( TEXT( "MinInclusiveTimeMS" ), &Properties[(int)EEventPropertyIndex::MinInclusiveTimeMS] )
++ .Add( TEXT( "MaxInclusiveTimeMS" ), &Properties[(int)EEventPropertyIndex::MaxInclusiveTimeMS] )
++ .Add( TEXT( "AvgInclusiveTimeMS" ), &Properties[(int)EEventPropertyIndex::AvgInclusiveTimeMS] )
+
+- .Add( TEXT( "MinNumCallsPerFrame" ), &Properties[EEventPropertyIndex::MinNumCallsPerFrame] )
+- .Add( TEXT( "MaxNumCallsPerFrame" ), &Properties[EEventPropertyIndex::MaxNumCallsPerFrame] )
+- .Add( TEXT( "AvgNumCallsPerFrame" ), &Properties[EEventPropertyIndex::AvgNumCallsPerFrame] )
++ .Add( TEXT( "MinNumCallsPerFrame" ), &Properties[(int)EEventPropertyIndex::MinNumCallsPerFrame] )
++ .Add( TEXT( "MaxNumCallsPerFrame" ), &Properties[(int)EEventPropertyIndex::MaxNumCallsPerFrame] )
++ .Add( TEXT( "AvgNumCallsPerFrame" ), &Properties[(int)EEventPropertyIndex::AvgNumCallsPerFrame] )
+
+- .Add( TEXT( "ThreadName" ), &Properties[EEventPropertyIndex::ThreadName] )
+- .Add( TEXT( "ThreadDurationMS" ), &Properties[EEventPropertyIndex::ThreadDurationMS] )
+- .Add( TEXT( "FrameDurationMS" ), &Properties[EEventPropertyIndex::FrameDurationMS] )
+- .Add( TEXT( "ThreadPct" ), &Properties[EEventPropertyIndex::ThreadPct] )
+- .Add( TEXT( "FramePct" ), &Properties[EEventPropertyIndex::FramePct] )
+- .Add( TEXT( "ThreadToFramePct" ), &Properties[EEventPropertyIndex::ThreadToFramePct] )
+- .Add( TEXT( "GroupName" ), &Properties[EEventPropertyIndex::GroupName] )
++ .Add( TEXT( "ThreadName" ), &Properties[(int)EEventPropertyIndex::ThreadName] )
++ .Add( TEXT( "ThreadDurationMS" ), &Properties[(int)EEventPropertyIndex::ThreadDurationMS] )
++ .Add( TEXT( "FrameDurationMS" ), &Properties[(int)EEventPropertyIndex::FrameDurationMS] )
++ .Add( TEXT( "ThreadPct" ), &Properties[(int)EEventPropertyIndex::ThreadPct] )
++ .Add( TEXT( "FramePct" ), &Properties[(int)EEventPropertyIndex::FramePct] )
++ .Add( TEXT( "ThreadToFramePct" ), &Properties[(int)EEventPropertyIndex::ThreadToFramePct] )
++ .Add( TEXT( "GroupName" ), &Properties[(int)EEventPropertyIndex::GroupName] )
+
+ // Booleans
+- .Add( TEXT( "bIsHotPath" ), &Properties[EEventPropertyIndex::bIsHotPath] )
+- .Add( TEXT( "bIsFiltered" ), &Properties[EEventPropertyIndex::bIsFiltered] )
+- .Add( TEXT( "bIsCulled" ), &Properties[EEventPropertyIndex::bIsCulled] )
++ .Add( TEXT( "bIsHotPath" ), &Properties[(int)EEventPropertyIndex::bIsHotPath] )
++ .Add( TEXT( "bIsFiltered" ), &Properties[(int)EEventPropertyIndex::bIsFiltered] )
++ .Add( TEXT( "bIsCulled" ), &Properties[(int)EEventPropertyIndex::bIsCulled] )
+
+ // Booleans internal
+- .Add( TEXT( "bNeedNotCulledChildrenUpdate" ), &Properties[EEventPropertyIndex::bNeedNotCulledChildrenUpdate] )
++ .Add( TEXT( "bNeedNotCulledChildrenUpdate" ), &Properties[(int)EEventPropertyIndex::bNeedNotCulledChildrenUpdate] )
+ ;
+
+ // Make sure that the minimal property manager has been initialized.
+@@ -308,8 +309,8 @@ void FEventGraphSample::InitializePropertyManagement()
+ check( NamedProperties.FindChecked( NAME_None )->Name == NAME_None );
+ check( NamedProperties.FindChecked( NAME_None )->Offset == INDEX_NONE );
+
+- check( FEventGraphSample::Properties[ EEventPropertyIndex::None ].Name == NAME_None );
+- check( FEventGraphSample::Properties[ EEventPropertyIndex::None ].Offset == INDEX_NONE );
++ check( FEventGraphSample::Properties[ (int)EEventPropertyIndex::None ].Name == NAME_None );
++ check( FEventGraphSample::Properties[ (int)EEventPropertyIndex::None ].Offset == INDEX_NONE );
+ }
+ }
+
+diff --git a/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.h b/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.h
+index 7c33291671e..fd83cf9896e 100644
+--- a/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.h
++++ b/Engine/Source/Developer/Profiler/Private/ProfilerDataSource.h
+@@ -43,7 +43,7 @@ struct FProfilerScratchArea : public TThreadSingleton<FProfilerScratchArea>
+
+ struct FTimeAccuracy
+ {
+- enum Type
++ enum class Type
+ {
+ FPS008,
+ FPS015,
+@@ -56,20 +56,20 @@ struct FTimeAccuracy
+
+ static const float AsFrameTime( Type InTimeAccuracy )
+ {
+- static const float FrameTimeTable[InvalidOrMax] = {1000.0f/_FPS008,1000.0f/_FPS015,1000.0f/_FPS030,1000.0f/_FPS060,1000.0f/_FPS120};
+- return FrameTimeTable[InTimeAccuracy];
++ static const float FrameTimeTable[(int)Type::InvalidOrMax] = {1000.0f/_FPS008,1000.0f/_FPS015,1000.0f/_FPS030,1000.0f/_FPS060,1000.0f/_FPS120};
++ return FrameTimeTable[(int)InTimeAccuracy];
+ }
+
+ static const float AsInvFrameTime( Type InTimeAccuracy )
+ {
+- static const float FPSInvTable[InvalidOrMax] = {0.001f*_FPS008,0.001f*_FPS015,0.001f*_FPS030,0.001f*_FPS060,0.001f*_FPS120};
+- return FPSInvTable[InTimeAccuracy];
++ static const float FPSInvTable[(int)Type::InvalidOrMax] = {0.001f*_FPS008,0.001f*_FPS015,0.001f*_FPS030,0.001f*_FPS060,0.001f*_FPS120};
++ return FPSInvTable[(int)InTimeAccuracy];
+ }
+
+ static const int32 AsFPSCounter( Type InTimeAccuracy )
+ {
+- static const int32 FPSTable[InvalidOrMax] = {_FPS008,_FPS015,_FPS030,_FPS060,_FPS120};
+- return FPSTable[InTimeAccuracy];
++ static const int32 FPSTable[(int)Type::InvalidOrMax] = {_FPS008,_FPS015,_FPS030,_FPS060,_FPS120};
++ return FPSTable[(int)InTimeAccuracy];
+ }
+
+ private:
+@@ -690,7 +690,7 @@ protected:
+ -----------------------------------------------------------------------------*/
+
+ /** Enumerates event graph columns index. */
+-enum EEventPropertyIndex
++enum class EEventPropertyIndex
+ {
+ /** Stat name must be the first column, because of the expander arrow. */
+ StatName,
+@@ -968,7 +968,7 @@ public:
+
+ protected:
+ /** Contains all properties of the event graph sample class. */
+- static FEventProperty Properties[ EEventPropertyIndex::InvalidOrMax ];
++ static FEventProperty Properties[ (int)EEventPropertyIndex::InvalidOrMax ];
+
+ /** Contains all properties of the event graph sample class, indexed by the name of the property, stored as FName -> FEventProperty&. */
+ static TMap<FName,const FEventProperty*> NamedProperties;
+diff --git a/Engine/Source/Developer/Profiler/Private/Widgets/SDataGraph.cpp b/Engine/Source/Developer/Profiler/Private/Widgets/SDataGraph.cpp
+index a9f8bac6524..b730423cac1 100644
+--- a/Engine/Source/Developer/Profiler/Private/Widgets/SDataGraph.cpp
++++ b/Engine/Source/Developer/Profiler/Private/Widgets/SDataGraph.cpp
+@@ -204,7 +204,7 @@ SDataGraph::SDataGraph()
+
+ , ViewMode( EDataGraphViewModes::Index )
+ , MultiMode( EDataGraphMultiModes::OneLinePerDataSource )
+- , TimeBasedAccuracy( FTimeAccuracy::FPS060 )
++ , TimeBasedAccuracy( FTimeAccuracy::Type::FPS060 )
+ , DistanceBetweenPoints( 4 )
+
+ , NumDataPoints( 0 )
+diff --git a/Engine/Source/Developer/Profiler/Private/Widgets/SEventGraph.cpp b/Engine/Source/Developer/Profiler/Private/Widgets/SEventGraph.cpp
+index 5e8644a4dae..8b8c68f45be 100644
+--- a/Engine/Source/Developer/Profiler/Private/Widgets/SEventGraph.cpp
++++ b/Engine/Source/Developer/Profiler/Private/Widgets/SEventGraph.cpp
+@@ -71,16 +71,17 @@ namespace EEventGraphViewModes
+
+ struct FEventGraphColumns
+ {
++ // FIXME remove (int) conversion
+ /** Default constructor. */
+ FEventGraphColumns()
+- : NumColumns( EEventPropertyIndex::None+1 )
++ : NumColumns( (int)EEventPropertyIndex::None+1 )
+ {
+ // Make event property is initialized.
+ FEventGraphSample::InitializePropertyManagement();
+
+ Collection = new FEventGraphColumn[NumColumns];
+
+- Collection[EEventPropertyIndex::StatName] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::StatName] = FEventGraphColumn
+ (
+ EEventPropertyIndex::StatName,
+ TEXT( "name" ),
+@@ -91,7 +92,7 @@ struct FEventGraphColumns
+ 0.0f
+ );
+
+- Collection[EEventPropertyIndex::InclusiveTimeMS] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::InclusiveTimeMS] = FEventGraphColumn
+ (
+ EEventPropertyIndex::InclusiveTimeMS,
+ TEXT( "inc" ),
+@@ -102,7 +103,7 @@ struct FEventGraphColumns
+ 72.0f
+ );
+
+- Collection[EEventPropertyIndex::InclusiveTimePct] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::InclusiveTimePct] = FEventGraphColumn
+ (
+ EEventPropertyIndex::InclusiveTimePct,
+ TEXT( "inc%" ),
+@@ -113,7 +114,7 @@ struct FEventGraphColumns
+ 72.0f
+ );
+
+- Collection[EEventPropertyIndex::ExclusiveTimeMS] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::ExclusiveTimeMS] = FEventGraphColumn
+ (
+ EEventPropertyIndex::ExclusiveTimeMS,
+ TEXT( "exc" ),
+@@ -124,7 +125,7 @@ struct FEventGraphColumns
+ 72.0f
+ );
+
+- Collection[EEventPropertyIndex::ExclusiveTimePct] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::ExclusiveTimePct] = FEventGraphColumn
+ (
+ EEventPropertyIndex::ExclusiveTimePct,
+ TEXT( "exc%" ),
+@@ -135,7 +136,7 @@ struct FEventGraphColumns
+ 72.0f
+ );
+
+- Collection[EEventPropertyIndex::NumCallsPerFrame] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::NumCallsPerFrame] = FEventGraphColumn
+ (
+ EEventPropertyIndex::NumCallsPerFrame,
+ TEXT( "calls" ),
+@@ -147,7 +148,7 @@ struct FEventGraphColumns
+ );
+
+ // Fake column used as a default column for NAME_None
+- Collection[EEventPropertyIndex::None] = FEventGraphColumn
++ Collection[(int)EEventPropertyIndex::None] = FEventGraphColumn
+ (
+ EEventPropertyIndex::None,
+ TEXT( "None" ),
+@@ -159,13 +160,13 @@ struct FEventGraphColumns
+ );
+
+ ColumnNameToIndexMapping = TMapBuilder<FName, const FEventGraphColumn*>()
+- .Add( TEXT( "StatName" ), &Collection[EEventPropertyIndex::StatName] )
+- .Add( TEXT( "InclusiveTimeMS" ), &Collection[EEventPropertyIndex::InclusiveTimeMS] )
+- .Add( TEXT( "InclusiveTimePct" ), &Collection[EEventPropertyIndex::InclusiveTimePct] )
+- .Add( TEXT( "ExclusiveTimeMS" ), &Collection[EEventPropertyIndex::ExclusiveTimeMS] )
+- .Add( TEXT( "ExclusiveTimePct" ), &Collection[EEventPropertyIndex::ExclusiveTimePct] )
+- .Add( TEXT( "NumCallsPerFrame" ), &Collection[EEventPropertyIndex::NumCallsPerFrame] )
+- .Add( NAME_None, &Collection[EEventPropertyIndex::None] )
++ .Add( TEXT( "StatName" ), &Collection[(int)EEventPropertyIndex::StatName] )
++ .Add( TEXT( "InclusiveTimeMS" ), &Collection[(int)EEventPropertyIndex::InclusiveTimeMS] )
++ .Add( TEXT( "InclusiveTimePct" ), &Collection[(int)EEventPropertyIndex::InclusiveTimePct] )
++ .Add( TEXT( "ExclusiveTimeMS" ), &Collection[(int)EEventPropertyIndex::ExclusiveTimeMS] )
++ .Add( TEXT( "ExclusiveTimePct" ), &Collection[(int)EEventPropertyIndex::ExclusiveTimePct] )
++ .Add( TEXT( "NumCallsPerFrame" ), &Collection[(int)EEventPropertyIndex::NumCallsPerFrame] )
++ .Add( NAME_None, &Collection[(int)EEventPropertyIndex::None] )
+ ;
+ }
+
+@@ -495,7 +496,7 @@ public:
+ SNew( SEventGraphTableCell, SharedThis(this), OwnerEventGraph )
+ .Visibility( this, &SEventGraphTableRow::IsColumnVisible, ColumnID )
+ .ColumnID( ColumnID )
+- .IsEventNameColumn( ColumnID == FEventGraphColumns::Get().Collection[EEventPropertyIndex::StatName].ID )
++ .IsEventNameColumn( ColumnID == FEventGraphColumns::Get().Collection[(int)EEventPropertyIndex::StatName].ID )
+ .EventPtr( EventPtr )
+ .OnSetHoveredTableCell( this, &SEventGraphTableRow::OnSetHoveredTableCell )
+ ];
+@@ -2106,7 +2107,7 @@ void SEventGraph::TreeViewHeaderRow_CreateColumnArgs( const uint32 ColumnIndex )
+ void SEventGraph::InitializeAndShowHeaderColumns()
+ {
+ ColumnSortMode = EColumnSortMode::Descending;
+- ColumnBeingSorted = FEventGraphColumns::Get().Collection[EEventPropertyIndex::InclusiveTimeMS].ID;
++ ColumnBeingSorted = FEventGraphColumns::Get().Collection[(int)EEventPropertyIndex::InclusiveTimeMS].ID;
+
+ for (uint32 ColumnIndex = 0; ColumnIndex < FEventGraphColumns::Get().NumColumns; ColumnIndex++)
+ {
+@@ -2287,7 +2288,7 @@ void SEventGraph::ContextMenu_ExpandHotPath_Execute()
+ FEventGraphSamplePtr EventPtr = SelectedItems[0];
+
+ ColumnSortMode = EColumnSortMode::Descending;
+- ColumnBeingSorted = FEventGraphColumns::Get().Collection[EEventPropertyIndex::InclusiveTimeMS].ID;
++ ColumnBeingSorted = FEventGraphColumns::Get().Collection[(int)EEventPropertyIndex::InclusiveTimeMS].ID;
+ SortEvents();
+
+ // Clear hot path
+@@ -2424,7 +2425,7 @@ bool SEventGraph::ContextMenu_SortMode_IsChecked( const EColumnSortMode::Type In
+ void SEventGraph::ContextMenu_ResetColumns_Execute()
+ {
+ ColumnSortMode = EColumnSortMode::Descending;
+- ColumnBeingSorted = FEventGraphColumns::Get().Collection[EEventPropertyIndex::InclusiveTimeMS].ID;
++ ColumnBeingSorted = FEventGraphColumns::Get().Collection[(int)EEventPropertyIndex::InclusiveTimeMS].ID;
+
+ for( uint32 ColumnIndex = 0; ColumnIndex < FEventGraphColumns::Get().NumColumns; ColumnIndex++ )
+ {
+@@ -2553,12 +2554,12 @@ void SEventGraph::ShowEventsInViewMode( const TArray<FEventGraphSamplePtr>& Even
+ if( NewViewMode == EEventGraphViewModes::FlatInclusive || NewViewMode == EEventGraphViewModes::FlatInclusiveCoalesced || NewViewMode == EEventGraphViewModes::Hierarchical )
+ {
+ ColumnIndex = EEventPropertyIndex::InclusiveTimeMS;
+- SetSortModeForColumn( FEventGraphColumns::Get().Collection[ColumnIndex].ID, EColumnSortMode::Descending );
++ SetSortModeForColumn( FEventGraphColumns::Get().Collection[(int)ColumnIndex].ID, EColumnSortMode::Descending );
+ }
+ else if( NewViewMode == EEventGraphViewModes::FlatExclusive || NewViewMode == EEventGraphViewModes::FlatExclusiveCoalesced )
+ {
+ ColumnIndex = EEventPropertyIndex::ExclusiveTimeMS;
+- SetSortModeForColumn( FEventGraphColumns::Get().Collection[ColumnIndex].ID, EColumnSortMode::Descending );
++ SetSortModeForColumn( FEventGraphColumns::Get().Collection[(int)ColumnIndex].ID, EColumnSortMode::Descending );
+ }
+
+ ScrollToTheSlowestSelectedEvent( ColumnIndex );
+@@ -2589,7 +2590,7 @@ void SEventGraph::ScrollToTheSlowestSelectedEvent( EEventPropertyIndex ColumnInd
+ if( SelectedEvents.Num() > 0 )
+ {
+ // Sort events by the inclusive or the exclusive time, depends on the view mode.
+- const FEventGraphColumn& Column = FEventGraphColumns::Get().Collection[ColumnIndex];
++ const FEventGraphColumn& Column = FEventGraphColumns::Get().Collection[(int)ColumnIndex];
+ FEventArraySorter::Sort( SelectedEvents, Column.ID, EEventCompareOps::Greater );
+
+ // Scroll to the the slowest item.
+@@ -2804,7 +2805,7 @@ void SEventGraph::GenerateTopEvents( const TSet< FEventGraphSamplePtr >& EventPt
+ }
+
+ // Sort events by the inclusive time.
+- const FEventGraphColumn& Column = FEventGraphColumns::Get().Collection[EEventPropertyIndex::InclusiveTimeMS];
++ const FEventGraphColumn& Column = FEventGraphColumns::Get().Collection[(int)EEventPropertyIndex::InclusiveTimeMS];
+ FEventArraySorter::Sort( EventPtrArray, Column.ID, EEventCompareOps::Greater );
+
+ // Calculate total time for the top events.
+diff --git a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditor.cpp b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditor.cpp
+index 4f4bd83593f..1d63f41f3f4 100644
+--- a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditor.cpp
++++ b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditor.cpp
+@@ -576,12 +576,12 @@ void FMaterialEditor::InitMaterialEditor( const EToolkitMode::Type Mode, const T
+ {
+ switch (MaterialFunction->GetMaterialFunctionUsage())
+ {
+- case(EMaterialFunctionUsage::MaterialLayer):
++ case(Materials::EMaterialFunctionUsage::MaterialLayer):
+ {
+ OutputPlacement = FVector2D(300, 269);
+ break;
+ }
+- case(EMaterialFunctionUsage::MaterialLayerBlend):
++ case(Materials::EMaterialFunctionUsage::MaterialLayerBlend):
+ {
+ OutputPlacement = FVector2D(275, 269);
+ break;
+@@ -591,7 +591,7 @@ void FMaterialEditor::InitMaterialEditor( const EToolkitMode::Type Mode, const T
+ }
+ }
+ UMaterialExpression* Expression;
+- if (MaterialFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::Default)
++ if (MaterialFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::Default)
+ {
+ Expression = CreateNewMaterialExpression(UMaterialExpressionFunctionOutput::StaticClass(), OutputPlacement, false, true);
+ SetPreviewExpression(Expression);
+@@ -606,7 +606,7 @@ void FMaterialEditor::InitMaterialEditor( const EToolkitMode::Type Mode, const T
+ bMaterialDirty = false;
+ }
+ // We can check the usage here and add the appropriate inputs too (e.g. Layer==1MA, Blend==2MA)
+- if (MaterialFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayer)
++ if (MaterialFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ UMaterialExpression* Input = CreateNewMaterialExpression(UMaterialExpressionFunctionInput::StaticClass(), FVector2D(-350, 300), false, true);
+ if (Input)
+@@ -628,7 +628,7 @@ void FMaterialEditor::InitMaterialEditor( const EToolkitMode::Type Mode, const T
+ }
+ }
+ }
+- else if (MaterialFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayerBlend)
++ else if (MaterialFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ // "Top layer" should be below "bottom layer" on the graph, to align with B on blend nodes
+ UMaterialExpression* InputTop = CreateNewMaterialExpression(UMaterialExpressionFunctionInput::StaticClass(), FVector2D(-300, 400), false, true);
+@@ -1908,7 +1908,7 @@ void FMaterialEditor::UpdateMaterialinfoList_Old()
+ int32 NumOutputs = 0;
+ // For Material Layers
+
+- if (MaterialFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayer)
++ if (MaterialFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ // Material layers must have a single MA input and output only
+ for (UMaterialExpression* Expression : *MaterialFunction->GetFunctionExpressions())
+@@ -1940,7 +1940,7 @@ void FMaterialEditor::UpdateMaterialinfoList_Old()
+ CompileErrors.Add(TEXT("Layer graphs require a single material attributes output and optionally, a single material attributes input."));
+ }
+ }
+- else if (MaterialFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayerBlend)
++ else if (MaterialFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ // Material layer blends can have two MA inputs and single MA output only
+ for (UMaterialExpression* Expression : *MaterialFunction->GetFunctionExpressions())
+@@ -1999,7 +1999,7 @@ void FMaterialEditor::UpdateMaterialinfoList_Old()
+ }
+
+ // Only show general info if there are no errors and stats are enabled - Stats show for Materials, layers and blends
+- if (CompileErrors.Num() == 0 && (!MaterialFunction || MaterialFunction->GetMaterialFunctionUsage() != Default))
++ if (CompileErrors.Num() == 0 && (!MaterialFunction || MaterialFunction->GetMaterialFunctionUsage() != Materials::Default))
+ {
+ TArray<FMaterialStatsUtils::FShaderInstructionsInfo> Results;
+ TArray<FMaterialStatsUtils::FShaderInstructionsInfo> EmptyMaterialResults;
+@@ -4838,10 +4838,10 @@ FGraphAppearanceInfo FMaterialEditor::GetGraphAppearance() const
+ {
+ switch (MaterialFunction->GetMaterialFunctionUsage())
+ {
+- case EMaterialFunctionUsage::MaterialLayer:
++ case Materials::EMaterialFunctionUsage::MaterialLayer:
+ AppearanceInfo.CornerText = LOCTEXT("AppearanceCornerText_MaterialLayer", "MATERIAL LAYER");
+ break;
+- case EMaterialFunctionUsage::MaterialLayerBlend:
++ case Materials::EMaterialFunctionUsage::MaterialLayerBlend:
+ AppearanceInfo.CornerText = LOCTEXT("AppearanceCornerText_MaterialLayerBlend", "MATERIAL LAYER BLEND");
+ break;
+ default:
+@@ -4921,7 +4921,7 @@ bool FMaterialEditor::CheckExpressionRemovalWarnings(const TArray<UEdGraphNode*>
+ FunctionWarningString += FunctionInput->InputName.ToString();
+ }
+
+- if (FunctionOutput && MaterialFunction && MaterialFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::Default)
++ if (FunctionOutput && MaterialFunction && MaterialFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::Default)
+ {
+ if (!bFirstExpression)
+ {
+diff --git a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorInstanceDetailCustomization.cpp b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorInstanceDetailCustomization.cpp
+index 1a2df215b75..63b5d4f1193 100644
+--- a/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorInstanceDetailCustomization.cpp
++++ b/Engine/Source/Editor/MaterialEditor/Private/MaterialEditorInstanceDetailCustomization.cpp
+@@ -107,7 +107,7 @@ void FMaterialInstanceParameterDetails::CustomizeDetails(IDetailLayoutBuilder& D
+ {
+ // Customize Parent property so we can check for recursively set parents
+ bool bShowParent = false;
+- if(MaterialEditorInstance->SourceFunction->GetMaterialFunctionUsage() != EMaterialFunctionUsage::Default)
++ if(MaterialEditorInstance->SourceFunction->GetMaterialFunctionUsage() != Materials::EMaterialFunctionUsage::Default)
+ {
+ bShowParent = true;
+ }
+@@ -691,7 +691,7 @@ bool FMaterialInstanceParameterDetails::OnShouldSetAsset(const FAssetData& Asset
+ {
+ if (MaterialEditorInstance->bIsFunctionPreviewMaterial)
+ {
+- if (MaterialEditorInstance->SourceFunction->GetMaterialFunctionUsage() == EMaterialFunctionUsage::Default)
++ if (MaterialEditorInstance->SourceFunction->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::Default)
+ {
+ return false;
+ }
+@@ -732,7 +732,7 @@ bool FMaterialInstanceParameterDetails::OnShouldSetAsset(const FAssetData& Asset
+ void FMaterialInstanceParameterDetails::OnAssetChanged(const FAssetData & InAssetData, TSharedRef<IPropertyHandle> InHandle)
+ {
+ if (MaterialEditorInstance->bIsFunctionPreviewMaterial &&
+- MaterialEditorInstance->SourceFunction->GetMaterialFunctionUsage() != EMaterialFunctionUsage::Default)
++ MaterialEditorInstance->SourceFunction->GetMaterialFunctionUsage() != Materials::EMaterialFunctionUsage::Default)
+ {
+ UMaterialFunctionInterface* NewParent = Cast<UMaterialFunctionInterface>(InAssetData.GetAsset());
+ if (NewParent != nullptr)
+diff --git a/Engine/Source/Editor/MaterialEditor/Private/MaterialPropertyHelpers.cpp b/Engine/Source/Editor/MaterialEditor/Private/MaterialPropertyHelpers.cpp
+index fe435557316..4efa570860a 100644
+--- a/Engine/Source/Editor/MaterialEditor/Private/MaterialPropertyHelpers.cpp
++++ b/Engine/Source/Editor/MaterialEditor/Private/MaterialPropertyHelpers.cpp
+@@ -540,13 +540,13 @@ FReply FMaterialPropertyHelpers::OnClickedSaveNewFunctionInstance(class UMateria
+
+
+ UObject* Child;
+- if (Object->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayer)
++ if (Object->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ UMaterialFunctionMaterialLayerInstanceFactory* LayerFactory = NewObject<UMaterialFunctionMaterialLayerInstanceFactory>();
+ LayerFactory->InitialParent = Object;
+ Child = AssetToolsModule.Get().CreateAssetWithDialog(Name, FPackageName::GetLongPackagePath(PackageName), UMaterialFunctionMaterialLayerInstance::StaticClass(), LayerFactory);
+ }
+- else if (Object->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayerBlend)
++ else if (Object->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ UMaterialFunctionMaterialLayerBlendInstanceFactory* BlendFactory = NewObject<UMaterialFunctionMaterialLayerBlendInstanceFactory>();
+ BlendFactory->InitialParent = Object;
+@@ -630,13 +630,13 @@ FReply FMaterialPropertyHelpers::OnClickedSaveNewLayerInstance(class UMaterialFu
+
+
+ UObject* Child;
+- if (Object->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayer)
++ if (Object->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ UMaterialFunctionMaterialLayerInstanceFactory* LayerFactory = NewObject<UMaterialFunctionMaterialLayerInstanceFactory>();
+ LayerFactory->InitialParent = Object;
+ Child = AssetToolsModule.Get().CreateAssetWithDialog(Name, FPackageName::GetLongPackagePath(PackageName), UMaterialFunctionMaterialLayerInstance::StaticClass(), LayerFactory);
+ }
+- else if (Object->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayerBlend)
++ else if (Object->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ UMaterialFunctionMaterialLayerBlendInstanceFactory* BlendFactory = NewObject<UMaterialFunctionMaterialLayerBlendInstanceFactory>();
+ BlendFactory->InitialParent = Object;
+diff --git a/Engine/Source/Editor/MaterialEditor/Private/SMaterialLayersFunctionsTree.cpp b/Engine/Source/Editor/MaterialEditor/Private/SMaterialLayersFunctionsTree.cpp
+index 935f05c7425..7c2f633b71d 100644
+--- a/Engine/Source/Editor/MaterialEditor/Private/SMaterialLayersFunctionsTree.cpp
++++ b/Engine/Source/Editor/MaterialEditor/Private/SMaterialLayersFunctionsTree.cpp
+@@ -356,14 +356,14 @@ void SMaterialLayersFunctionsInstanceTreeItem::Construct(const FArguments& InArg
+ EMaterialParameterAssociation PreviewAssociation = EMaterialParameterAssociation::GlobalParameter;
+ if (AssetObject)
+ {
+- if (Cast<UMaterialFunctionInterface>(AssetObject)->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayer)
++ if (Cast<UMaterialFunctionInterface>(AssetObject)->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ PreviewIndex = StackParameterData->ParameterInfo.Index;
+ PreviewAssociation = EMaterialParameterAssociation::LayerParameter;
+ Tree->UpdateThumbnailMaterial(PreviewAssociation, PreviewIndex);
+ ThumbnailIndex = PreviewIndex;
+ }
+- if (Cast<UMaterialFunctionInterface>(AssetObject)->GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayerBlend)
++ if (Cast<UMaterialFunctionInterface>(AssetObject)->GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ PreviewIndex = StackParameterData->ParameterInfo.Index;
+ PreviewAssociation = EMaterialParameterAssociation::BlendParameter;
+diff --git a/Engine/Source/Editor/Matinee/Private/Matinee.cpp b/Engine/Source/Editor/Matinee/Private/Matinee.cpp
+index 1643ee68e53..7fe12d3dd30 100644
+--- a/Engine/Source/Editor/Matinee/Private/Matinee.cpp
++++ b/Engine/Source/Editor/Matinee/Private/Matinee.cpp
+@@ -1205,15 +1205,15 @@ void FMatinee::BindCommands()
+ ToolkitCommands->MapAction( Commands.ExportAnimGroupFBX, FExecuteAction::CreateSP(this, &FMatinee::OnContextGroupExportAnimFBX) );
+ ToolkitCommands->MapAction(
+ Commands.GroupDuplicate,
+- FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::DuplicateGroup),
+- FCanExecuteAction::CreateSP(this, &FMatinee::CanCreateNewGroup, FMatineeCommands::EGroupAction::DuplicateGroup)
++ FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::DuplicateGroup),
++ FCanExecuteAction::CreateSP(this, &FMatinee::CanCreateNewGroup, FMatineeCommands::EGroupAction::Type::DuplicateGroup)
+ );
+ ToolkitCommands->MapAction( Commands.GroupDelete, FExecuteAction::CreateSP(this, &FMatinee::OnContextGroupDelete), FCanExecuteAction::CreateSP(this, &FMatinee::CanGroupDelete) );
+ ToolkitCommands->MapAction( Commands.GroupCreateTab, FExecuteAction::CreateSP(this, &FMatinee::OnContextGroupCreateTab), FCanExecuteAction::CreateSP(this, &FMatinee::CanGroupCreateTab) );
+ ToolkitCommands->MapAction( Commands.GroupRemoveFromTab, FExecuteAction::CreateSP(this, &FMatinee::OnContextGroupRemoveFromTab) );
+ ToolkitCommands->MapAction(
+ Commands.RemoveFromGroupFolder,
+- FExecuteAction::CreateSP(this, &FMatinee::OnContextGroupChangeGroupFolder, FMatineeCommands::EGroupAction::RemoveFromGroupFolder, -1)
++ FExecuteAction::CreateSP(this, &FMatinee::OnContextGroupChangeGroupFolder, FMatineeCommands::EGroupAction::Type::RemoveFromGroupFolder, -1)
+ );
+
+ //Track Context Menu
+@@ -1228,13 +1228,13 @@ void FMatinee::BindCommands()
+ ToolkitCommands->MapAction( Commands.ExportAnimTrackFBX, FExecuteAction::CreateSP(this, &FMatinee::OnContextTrackExportAnimFBX) );
+
+ //Background Context Menu
+- ToolkitCommands->MapAction( Commands.NewFolder, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewFolder) );
+- ToolkitCommands->MapAction( Commands.NewEmptyGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewEmptyGroup) );
+- ToolkitCommands->MapAction( Commands.NewCameraGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewCameraGroup) );
+- ToolkitCommands->MapAction( Commands.NewParticleGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewParticleGroup) );
+- ToolkitCommands->MapAction( Commands.NewSkeletalMeshGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewSkeletalMeshGroup) );
+- ToolkitCommands->MapAction( Commands.NewLightingGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewLightingGroup) );
+- ToolkitCommands->MapAction( Commands.NewDirectorGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::NewDirectorGroup) );
++ ToolkitCommands->MapAction( Commands.NewFolder, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewFolder) );
++ ToolkitCommands->MapAction( Commands.NewEmptyGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewEmptyGroup) );
++ ToolkitCommands->MapAction( Commands.NewCameraGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewCameraGroup) );
++ ToolkitCommands->MapAction( Commands.NewParticleGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewParticleGroup) );
++ ToolkitCommands->MapAction( Commands.NewSkeletalMeshGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewSkeletalMeshGroup) );
++ ToolkitCommands->MapAction( Commands.NewLightingGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewLightingGroup) );
++ ToolkitCommands->MapAction( Commands.NewDirectorGroup, FExecuteAction::CreateSP(this, &FMatinee::OnContextNewGroup, FMatineeCommands::EGroupAction::Type::NewDirectorGroup) );
+
+ // Menu
+ ToolkitCommands->MapAction(Commands.ToggleCurveEditor,
+@@ -1249,11 +1249,11 @@ void FMatinee::BindCommands()
+ );
+
+ //Key Context Menu
+- ToolkitCommands->MapAction( Commands.KeyModeCurveAuto, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::KeyModeCurveAuto) );
+- ToolkitCommands->MapAction( Commands.KeyModeCurveAutoClamped, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::KeyModeCurveAutoClamped) );
+- ToolkitCommands->MapAction( Commands.KeyModeCurveBreak, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::KeyModeCurveBreak) );
+- ToolkitCommands->MapAction( Commands.KeyModeLinear, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::KeyModeLinear) );
+- ToolkitCommands->MapAction( Commands.KeyModeConstant, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::KeyModeConstant) );
++ ToolkitCommands->MapAction( Commands.KeyModeCurveAuto, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::Type::KeyModeCurveAuto) );
++ ToolkitCommands->MapAction( Commands.KeyModeCurveAutoClamped, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::Type::KeyModeCurveAutoClamped) );
++ ToolkitCommands->MapAction( Commands.KeyModeCurveBreak, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::Type::KeyModeCurveBreak) );
++ ToolkitCommands->MapAction( Commands.KeyModeLinear, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::Type::KeyModeLinear) );
++ ToolkitCommands->MapAction( Commands.KeyModeConstant, FExecuteAction::CreateSP(this, &FMatinee::OnContextKeyInterpMode, FMatineeCommands::EKeyAction::Type::KeyModeConstant) );
+ ToolkitCommands->MapAction( Commands.KeySetTime, FExecuteAction::CreateSP(this, &FMatinee::OnContextSetKeyTime) );
+ ToolkitCommands->MapAction( Commands.KeySetValue, FExecuteAction::CreateSP(this, &FMatinee::OnContextSetValue) );
+ ToolkitCommands->MapAction( Commands.KeySetBool, FExecuteAction::CreateSP(this, &FMatinee::OnContextSetBool) );
+@@ -1266,19 +1266,19 @@ void FMatinee::BindCommands()
+ ToolkitCommands->MapAction( Commands.ToggleKeyFlip, FExecuteAction::CreateSP(this, &FMatinee::OnFlipToggleKey) );
+
+ ToolkitCommands->MapAction( Commands.KeySetConditionAlways,
+- FExecuteAction::CreateSP(this, &FMatinee::OnKeyContext_SetCondition, FMatineeCommands::EKeyAction::ConditionAlways),
++ FExecuteAction::CreateSP(this, &FMatinee::OnKeyContext_SetCondition, FMatineeCommands::EKeyAction::Type::ConditionAlways),
+ FCanExecuteAction(),
+- FIsActionChecked::CreateSP(this, &FMatinee::KeyContext_IsSetConditionToggled, FMatineeCommands::EKeyAction::ConditionAlways)
++ FIsActionChecked::CreateSP(this, &FMatinee::KeyContext_IsSetConditionToggled, FMatineeCommands::EKeyAction::Type::ConditionAlways)
+ );
+ ToolkitCommands->MapAction( Commands.KeySetConditionGoreEnabled,
+- FExecuteAction::CreateSP(this, &FMatinee::OnKeyContext_SetCondition, FMatineeCommands::EKeyAction::ConditionGoreEnabled),
++ FExecuteAction::CreateSP(this, &FMatinee::OnKeyContext_SetCondition, FMatineeCommands::EKeyAction::Type::ConditionGoreEnabled),
+ FCanExecuteAction(),
+- FIsActionChecked::CreateSP(this, &FMatinee::KeyContext_IsSetConditionToggled, FMatineeCommands::EKeyAction::ConditionGoreEnabled)
++ FIsActionChecked::CreateSP(this, &FMatinee::KeyContext_IsSetConditionToggled, FMatineeCommands::EKeyAction::Type::ConditionGoreEnabled)
+ );
+ ToolkitCommands->MapAction( Commands.KeySetConditionGoreDisabled,
+- FExecuteAction::CreateSP(this, &FMatinee::OnKeyContext_SetCondition, FMatineeCommands::EKeyAction::ConditionGoreDisabled),
++ FExecuteAction::CreateSP(this, &FMatinee::OnKeyContext_SetCondition, FMatineeCommands::EKeyAction::Type::ConditionGoreDisabled),
+ FCanExecuteAction(),
+- FIsActionChecked::CreateSP(this, &FMatinee::KeyContext_IsSetConditionToggled, FMatineeCommands::EKeyAction::ConditionGoreDisabled)
++ FIsActionChecked::CreateSP(this, &FMatinee::KeyContext_IsSetConditionToggled, FMatineeCommands::EKeyAction::Type::ConditionGoreDisabled)
+ );
+
+ ToolkitCommands->MapAction( Commands.AnimKeyLoop, FExecuteAction::CreateSP(this, &FMatinee::OnSetAnimKeyLooping, true) );
+diff --git a/Engine/Source/Editor/Matinee/Private/MatineeActions.h b/Engine/Source/Editor/Matinee/Private/MatineeActions.h
+index b594c3eff45..70a41fa067e 100644
+--- a/Engine/Source/Editor/Matinee/Private/MatineeActions.h
++++ b/Engine/Source/Editor/Matinee/Private/MatineeActions.h
+@@ -195,7 +195,7 @@ public:
+ /** Action Types */
+ struct EGroupAction
+ {
+- enum Type
++ enum class Type
+ {
+ NewFolder,
+ NewEmptyGroup,
+@@ -213,7 +213,7 @@ public:
+
+ struct EKeyAction
+ {
+- enum Type
++ enum class Type
+ {
+ KeyModeCurveAuto,
+ KeyModeCurveAutoClamped,
+diff --git a/Engine/Source/Editor/Matinee/Private/MatineeMenus.cpp b/Engine/Source/Editor/Matinee/Private/MatineeMenus.cpp
+index 1852ff0b0d4..4b493e23148 100644
+--- a/Engine/Source/Editor/Matinee/Private/MatineeMenus.cpp
++++ b/Engine/Source/Editor/Matinee/Private/MatineeMenus.cpp
+@@ -245,10 +245,10 @@ void FMatinee::OnMenuAddKey()
+
+ void FMatinee::OnContextNewGroup( FMatineeCommands::EGroupAction::Type InActionId)
+ {
+- const bool bIsNewFolder = (InActionId == FMatineeCommands::EGroupAction::NewFolder);
+- const bool bDirGroup = (InActionId == FMatineeCommands::EGroupAction::NewDirectorGroup);
+- const bool bDuplicateGroup = (InActionId == FMatineeCommands::EGroupAction::DuplicateGroup);
+- const bool bLightingGroup = (InActionId == FMatineeCommands::EGroupAction::NewLightingGroup);
++ const bool bIsNewFolder = (InActionId == FMatineeCommands::EGroupAction::Type::NewFolder);
++ const bool bDirGroup = (InActionId == FMatineeCommands::EGroupAction::Type::NewDirectorGroup);
++ const bool bDuplicateGroup = (InActionId == FMatineeCommands::EGroupAction::Type::DuplicateGroup);
++ const bool bLightingGroup = (InActionId == FMatineeCommands::EGroupAction::Type::NewLightingGroup);
+
+ // Only one director group is allowed
+ if (bDirGroup && IData->FindDirectorGroup())
+@@ -333,9 +333,9 @@ bool FMatinee::CanCreateNewGroup( FMatineeCommands::EGroupAction::Type InActionI
+ void FMatinee::NewGroupPopup( FMatineeCommands::EGroupAction::Type InActionId, AActor* GroupActor, TArray<AActor *> OtherActorsToAddToGroup )
+ {
+ // Find out if we want to make a 'Director' group.
+- const bool bIsNewFolder = (InActionId == FMatineeCommands::EGroupAction::NewFolder);
+- const bool bDirGroup = (InActionId == FMatineeCommands::EGroupAction::NewDirectorGroup);
+- const bool bDuplicateGroup = (InActionId == FMatineeCommands::EGroupAction::DuplicateGroup);
++ const bool bIsNewFolder = (InActionId == FMatineeCommands::EGroupAction::Type::NewFolder);
++ const bool bDirGroup = (InActionId == FMatineeCommands::EGroupAction::Type::NewDirectorGroup);
++ const bool bDuplicateGroup = (InActionId == FMatineeCommands::EGroupAction::Type::DuplicateGroup);
+
+ // If not a director group - ask for a name.
+ if(!bDirGroup)
+@@ -344,32 +344,32 @@ void FMatinee::NewGroupPopup( FMatineeCommands::EGroupAction::Type InActionId, A
+ FText DefaultNewGroupName;
+ switch( InActionId )
+ {
+- case FMatineeCommands::EGroupAction::NewCameraGroup:
++ case FMatineeCommands::EGroupAction::Type::NewCameraGroup:
+ DialogName = LOCTEXT( "NewGroupName", "New Group Name" );
+ DefaultNewGroupName = LOCTEXT( "NewCameraGroup", "NewCameraGroup" );
+ break;
+
+- case FMatineeCommands::EGroupAction::NewParticleGroup:
++ case FMatineeCommands::EGroupAction::Type::NewParticleGroup:
+ DialogName = LOCTEXT( "NewGroupName", "New Group Name" );
+ DefaultNewGroupName = LOCTEXT( "NewParticleGroup", "NewParticleGroup" );
+ break;
+
+- case FMatineeCommands::EGroupAction::NewSkeletalMeshGroup:
++ case FMatineeCommands::EGroupAction::Type::NewSkeletalMeshGroup:
+ DialogName = LOCTEXT( "NewGroupName", "New Group Name" );
+ DefaultNewGroupName = LOCTEXT( "NewSkeletalMeshGroup", "NewSkeletalMeshGroup" );
+ break;
+
+- case FMatineeCommands::EGroupAction::NewLightingGroup:
++ case FMatineeCommands::EGroupAction::Type::NewLightingGroup:
+ DialogName = LOCTEXT( "NewGroupName", "New Group Name" );
+ DefaultNewGroupName = LOCTEXT( "NewLightingGroup", "NewLightingGroup" );
+ break;
+
+- case FMatineeCommands::EGroupAction::NewFolder:
++ case FMatineeCommands::EGroupAction::Type::NewFolder:
+ DialogName = LOCTEXT( "NewFolderName", "New Folder Name" );
+ DefaultNewGroupName = LOCTEXT( "NewFolder", "NewFolder" );
+ break;
+
+- case FMatineeCommands::EGroupAction::DuplicateGroup:
++ case FMatineeCommands::EGroupAction::Type::DuplicateGroup:
+ // When duplicating, we use unlocalized text
+ // at the moment. So, the spaces are needed.
+ DialogName = LOCTEXT( "NewGroupName", "New Group Name" );
+@@ -421,9 +421,9 @@ void FMatinee::NewGroupPopupTextCommitted(
+ //note: we don't need to check commit type... handled by GetNewNamePopup
+
+ FName NewGroupName = FName(*InText.ToString().Left(NAME_SIZE));
+- const bool bIsNewFolder = (InActionId == FMatineeCommands::EGroupAction::NewFolder);
+- const bool bDirGroup = (InActionId == FMatineeCommands::EGroupAction::NewDirectorGroup);
+- const bool bDuplicateGroup = (InActionId == FMatineeCommands::EGroupAction::DuplicateGroup);
++ const bool bIsNewFolder = (InActionId == FMatineeCommands::EGroupAction::Type::NewFolder);
++ const bool bDirGroup = (InActionId == FMatineeCommands::EGroupAction::Type::NewDirectorGroup);
++ const bool bDuplicateGroup = (InActionId == FMatineeCommands::EGroupAction::Type::DuplicateGroup);
+
+ TMap<UInterpGroup*, FName> DuplicateGroupToNameMap;
+ if (bDuplicateGroup && GroupToDuplicate != NULL)
+@@ -485,7 +485,7 @@ void FMatinee::NewGroupPopupTextCommitted(
+ // if there's no group actor
+ if ( !GroupActor )
+ {
+- if( InActionId == FMatineeCommands::EGroupAction::NewCameraGroup )
++ if( InActionId == FMatineeCommands::EGroupAction::Type::NewCameraGroup )
+ {
+ // find the first perspective viewport - if one exists
+ FLevelEditorViewportClient* ViewportClient = NULL;
+@@ -581,15 +581,15 @@ void FMatinee::NewGroupPopupTextCommitted(
+ // For Camera or Skeletal Mesh groups, add a Movement track
+ // FIXME: this doesn't work like this anymore
+ // if you'd like to create multiple groups at once
+- if( InActionId == FMatineeCommands::EGroupAction::NewCameraGroup ||
+- InActionId == FMatineeCommands::EGroupAction::NewSkeletalMeshGroup )
++ if( InActionId == FMatineeCommands::EGroupAction::Type::NewCameraGroup ||
++ InActionId == FMatineeCommands::EGroupAction::Type::NewSkeletalMeshGroup )
+ {
+ int32 NewTrackIndex = INDEX_NONE;
+ AddTrackToGroup( NewGroup, UInterpTrackMove::StaticClass(), NULL, false, NewTrackIndex );
+ }
+
+ // For Camera groups, add a Float Property track for FOV
+- if (InActionId == FMatineeCommands::EGroupAction::NewCameraGroup)
++ if (InActionId == FMatineeCommands::EGroupAction::Type::NewCameraGroup)
+ {
+ // Set the property name for the new track. This is a global that will be used when setting everything up.
+ SetTrackAddPropName( FName( TEXT( "FOVAngle" ) ) );
+@@ -599,7 +599,7 @@ void FMatinee::NewGroupPopupTextCommitted(
+ }
+
+ // For Lighting groups, add a Movement, Brightness, Light Color, and Radius Property track
+- if ( InActionId == FMatineeCommands::EGroupAction::NewLightingGroup )
++ if ( InActionId == FMatineeCommands::EGroupAction::Type::NewLightingGroup )
+ {
+ UInterpTrack* NewMovTrack = NewObject<UInterpTrackMove>(NewGroup, NAME_None, RF_Transactional);
+ const int32 TrackIndex = NewGroup->InterpTracks.Add(NewMovTrack);
+@@ -629,14 +629,14 @@ void FMatinee::NewGroupPopupTextCommitted(
+ }
+
+ // For Skeletal Mesh groups, add an Anim track
+- if( InActionId == FMatineeCommands::EGroupAction::NewSkeletalMeshGroup)
++ if( InActionId == FMatineeCommands::EGroupAction::Type::NewSkeletalMeshGroup)
+ {
+ int32 NewTrackIndex = INDEX_NONE;
+ AddTrackToGroup( NewGroup, UInterpTrackAnimControl::StaticClass(), NULL, false, NewTrackIndex );
+ }
+
+ // For Particle groups, add a Toggle track
+- if( InActionId == FMatineeCommands::EGroupAction::NewParticleGroup )
++ if( InActionId == FMatineeCommands::EGroupAction::Type::NewParticleGroup )
+ {
+ int32 NewTrackIndex = INDEX_NONE;
+ AddTrackToGroup( NewGroup, UInterpTrackToggle::StaticClass(), NULL, false, NewTrackIndex );
+@@ -1188,7 +1188,7 @@ void FMatinee::OnCreateCameraActorAtCurrentCameraLocation()
+ {
+ // no actor to add
+ TArray<AActor *> OtherActorsToAddToGroup;
+- NewGroupPopup( FMatineeCommands::EGroupAction::NewCameraGroup, NULL, OtherActorsToAddToGroup );
++ NewGroupPopup( FMatineeCommands::EGroupAction::Type::NewCameraGroup, NULL, OtherActorsToAddToGroup );
+ }
+
+ /** Called when the "Launch Custom Preview Viewport" is pressed */
+@@ -2097,7 +2097,7 @@ void FMatinee::OnContextGroupChangeGroupFolder( FMatineeCommands::EGroupAction::
+ check( HasAGroupSelected() );
+
+ // Figure out if we're moving the active group to a new group, or if we simply want to unparent it
+- const bool bIsParenting = ( InActionId != FMatineeCommands::EGroupAction::RemoveFromGroupFolder );
++ const bool bIsParenting = ( InActionId != FMatineeCommands::EGroupAction::Type::RemoveFromGroupFolder );
+
+ // Figure out which direction we're moving things: A group to the selected folder? Or, the selected group
+ // to a folder?
+@@ -2107,7 +2107,7 @@ void FMatinee::OnContextGroupChangeGroupFolder( FMatineeCommands::EGroupAction::
+ if( bIsParenting )
+ {
+ bIsMovingSelectedGroupToFolder =
+- (InActionId == FMatineeCommands::EGroupAction::MoveActiveGroupToFolder);
++ (InActionId == FMatineeCommands::EGroupAction::Type::MoveActiveGroupToFolder);
+ bIsMovingGroupToSelectedFolder = !bIsMovingSelectedGroupToFolder;
+ }
+
+@@ -2233,23 +2233,23 @@ void FMatinee::OnContextKeyInterpMode( FMatineeCommands::EKeyAction::Type InActi
+ FInterpEdSelKey& SelKey = Opt->SelectedKeys[i];
+ UInterpTrack* Track = SelKey.Track;
+
+- if (InActionId == FMatineeCommands::EKeyAction::KeyModeLinear)
++ if (InActionId == FMatineeCommands::EKeyAction::Type::KeyModeLinear)
+ {
+ Track->SetKeyInterpMode( SelKey.KeyIndex, CIM_Linear );
+ }
+- else if (InActionId == FMatineeCommands::EKeyAction::KeyModeCurveAuto)
++ else if (InActionId == FMatineeCommands::EKeyAction::Type::KeyModeCurveAuto)
+ {
+ Track->SetKeyInterpMode( SelKey.KeyIndex, CIM_CurveAuto );
+ }
+- else if (InActionId == FMatineeCommands::EKeyAction::KeyModeCurveAutoClamped)
++ else if (InActionId == FMatineeCommands::EKeyAction::Type::KeyModeCurveAutoClamped)
+ {
+ Track->SetKeyInterpMode( SelKey.KeyIndex, CIM_CurveAutoClamped );
+ }
+- else if(InActionId == FMatineeCommands::EKeyAction::KeyModeCurveBreak)
++ else if(InActionId == FMatineeCommands::EKeyAction::Type::KeyModeCurveBreak)
+ {
+ Track->SetKeyInterpMode( SelKey.KeyIndex, CIM_CurveBreak );
+ }
+- else if(InActionId == FMatineeCommands::EKeyAction::KeyModeConstant)
++ else if(InActionId == FMatineeCommands::EKeyAction::Type::KeyModeConstant)
+ {
+ Track->SetKeyInterpMode( SelKey.KeyIndex, CIM_Constant );
+ }
+@@ -3713,15 +3713,15 @@ void FMatinee::OnKeyContext_SetCondition( FMatineeCommands::EKeyAction::Type InC
+
+ switch( InCondition )
+ {
+- case FMatineeCommands::EKeyAction::ConditionAlways:
++ case FMatineeCommands::EKeyAction::Type::ConditionAlways:
+ VisibilityKey.ActiveCondition = EVTC_Always;
+ break;
+
+- case FMatineeCommands::EKeyAction::ConditionGoreEnabled:
++ case FMatineeCommands::EKeyAction::Type::ConditionGoreEnabled:
+ VisibilityKey.ActiveCondition = EVTC_GoreEnabled;
+ break;
+
+- case FMatineeCommands::EKeyAction::ConditionGoreDisabled:
++ case FMatineeCommands::EKeyAction::Type::ConditionGoreDisabled:
+ VisibilityKey.ActiveCondition = EVTC_GoreDisabled;
+ break;
+ }
+@@ -3745,21 +3745,21 @@ bool FMatinee::KeyContext_IsSetConditionToggled( FMatineeCommands::EKeyAction::T
+
+ switch( InCondition )
+ {
+- case FMatineeCommands::EKeyAction::ConditionAlways:
++ case FMatineeCommands::EKeyAction::Type::ConditionAlways:
+ if (VisibilityKey.ActiveCondition != EVTC_Always)
+ {
+ return false;
+ }
+ break;
+
+- case FMatineeCommands::EKeyAction::ConditionGoreEnabled:
++ case FMatineeCommands::EKeyAction::Type::ConditionGoreEnabled:
+ if (VisibilityKey.ActiveCondition != EVTC_GoreEnabled)
+ {
+ return false;
+ }
+ break;
+
+- case FMatineeCommands::EKeyAction::ConditionGoreDisabled:
++ case FMatineeCommands::EKeyAction::Type::ConditionGoreDisabled:
+ if (VisibilityKey.ActiveCondition != EVTC_GoreDisabled)
+ {
+ return false;
+@@ -5643,7 +5643,7 @@ TSharedPtr<SWidget> FMatinee::CreateGroupMenu()
+ FText::FromString( CurrentParent.Group->GroupName.ToString() ),
+ FText::GetEmpty(),
+ FSlateIcon(),
+- FUIAction(FExecuteAction::CreateSP( InMatinee, &FMatinee::OnContextGroupChangeGroupFolder, FMatineeCommands::EGroupAction::MoveActiveGroupToFolder, CurrentParent.GroupIndex))
++ FUIAction(FExecuteAction::CreateSP( InMatinee, &FMatinee::OnContextGroupChangeGroupFolder, FMatineeCommands::EGroupAction::Type::MoveActiveGroupToFolder, CurrentParent.GroupIndex))
+ );
+ }
+ }
+@@ -5679,7 +5679,7 @@ TSharedPtr<SWidget> FMatinee::CreateGroupMenu()
+ FText::GetEmpty(),
+ FSlateIcon(),
+ FUIAction(
+- FExecuteAction::CreateSP(InMatinee, &FMatinee::OnContextGroupChangeGroupFolder, FMatineeCommands::EGroupAction::MoveGroupToActiveFolder, CurrentGroupInfo.GroupIndex)
++ FExecuteAction::CreateSP(InMatinee, &FMatinee::OnContextGroupChangeGroupFolder, FMatineeCommands::EGroupAction::Type::MoveGroupToActiveFolder, CurrentGroupInfo.GroupIndex)
+ )
+ );
+
+diff --git a/Engine/Source/Editor/UnrealEd/Private/Factories/EditorFactories.cpp b/Engine/Source/Editor/UnrealEd/Private/Factories/EditorFactories.cpp
+index 2f9a962f004..061af01d3d2 100644
+--- a/Engine/Source/Editor/UnrealEd/Private/Factories/EditorFactories.cpp
++++ b/Engine/Source/Editor/UnrealEd/Private/Factories/EditorFactories.cpp
+@@ -529,7 +529,7 @@ UObject* UMaterialFunctionMaterialLayerFactory::FactoryCreateNew(UClass* Class,U
+ UMaterialFunctionMaterialLayer* Function = NewObject<UMaterialFunctionMaterialLayer>(InParent, UMaterialFunctionMaterialLayer::StaticClass(), Name, Flags);
+ if (Function)
+ {
+- Function->SetMaterialFunctionUsage(EMaterialFunctionUsage::MaterialLayer);
++ Function->SetMaterialFunctionUsage(Materials::EMaterialFunctionUsage::MaterialLayer);
+ }
+ return Function;
+ }
+@@ -556,7 +556,7 @@ UObject* UMaterialFunctionMaterialLayerBlendFactory::FactoryCreateNew(UClass* Cl
+ UMaterialFunctionMaterialLayerBlend* Function = NewObject<UMaterialFunctionMaterialLayerBlend>(InParent, UMaterialFunctionMaterialLayerBlend::StaticClass(), Name, Flags);
+ if (Function)
+ {
+- Function->SetMaterialFunctionUsage(EMaterialFunctionUsage::MaterialLayerBlend);
++ Function->SetMaterialFunctionUsage(Materials::EMaterialFunctionUsage::MaterialLayerBlend);
+ }
+ return Function;
+ }
+diff --git a/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp b/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp
+index 4f756102639..3c2664b3d41 100644
+--- a/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp
++++ b/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp
+@@ -1709,7 +1709,7 @@ UStaticMesh* UnFbx::FFbxImporter::ImportStaticMeshAsSingle(UObject* InParent, TA
+
+ //Set the Imported version before calling the build
+ //We set it here because the remap index is build in RestoreExistingMeshSettings call before the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ if (ExistMeshData && InStaticMesh)
+ {
+diff --git a/Engine/Source/Editor/UnrealEd/Private/StaticMeshEdit.cpp b/Engine/Source/Editor/UnrealEd/Private/StaticMeshEdit.cpp
+index 4ea9ecc49a4..fd4eade2118 100644
+--- a/Engine/Source/Editor/UnrealEd/Private/StaticMeshEdit.cpp
++++ b/Engine/Source/Editor/UnrealEd/Private/StaticMeshEdit.cpp
+@@ -614,7 +614,7 @@ UStaticMesh* CreateStaticMesh(FMeshDescription& RawMesh,TArray<FStaticMaterial>&
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ StaticMesh->Build();
+ StaticMesh->MarkPackageDirty();
+@@ -837,7 +837,7 @@ UStaticMesh* CreateStaticMeshFromBrush(UObject* Outer, FName Name, ABrush* Brush
+ }
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+
+ StaticMesh->Build();
+ StaticMesh->MarkPackageDirty();
+@@ -1286,11 +1286,11 @@ void RestoreExistingMeshSettings(ExistingStaticMeshData* ExistingMesh, UStaticMe
+ //We need to fill the import version remap before building the mesh since the
+ //static mesh component will be register at the end of the build.
+ //We do the remap of the material override in the static mesh component in OnRegister()
+- if(ExistingMesh->ImportVersion != EImportStaticMeshVersion::LastVersion)
++ if(ExistingMesh->ImportVersion != StaticMesh::EImportStaticMeshVersion::LastVersion)
+ {
+ uint32 MaterialMapKey = 0;
+ TArray<int32> ImportRemapMaterial;
+- MaterialMapKey = ((uint32)((ExistingMesh->ImportVersion & 0xffff) << 16) | (uint32)(EImportStaticMeshVersion::LastVersion & 0xffff));
++ MaterialMapKey = ((uint32)((ExistingMesh->ImportVersion & 0xffff) << 16) | (uint32)(StaticMesh::EImportStaticMeshVersion::LastVersion & 0xffff));
+ //Avoid matching a material more then once
+ TArray<int32> MatchIndex;
+ ImportRemapMaterial.AddZeroed(ExistingMesh->ExistingMaterials.Num());
+diff --git a/Engine/Source/Editor/UnrealEd/Private/ThumbnailRendering/MaterialFunctionThumbnailRenderer.cpp b/Engine/Source/Editor/UnrealEd/Private/ThumbnailRendering/MaterialFunctionThumbnailRenderer.cpp
+index b8a0fda99a3..1c62a29bf1d 100644
+--- a/Engine/Source/Editor/UnrealEd/Private/ThumbnailRendering/MaterialFunctionThumbnailRenderer.cpp
++++ b/Engine/Source/Editor/UnrealEd/Private/ThumbnailRendering/MaterialFunctionThumbnailRenderer.cpp
+@@ -37,13 +37,13 @@ void UMaterialFunctionThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y,
+ }
+
+ UMaterialInterface* PreviewMaterial = bIsFunctionInstancePreview ? MatFuncInst->GetPreviewMaterial() : MatFunc->GetPreviewMaterial();
+- EMaterialFunctionUsage FunctionUsage = bIsFunctionInstancePreview ? MatFuncInst->GetMaterialFunctionUsage() : MatFunc->GetMaterialFunctionUsage();
++ Materials::EMaterialFunctionUsage FunctionUsage = bIsFunctionInstancePreview ? MatFuncInst->GetMaterialFunctionUsage() : MatFunc->GetMaterialFunctionUsage();
+ UThumbnailInfo* ThumbnailInfo = bIsFunctionInstancePreview ? MatFuncInst->ThumbnailInfo : MatFunc->ThumbnailInfo;
+
+ if (PreviewMaterial)
+ {
+ PreviewMaterial->ThumbnailInfo = ThumbnailInfo;
+- if (FunctionUsage == EMaterialFunctionUsage::MaterialLayerBlend)
++ if (FunctionUsage == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ PreviewMaterial->SetShouldForcePlanePreview(true);
+ }
+diff --git a/Engine/Source/Editor/VREditor/Public/VREditorInteractor.h b/Engine/Source/Editor/VREditor/Public/VREditorInteractor.h
+index 93598fddcd6..df1612ce051 100644
+--- a/Engine/Source/Editor/VREditor/Public/VREditorInteractor.h
++++ b/Engine/Source/Editor/VREditor/Public/VREditorInteractor.h
+@@ -25,14 +25,17 @@ enum class EControllerType : uint8
+
+ /** Directions the trackpad can be swiped to */
+ UENUM( BlueprintType )
+-enum ETouchSwipeDirection
++namespace VRE
+ {
+- None = 0,
+- Left = 1,
+- Right = 2,
+- Up = 3,
+- Down = 4
+-};
++ enum ETouchSwipeDirection
++ {
++ None = 0,
++ Left = 1,
++ Right = 2,
++ Up = 3,
++ Down = 4
++ };
++}
+
+ /**
+ * VREditor default interactor
+@@ -339,7 +342,7 @@ private:
+
+
+ /** Start undo or redo from swipe for the Vive */
+- void UndoRedoFromSwipe( const ETouchSwipeDirection InSwipeDirection );
++ void UndoRedoFromSwipe( const VRE::ETouchSwipeDirection InSwipeDirection );
+
+ //
+ // General input @todo: VREditor: Should this be general (non-UI) in interactordata ?
+@@ -456,7 +459,7 @@ protected:
+ FVector2D InitialTouchPosition;
+
+ /** Latest swipe direction on the trackpad */
+- ETouchSwipeDirection LastSwipe;
++ VRE::ETouchSwipeDirection LastSwipe;
+
+ /** The mode that owns this interactor */
+ UPROPERTY()
+diff --git a/Engine/Source/Editor/VREditor/VREditorInteractor.cpp b/Engine/Source/Editor/VREditor/VREditorInteractor.cpp
+index 12b9ee16c4a..3e240d311be 100644
+--- a/Engine/Source/Editor/VREditor/VREditorInteractor.cpp
++++ b/Engine/Source/Editor/VREditor/VREditorInteractor.cpp
+@@ -147,7 +147,7 @@ UVREditorInteractor::UVREditorInteractor() :
+ bIsTriggerPressed( false ),
+ bHasTriggerBeenReleasedSinceLastPress( true ),
+ InitialTouchPosition(FVector2D::ZeroVector),
+- LastSwipe(ETouchSwipeDirection::None),
++ LastSwipe(VRE::ETouchSwipeDirection::None),
+ VRMode( nullptr )
+ {
+ }
+@@ -794,12 +794,12 @@ void UVREditorInteractor::PreviewInputKey( class FEditorViewportClient& Viewport
+ {
+ if (SwipeDelta.X > 0)
+ {
+- LastSwipe = ETouchSwipeDirection::Right;
++ LastSwipe = VRE::ETouchSwipeDirection::Right;
+ UndoRedoFromSwipe( LastSwipe );
+ }
+ else if (SwipeDelta.X < 0)
+ {
+- LastSwipe = ETouchSwipeDirection::Left;
++ LastSwipe = VRE::ETouchSwipeDirection::Left;
+ UndoRedoFromSwipe( LastSwipe );
+ }
+ }
+@@ -807,11 +807,11 @@ void UVREditorInteractor::PreviewInputKey( class FEditorViewportClient& Viewport
+ {
+ if (SwipeDelta.Y > 0)
+ {
+- LastSwipe = ETouchSwipeDirection::Up;
++ LastSwipe = VRE::ETouchSwipeDirection::Up;
+ }
+ else if (SwipeDelta.Y < 0)
+ {
+- LastSwipe = ETouchSwipeDirection::Down;
++ LastSwipe = VRE::ETouchSwipeDirection::Down;
+ }
+ }
+ }
+@@ -1627,7 +1627,7 @@ void UVREditorInteractor::UpdateRadialMenuInput( const float DeltaTime )
+ }
+ }
+
+-void UVREditorInteractor::UndoRedoFromSwipe( const ETouchSwipeDirection InSwipeDirection )
++void UVREditorInteractor::UndoRedoFromSwipe( const VRE::ETouchSwipeDirection InSwipeDirection )
+ {
+ EViewportInteractionDraggingMode DraggingMode = GetDraggingMode();
+ if (GetControllerType() == EControllerType::Laser &&
+@@ -1638,12 +1638,12 @@ void UVREditorInteractor::UndoRedoFromSwipe( const ETouchSwipeDirection InSwipeD
+ DraggingMode != EViewportInteractionDraggingMode::AssistingDrag &&
+ !VRMode->IsAimingTeleport())
+ {
+- if (InSwipeDirection == ETouchSwipeDirection::Left)
++ if (InSwipeDirection == VRE::ETouchSwipeDirection::Left)
+ {
+ VRMode->GetWorldInteraction().Undo();
+ bFlickActionExecuted = true;
+ }
+- else if (InSwipeDirection == ETouchSwipeDirection::Right)
++ else if (InSwipeDirection == VRE::ETouchSwipeDirection::Right)
+ {
+ VRMode->GetWorldInteraction().Redo();
+ bFlickActionExecuted = true;
+diff --git a/Engine/Source/Editor/WorldBrowser/Private/Tiles/WorldTileCollectionModel.cpp b/Engine/Source/Editor/WorldBrowser/Private/Tiles/WorldTileCollectionModel.cpp
+index 517b0bfb786..ca585ab8cd0 100644
+--- a/Engine/Source/Editor/WorldBrowser/Private/Tiles/WorldTileCollectionModel.cpp
++++ b/Engine/Source/Editor/WorldBrowser/Private/Tiles/WorldTileCollectionModel.cpp
+@@ -2156,7 +2156,7 @@ bool FWorldTileCollectionModel::GenerateLODLevels(FLevelModelList InLevelList, i
+ StaticMesh->StaticMaterials.Add(FStaticMaterial(StaticLandscapeMaterial));
+
+ //Set the Imported version before calling the build
+- StaticMesh->ImportVersion = EImportStaticMeshVersion::LastVersion;
++ StaticMesh->ImportVersion = StaticMesh::EImportStaticMeshVersion::LastVersion;
+ }
+ FMeshDescription& LandscapeRawMesh = *(StaticMesh->CreateMeshDescription(0));
+
+diff --git a/Engine/Source/Runtime/Engine/Classes/Engine/Engine.h b/Engine/Source/Runtime/Engine/Classes/Engine/Engine.h
+index b41fbf66768..8230d2abb29 100644
+--- a/Engine/Source/Runtime/Engine/Classes/Engine/Engine.h
++++ b/Engine/Source/Runtime/Engine/Classes/Engine/Engine.h
+@@ -90,17 +90,20 @@ enum EFullyLoadPackageType
+ * Enumerates transition types.
+ */
+ UENUM()
+-enum ETransitionType
++namespace ET
+ {
+- TT_None,
+- TT_Paused,
+- TT_Loading,
+- TT_Saving,
+- TT_Connecting,
+- TT_Precaching,
+- TT_WaitingToConnect,
+- TT_MAX,
+-};
++ enum ETransitionType
++ {
++ TT_None,
++ TT_Paused,
++ TT_Loading,
++ TT_Saving,
++ TT_Connecting,
++ TT_Precaching,
++ TT_WaitingToConnect,
++ TT_MAX,
++ };
++}
+
+
+ UENUM()
+@@ -115,20 +118,20 @@ enum EConsoleType
+ enum class EDynamicResolutionStatus
+ {
+ // Dynamic resolution is not supported by this platform.
+- Unsupported,
+-
++ Unsupported,
++
+ // Dynamic resolution is disabled by project setting cvar r.DynamicRes.OperationMode=0 or disabled by game user
+ // settings with r.DynamicRes.OperationMode=1.
+- Disabled,
+-
++ Disabled,
++
+ // Dynamic resolution has been paused by game thread.
+- Paused,
+-
++ Paused,
++
+ // Dynamic resolution is currently enabled.
+- Enabled,
+-
++ Enabled,
++
+ // Forced enabled at static resolution fraction for profiling purpose with r.DynamicRes.TestScreenPercentage.
+- DebugForceEnabled,
++ DebugForceEnabled,
+ };
+
+ /** Information about the state of dynamic resolution. */
+@@ -136,11 +139,11 @@ struct FDynamicResolutionStateInfos
+ {
+ // Status of dynamic resolution.
+ EDynamicResolutionStatus Status;
+-
++
+ // Approximation of the resolution fraction being applied. This is only an approximation because
+ // of non (and unecessary) thread safety of this value between game thread, and render thread.
+ float ResolutionFractionApproximation;
+-
++
+ // Maximum resolution fraction set, always MaxResolutionFraction >= ResolutionFractionApproximation.
+ float ResolutionFractionUpperBound;
+ };
+@@ -151,29 +154,29 @@ USTRUCT()
+ struct FFullyLoadedPackagesInfo
+ {
+ GENERATED_USTRUCT_BODY()
+-
++
+ /** When to load these packages */
+ UPROPERTY()
+ TEnumAsByte<enum EFullyLoadPackageType> FullyLoadType;
+-
++
+ /** When this map or gametype is loaded, the packages in the following array will be loaded and added to root, then removed from root when map is unloaded */
+ UPROPERTY()
+ FString Tag;
+-
++
+ /** The list of packages that will be fully loaded when the above Map is loaded */
+ UPROPERTY()
+ TArray<FName> PackagesToLoad;
+-
++
+ /** List of objects that were loaded, for faster cleanup */
+ UPROPERTY()
+ TArray<class UObject*> LoadedObjects;
+-
+-
++
++
+ FFullyLoadedPackagesInfo()
+- : FullyLoadType(0)
++ : FullyLoadType(0)
+ {
+ }
+-
++
+ };
+
+
+@@ -182,23 +185,23 @@ USTRUCT()
+ struct FLevelStreamingStatus
+ {
+ GENERATED_USTRUCT_BODY()
+-
++
+ UPROPERTY()
+ FName PackageName;
+-
++
+ UPROPERTY()
+ uint32 bShouldBeLoaded:1;
+-
++
+ UPROPERTY()
+ uint32 bShouldBeVisible:1;
+-
++
+ UPROPERTY()
+ uint32 LODIndex;
+-
+-
++
++
+ /** Constructors */
+ FLevelStreamingStatus(FName InPackageName, bool bInShouldBeLoaded, bool bInShouldBeVisible, int32 InLODIndex)
+- : PackageName(InPackageName), bShouldBeLoaded(bInShouldBeLoaded), bShouldBeVisible(bInShouldBeVisible), LODIndex(InLODIndex)
++ : PackageName(InPackageName), bShouldBeLoaded(bInShouldBeLoaded), bShouldBeVisible(bInShouldBeVisible), LODIndex(InLODIndex)
+ {}
+ FLevelStreamingStatus()
+ {
+@@ -1443,7 +1446,7 @@ public:
+
+ /** The current transition type. */
+ UPROPERTY()
+- TEnumAsByte<enum ETransitionType> TransitionType;
++ TEnumAsByte<enum ET::ETransitionType> TransitionType;
+
+ /** The current transition description text. */
+ UPROPERTY()
+diff --git a/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h b/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h
+index 0d3d2e1b0d1..676de42d98b 100644
+--- a/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h
++++ b/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h
+@@ -443,36 +443,38 @@ struct FStaticMaterial
+ FMeshUVChannelInfo UVChannelData;
+ };
+
+-
+-enum EImportStaticMeshVersion
++namespace StaticMesh
+ {
+- // Before any version changes were made
+- BeforeImportStaticMeshVersionWasAdded,
+- // Remove the material re-order workflow
+- RemoveStaticMeshSkinxxWorkflow,
+- VersionPlusOne,
+- LastVersion = VersionPlusOne - 1
+-};
++ enum EImportStaticMeshVersion
++ {
++ // Before any version changes were made
++ BeforeImportStaticMeshVersionWasAdded,
++ // Remove the material re-order workflow
++ RemoveStaticMeshSkinxxWorkflow,
++ VersionPlusOne,
++ LastVersion = VersionPlusOne - 1
++ };
++}
+
+ USTRUCT()
+ struct FMaterialRemapIndex
+ {
+ GENERATED_USTRUCT_BODY()
+-
++
+ FMaterialRemapIndex()
+ {
+ ImportVersionKey = 0;
+ }
+-
++
+ FMaterialRemapIndex(uint32 VersionKey, TArray<int32> RemapArray)
+- : ImportVersionKey(VersionKey)
+- , MaterialRemap(RemapArray)
++ : ImportVersionKey(VersionKey)
++ , MaterialRemap(RemapArray)
+ {
+ }
+-
++
+ UPROPERTY()
+ uint32 ImportVersionKey;
+-
++
+ UPROPERTY()
+ TArray<int32> MaterialRemap;
+ };
+@@ -480,62 +482,62 @@ struct FMaterialRemapIndex
+ struct FStaticMeshDescriptionConstAttributeGetter
+ {
+ ENGINE_API FStaticMeshDescriptionConstAttributeGetter(const FMeshDescription* InMeshDescription)
+- : MeshDescription(InMeshDescription)
++ : MeshDescription(InMeshDescription)
+ {}
+-
++
+ const FMeshDescription* MeshDescription;
+-
++
+ ENGINE_API TVertexAttributesConstRef<FVector> GetPositions() const { return MeshDescription->VertexAttributes().GetAttributesRef<FVector>(MeshAttribute::Vertex::Position); }
+-
++
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector> GetNormals() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector>(MeshAttribute::VertexInstance::Normal); }
+-
++
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector> GetTangents() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector>(MeshAttribute::VertexInstance::Tangent); }
+-
++
+ ENGINE_API TVertexInstanceAttributesConstRef<float> GetBinormalSigns() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<float>(MeshAttribute::VertexInstance::BinormalSign); }
+-
++
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector4> GetColors() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector4>(MeshAttribute::VertexInstance::Color); }
+-
++
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector2D> GetUVs() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector2D>(MeshAttribute::VertexInstance::TextureCoordinate); }
+-
++
+ ENGINE_API TEdgeAttributesConstRef<bool> GetEdgeHardnesses() const { return MeshDescription->EdgeAttributes().GetAttributesRef<bool>(MeshAttribute::Edge::IsHard); }
+-
++
+ ENGINE_API TEdgeAttributesConstRef<float> GetEdgeCreaseSharpnesses() const { return MeshDescription->EdgeAttributes().GetAttributesRef<float>(MeshAttribute::Edge::CreaseSharpness); }
+-
++
+ ENGINE_API TPolygonGroupAttributesConstRef<FName> GetPolygonGroupImportedMaterialSlotNames() { return MeshDescription->PolygonGroupAttributes().GetAttributesRef<FName>(MeshAttribute::PolygonGroup::ImportedMaterialSlotName); }
+ };
+
+ struct FStaticMeshDescriptionAttributeGetter
+ {
+ ENGINE_API FStaticMeshDescriptionAttributeGetter(FMeshDescription* InMeshDescription)
+- : MeshDescription(InMeshDescription)
++ : MeshDescription(InMeshDescription)
+ {}
+
+ FMeshDescription* MeshDescription;
+-
++
+ ENGINE_API TVertexAttributesRef<FVector> GetPositions() const { return MeshDescription->VertexAttributes().GetAttributesRef<FVector>(MeshAttribute::Vertex::Position); }
+ ENGINE_API TVertexAttributesConstRef<FVector> GetPositionsConst() const { return MeshDescription->VertexAttributes().GetAttributesRef<FVector>(MeshAttribute::Vertex::Position); }
+-
++
+ ENGINE_API TVertexInstanceAttributesRef<FVector> GetNormals() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector>(MeshAttribute::VertexInstance::Normal); }
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector> GetNormalsConst() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector>(MeshAttribute::VertexInstance::Normal); }
+-
++
+ ENGINE_API TVertexInstanceAttributesRef<FVector> GetTangents() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector>(MeshAttribute::VertexInstance::Tangent); }
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector> GetTangentsConst() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector>(MeshAttribute::VertexInstance::Tangent); }
+-
++
+ ENGINE_API TVertexInstanceAttributesRef<float> GetBinormalSigns() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<float>(MeshAttribute::VertexInstance::BinormalSign); }
+ ENGINE_API TVertexInstanceAttributesConstRef<float> GetBinormalSignsConst() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<float>(MeshAttribute::VertexInstance::BinormalSign); }
+-
++
+ ENGINE_API TVertexInstanceAttributesRef<FVector4> GetColors() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector4>(MeshAttribute::VertexInstance::Color); }
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector4> GetColorsConst() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector4>(MeshAttribute::VertexInstance::Color); }
+-
++
+ ENGINE_API TVertexInstanceAttributesRef<FVector2D> GetUVs() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector2D>(MeshAttribute::VertexInstance::TextureCoordinate); }
+ ENGINE_API TVertexInstanceAttributesConstRef<FVector2D> GetUVsConst() const { return MeshDescription->VertexInstanceAttributes().GetAttributesRef<FVector2D>(MeshAttribute::VertexInstance::TextureCoordinate); }
+-
++
+ ENGINE_API TEdgeAttributesRef<bool> GetEdgeHardnesses() const { return MeshDescription->EdgeAttributes().GetAttributesRef<bool>(MeshAttribute::Edge::IsHard); }
+ ENGINE_API TEdgeAttributesConstRef<bool> GetEdgeHardnessesConst() const { return MeshDescription->EdgeAttributes().GetAttributesRef<bool>(MeshAttribute::Edge::IsHard); }
+
+ ENGINE_API TEdgeAttributesRef<float> GetEdgeCreaseSharpnesses() const { return MeshDescription->EdgeAttributes().GetAttributesRef<float>(MeshAttribute::Edge::CreaseSharpness); }
+ ENGINE_API TEdgeAttributesConstRef<float> GetEdgeCreaseSharpnessesConst() const { return MeshDescription->EdgeAttributes().GetAttributesRef<float>(MeshAttribute::Edge::CreaseSharpness); }
+-
++
+ ENGINE_API TPolygonGroupAttributesRef<FName> GetPolygonGroupImportedMaterialSlotNames() { return MeshDescription->PolygonGroupAttributes().GetAttributesRef<FName>(MeshAttribute::PolygonGroup::ImportedMaterialSlotName); }
+ ENGINE_API TPolygonGroupAttributesConstRef<FName> GetPolygonGroupImportedMaterialSlotNamesConst() { return MeshDescription->PolygonGroupAttributes().GetAttributesRef<FName>(MeshAttribute::PolygonGroup::ImportedMaterialSlotName); }
+ };
+/* @@ -561,24 +563,24 @@ class UStaticMesh : public UStreamableRenderAsset, public IInterface_CollisionDa */
+ /* [>* Notification when anything changed <] */
+ /* DECLARE_MULTICAST_DELEGATE(FOnMeshChanged); */
+ /* #endif */
+/* - */
+/* + */
+ /* [>* Pointer to the data used to render this static mesh. <] */
+ /* TUniquePtr<class FStaticMeshRenderData> RenderData; */
+/* - */
+/* + */
+ /* [>* Pointer to the occluder data used to rasterize this static mesh for software occlusion. <] */
+ /* TUniquePtr<class FStaticMeshOccluderData> OccluderData; */
+
+ /* #if WITH_EDITORONLY_DATA */
+ /* static const float MinimumAutoLODPixelError; */
+/* - */
+/* + */
+ /* [>* Imported raw mesh bulk data. <] */
+ /* UPROPERTY() */
+ /* TArray<FStaticMeshSourceModel> SourceModels; */
+/* - */
+/* + */
+ /* [>* Map of LOD+Section index to per-section info. <] */
+ /* UPROPERTY() */
+ /* FMeshSectionInfoMap SectionInfoMap; */
+/* - */
+/* + */
+ /* /** */
+ /* * We need the OriginalSectionInfoMap to be able to build mesh in a non destructive way. Reduce has to play with SectionInfoMap in case some sections disappear. */
+ /* * This member will be update in the following situation */
+/* @@ -589,80 +591,80 @@ class UStaticMesh : public UStreamableRenderAsset, public IInterface_CollisionDa */
+ /* */ */
+ /* UPROPERTY() */
+ /* FMeshSectionInfoMap OriginalSectionInfoMap; */
+/* - */
+/* + */
+ /* [>* The LOD group to which this mesh belongs. <] */
+ /* UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category=LodSettings) */
+ /* FName LODGroup; */
+/* - */
+/* + */
+ /**
+ * If non-negative, specify the maximum number of streamed LODs. Only has effect if
+ * mesh LOD streaming is enabled for the target platform.
+ */
+ /* UPROPERTY() */
+ /* FPerPlatformInt NumStreamedLODs; */
+/* - */
+/* + */
+ /* [> The last import version <] */
+ /* UPROPERTY() */
+ /* int32 ImportVersion; */
+/* - */
+/* + */
+ /* UPROPERTY() */
+ /* TArray<FMaterialRemapIndex> MaterialRemapIndexPerImportVersion; */
+
+ /* [> The lightmap UV generation version used during the last derived data build <] */
+ /* UPROPERTY() */
+ /* int32 LightmapUVVersion; */
+/* - */
+/* + */
+ /* [>* If true, the screen sizees at which LODs swap are computed automatically. <] */
+ /* UPROPERTY() */
+ /* uint8 bAutoComputeLODScreenSize : 1; */
+/* - */
+/* + */
+ /**
+ * If true on post load we need to calculate Display Factors from the
+ * loaded LOD distances.
+ */
+ /* uint8 bRequiresLODDistanceConversion : 1; */
+/* - */
+/* + */
+ /**
+ * If true on post load we need to calculate resolution independent Display Factors from the
+ * loaded LOD screen sizes.
+ */
+ /* uint8 bRequiresLODScreenSizeConversion : 1; */
+/* - */
+/* + */
+ /* [>* Materials used by this static mesh. Individual sections index in to this array. <] */
+ /* UPROPERTY() */
+ /* TArray<UMaterialInterface*> Materials_DEPRECATED; */
+
+ /* #endif // #if WITH_EDITORONLY_DATA */
+/* - */
+/* + */
+ /* [>* Minimum LOD to use for rendering. This is the default setting for the mesh and can be overridden by component settings. <] */
+ /* UPROPERTY() */
+ /* FPerPlatformInt MinLOD; */
+/* - */
+/* + */
+ /* [>* Bias multiplier for Light Propagation Volume lighting <] */
+ /* UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=StaticMesh, meta=(UIMin = "0.0", UIMax = "3.0")) */
+ /* float LpvBiasMultiplier; */
+/* - */
+/* + */
+ /* UPROPERTY() */
+ /* TArray<FStaticMaterial> StaticMaterials; */
+/* - */
+/* + */
+ /* UPROPERTY() */
+ /* float LightmapUVDensity; */
+/* - */
+/* + */
+ /* UPROPERTY(EditAnywhere, Category=StaticMesh, meta=(ClampMax = 4096, ToolTip="The light map resolution", FixedIncrement="4.0")) */
+ /* int32 LightMapResolution; */
+/* - */
+/* + */
+ /* [>* The light map coordinate index <] */
+ /* UPROPERTY(EditAnywhere, AdvancedDisplay, Category=StaticMesh, meta=(ToolTip="The light map coordinate index", UIMin = "0", UIMax = "3")) */
+ /* int32 LightMapCoordinateIndex; */
+/* - */
+/* + */
+ /* [>* Useful for reducing self shadowing from distance field methods when using world position offset to animate the mesh's vertices. <] */
+ /* UPROPERTY(EditAnywhere, AdvancedDisplay, Category = StaticMesh) */
+ /* float DistanceFieldSelfShadowBias; */
+/* - */
+/* + */
+ /* // Physics data. */
+ /* UPROPERTY(EditAnywhere, transient, duplicatetransient, Instanced, Category = StaticMesh) */
+ /* class UBodySetup* BodySetup; */
+/* - */
+/* + */
+ /* /** */
+ /* * Specifies which mesh LOD to use for complex (per-poly) collision. */
+ /* * Sometimes it can be desirable to use a lower poly representation for collision to reduce memory usage, improve performance and behaviour. */
+/* @@ -670,24 +672,24 @@ class UStaticMesh : public UStreamableRenderAsset, public IInterface_CollisionDa */
+ /* */ */
+ /* UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = StaticMesh, meta=(DisplayName="LOD For Collision")) */
+ /* int32 LODForCollision; */
+/* - */
+/* + */
+ /**
+ * Whether to generate a distance field for this mesh, which can be used by DistanceField Indirect Shadows.
+ * This is ignored if the project's 'Generate Mesh Distance Fields' setting is enabled.
+ */
+ /* UPROPERTY(EditAnywhere, Category=StaticMesh) */
+ /* uint8 bGenerateMeshDistanceField : 1; */
+/* - */
+/* + */
+ /* /** If true, strips unwanted complex collision data aka kDOP tree when cooking for consoles. */
+ /* On the Playstation 3 data of this mesh will be stored in video memory. */ */
+ /* UPROPERTY() */
+ /* uint8 bStripComplexCollisionForConsole_DEPRECATED:1; */
+/* - */
+/* + */
+ /* /** If true, mesh will have NavCollision property with additional data for navmesh generation and usage. */
+ /* Set to false for distant meshes (always outside navigation bounds) to save memory on collision data. */ */
+ /* UPROPERTY(EditAnywhere, AdvancedDisplay, Category=Navigation) */
+ /* uint8 bHasNavigationData:1; */
+/* - */
+/* + */
+ /* /** */
+ /* Mesh supports uniformly distributed sampling in constant time. */
+ /* Memory cost is 8 bytes per triangle. */
+/* @@ -707,7 +709,7 @@ public: */
+ /* */ */
+ /* UPROPERTY(EditAnywhere, AdvancedDisplay, Category = StaticMesh) */
+ /* uint8 bAllowCPUAccess:1; */
+/* - */
+/* + */
+ /* /** */
+ /* * If true, a GPU buffer containing required data for uniform mesh surface sampling will be created at load time. */
+ /* * It is created from the cpu data so bSupportUniformlyDistributedSampling is also required to be true. */
+diff --git a/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunction.h b/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunction.h
+index db44daa9c26..1a11c3f4a85 100644
+--- a/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunction.h
++++ b/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunction.h
+@@ -83,10 +83,10 @@ public:
+ virtual void PostLoad() override;
+ //~ End UObject Interface.
+
+- void SetMaterialFunctionUsage(EMaterialFunctionUsage Usage) { MaterialFunctionUsage = Usage; }
++ void SetMaterialFunctionUsage(Materials::EMaterialFunctionUsage Usage) { MaterialFunctionUsage = Usage; }
+
+ //~ Begin UMaterialFunctionInterface interface
+- virtual EMaterialFunctionUsage GetMaterialFunctionUsage() override { return MaterialFunctionUsage; }
++ virtual Materials::EMaterialFunctionUsage GetMaterialFunctionUsage() override { return MaterialFunctionUsage; }
+
+ #if WITH_EDITOR
+ /** Recursively update all function call expressions in this function, or in nested functions. */
+diff --git a/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInstance.h b/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInstance.h
+index 6687d8bef4c..605637fbf91 100644
+--- a/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInstance.h
++++ b/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInstance.h
+@@ -23,10 +23,10 @@ class UMaterialFunctionInstance : public UMaterialFunctionInterface
+ Base = GetBaseFunction();
+ }
+
+- virtual EMaterialFunctionUsage GetMaterialFunctionUsage() override
++ virtual Materials::EMaterialFunctionUsage GetMaterialFunctionUsage() override
+ {
+ UMaterialFunctionInterface* BaseFunction = GetBaseFunction();
+- return BaseFunction ? BaseFunction->GetMaterialFunctionUsage() : EMaterialFunctionUsage::Default;
++ return BaseFunction ? BaseFunction->GetMaterialFunctionUsage() : Materials::EMaterialFunctionUsage::Default;
+ }
+
+ /** Parent function. */
+diff --git a/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInterface.h b/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInterface.h
+index eba1223ff82..b1de0cdfd39 100644
+--- a/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInterface.h
++++ b/Engine/Source/Runtime/Engine/Classes/Materials/MaterialFunctionInterface.h
+@@ -20,12 +20,15 @@ struct FPropertyChangedEvent;
+
+ /** Usage set on a material function determines feature compatibility and validation. */
+ UENUM()
+-enum EMaterialFunctionUsage
++namespace Materials
+ {
+- Default,
+- MaterialLayer,
+- MaterialLayerBlend
+-};
++ enum EMaterialFunctionUsage
++ {
++ Default,
++ MaterialLayer,
++ MaterialLayerBlend
++ };
++}
+
+ /**
+ * A Material Function is a collection of material expressions that can be reused in different materials
+@@ -46,11 +49,11 @@ class UMaterialFunctionInterface : public UObject
+ protected:
+ /** The intended usage of this function, required for material layers. */
+ UPROPERTY(AssetRegistrySearchable)
+- TEnumAsByte<enum EMaterialFunctionUsage> MaterialFunctionUsage;
++ TEnumAsByte<enum Materials::EMaterialFunctionUsage> MaterialFunctionUsage;
+
+ public:
+- virtual EMaterialFunctionUsage GetMaterialFunctionUsage()
+- PURE_VIRTUAL(UMaterialFunctionInterface::GetMaterialFunctionUsage,return EMaterialFunctionUsage::Default;);
++ virtual Materials::EMaterialFunctionUsage GetMaterialFunctionUsage()
++ PURE_VIRTUAL(UMaterialFunctionInterface::GetMaterialFunctionUsage,return Materials::EMaterialFunctionUsage::Default;);
+
+ virtual void UpdateFromFunctionResource()
+ PURE_VIRTUAL(UMaterialFunctionInterface::UpdateFromFunctionResource,);
+diff --git a/Engine/Source/Runtime/Engine/Private/Components/StaticMeshComponent.cpp b/Engine/Source/Runtime/Engine/Private/Components/StaticMeshComponent.cpp
+index 983aad302a4..5c269bcca73 100644
+--- a/Engine/Source/Runtime/Engine/Private/Components/StaticMeshComponent.cpp
++++ b/Engine/Source/Runtime/Engine/Private/Components/StaticMeshComponent.cpp
+@@ -180,7 +180,7 @@ UStaticMeshComponent::UStaticMeshComponent(const FObjectInitializer& ObjectIniti
+ SectionIndexPreview = INDEX_NONE;
+ SelectedEditorMaterial = INDEX_NONE;
+ MaterialIndexPreview = INDEX_NONE;
+- StaticMeshImportVersion = BeforeImportStaticMeshVersionWasAdded;
++ StaticMeshImportVersion = StaticMesh::BeforeImportStaticMeshVersionWasAdded;
+ bCustomOverrideVertexColorPerLOD = false;
+ bDisplayVertexColors = false;
+ #endif
+diff --git a/Engine/Source/Runtime/Engine/Private/GameInstance.cpp b/Engine/Source/Runtime/Engine/Private/GameInstance.cpp
+index 52bda3a959a..a6f0bbe7713 100644
+--- a/Engine/Source/Runtime/Engine/Private/GameInstance.cpp
++++ b/Engine/Source/Runtime/Engine/Private/GameInstance.cpp
+@@ -320,7 +320,7 @@ FGameInstancePIEResult UGameInstance::StartPlayInEditorGameInstance(ULocalPlayer
+
+ if (EditorEngine->Browse(*WorldContext, FURL(&BaseURL, *URLString, (ETravelType)TRAVEL_Absolute), Error) == EBrowseReturnVal::Pending)
+ {
+- EditorEngine->TransitionType = TT_WaitingToConnect;
++ EditorEngine->TransitionType = ET::TT_WaitingToConnect;
+ }
+ else
+ {
+diff --git a/Engine/Source/Runtime/Engine/Private/GameViewportClient.cpp b/Engine/Source/Runtime/Engine/Private/GameViewportClient.cpp
+index a2657215d11..ca8b4f56f40 100644
+--- a/Engine/Source/Runtime/Engine/Private/GameViewportClient.cpp
++++ b/Engine/Source/Runtime/Engine/Private/GameViewportClient.cpp
+@@ -2474,22 +2474,22 @@ void UGameViewportClient::DrawTransition(UCanvas* Canvas)
+ {
+ switch (GetOuterUEngine()->TransitionType)
+ {
+- case TT_Loading:
++ case ET::TT_Loading:
+ DrawTransitionMessage(Canvas, NSLOCTEXT("GameViewportClient", "LoadingMessage", "LOADING").ToString());
+ break;
+- case TT_Saving:
++ case ET::TT_Saving:
+ DrawTransitionMessage(Canvas, NSLOCTEXT("GameViewportClient", "SavingMessage", "SAVING").ToString());
+ break;
+- case TT_Connecting:
++ case ET::TT_Connecting:
+ DrawTransitionMessage(Canvas, NSLOCTEXT("GameViewportClient", "ConnectingMessage", "CONNECTING").ToString());
+ break;
+- case TT_Precaching:
++ case ET::TT_Precaching:
+ DrawTransitionMessage(Canvas, NSLOCTEXT("GameViewportClient", "PrecachingMessage", "PRECACHING").ToString());
+ break;
+- case TT_Paused:
++ case ET::TT_Paused:
+ DrawTransitionMessage(Canvas, NSLOCTEXT("GameViewportClient", "PausedMessage", "PAUSED").ToString());
+ break;
+- case TT_WaitingToConnect:
++ case ET::TT_WaitingToConnect:
+ DrawTransitionMessage(Canvas, TEXT("Waiting to connect...")); // Temp - localization of the FString messages is broke atm. Loc this when its fixed.
+ break;
+ }
+diff --git a/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp b/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp
+index 61faf4fba20..63335b946a6 100644
+--- a/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp
++++ b/Engine/Source/Runtime/Engine/Private/Materials/MaterialExpressions.cpp
+@@ -5604,7 +5604,7 @@ bool UMaterialExpressionMaterialAttributeLayers::ValidateLayerConfiguration(FMat
+
+ if (Layer)
+ {
+- if (Layer->GetMaterialFunctionUsage() != EMaterialFunctionUsage::MaterialLayer)
++ if (Layer->GetMaterialFunctionUsage() != Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ COMPILER_OR_LOG_ERROR(TEXT("Layer %i, %s, not set for layer usage."), LayerIndex, *Layer->GetName());
+ bIsValid = false;
+@@ -5641,7 +5641,7 @@ bool UMaterialExpressionMaterialAttributeLayers::ValidateLayerConfiguration(FMat
+
+ if (Blend)
+ {
+- if (Blend->GetMaterialFunctionUsage() != EMaterialFunctionUsage::MaterialLayerBlend)
++ if (Blend->GetMaterialFunctionUsage() != Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ COMPILER_OR_LOG_ERROR(TEXT("Blend %i, %s, not set for layer blend usage."), BlendIndex, *Blend->GetName());
+ bIsValid = false;
+@@ -10154,7 +10154,7 @@ void UMaterialExpressionCustom::Serialize(FStructuredArchive::FRecord Record)
+ ///////////////////////////////////////////////////////////////////////////////
+ UMaterialFunctionInterface::UMaterialFunctionInterface(const FObjectInitializer& ObjectInitializer)
+ : Super(ObjectInitializer)
+- , MaterialFunctionUsage(EMaterialFunctionUsage::Default)
++ , MaterialFunctionUsage(Materials::EMaterialFunctionUsage::Default)
+ {
+ }
+
+@@ -10560,7 +10560,7 @@ bool UMaterialFunction::ValidateFunctionUsage(FMaterialCompiler* Compiler, const
+ int32 NumOutputs = 0;
+
+ #if WITH_EDITOR
+- if (GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayer)
++ if (GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayer)
+ {
+ // Material layers must have a single MA input and output only
+ for (UMaterialExpression* Expression : FunctionExpressions)
+@@ -10596,7 +10596,7 @@ bool UMaterialFunction::ValidateFunctionUsage(FMaterialCompiler* Compiler, const
+ bHasValidOutput = false;
+ }
+ }
+- else if (GetMaterialFunctionUsage() == EMaterialFunctionUsage::MaterialLayerBlend)
++ else if (GetMaterialFunctionUsage() == Materials::EMaterialFunctionUsage::MaterialLayerBlend)
+ {
+ // Material layer blends can have up to two MA inputs and single MA output only
+ for (UMaterialExpression* Expression : FunctionExpressions)
+diff --git a/Engine/Source/Runtime/Engine/Private/PendingNetGame.cpp b/Engine/Source/Runtime/Engine/Private/PendingNetGame.cpp
+index bdd4f671121..4ac5f1493f9 100644
+--- a/Engine/Source/Runtime/Engine/Private/PendingNetGame.cpp
++++ b/Engine/Source/Runtime/Engine/Private/PendingNetGame.cpp
+@@ -150,7 +150,7 @@ void UPendingNetGame::LoadMapCompleted(UEngine* Engine, FWorldContext& Context,
+ else
+ {
+ // Show connecting message, cause precaching to occur.
+- Engine->TransitionType = TT_Connecting;
++ Engine->TransitionType = ET::TT_Connecting;
+
+ Engine->RedrawViewports(false);
+
+diff --git a/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp b/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp
+index 3cd18526729..118e36ff14b 100644
+--- a/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp
++++ b/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp
+@@ -2479,7 +2479,7 @@ UStaticMesh::UStaticMesh(const FObjectInitializer& ObjectInitializer)
+ bHasNavigationData=true;
+ #if WITH_EDITORONLY_DATA
+ bAutoComputeLODScreenSize=true;
+- ImportVersion = EImportStaticMeshVersion::BeforeImportStaticMeshVersionWasAdded;
++ ImportVersion = StaticMesh::EImportStaticMeshVersion::BeforeImportStaticMeshVersionWasAdded;
+ LODForOccluderMesh = -1;
+ NumStreamedLODs.Default = -1;
+ #endif // #if WITH_EDITORONLY_DATA
+diff --git a/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp b/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp
+index 3a771896442..95cdda8c8b3 100644
+--- a/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp
++++ b/Engine/Source/Runtime/Engine/Private/UnrealEngine.cpp
+@@ -12069,9 +12069,9 @@ void UEngine::TickWorldTravel(FWorldContext& Context, float DeltaSeconds)
+ }
+ }
+ }
+- else if (TransitionType == TT_WaitingToConnect)
++ else if (TransitionType == ET::TT_WaitingToConnect)
+ {
+- TransitionType = TT_None;
++ TransitionType = ET::TT_None;
+ }
+
+ return;
+@@ -12177,7 +12177,7 @@ bool UEngine::LoadMap( FWorldContext& WorldContext, FURL URL, class UPendingNetG
+
+ if(!URL.HasOption(TEXT("quiet")) )
+ {
+- TransitionType = TT_Loading;
++ TransitionType = ET::TT_Loading;
+ TransitionDescription = URL.Map;
+ if (URL.HasOption(TEXT("Game=")))
+ {
+@@ -12196,7 +12196,7 @@ bool UEngine::LoadMap( FWorldContext& WorldContext, FURL URL, class UPendingNetG
+ LoadMapRedrawViewports();
+ }
+
+- TransitionType = TT_None;
++ TransitionType = ET::TT_None;
+ }
+
+ // Clean up networking
+@@ -12881,10 +12881,10 @@ void UEngine::LoadPackagesFully(UWorld * InWorld, EFullyLoadPackageType FullyLoa
+ void UEngine::UpdateTransitionType(UWorld *CurrentWorld)
+ {
+ // Update the transition screen.
+- if(TransitionType == TT_Connecting)
++ if(TransitionType == ET::TT_Connecting)
+ {
+ // Check to see if all players have finished connecting.
+- TransitionType = TT_None;
++ TransitionType = ET::TT_None;
+
+ FWorldContext &Context = GetWorldContextFromWorldChecked(CurrentWorld);
+ if (Context.OwningGameInstance != NULL)
+@@ -12894,16 +12894,16 @@ void UEngine::UpdateTransitionType(UWorld *CurrentWorld)
+ if(!(*It)->PlayerController)
+ {
+ // This player has not received a PlayerController from the server yet, so leave the connecting screen up.
+- TransitionType = TT_Connecting;
++ TransitionType = ET::TT_Connecting;
+ break;
+ }
+ }
+ }
+ }
+- else if(TransitionType == TT_None || TransitionType == TT_Paused)
++ else if(TransitionType == ET::TT_None || TransitionType == ET::TT_Paused)
+ {
+ // Display a paused screen if the game is paused.
+- TransitionType = (CurrentWorld->GetWorldSettings()->Pauser != NULL) ? TT_Paused : TT_None;
++ TransitionType = (CurrentWorld->GetWorldSettings()->Pauser != NULL) ? ET::TT_Paused : ET::TT_None;
+ }
+ }
+
+diff --git a/Engine/Source/Runtime/MovieScene/Private/MovieSceneSequencePlayer.cpp b/Engine/Source/Runtime/MovieScene/Private/MovieSceneSequencePlayer.cpp
+index 31349c2d94c..f9850e97ae5 100644
+--- a/Engine/Source/Runtime/MovieScene/Private/MovieSceneSequencePlayer.cpp
++++ b/Engine/Source/Runtime/MovieScene/Private/MovieSceneSequencePlayer.cpp
+@@ -210,7 +210,7 @@ void UMovieSceneSequencePlayer::Pause()
+ {
+ if (bIsEvaluating)
+ {
+- LatentActions.Emplace(FLatentAction::Pause);
++ LatentActions.Emplace(FLatentAction::EType::Pause);
+ return;
+ }
+
+@@ -279,7 +279,7 @@ void UMovieSceneSequencePlayer::StopInternal(FFrameTime TimeToResetTo)
+ {
+ if (bIsEvaluating)
+ {
+- LatentActions.Emplace(FLatentAction::Stop, TimeToResetTo);
++ LatentActions.Emplace(FLatentAction::EType::Stop, TimeToResetTo);
+ return;
+ }
+
+@@ -886,11 +886,11 @@ void UMovieSceneSequencePlayer::ApplyLatentActions()
+ {
+ switch (LatentAction.Type)
+ {
+- case FLatentAction::Stop: StopInternal(LatentAction.Position); continue;
+- case FLatentAction::Pause: Pause(); continue;
++ case FLatentAction::EType::Stop: StopInternal(LatentAction.Position); continue;
++ case FLatentAction::EType::Pause: Pause(); continue;
+ }
+
+- check(LatentAction.Type == FLatentAction::Update);
++ check(LatentAction.Type == FLatentAction::EType::Update);
+ switch (LatentAction.UpdateMethod)
+ {
+ case EUpdatePositionMethod::Play: PlayToFrame( LatentAction.Position); continue;
+diff --git a/Engine/Source/Runtime/MovieScene/Public/MovieSceneSequencePlayer.h b/Engine/Source/Runtime/MovieScene/Public/MovieSceneSequencePlayer.h
+index 4b02049aead..2362d0e00a5 100644
+--- a/Engine/Source/Runtime/MovieScene/Public/MovieSceneSequencePlayer.h
++++ b/Engine/Source/Runtime/MovieScene/Public/MovieSceneSequencePlayer.h
+@@ -204,6 +204,7 @@ public:
+ UFUNCTION(BlueprintCallable, Category="Game|Cinematic")
+ void Scrub();
+
++ //TODO Fix Stop, Pause, Update
+ /** Stop playback and move the cursor to the end (or start, for reversed playback) of the sequence. */
+ UFUNCTION(BlueprintCallable, Category="Game|Cinematic")
+ void Stop();
+@@ -630,14 +631,14 @@ protected:
+
+ struct FLatentAction
+ {
+- enum EType { Stop, Pause, Update };
++ enum class EType { Stop, Pause, Update };
+
+ FLatentAction(EType InType, FFrameTime DesiredTime = 0)
+ : Type(InType)
+ {}
+
+ FLatentAction(EUpdatePositionMethod InUpdateMethod, FFrameTime DesiredTime)
+- : Type(Update), UpdateMethod(InUpdateMethod), Position(DesiredTime)
++ : Type(EType::Update), UpdateMethod(InUpdateMethod), Position(DesiredTime)
+ {}
+
+ EType Type;
+diff --git a/Engine/Source/Runtime/Online/BuildPatchServices/Private/Common/StatsCollector.h b/Engine/Source/Runtime/Online/BuildPatchServices/Private/Common/StatsCollector.h
+index 1830c07fa1b..2b27f2f1d34 100644
+--- a/Engine/Source/Runtime/Online/BuildPatchServices/Private/Common/StatsCollector.h
++++ b/Engine/Source/Runtime/Online/BuildPatchServices/Private/Common/StatsCollector.h
+@@ -5,7 +5,7 @@
+
+ namespace BuildPatchServices
+ {
+- enum EStatFormat
++ enum class EStatFormat
+ {
+ // Using the AccumulateTimeBegin and End functions, measured in cycles
+ Timer,
+diff --git a/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLUniformBuffer.cpp b/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLUniformBuffer.cpp
+index 2a858159bae..ebf3bf8ef2d 100644
+--- a/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLUniformBuffer.cpp
++++ b/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLUniformBuffer.cpp
+@@ -346,7 +346,7 @@ static void SuballocateUBO( uint32 Size, GLuint& Resource, uint32& Offset, uint8
+ if (FOpenGL::SupportsBufferStorage() && OpenGLConsoleVariables::bUBODirectWrite)
+ {
+ FOpenGL::BufferStorage( GL_UNIFORM_BUFFER, GetUBOPoolSize(), NULL, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT );
+- Pool.Pointer = (uint8*)FOpenGL::MapBufferRange(GL_UNIFORM_BUFFER, 0, GetUBOPoolSize(), FOpenGL::RLM_WriteOnlyPersistent);
++ Pool.Pointer = (uint8*)FOpenGL::MapBufferRange(GL_UNIFORM_BUFFER, 0, GetUBOPoolSize(), FOpenGL::EResourceLockMode::RLM_WriteOnlyPersistent);
+ }
+ else
+ {
+diff --git a/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLVertexBuffer.cpp b/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLVertexBuffer.cpp
+index 4503c83b539..7237c6ea54b 100644
+--- a/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLVertexBuffer.cpp
++++ b/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLVertexBuffer.cpp
+@@ -61,7 +61,7 @@ void* GetAllocation( void* Target, uint32 Size, uint32 Offset, uint32 Alignment
+ FOpenGL::GenBuffers(1, &PoolVB);
+ glBindBuffer(GL_COPY_READ_BUFFER, PoolVB);
+ FOpenGL::BufferStorage(GL_COPY_READ_BUFFER, PerFrameMax * 4, NULL, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
+- PoolPointer = (uint8*)FOpenGL::MapBufferRange(GL_COPY_READ_BUFFER, 0, PerFrameMax * 4, FOpenGL::RLM_WriteOnlyPersistent);
++ PoolPointer = (uint8*)FOpenGL::MapBufferRange(GL_COPY_READ_BUFFER, 0, PerFrameMax * 4, FOpenGL::EResourceLockMode::RLM_WriteOnlyPersistent);
+
+ FreeSpace = PerFrameMax * 4;
+
+diff --git a/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL.h b/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL.h
+index ea5b2a455d2..7c8007a6ad5 100644
+--- a/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL.h
++++ b/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL.h
+@@ -51,7 +51,7 @@ struct FPlatformOpenGLContext;
+ class FOpenGLBase
+ {
+ public:
+- enum EResourceLockMode
++ enum class EResourceLockMode
+ {
+ RLM_ReadWrite,
+ RLM_ReadOnly,
+diff --git a/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL3.h b/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL3.h
+index 871cd065f76..290ea841040 100644
+--- a/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL3.h
++++ b/Engine/Source/Runtime/OpenGLDrv/Public/OpenGL3.h
+@@ -142,23 +142,23 @@ struct FOpenGL3 : public FOpenGLBase
+ GLenum Access;
+ switch ( LockMode )
+ {
+- case RLM_ReadOnly:
++ case EResourceLockMode::RLM_ReadOnly:
+ Access = GL_MAP_READ_BIT;
+ break;
+- case RLM_WriteOnly:
++ case EResourceLockMode::RLM_WriteOnly:
+ Access = (GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_WRITE_BIT);
+ #if 1
+ // Temp workaround for synchrnoization when a UBO is discarded while being referenced
+ Access |= GL_MAP_UNSYNCHRONIZED_BIT;
+ #endif
+ break;
+- case RLM_WriteOnlyUnsynchronized:
++ case EResourceLockMode::RLM_WriteOnlyUnsynchronized:
+ Access = (GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
+ break;
+- case RLM_WriteOnlyPersistent:
++ case EResourceLockMode::RLM_WriteOnlyPersistent:
+ Access = (GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
+ break;
+- case RLM_ReadWrite:
++ case EResourceLockMode::RLM_ReadWrite:
+ default:
+ Access = (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT);
+ }
+diff --git a/Engine/Source/Runtime/OpenGLDrv/Public/OpenGLResources.h b/Engine/Source/Runtime/OpenGLDrv/Public/OpenGLResources.h
+index 94021a865f5..3aa2317c959 100644
+--- a/Engine/Source/Runtime/OpenGLDrv/Public/OpenGLResources.h
++++ b/Engine/Source/Runtime/OpenGLDrv/Public/OpenGLResources.h
+@@ -618,7 +618,7 @@ public:
+
+ if ( bUseMapBuffer)
+ {
+- FOpenGL::EResourceLockMode LockMode = bReadOnly ? FOpenGL::RLM_ReadOnly : FOpenGL::RLM_WriteOnly;
++ FOpenGL::EResourceLockMode LockMode = bReadOnly ? FOpenGL::EResourceLockMode::RLM_ReadOnly : FOpenGL::EResourceLockMode::RLM_WriteOnly;
+ Data = static_cast<uint8*>( FOpenGL::MapBufferRange( Type, InOffset, InSize, LockMode ) );
+ // checkf(Data != NULL, TEXT("FOpenGL::MapBufferRange Failed, glError %d (0x%x)"), glGetError(), glGetError());
+
+@@ -685,7 +685,7 @@ public:
+
+ if ( bUseMapBuffer)
+ {
+- FOpenGL::EResourceLockMode LockMode = bDiscard ? FOpenGL::RLM_WriteOnly : FOpenGL::RLM_WriteOnlyUnsynchronized;
++ FOpenGL::EResourceLockMode LockMode = bDiscard ? FOpenGL::EResourceLockMode::RLM_WriteOnly : FOpenGL::EResourceLockMode::RLM_WriteOnlyUnsynchronized;
+ Data = static_cast<uint8*>( FOpenGL::MapBufferRange( Type, InOffset, InSize, LockMode ) );
+ LockOffset = InOffset;
+ LockSize = InSize;
+--
+2.22.0
+
diff --git a/PKGBUILD b/PKGBUILD
index 45831175198..461d49149c9 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -10,7 +10,7 @@
pkgname='unreal-engine'
install="$pkgname.install"
-pkgver=4.21.2
+pkgver=4.22.3
# shellcheck disable=SC2034
{
pkgrel=1
@@ -30,6 +30,8 @@ pkgver=4.21.2
'ignore-clang50-install.patch'
'use-arch-mono.patch'
'clang-70-support.patch'
+ '0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch'
+ '0002-fixes-shadowing-issues-with-enums.patch'
)
sha256sums=('SKIP'
@@ -38,8 +40,10 @@ sha256sums=('SKIP'
'1dd876fa48c6fb4fcd4ccbdb8ed4ceccfa294685911e91be58bbc5e95726c279'
'9654226ef3318389aa8fe15f3d4d14e7ac2113520ee5ebf2899d42273a2a6fb0'
'71a7304deebb00234c323eed9a73cdbd022099ba65f62fc90e78069eceed1f5d'
- '006bfc6dc6c4258b55768cac34a3c42f033a2777332272d8c47c340282bf400f'
- 'deb74af4561beb2eb62fdc3bee45347785b9bd07443939ad0bf0f1fd9f72a859')
+ 'c2a8ba1aba8fbda51270ec49e745ffba96e89cd627efe0d6a801d7629494a620'
+ '5d86920545fa341a7ae39f198bab61ef2e41b165f41805c2b64c137599eff61e'
+ '926c513cc59dcbde0dbac44b6201089a0381ea992ef3353919c049a25fa6c364'
+ '871e1a95f1761a613cfc2f0209f22e4afbacd102f2d3239bf27e3b16202e28ad')
# Package is 3 Gib smaller with "strip" but it's skipped because it takes a long time and generates many warnings
options=(strip staticlibs)
@@ -56,7 +60,9 @@ prepare() {
patch "$srcdir/UnrealEngine/Setup.sh" recompile-version-selector.patch
pushd "$srcdir/UnrealEngine" > /dev/null
- patch -p1 -i ../clang-70-support.patch
+ patch -p1 -i ../clang-70-support.patch
+ patch -p1 -i ../0001-Updates-UBT-Linux-tool-chain-for-supporting-clang-8.patch
+ patch -p1 -i ../0002-fixes-shadowing-issues-with-enums.patch
popd > /dev/null
cp "$srcdir/Makefile" "$srcdir/UnrealEngine/Makefile"
diff --git a/clang-70-support.patch b/clang-70-support.patch
index 7fb2fe35413..8f8ce76a0e0 100644
--- a/clang-70-support.patch
+++ b/clang-70-support.patch
@@ -128,200 +128,200 @@ index 46d3559d932..58f6df1ef14 100644
2.20.1
-From 203ecda2cb48fabcd57ede14655f744f04e78145 Mon Sep 17 00:00:00 2001
-From: Zerophase <mikelojkovic@gmail.com>
-Date: Mon, 7 Jan 2019 23:22:46 -0600
-Subject: [PATCH 5/5] Switches usage of Move to MoveTemp for resolving
- Wreturn-std-move error
+/* From 203ecda2cb48fabcd57ede14655f744f04e78145 Mon Sep 17 00:00:00 2001 */
+/* From: Zerophase <mikelojkovic@gmail.com> */
+/* Date: Mon, 7 Jan 2019 23:22:46 -0600 */
+/* Subject: [PATCH 5/5] Switches usage of Move to MoveTemp for resolving */
+ /* Wreturn-std-move error */
----
- .../Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp | 1 -
- .../Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp | 1 -
- 2 files changed, 2 deletions(-)
+/* --- */
+ /* .../Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp | 1 - */
+ /* .../Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp | 1 - */
+ /* 2 files changed, 2 deletions(-) */
-diff --git a/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp b/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp
-index e3f6de7aa5a..e80cb179174 100644
---- a/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp
-+++ b/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp
-@@ -2617,7 +2617,6 @@ static FString PrivatePropertiesOffsetGetters(const UStruct* Struct, const FStri
- *PropertyName, *StructCppName, *PropertyName);
- }
- }
--
-- return Result;
-+ return MoveTemp(Result);
- }
+/* diff --git a/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp b/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp */
+/* index e3f6de7aa5a..e80cb179174 100644 */
+/* --- a/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp */
+/* +++ b/Engine/Source/Programs/UnrealHeaderTool/Private/CodeGenerator.cpp */
+/* @@ -2617,7 +2617,6 @@ static FString PrivatePropertiesOffsetGetters(const UStruct* Struct, const FStri */
+ /* *PropertyName, *StructCppName, *PropertyName); */
+ /* } */
+ /* } */
+/* - */
+/* - return Result; */
+/* + return MoveTemp(Result); */
+ /* } */
-diff --git a/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp b/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp
-index c90166540cb..173a2518431 100644
---- a/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp
-+++ b/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp
-@@ -45,7 +45,6 @@ FString FUnrealSourceFile::GetFileId() const
- Out.AppendChar('_');
- }
- }
--
-- return Out;
-+ return MoveTemp(Out);
- }
+/* diff --git a/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp b/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp */
+/* index c90166540cb..173a2518431 100644 */
+/* --- a/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp */
+/* +++ b/Engine/Source/Programs/UnrealHeaderTool/Private/UnrealSourceFile.cpp */
+/* @@ -45,7 +45,6 @@ FString FUnrealSourceFile::GetFileId() const */
+ /* Out.AppendChar('_'); */
+ /* } */
+ /* } */
+/* - */
+/* - return Out; */
+/* + return MoveTemp(Out); */
+ /* } */
--
2.20.1
-diff --git a/Engine/Source/Runtime/Engine/Private/TimerManager.cpp b/Engine/Source/Runtime/Engine/Private/TimerManager.cpp
-index a3645ce3d67..cff60942cc3 100644
---- a/Engine/Source/Runtime/Engine/Private/TimerManager.cpp
-+++ b/Engine/Source/Runtime/Engine/Private/TimerManager.cpp
-@@ -42,7 +42,7 @@ namespace
- {
- FStringOutputDevice Output;
- DescribeFTimerDataSafely(Output, Data);
-- return Output;
-+ return MoveTemp(Output);
- }
- }
+/* diff --git a/Engine/Source/Runtime/Engine/Private/TimerManager.cpp b/Engine/Source/Runtime/Engine/Private/TimerManager.cpp */
+/* index a3645ce3d67..cff60942cc3 100644 */
+/* --- a/Engine/Source/Runtime/Engine/Private/TimerManager.cpp */
+/* +++ b/Engine/Source/Runtime/Engine/Private/TimerManager.cpp */
+/* @@ -42,7 +42,7 @@ namespace */
+ /* { */
+ /* FStringOutputDevice Output; */
+ /* DescribeFTimerDataSafely(Output, Data); */
+/* - return Output; */
+/* + return MoveTemp(Output); */
+ /* } */
+ /* } */
---- a/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs 2019-01-29 18:23:29.935169346 -0600
-+++ b/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs 2019-01-27 15:09:29.820085074 -0600
-@@ -171,10 +171,10 @@
- throw new BuildException("Unable to build: no compatible clang version found. Please run Setup.sh");
- }
- // prevent unknown clangs since the build is likely to fail on too old or too new compilers
-- else if ((CompilerVersionMajor * 10 + CompilerVersionMinor) > 60 || (CompilerVersionMajor * 10 + CompilerVersionMinor) < 38)
-+ else if ((CompilerVersionMajor * 10 + CompilerVersionMinor) > 70 || (CompilerVersionMajor * 10 + CompilerVersionMinor) < 38)
- {
- throw new BuildException(
-- string.Format("This version of the Unreal Engine can only be compiled with clang 6.0, 5.0, 4.0, 3.9, 3.8. clang {0} may not build it - please use a different version.",
-+ string.Format("This version of the Unreal Engine can only be compiled with clang 7.0, 6.0, 5.0, 4.0, 3.9, 3.8. clang {0} may not build it - please use a different version.",
- CompilerVersionString)
- );
- }
---- a/Engine/Plugins/Experimental/RemoteSession/Source/RemoteSession/Private/MessageHandler/Messages.h 2019-01-29 18:39:14.528390396 -0600
-+++ b/Engine/Plugins/Experimental/RemoteSession/Source/RemoteSession/Private/MessageHandler/Messages.h 2019-01-27 15:01:57.569942558 -0600
-@@ -1,4 +1,4 @@
--// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
-+// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
+/* --- a/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs 2019-01-29 18:23:29.935169346 -0600 */
+/* +++ b/Engine/Source/Programs/UnrealBuildTool/Platform/Linux/LinuxToolChain.cs 2019-01-27 15:09:29.820085074 -0600 */
+/* @@ -171,10 +171,10 @@ */
+ /* throw new BuildException("Unable to build: no compatible clang version found. Please run Setup.sh"); */
+ /* } */
+ /* // prevent unknown clangs since the build is likely to fail on too old or too new compilers */
+/* - else if ((CompilerVersionMajor * 10 + CompilerVersionMinor) > 60 || (CompilerVersionMajor * 10 + CompilerVersionMinor) < 38) */
+/* + else if ((CompilerVersionMajor * 10 + CompilerVersionMinor) > 70 || (CompilerVersionMajor * 10 + CompilerVersionMinor) < 38) */
+ /* { */
+ /* throw new BuildException( */
+/* - string.Format("This version of the Unreal Engine can only be compiled with clang 6.0, 5.0, 4.0, 3.9, 3.8. clang {0} may not build it - please use a different version.", */
+/* + string.Format("This version of the Unreal Engine can only be compiled with clang 7.0, 6.0, 5.0, 4.0, 3.9, 3.8. clang {0} may not build it - please use a different version.", */
+ /* CompilerVersionString) */
+ /* ); */
+ /* } */
+/* --- a/Engine/Plugins/Experimental/RemoteSession/Source/RemoteSession/Private/MessageHandler/Messages.h 2019-01-29 18:39:14.528390396 -0600 */
+/* +++ b/Engine/Plugins/Experimental/RemoteSession/Source/RemoteSession/Private/MessageHandler/Messages.h 2019-01-27 15:01:57.569942558 -0600 */
+/* @@ -1,4 +1,4 @@ */
+/* -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. */
+/* +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. */
- #pragma once
+ /* #pragma once */
-@@ -20,7 +20,7 @@
- TArray<uint8> AsData()
- {
- FBufferArchive MemAr;
-- return MemAr;
-+ return MoveTemp(MemAr);
- }
- };
+/* @@ -20,7 +20,7 @@ */
+ /* TArray<uint8> AsData() */
+ /* { */
+ /* FBufferArchive MemAr; */
+/* - return MemAr; */
+/* + return MoveTemp(MemAr); */
+ /* } */
+ /* }; */
-@@ -48,7 +48,7 @@
- {
- FBufferArchive MemAr;
- MemAr << Param1 << Param2;
-- return MemAr;
-+ return MoveTemp(MemAr);
- }
- };
+/* @@ -48,7 +48,7 @@ */
+ /* { */
+ /* FBufferArchive MemAr; */
+ /* MemAr << Param1 << Param2; */
+/* - return MemAr; */
+/* + return MoveTemp(MemAr); */
+ /* } */
+ /* }; */
-@@ -80,7 +80,7 @@
- {
- FBufferArchive MemAr;
- MemAr << Param1 << Param2 << Param3;
-- return MemAr;
-+ return MoveTemp(MemAr);
- }
- };
+/* @@ -80,7 +80,7 @@ */
+ /* { */
+ /* FBufferArchive MemAr; */
+ /* MemAr << Param1 << Param2 << Param3; */
+/* - return MemAr; */
+/* + return MoveTemp(MemAr); */
+ /* } */
+ /* }; */
-@@ -116,7 +116,7 @@
- {
- FBufferArchive MemAr;
- MemAr << Param1 << Param2 << Param3 << Param4;
-- return MemAr;
-+ return MoveTemp(MemAr);
- }
- };
+/* @@ -116,7 +116,7 @@ */
+ /* { */
+ /* FBufferArchive MemAr; */
+ /* MemAr << Param1 << Param2 << Param3 << Param4; */
+/* - return MemAr; */
+/* + return MoveTemp(MemAr); */
+ /* } */
+ /* }; */
-@@ -156,6 +156,6 @@
- {
- FBufferArchive MemAr;
- MemAr << Param1 << Param2 << Param3 << Param4 << Param5;
-- return MemAr;
-+ return MoveTemp(MemAr);
- }
- };
---- a/Engine/Source/Runtime/Engine/Private/Player.cpp 2019-01-29 18:39:14.528390396 -0600
-+++ b/Engine/Source/Runtime/Engine/Private/Player.cpp 2019-01-27 15:04:39.436398242 -0600
-@@ -1,4 +1,4 @@
--// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
-+// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
+/* @@ -156,6 +156,6 @@ */
+ /* { */
+ /* FBufferArchive MemAr; */
+ /* MemAr << Param1 << Param2 << Param3 << Param4 << Param5; */
+/* - return MemAr; */
+/* + return MoveTemp(MemAr); */
+ /* } */
+ /* }; */
+/* --- a/Engine/Source/Runtime/Engine/Private/Player.cpp 2019-01-29 18:39:14.528390396 -0600 */
+/* +++ b/Engine/Source/Runtime/Engine/Private/Player.cpp 2019-01-27 15:04:39.436398242 -0600 */
+/* @@ -1,4 +1,4 @@ */
+/* -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. */
+/* +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. */
- /*=============================================================================
- Player.cpp: Unreal player implementation.
-@@ -65,7 +65,7 @@
+ /* /*============================================================================= */
+ /* Player.cpp: Unreal player implementation. */
+/* @@ -65,7 +65,7 @@ */
- if (!bWriteToLog)
- {
-- return StrOut;
-+ return MoveTemp(StrOut);
- }
+ /* if (!bWriteToLog) */
+ /* { */
+/* - return StrOut; */
+/* + return MoveTemp(StrOut); */
+ /* } */
- return TEXT("");
---- a/Engine/Source/Runtime/Engine/Private/UnrealExporter.cpp 2019-01-29 18:39:14.528390396 -0600
-+++ b/Engine/Source/Runtime/Engine/Private/UnrealExporter.cpp 2019-01-27 18:31:30.304177510 -0600
-@@ -1,4 +1,4 @@
--// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
-+// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
+ /* return TEXT(""); */
+/* --- a/Engine/Source/Runtime/Engine/Private/UnrealExporter.cpp 2019-01-29 18:39:14.528390396 -0600 */
+/* +++ b/Engine/Source/Runtime/Engine/Private/UnrealExporter.cpp 2019-01-27 18:31:30.304177510 -0600 */
+/* @@ -1,4 +1,4 @@ */
+/* -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. */
+/* +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. */
- /*=============================================================================
- UExporter.cpp: Exporter class implementation.
-@@ -870,7 +870,8 @@
- Output.Logf(TEXT("Components for '%s':\r\n"), *Object->GetFullName());
- ExportProperties(NULL, Output, Object->GetClass(), (uint8*)Object, 2, NULL, NULL, Object, PPF_SubobjectsOnly);
- Output.Logf(TEXT("<--- DONE!\r\n"));
-- return Output;
-+
-+ return MoveTemp(Output);
- }
+ /* /*============================================================================= */
+ /* UExporter.cpp: Exporter class implementation. */
+/* @@ -870,7 +870,8 @@ */
+ /* Output.Logf(TEXT("Components for '%s':\r\n"), *Object->GetFullName()); */
+ /* ExportProperties(NULL, Output, Object->GetClass(), (uint8*)Object, 2, NULL, NULL, Object, PPF_SubobjectsOnly); */
+ /* Output.Logf(TEXT("<--- DONE!\r\n")); */
+/* - return Output; */
+/* + */
+/* + return MoveTemp(Output); */
+ /* } */
-@@ -890,5 +891,5 @@
- const FExportObjectInnerContext Context;
- UExporter::ExportToOutputDevice(&Context, Object, NULL, Archive, TEXT("copy"), 0, PPF_Copy | PPF_DebugDump, false);
+/* @@ -890,5 +891,5 @@ */
+ /* const FExportObjectInnerContext Context; */
+ /* UExporter::ExportToOutputDevice(&Context, Object, NULL, Archive, TEXT("copy"), 0, PPF_Copy | PPF_DebugDump, false); */
-- return Archive;
-+ return MoveTemp(Archive);
- }
---- a/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/NiagaraScriptViewModel.cpp 2019-01-29 17:49:54.610116866 -0600
-+++ b/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/NiagaraScriptViewModel.cpp 2019-01-27 11:17:57.796011354 -0600
-@@ -1,4 +1,4 @@
--// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
-+// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
+/* - return Archive; */
+/* + return MoveTemp(Archive); */
+ /* } */
+/* --- a/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/NiagaraScriptViewModel.cpp 2019-01-29 17:49:54.610116866 -0600 */
+/* +++ b/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/NiagaraScriptViewModel.cpp 2019-01-27 11:17:57.796011354 -0600 */
+/* @@ -1,4 +1,4 @@ */
+/* -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. */
+/* +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. */
- #include "NiagaraScriptViewModel.h"
- #include "NiagaraScript.h"
-@@ -298,7 +298,6 @@
- ENiagaraScriptCompileStatus ScriptStatus = Scripts[i]->GetLastCompileStatus();
- if (Scripts[i].IsValid() && Scripts[i]->IsCompilable() && Scripts[i]->GetVMExecutableData().IsValid() && Scripts[i]->GetVMExecutableData().ByteCode.Num() == 0) // This is either a brand new script or failed in the past. Since we create a default working script, assume invalid.
- {
-- LastCompileStatus = LastCompileStatus;
- Message = TEXT("Please recompile for full error stack.");
- GraphViewModel->SetErrorTextToolTip(Message);
- }
---- a/Engine/Source/Editor/Kismet/Private/SBlueprintPalette.cpp 2019-01-29 17:49:54.880099978 -0600
-+++ b/Engine/Source/Editor/Kismet/Private/SBlueprintPalette.cpp 2019-01-27 11:17:57.986007265 -0600
-@@ -1,4 +1,4 @@
--// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
-+// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
+ /* #include "NiagaraScriptViewModel.h" */
+ /* #include "NiagaraScript.h" */
+/* @@ -298,7 +298,6 @@ */
+ /* ENiagaraScriptCompileStatus ScriptStatus = Scripts[i]->GetLastCompileStatus(); */
+ /* if (Scripts[i].IsValid() && Scripts[i]->IsCompilable() && Scripts[i]->GetVMExecutableData().IsValid() && Scripts[i]->GetVMExecutableData().ByteCode.Num() == 0) // This is either a brand new script or failed in the past. Since we create a default working script, assume invalid. */
+ /* { */
+/* - LastCompileStatus = LastCompileStatus; */
+ /* Message = TEXT("Please recompile for full error stack."); */
+ /* GraphViewModel->SetErrorTextToolTip(Message); */
+ /* } */
+/* --- a/Engine/Source/Editor/Kismet/Private/SBlueprintPalette.cpp 2019-01-29 17:49:54.880099978 -0600 */
+/* +++ b/Engine/Source/Editor/Kismet/Private/SBlueprintPalette.cpp 2019-01-27 11:17:57.986007265 -0600 */
+/* @@ -1,4 +1,4 @@ */
+/* -// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. */
+/* +// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. */
- #include "SBlueprintPalette.h"
- #include "Widgets/IToolTip.h"
-@@ -318,10 +318,6 @@
- {
- ToolTipOut = NodeToolTipText;
- }
-- else
-- {
-- ToolTipOut = ToolTipOut;
-- }
+ /* #include "SBlueprintPalette.h" */
+ /* #include "Widgets/IToolTip.h" */
+/* @@ -318,10 +318,6 @@ */
+ /* { */
+ /* ToolTipOut = NodeToolTipText; */
+ /* } */
+/* - else */
+/* - { */
+/* - ToolTipOut = ToolTipOut; */
+/* - } */
- // Ask node for a palette icon
- FLinearColor IconLinearColor = FLinearColor::White;
+ /* // Ask node for a palette icon */
+ /* FLinearColor IconLinearColor = FLinearColor::White; */
diff --git a/use-arch-mono.patch b/use-arch-mono.patch
index 5dccce5aa89..7756bf4d498 100644
--- a/use-arch-mono.patch
+++ b/use-arch-mono.patch
@@ -3,7 +3,7 @@
@@ -12,16 +12,19 @@
IS_MONO_INSTALLED=0
- MONO_VERSION_PATH=`which mono` || true
+ MONO_VERSION_PATH=$(command -v mono) || true
+UE_USE_SYSTEM_MONO=1
if [ "$UE_USE_SYSTEM_MONO" == "1" ] && [ ! $MONO_VERSION_PATH == "" ] && [ -f $MONO_VERSION_PATH ]; then
# If Mono is installed, check if it's 4.0.2 or higher