diff --git a/CMakeLists.txt b/CMakeLists.txt
index 63177e9d60..a7e42613cb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -128,6 +128,10 @@ foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
endforeach()
# The following steps have to be done after all targets are registered:
+# Defer generation of the StaticModules.inl file which is needed to create the AZ::Module derived class in monolithic
+# builds until after all the targets are known
+ly_delayed_generate_static_modules_inl()
+
# 1. generate a settings registry .setreg file for all ly_add_project_dependencies() and ly_add_target_dependencies() calls
# to provide applications with the filenames of gem modules to load
# This must be done before ly_delayed_target_link_libraries() as that inserts BUILD_DEPENDENCIES as MANUALLY_ADDED_DEPENDENCIES
diff --git a/Code/Framework/AzAndroid/java/com/amazon/lumberyard/LumberyardActivity.java b/Code/Framework/AzAndroid/java/com/amazon/lumberyard/LumberyardActivity.java
index b5d3de8164..5c1a120df6 100644
--- a/Code/Framework/AzAndroid/java/com/amazon/lumberyard/LumberyardActivity.java
+++ b/Code/Framework/AzAndroid/java/com/amazon/lumberyard/LumberyardActivity.java
@@ -244,7 +244,7 @@ public class LumberyardActivity extends NativeActivity
boolean useMainObb = GetBooleanResource("use_main_obb");
boolean usePatchObb = GetBooleanResource("use_patch_obb");
- if (IsBootstrapInAPK() && (useMainObb || usePatchObb))
+ if (AreAssetsInAPK() && (useMainObb || usePatchObb))
{
Log.d(TAG, "Using OBB expansion files for game assets");
@@ -421,12 +421,12 @@ public class LumberyardActivity extends NativeActivity
}
////////////////////////////////////////////////////////////////
- private boolean IsBootstrapInAPK()
+ private boolean AreAssetsInAPK()
{
try
{
- InputStream bootstrap = getAssets().open("bootstrap.cfg", AssetManager.ACCESS_UNKNOWN);
- bootstrap.close();
+ InputStream engine = getAssets().open("engine.json", AssetManager.ACCESS_UNKNOWN);
+ engine.close();
return true;
}
catch (IOException exception)
diff --git a/Code/Framework/AzCore/AzCore/Android/Utils.cpp b/Code/Framework/AzCore/AzCore/Android/Utils.cpp
index efbbf50d1d..d6435c67be 100644
--- a/Code/Framework/AzCore/AzCore/Android/Utils.cpp
+++ b/Code/Framework/AzCore/AzCore/Android/Utils.cpp
@@ -148,7 +148,7 @@ namespace AZ
}
}
- AZ_Assert(false, "Failed to locate the bootstrap.cfg path");
+ AZ_Assert(false, "Failed to locate the engine.json path");
return nullptr;
}
diff --git a/Code/Framework/AzCore/AzCore/Android/Utils.h b/Code/Framework/AzCore/AzCore/Android/Utils.h
index 222fac80ad..0862d53aa4 100644
--- a/Code/Framework/AzCore/AzCore/Android/Utils.h
+++ b/Code/Framework/AzCore/AzCore/Android/Utils.h
@@ -73,8 +73,8 @@ namespace AZ
//! \return The pointer position of the relative asset path
AZ::IO::FixedMaxPath StripApkPrefix(const char* filePath);
- //! Searches application storage and the APK for bootstrap.cfg. Will return nullptr
- //! if bootstrap.cfg is not found.
+ //! Searches application storage and the APK for engine.json. Will return nullptr
+ //! if engine.json is not found.
const char* FindAssetsDirectory();
//! Calls into Java to show the splash screen on the main UI (Java) thread
diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp
index 8a170f5d89..f03b1aac76 100644
--- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp
+++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp
@@ -462,8 +462,6 @@ namespace AZ
// for the application root.
CalculateAppRoot();
- // Merge the bootstrap.cfg file into the Settings Registry as soon as the OSAllocator has been created.
- SettingsRegistryMergeUtils::MergeSettingsToRegistry_Bootstrap(*m_settingsRegistry);
SettingsRegistryMergeUtils::MergeSettingsToRegistry_O3deUserRegistry(*m_settingsRegistry, AZ_TRAIT_OS_PLATFORM_CODENAME, {});
SettingsRegistryMergeUtils::MergeSettingsToRegistry_CommandLine(*m_settingsRegistry, m_commandLine, executeRegDumpCommands);
SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*m_settingsRegistry);
diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp
index 82bf1db484..5870c66633 100644
--- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp
+++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp
@@ -494,13 +494,6 @@ namespace AZ::SettingsRegistryMergeUtils
return configFileParsed;
}
- void MergeSettingsToRegistry_Bootstrap(SettingsRegistryInterface& registry)
- {
- ConfigParserSettings parserSettings;
- parserSettings.m_registryRootPointerPath = BootstrapSettingsRootKey;
- MergeSettingsToRegistry_ConfigFile(registry, "bootstrap.cfg", parserSettings);
- }
-
void MergeSettingsToRegistry_AddRuntimeFilePaths(SettingsRegistryInterface& registry)
{
using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString;
diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.h b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.h
index 576066c29f..b482530d24 100644
--- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.h
+++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.h
@@ -172,9 +172,6 @@ namespace AZ::SettingsRegistryMergeUtils
bool MergeSettingsToRegistry_ConfigFile(SettingsRegistryInterface& registry, AZStd::string_view filePath,
const ConfigParserSettings& configParserSettings);
- //! Loads bootstrap.cfg into the Settings Registry. This file does not support specializations.
- void MergeSettingsToRegistry_Bootstrap(SettingsRegistryInterface& registry);
-
//! Extracts file path information from the environment and bootstrap to calculate the various file paths and adds those
//! to the Settings Registry under the FilePathsRootKey.
void MergeSettingsToRegistry_AddRuntimeFilePaths(SettingsRegistryInterface& registry);
diff --git a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp
index e02892de4e..c65ba373f8 100644
--- a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp
@@ -679,8 +679,6 @@ namespace AzFramework
{
auto fileIoBase = m_archiveFileIO.get();
// Set up the default file aliases based on the settings registry
- fileIoBase->SetAlias("@assets@", "");
- fileIoBase->SetAlias("@root@", GetEngineRoot());
fileIoBase->SetAlias("@engroot@", GetEngineRoot());
fileIoBase->SetAlias("@projectroot@", GetEngineRoot());
fileIoBase->SetAlias("@exefolder@", GetExecutableFolder());
@@ -694,8 +692,8 @@ namespace AzFramework
pathAliases.clear();
if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder))
{
- fileIoBase->SetAlias("@projectplatformcache@", pathAliases.c_str());
fileIoBase->SetAlias("@assets@", pathAliases.c_str());
+ fileIoBase->SetAlias("@projectplatformcache@", pathAliases.c_str());
fileIoBase->SetAlias("@root@", pathAliases.c_str()); // Deprecated Use @projectplatformcache@
}
pathAliases.clear();
diff --git a/Code/Framework/AzFramework/AzFramework/ProjectManager/ProjectManager.cpp b/Code/Framework/AzFramework/AzFramework/ProjectManager/ProjectManager.cpp
index bdbfe6197f..2742b90f4c 100644
--- a/Code/Framework/AzFramework/AzFramework/ProjectManager/ProjectManager.cpp
+++ b/Code/Framework/AzFramework/AzFramework/ProjectManager/ProjectManager.cpp
@@ -46,7 +46,6 @@ namespace AzFramework::ProjectManager
// Store the Command line to the Setting Registry
AZ::SettingsRegistryImpl settingsRegistry;
AZ::SettingsRegistryMergeUtils::StoreCommandLineToRegistry(settingsRegistry, commandLine);
- AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_Bootstrap(settingsRegistry);
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_O3deUserRegistry(settingsRegistry, AZ_TRAIT_OS_PLATFORM_CODENAME, {});
// Retrieve Command Line from Settings Registry, it may have been updated by the call to FindEngineRoot()
// in MergeSettingstoRegistry_ConfigFile
diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/Local.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/Local.svg
new file mode 100644
index 0000000000..2017cabe21
--- /dev/null
+++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/Local.svg
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/Parent.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/Parent.svg
new file mode 100644
index 0000000000..c0b9580985
--- /dev/null
+++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/Parent.svg
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/World.svg b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/World.svg
new file mode 100644
index 0000000000..4d77775e3d
--- /dev/null
+++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/img/UI20/toolbar/World.svg
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc b/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc
index 8ea4755a24..00fa95d094 100644
--- a/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc
+++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/resources.qrc
@@ -354,6 +354,7 @@
img/UI20/toolbar/Grid.svg
img/UI20/toolbar/Lighting.svg
img/UI20/toolbar/Load.svg
+ img/UI20/toolbar/Local.svg
img/UI20/toolbar/Locked.svg
img/UI20/toolbar/LUA.svg
img/UI20/toolbar/Material.svg
@@ -362,6 +363,7 @@
img/UI20/toolbar/Object_follow_terrain.svg
img/UI20/toolbar/Object_height.svg
img/UI20/toolbar/Object_list.svg
+ img/UI20/toolbar/Parent.svg
img/UI20/toolbar/particle.svg
img/UI20/toolbar/Play.svg
img/UI20/toolbar/Redo.svg
@@ -380,6 +382,7 @@
img/UI20/toolbar/undo.svg
img/UI20/toolbar/Unlocked.svg
img/UI20/toolbar/Vertex_snapping.svg
+ img/UI20/toolbar/World.svg
img/UI20/toolbar/X_axis.svg
img/UI20/toolbar/Y_axis.svg
img/UI20/toolbar/Z_axis.svg
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp
index 7b4761c39a..2965148172 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp
@@ -41,7 +41,7 @@ namespace AzToolsFramework
[[maybe_unused]] bool result =
settingsRegistry->Get(m_projectPathWithOsSeparator.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath);
- AZ_Assert(result, "Couldn't retrieve project root path");
+ AZ_Warning("Prefab", result, "Couldn't retrieve project root path");
m_projectPathWithSlashSeparator = AZ::IO::Path(m_projectPathWithOsSeparator.Native(), '/').MakePreferred();
AZ::Interface::Register(this);
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp
index a1949dd44a..0edbc4f8b5 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp
@@ -435,7 +435,7 @@ namespace AzToolsFramework
}
}
- static void DestroyTransformModeSelectionCluster(const ViewportUi::ClusterId clusterId)
+ static void DestroyCluster(const ViewportUi::ClusterId clusterId)
{
ViewportUi::ViewportUiRequestBus::Event(
ViewportUi::DefaultViewportId,
@@ -483,6 +483,26 @@ namespace AzToolsFramework
return worldFromLocal.TransformPoint(CalculateCenterOffset(entityId, pivot));
}
+ void EditorTransformComponentSelection::UpdateSpaceCluster(const ReferenceFrame referenceFrame)
+ {
+ auto buttonIdFromFrameFn = [this](const ReferenceFrame referenceFrame) {
+ switch (referenceFrame)
+ {
+ case ReferenceFrame::Local:
+ return m_spaceCluster.m_localButtonId;
+ case ReferenceFrame::Parent:
+ return m_spaceCluster.m_parentButtonId;
+ case ReferenceFrame::World:
+ return m_spaceCluster.m_worldButtonId;
+ }
+ return m_spaceCluster.m_parentButtonId;
+ };
+
+ ViewportUi::ViewportUiRequestBus::Event(
+ ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::SetClusterActiveButton, m_spaceCluster.m_spaceClusterId,
+ buttonIdFromFrameFn(referenceFrame));
+ }
+
namespace ETCS
{
PivotOrientationResult CalculatePivotOrientation(
@@ -789,13 +809,13 @@ namespace AzToolsFramework
EntityIdManipulators& entityIdManipulators,
OptionalFrame& pivotOverrideFrame,
ViewportInteraction::KeyboardModifiers& prevModifiers,
- bool& transformChangedInternally)
+ bool& transformChangedInternally, SpaceCluster spaceCluster)
{
AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework);
entityIdManipulators.m_manipulators->SetLocalPosition(action.LocalPosition());
- const ReferenceFrame referenceFrame = ReferenceFrameFromModifiers(action.m_modifiers);
+ const ReferenceFrame referenceFrame = spaceCluster.m_spaceLock ? spaceCluster.m_currentSpace : ReferenceFrameFromModifiers(action.m_modifiers);
if (action.m_modifiers.Ctrl())
{
@@ -1027,6 +1047,7 @@ namespace AzToolsFramework
EditorManipulatorCommandUndoRedoRequestBus::Handler::BusConnect(entityContextId);
CreateTransformModeSelectionCluster();
+ CreateSpaceSelectionCluster();
RegisterActions();
SetupBoxSelect();
RefreshSelectedEntityIdsAndRegenerateManipulators();
@@ -1037,7 +1058,9 @@ namespace AzToolsFramework
m_selectedEntityIds.clear();
DestroyManipulators(m_entityIdManipulators);
- DestroyTransformModeSelectionCluster(m_transformModeClusterId);
+ DestroyCluster(m_transformModeClusterId);
+ DestroyCluster(m_spaceCluster.m_spaceClusterId);
+
UnregisterActions();
m_pivotOverrideFrame.Reset();
@@ -1274,8 +1297,8 @@ namespace AzToolsFramework
[this, prevModifiers, manipulatorEntityIds](const LinearManipulator::Action& action) mutable -> void
{
UpdateTranslationManipulator(
- action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators,
- m_pivotOverrideFrame, prevModifiers, m_transformChangedInternally);
+ action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators, m_pivotOverrideFrame, prevModifiers,
+ m_transformChangedInternally, m_spaceCluster);
});
translationManipulators->InstallLinearManipulatorMouseUpCallback(
@@ -1305,8 +1328,8 @@ namespace AzToolsFramework
[this, prevModifiers, manipulatorEntityIds](const PlanarManipulator::Action& action) mutable -> void
{
UpdateTranslationManipulator(
- action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators,
- m_pivotOverrideFrame, prevModifiers, m_transformChangedInternally);
+ action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators, m_pivotOverrideFrame, prevModifiers,
+ m_transformChangedInternally, m_spaceCluster);
});
translationManipulators->InstallPlanarManipulatorMouseUpCallback(
@@ -1335,8 +1358,8 @@ namespace AzToolsFramework
[this, prevModifiers, manipulatorEntityIds](const SurfaceManipulator::Action& action) mutable -> void
{
UpdateTranslationManipulator(
- action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators,
- m_pivotOverrideFrame, prevModifiers, m_transformChangedInternally);
+ action, manipulatorEntityIds->m_entityIds, m_entityIdManipulators, m_pivotOverrideFrame, prevModifiers,
+ m_transformChangedInternally, m_spaceCluster);
});
translationManipulators->InstallSurfaceManipulatorMouseUpCallback(
@@ -1414,7 +1437,7 @@ namespace AzToolsFramework
[this, prevModifiers, sharedRotationState]
(const AngularManipulator::Action& action) mutable -> void
{
- const ReferenceFrame referenceFrame = ReferenceFrameFromModifiers(action.m_modifiers);
+ const ReferenceFrame referenceFrame = m_spaceCluster.m_spaceLock ? m_spaceCluster.m_currentSpace : ReferenceFrameFromModifiers(action.m_modifiers);
const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta;
// store the pivot override frame when positioning the manipulator manually (ctrl)
@@ -2566,6 +2589,67 @@ namespace AzToolsFramework
m_transformModeSelectionHandler);
}
+ void EditorTransformComponentSelection::CreateSpaceSelectionCluster()
+ {
+ // create the cluster for switching spaces/reference frames
+ ViewportUi::ViewportUiRequestBus::EventResult(
+ m_spaceCluster.m_spaceClusterId, ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::CreateCluster,
+ ViewportUi::Alignment::TopRight);
+
+ // create and register the buttons (strings correspond to icons even if the values appear different)
+ m_spaceCluster.m_worldButtonId = RegisterClusterButton(m_spaceCluster.m_spaceClusterId, "World");
+ m_spaceCluster.m_parentButtonId = RegisterClusterButton(m_spaceCluster.m_spaceClusterId, "Parent");
+ m_spaceCluster.m_localButtonId = RegisterClusterButton(m_spaceCluster.m_spaceClusterId, "Local");
+
+ auto onButtonClicked = [this](ViewportUi::ButtonId buttonId) {
+ if (buttonId == m_spaceCluster.m_localButtonId)
+ {
+ // Unlock
+ if (m_spaceCluster.m_spaceLock && m_spaceCluster.m_currentSpace == ReferenceFrame::Local)
+ {
+ m_spaceCluster.m_spaceLock = false;
+ }
+ else
+ {
+ m_spaceCluster.m_spaceLock = true;
+ m_spaceCluster.m_currentSpace = ReferenceFrame::Local;
+ }
+ }
+ else if (buttonId == m_spaceCluster.m_parentButtonId)
+ {
+ // Unlock
+ if (m_spaceCluster.m_spaceLock && m_spaceCluster.m_currentSpace == ReferenceFrame::Parent)
+ {
+ m_spaceCluster.m_spaceLock = false;
+ }
+ else
+ {
+ m_spaceCluster.m_spaceLock = true;
+ m_spaceCluster.m_currentSpace = ReferenceFrame::Parent;
+ }
+ }
+ else if (buttonId == m_spaceCluster.m_worldButtonId)
+ {
+ // Unlock
+ if (m_spaceCluster.m_spaceLock && m_spaceCluster.m_currentSpace == ReferenceFrame::World)
+ {
+ m_spaceCluster.m_spaceLock = false;
+ }
+ else
+ {
+ m_spaceCluster.m_spaceLock = true;
+ m_spaceCluster.m_currentSpace = ReferenceFrame::World;
+ }
+ }
+ };
+
+ m_spaceCluster.m_spaceSelectionHandler = AZ::Event::Handler(onButtonClicked);
+
+ ViewportUi::ViewportUiRequestBus::Event(
+ ViewportUi::DefaultViewportId, &ViewportUi::ViewportUiRequestBus::Events::RegisterClusterEventHandler,
+ m_spaceCluster.m_spaceClusterId, m_spaceCluster.m_spaceSelectionHandler);
+ }
+
EditorTransformComponentSelectionRequests::Mode EditorTransformComponentSelection::GetTransformMode()
{
return m_mode;
@@ -3277,7 +3361,10 @@ namespace AzToolsFramework
ViewportInteraction::BuildMouseButtons(
QGuiApplication::mouseButtons()), m_boxSelect.Active());
- const ReferenceFrame referenceFrame = ReferenceFrameFromModifiers(modifiers);
+ const ReferenceFrame referenceFrame =
+ m_spaceCluster.m_spaceLock ? m_spaceCluster.m_currentSpace : ReferenceFrameFromModifiers(modifiers);
+
+ UpdateSpaceCluster(referenceFrame);
bool refresh = false;
if (referenceFrame != m_referenceFrame)
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h
index 500ae484f8..4be84df26e 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h
@@ -106,6 +106,17 @@ namespace AzToolsFramework
World, //!< World space (space aligned to world axes - identity).
};
+ struct SpaceCluster
+ {
+ ViewportUi::ClusterId m_spaceClusterId;
+ ViewportUi::ButtonId m_localButtonId;
+ ViewportUi::ButtonId m_parentButtonId;
+ ViewportUi::ButtonId m_worldButtonId;
+ AZ::Event::Handler m_spaceSelectionHandler;
+ ReferenceFrame m_currentSpace = ReferenceFrame::Parent;
+ bool m_spaceLock = false;
+ };
+
//! Entity selection/interaction handling.
//! Provide a suite of functionality for manipulating entities, primarily through their TransformComponent.
class EditorTransformComponentSelection
@@ -160,6 +171,7 @@ namespace AzToolsFramework
void RegenerateManipulators();
void CreateTransformModeSelectionCluster();
+ void CreateSpaceSelectionCluster();
void ClearManipulatorTranslationOverride();
void ClearManipulatorOrientationOverride();
@@ -285,6 +297,9 @@ namespace AzToolsFramework
AZ::Event::Handler m_transformModeSelectionHandler; //!< Event handler for the Viewport UI cluster.
AzFramework::ClickDetector m_clickDetector; //!< Detect different types of mouse click.
AzFramework::CursorState m_cursorState; //!< Track the mouse position and delta movement each frame.
+
+ SpaceCluster m_spaceCluster;
+ void UpdateSpaceCluster(ReferenceFrame referenceFrame);
};
//! The ETCS (EntityTransformComponentSelection) namespace contains functions and data used exclusively by
diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
index 5ccbd95f09..3d45c10fca 100644
--- a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -62,6 +63,12 @@ namespace UnitTest
m_assetSeedManager = new AzToolsFramework::AssetSeedManager();
m_assetRegistry = new AzFramework::AssetRegistry();
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_application->Start(AzFramework::Application::Descriptor());
for (int idx = 0; idx < s_totalAssets; idx++)
diff --git a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
index 328bf5dea5..4cc98106d6 100644
--- a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
@@ -10,6 +10,8 @@
*
*/
+#include
+#include
#include
#include
#include
@@ -49,6 +51,14 @@ namespace UnitTest
using namespace AZ::Data;
m_application = new ToolsTestApplication("AddressedAssetCatalogManager"); // Shorter name because Setting Registry
// specialization are 32 characters max.
+
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_application->Start(AzFramework::Application::Descriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
diff --git a/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp b/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp
index 751e151ec6..1714ee5aa5 100644
--- a/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp
+++ b/Code/Framework/GridMate/GridMate/Serialize/CompressionMarshal.cpp
@@ -488,18 +488,17 @@ void TransformCompressor::Marshal(WriteBuffer& wb, const AZ::Transform& value) c
{
AZ::u8 flags = 0;
auto flagsMarker = wb.InsertMarker(flags);
- AZ::Matrix3x3 m33 = AZ::Matrix3x3::CreateFromTransform(value);
- AZ::Vector3 scale = m33.ExtractScale();
- AZ::Quaternion rot = AZ::Quaternion::CreateFromMatrix3x3(m33.GetOrthogonalized());
+ float scale = value.GetUniformScale();
+ AZ::Quaternion rot = value.GetRotation();
if (!rot.IsIdentity())
{
flags |= HAS_ROT;
wb.Write(rot, QuatCompMarshaler());
}
- if (!scale.IsClose(AZ::Vector3::CreateOne()))
+ if (!AZ::IsClose(scale, 1.0f, AZ::Constants::Tolerance))
{
flags |= HAS_SCALE;
- wb.Write(scale, Vec3CompMarshaler());
+ wb.Write(scale, HalfMarshaler());
}
AZ::Vector3 pos = value.GetTranslation();
if (!pos.IsZero())
@@ -527,9 +526,9 @@ void TransformCompressor::Unmarshal(AZ::Transform& value, ReadBuffer& rb) const
}
if (flags & HAS_SCALE)
{
- AZ::Vector3 scale;
- rb.Read(scale, Vec3CompMarshaler());
- xform.MultiplyByScale(scale);
+ float scale;
+ rb.Read(scale, HalfMarshaler());
+ xform.MultiplyByUniformScale(scale);
}
if (flags & HAS_POS)
{
diff --git a/Code/Framework/Tests/ArchiveCompressionTests.cpp b/Code/Framework/Tests/ArchiveCompressionTests.cpp
index fb6beca0b5..c648262599 100644
--- a/Code/Framework/Tests/ArchiveCompressionTests.cpp
+++ b/Code/Framework/Tests/ArchiveCompressionTests.cpp
@@ -11,6 +11,7 @@
*/
#include
+#include
#include
#include
#include
@@ -40,6 +41,13 @@ namespace UnitTest
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_application->Start({});
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
diff --git a/Code/Framework/Tests/ArchiveTests.cpp b/Code/Framework/Tests/ArchiveTests.cpp
index aaca043c4b..6dc081ee72 100644
--- a/Code/Framework/Tests/ArchiveTests.cpp
+++ b/Code/Framework/Tests/ArchiveTests.cpp
@@ -16,6 +16,7 @@
#include
#include // for max path decl
+#include
#include
#include
#include // for function<> in the find files callback.
@@ -42,6 +43,14 @@ namespace UnitTest
{
AZ::ComponentApplication::Descriptor descriptor;
descriptor.m_stackRecordLevels = 30;
+
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_application->Start(descriptor);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
diff --git a/Code/Framework/Tests/AssetCatalog.cpp b/Code/Framework/Tests/AssetCatalog.cpp
index 8a89ba349c..1575b0a469 100644
--- a/Code/Framework/Tests/AssetCatalog.cpp
+++ b/Code/Framework/Tests/AssetCatalog.cpp
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -304,6 +305,13 @@ namespace UnitTest
m_app.reset(aznew AzFramework::Application());
AZ::ComponentApplication::Descriptor desc;
desc.m_useExistingAllocator = true;
+
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app->Start(desc);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
diff --git a/Code/Framework/Tests/ComponentAddRemove.cpp b/Code/Framework/Tests/ComponentAddRemove.cpp
index 4fd6db7dde..f635a5ee3b 100644
--- a/Code/Framework/Tests/ComponentAddRemove.cpp
+++ b/Code/Framework/Tests/ComponentAddRemove.cpp
@@ -12,6 +12,7 @@
#include
#include
+#include
#include
#include
@@ -572,6 +573,12 @@ namespace UnitTest
{
AllocatorsTestFixture::SetUp();
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
AzFramework::Application::Descriptor descriptor;
descriptor.m_enableDrilling = false;
m_app.Start(descriptor);
diff --git a/Code/Framework/Tests/FileFunc.cpp b/Code/Framework/Tests/FileFunc.cpp
index d703164582..8db77fd79b 100644
--- a/Code/Framework/Tests/FileFunc.cpp
+++ b/Code/Framework/Tests/FileFunc.cpp
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -278,6 +279,12 @@ namespace UnitTest
{
FrameworkApplicationFixture::SetUp();
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_serializeContext = AZStd::make_unique();
m_jsonRegistrationContext = AZStd::make_unique();
m_jsonSystemComponent = AZStd::make_unique();
diff --git a/Code/Framework/Tests/FileTagTests.cpp b/Code/Framework/Tests/FileTagTests.cpp
index 989c811111..b94131afee 100644
--- a/Code/Framework/Tests/FileTagTests.cpp
+++ b/Code/Framework/Tests/FileTagTests.cpp
@@ -83,6 +83,7 @@ namespace UnitTest
void SetUp() override
{
AllocatorsFixture::SetUp();
+
m_data = AZStd::make_unique();
using namespace AzFramework::FileTag;
AZ::ComponentApplication::Descriptor desc;
diff --git a/Code/Framework/Tests/FrameworkApplicationFixture.h b/Code/Framework/Tests/FrameworkApplicationFixture.h
index f3a90864e7..c2fea389e0 100644
--- a/Code/Framework/Tests/FrameworkApplicationFixture.h
+++ b/Code/Framework/Tests/FrameworkApplicationFixture.h
@@ -54,7 +54,7 @@ namespace UnitTest
};
void SetUp() override
- {
+ {
m_appDescriptor.m_allocationRecords = true;
m_appDescriptor.m_allocationRecordsSaveNames = true;
m_appDescriptor.m_recordingMode = AZ::Debug::AllocationRecords::Mode::RECORD_FULL;
diff --git a/Code/Framework/Tests/GenericComponentWrapperTest.cpp b/Code/Framework/Tests/GenericComponentWrapperTest.cpp
index b3dac90777..25af10b339 100644
--- a/Code/Framework/Tests/GenericComponentWrapperTest.cpp
+++ b/Code/Framework/Tests/GenericComponentWrapperTest.cpp
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -59,6 +60,12 @@ class WrappedEditorComponentTest
protected:
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(AZ::ComponentApplication::Descriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
@@ -178,6 +185,12 @@ class FindWrappedComponentsTest
public:
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(AzFramework::Application::Descriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
diff --git a/Code/Framework/Tests/Slices.cpp b/Code/Framework/Tests/Slices.cpp
index 6a9ce858c0..8a20c43fb5 100644
--- a/Code/Framework/Tests/Slices.cpp
+++ b/Code/Framework/Tests/Slices.cpp
@@ -22,6 +22,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -1059,6 +1060,12 @@ namespace UnitTest
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(AzFramework::Application::Descriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
diff --git a/Code/LauncherUnified/launcher_generator.cmake b/Code/LauncherUnified/launcher_generator.cmake
index 28429729e1..edb6655411 100644
--- a/Code/LauncherUnified/launcher_generator.cmake
+++ b/Code/LauncherUnified/launcher_generator.cmake
@@ -9,6 +9,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
+
+set_property(GLOBAL PROPERTY LAUNCHER_UNIFIED_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
# Launcher targets for a project need to be generated when configuring a project.
# When building the engine source, this file will be included by LauncherUnified's CMakeLists.txt
# When using an installed engine, this file will be included by the FindLauncherGenerator.cmake script
@@ -40,28 +42,8 @@ foreach(project_name project_path IN ZIP_LISTS LY_PROJECTS_TARGET_NAME LY_PROJEC
# In the monolithic case, we need to register the gem modules, to do so we will generate a StaticModules.inl
# file from StaticModules.in
-
+ set_property(GLOBAL APPEND PROPERTY LY_STATIC_MODULE_PROJECTS_NAME ${project_name})
get_property(game_gem_dependencies GLOBAL PROPERTY LY_DELAYED_DEPENDENCIES_${project_name}.GameLauncher)
-
- unset(extern_module_declarations)
- unset(module_invocations)
-
- foreach(game_gem_dependency ${game_gem_dependencies})
- # To match the convention on how gems targets vs gem modules are named, we remove the "Gem::" from prefix
- # and remove the ".Static" from the suffix
- string(REGEX REPLACE "^Gem::" "Gem_" game_gem_dependency ${game_gem_dependency})
- string(REGEX REPLACE "^Project::" "Project_" game_gem_dependency ${game_gem_dependency})
- # Replace "." with "_"
- string(REPLACE "." "_" game_gem_dependency ${game_gem_dependency})
-
- string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_${game_gem_dependency}();\n")
- string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_${game_gem_dependency}());\n")
-
- endforeach()
-
- configure_file(StaticModules.in
- ${CMAKE_CURRENT_BINARY_DIR}/${project_name}.GameLauncher/Includes/StaticModules.inl
- )
set(game_build_dependencies
${game_gem_dependencies}
@@ -70,29 +52,9 @@ foreach(project_name project_path IN ZIP_LISTS LY_PROJECTS_TARGET_NAME LY_PROJEC
if(PAL_TRAIT_BUILD_SERVER_SUPPORTED)
get_property(server_gem_dependencies GLOBAL PROPERTY LY_DELAYED_DEPENDENCIES_${project_name}.ServerLauncher)
-
- unset(extern_module_declarations)
- unset(module_invocations)
-
- foreach(server_gem_dependency ${server_gem_dependencies})
- # To match the convention on how gems targets vs gem modules are named, we remove the "Gem::" from prefix
- # and remove the ".Static" from the suffix
- string(REGEX REPLACE "^Gem::" "Gem_" server_gem_dependency ${server_gem_dependency})
- string(REGEX REPLACE "^Project::" "Project_" server_gem_dependency ${server_gem_dependency})
- # Replace "." with "_"
- string(REPLACE "." "_" server_gem_dependency ${server_gem_dependency})
-
- string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_${server_gem_dependency}();\n")
- string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_${server_gem_dependency}());\n")
-
- endforeach()
-
- configure_file(StaticModules.in
- ${CMAKE_CURRENT_BINARY_DIR}/${project_name}.ServerLauncher/Includes/StaticModules.inl
- )
set(server_build_dependencies
- ${game_gem_dependencies}
+ ${server_gem_dependencies}
Legacy::CrySystem
)
endif()
@@ -186,3 +148,63 @@ foreach(project_name project_path IN ZIP_LISTS LY_PROJECTS_TARGET_NAME LY_PROJEC
endif()
endforeach()
+
+#! Defer generation of the StaticModules.inl file needed in monolithic builds until after all the CMake targets are known
+# This is that the GEM_MODULE target runtime dependencies can be parsed to discover the list of dependent modules
+# to load
+function(ly_delayed_generate_static_modules_inl)
+ if(LY_MONOLITHIC_GAME)
+ get_property(launcher_unified_binary_dir GLOBAL PROPERTY LAUNCHER_UNIFIED_BINARY_DIR)
+ get_property(project_names GLOBAL PROPERTY LY_STATIC_MODULE_PROJECTS_NAME)
+ foreach(project_name ${project_names})
+
+ unset(extern_module_declarations)
+ unset(module_invocations)
+
+ unset(all_game_gem_dependencies)
+ ly_get_gem_load_dependencies(all_game_gem_dependencies ${project_name}.GameLauncher)
+
+ foreach(game_gem_dependency ${all_game_gem_dependencies})
+ # To match the convention on how gems targets vs gem modules are named,
+ # we remove the ".Static" from the suffix
+ # Replace "." with "_"
+ string(REPLACE "." "_" game_gem_dependency ${game_gem_dependency})
+
+ string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_Gem_${game_gem_dependency}();\n")
+ string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_Gem_${game_gem_dependency}());\n")
+
+ endforeach()
+
+ configure_file(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/StaticModules.in
+ ${launcher_unified_binary_dir}/${project_name}.GameLauncher/Includes/StaticModules.inl
+ )
+
+ if(PAL_TRAIT_BUILD_SERVER_SUPPORTED)
+ get_property(server_gem_dependencies GLOBAL PROPERTY LY_STATIC_MODULE_PROJECTS_DEPENDENCIES_${project_name}.ServerLauncher)
+
+ unset(extern_module_declarations)
+ unset(module_invocations)
+
+ unset(all_server_gem_dependencies)
+ ly_get_gem_load_dependencies(all_server_gem_dependencies ${project_name}.ServerLauncher)
+ foreach(server_gem_dependency ${server_gem_dependencies})
+ ly_get_gem_load_dependencies(server_gem_load_dependencies ${server_gem_dependency})
+ list(APPEND all_server_gem_dependencies ${server_gem_load_dependencies} ${server_gem_dependency})
+ endforeach()
+ foreach(server_gem_dependency ${all_server_gem_dependencies})
+ # Replace "." with "_"
+ string(REPLACE "." "_" server_gem_dependency ${server_gem_dependency})
+
+ string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_Gem_${server_gem_dependency}();\n")
+ string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_Gem_${server_gem_dependency}());\n")
+
+ endforeach()
+
+ configure_file(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/StaticModules.in
+ ${launcher_unified_binary_dir}/${project_name}.ServerLauncher/Includes/StaticModules.inl
+ )
+
+ endif()
+ endforeach()
+ endif()
+endfunction()
diff --git a/Code/Tools/AssetBundler/tests/applicationManagerTests.cpp b/Code/Tools/AssetBundler/tests/applicationManagerTests.cpp
index 4156a6790d..f2477782d0 100644
--- a/Code/Tools/AssetBundler/tests/applicationManagerTests.cpp
+++ b/Code/Tools/AssetBundler/tests/applicationManagerTests.cpp
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
#include
#include
@@ -57,6 +58,22 @@ namespace AssetBundler
UnitTest::ScopedAllocatorSetupFixture::SetUp();
m_data = AZStd::make_unique();
+ AZ::SettingsRegistryInterface* registry = nullptr;
+ if (!AZ::SettingsRegistry::Get())
+ {
+ AZ::SettingsRegistry::Register(&m_registry);
+ registry = &m_registry;
+ }
+ else
+ {
+ registry = AZ::SettingsRegistry::Get();
+ }
+ auto projectPathKey = AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey)
+ + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
+
m_data->m_applicationManager.reset(aznew MockApplicationManagerTest(0, 0));
m_data->m_applicationManager->Start(AzFramework::Application::Descriptor());
@@ -84,6 +101,12 @@ namespace AssetBundler
delete m_data->m_localFileIO;
AZ::IO::FileIOBase::SetInstance(m_data->m_priorFileIO);
+ auto settingsRegistry = AZ::SettingsRegistry::Get();
+ if(settingsRegistry == &m_registry)
+ {
+ AZ::SettingsRegistry::Unregister(settingsRegistry);
+ }
+
m_data->m_applicationManager->Stop();
m_data->m_applicationManager.reset();
m_data.reset();
@@ -99,6 +122,7 @@ namespace AssetBundler
};
AZStd::unique_ptr m_data;
+ AZ::SettingsRegistryImpl m_registry;
};
TEST_F(ApplicationManagerTest, ValidatePlatformFlags_ReadConfigFiles_OK)
diff --git a/Code/Tools/AssetBundler/tests/tests_main.cpp b/Code/Tools/AssetBundler/tests/tests_main.cpp
index 9e12623b0d..53b19c5eb4 100644
--- a/Code/Tools/AssetBundler/tests/tests_main.cpp
+++ b/Code/Tools/AssetBundler/tests/tests_main.cpp
@@ -97,7 +97,28 @@ namespace AssetBundler
{
public:
void SetUp() override
- {
+ {
+ AZ::SettingsRegistryInterface* registry = nullptr;
+ if (!AZ::SettingsRegistry::Get())
+ {
+ AZ::SettingsRegistry::Register(&m_registry);
+ registry = &m_registry;
+ }
+ else
+ {
+ registry = AZ::SettingsRegistry::Get();
+ }
+ auto projectPathKey = AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey)
+ + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
+ AZ::IO::FixedMaxPath engineRoot = AZ::Utils::GetEnginePath();
+ if (engineRoot.empty())
+ {
+ GTEST_FATAL_FAILURE_(AZStd::string::format("Unable to locate engine root.\n").c_str());
+ }
+
m_data = AZStd::make_unique();
m_data->m_application.reset(aznew AzToolsFramework::ToolsApplication());
m_data->m_application.get()->Start(AzFramework::Application::Descriptor());
@@ -107,19 +128,6 @@ namespace AssetBundler
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
- if (!AZ::SettingsRegistry::Get())
- {
- AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_Bootstrap(m_registry);
- AZ::SettingsRegistry::Register(&m_registry);
- }
-
- AZ::IO::FixedMaxPath engineRoot = AZ::Utils::GetEnginePath();
- if (engineRoot.empty())
- {
- GTEST_FATAL_FAILURE_(AZStd::string::format("Unable to locate engine root.\n").c_str());
- }
-
-
m_data->m_testEngineRoot = (engineRoot / RelativeTestFolder).LexicallyNormal().String();
m_data->m_localFileIO = aznew AZ::IO::LocalFileIO();
@@ -144,14 +152,24 @@ namespace AssetBundler
}
void TearDown() override
{
- AZ::IO::FileIOBase::SetInstance(nullptr);
- delete m_data->m_localFileIO;
- AZ::IO::FileIOBase::SetInstance(m_data->m_priorFileIO);
+ if (m_data)
+ {
+ AZ::IO::FileIOBase::SetInstance(nullptr);
+ delete m_data->m_localFileIO;
+ AZ::IO::FileIOBase::SetInstance(m_data->m_priorFileIO);
+
+ m_data->m_gemInfoList.set_capacity(0);
+ m_data->m_gemSeedFilePairList.set_capacity(0);
+ m_data->m_application.get()->Stop();
+ m_data->m_application.reset();
+ }
+
+ if(auto settingsRegistry = AZ::SettingsRegistry::Get();
+ settingsRegistry == &m_registry)
+ {
+ AZ::SettingsRegistry::Unregister(settingsRegistry);
+ }
- m_data->m_gemInfoList.set_capacity(0);
- m_data->m_gemSeedFilePairList.set_capacity(0);
- m_data->m_application.get()->Stop();
- m_data->m_application.reset();
}
void AddGemData(const char* engineRoot, const char* gemName, bool seedFileExists = true)
diff --git a/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp b/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp
index 523e39d622..3d7cc3b8b4 100644
--- a/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp
+++ b/Code/Tools/AssetProcessor/native/InternalBuilders/SettingsRegistryBuilder.cpp
@@ -291,7 +291,6 @@ namespace AssetProcessor
}
}
- AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_Bootstrap(registry);
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_EngineRegistry(registry, platform, specialization, &scratchBuffer);
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_GemRegistries(registry, platform, specialization, &scratchBuffer);
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_ProjectRegistry(registry, platform, specialization, &scratchBuffer);
diff --git a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp
index e92e9afba5..3d9ecd3f5e 100644
--- a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp
+++ b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp
@@ -130,6 +130,9 @@ namespace AssetProcessor
auto cacheRootKey =
AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_cache_path";
settingsRegistry->Set(cacheRootKey, m_data->m_temporarySourceDir.absoluteFilePath("Cache").toUtf8().constData());
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ settingsRegistry->Set(projectPathKey, "AutomatedTesting");
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*settingsRegistry);
AssetUtilities::ComputeProjectCacheRoot(m_data->m_cacheRootDir);
QString normalizedCacheRoot = AssetUtilities::NormalizeDirectoryPath(m_data->m_cacheRootDir.absolutePath());
diff --git a/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp b/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp
index d04e13aef2..7b88321ad9 100644
--- a/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp
+++ b/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp
@@ -12,7 +12,7 @@
#include "AssetProcessorTest.h"
-
+#include
#include
#include "BaseAssetProcessorTest.h"
@@ -67,6 +67,12 @@ namespace AssetProcessor
static char processName[] = {"AssetProcessorBatch"};
static char* namePtr = &processName[0];
static char** paramStringArray = &namePtr;
+
+ auto registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
m_application.reset(new UnitTestAppManager(&numParams, ¶mStringArray));
ASSERT_EQ(m_application->BeforeRun(), ApplicationManager::Status_Success);
diff --git a/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.h b/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.h
index c866a933dd..4ea0695f1c 100644
--- a/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.h
+++ b/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.h
@@ -14,6 +14,7 @@
#include
#include
#include
+#include
#include
#include
#include // for the assert absorber.
@@ -44,7 +45,18 @@ namespace AssetProcessor
AZ::AllocatorInstance::Create();
}
m_errorAbsorber = new UnitTestUtils::AssertAbsorber();
+
m_application = AZStd::make_unique();
+
+ // Inject the AutomatedTesting project as a project path into test fixture
+ using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString;
+ constexpr auto projectPathKey = FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey)
+ + "/project_path";
+ if(auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
+ {
+ settingsRegistry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*settingsRegistry);
+ }
}
void TearDown() override
diff --git a/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp b/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp
index 07d1e48229..d592ecb012 100644
--- a/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp
+++ b/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp
@@ -204,6 +204,9 @@ void AssetProcessorManagerTest::SetUp()
auto cacheRootKey =
AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_cache_path";
registry->Set(cacheRootKey, tempPath.absoluteFilePath("Cache").toUtf8().constData());
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
m_data->m_databaseLocationListener.BusConnect();
diff --git a/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.cpp b/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.cpp
index 31e4996b1e..829d63472d 100644
--- a/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.cpp
+++ b/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.cpp
@@ -39,7 +39,6 @@ void PlatformConfigurationUnitTests::SetUp()
m_qApp = new QCoreApplication(m_argc, m_argv);
AssetProcessorTest::SetUp();
AssetUtilities::ResetAssetRoot();
-
}
void PlatformConfigurationUnitTests::TearDown()
diff --git a/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.h b/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.h
index fe669460a8..0fb67ab947 100644
--- a/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.h
+++ b/Code/Tools/AssetProcessor/native/tests/platformconfiguration/platformconfigurationtests.h
@@ -37,6 +37,5 @@ private:
int m_argc;
char** m_argv;
QCoreApplication* m_qApp;
-
};
diff --git a/Code/Tools/DeltaCataloger/Tests/tests_main.cpp b/Code/Tools/DeltaCataloger/Tests/tests_main.cpp
index 67d6767a17..887889edcb 100644
--- a/Code/Tools/DeltaCataloger/Tests/tests_main.cpp
+++ b/Code/Tools/DeltaCataloger/Tests/tests_main.cpp
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -45,6 +46,12 @@ public:
protected:
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
AZ::ComponentApplication::Descriptor desc;
desc.m_useExistingAllocator = true;
desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture)
diff --git a/Gems/AssetValidation/Code/Tests/AssetValidationTestShared.h b/Gems/AssetValidation/Code/Tests/AssetValidationTestShared.h
index ab9e65b896..d67260de3e 100644
--- a/Gems/AssetValidation/Code/Tests/AssetValidationTestShared.h
+++ b/Gems/AssetValidation/Code/Tests/AssetValidationTestShared.h
@@ -152,8 +152,11 @@ struct AssetValidationTest
{
AZ::SettingsRegistry::Register(&m_registry);
- AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_Bootstrap(m_registry);
+ auto projectPathKey = AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey)
+ + "/project_path";
+ m_registry.Set(projectPathKey, "AutomatedTesting");
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(m_registry);
+
// Set the engine root to the temporary directory and re-update the runtime file paths
auto enginePathKey = AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey)
+ "/engine_path";
diff --git a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp
index 506edc0d1e..afeca6e617 100644
--- a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp
+++ b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp
@@ -60,7 +60,9 @@ namespace UnitTest
TEST_F(UtilsTests, LoadFileString_Error_DoesNotExist)
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
auto outcome = AZ::RHI::LoadFileString("FileDoesNotExist");
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT;
EXPECT_FALSE(outcome.IsSuccess());
EXPECT_TRUE(outcome.GetError().find("Could not open file") != AZStd::string::npos);
EXPECT_TRUE(outcome.GetError().find("FileDoesNotExist") != AZStd::string::npos);
@@ -68,7 +70,9 @@ namespace UnitTest
TEST_F(UtilsTests, LoadFileBytes_Error_DoesNotExist)
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
auto outcome = AZ::RHI::LoadFileBytes("FileDoesNotExist");
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT;
EXPECT_FALSE(outcome.IsSuccess());
EXPECT_TRUE(outcome.GetError().find("Could not open file") != AZStd::string::npos);
EXPECT_TRUE(outcome.GetError().find("FileDoesNotExist") != AZStd::string::npos);
diff --git a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp
index 9148cdba6f..4a19c08174 100644
--- a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp
+++ b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp
@@ -158,47 +158,8 @@ namespace AZ
void AtomBridgeSystemComponent::OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene)
{
- AZStd::shared_ptr windowContext;
- AZ::Render::Bootstrap::DefaultWindowBus::BroadcastResult(windowContext, &AZ::Render::Bootstrap::DefaultWindowInterface::GetDefaultWindowContext);
-
- if (!windowContext)
- {
- AZ_Warning("Atom", false, "Cannot initialize Atom because no window context is available");
- return;
- }
-
- AZ::RPI::RenderPipelinePtr renderPipeline = bootstrapScene->GetDefaultRenderPipeline();
-
- // If RenderPipeline doesn't have a default view, create a view and make it the default view.
- // These settings will be overridden by the editor or game camera.
- if (renderPipeline->GetDefaultView() == nullptr)
- {
- auto viewContextManager = AZ::Interface::Get();
- m_view = AZ::RPI::View::CreateView(AZ::Name("AtomSystem Default View"), RPI::View::UsageCamera);
- viewContextManager->PushView(viewContextManager->GetDefaultViewportContextName(), m_view);
- const auto& viewport = windowContext->GetViewport();
- const float aspectRatio = viewport.m_maxX / viewport.m_maxY;
-
- // Note: This is projection assumes a setup for reversed depth
- AZ::Matrix4x4 viewToClipMatrix;
- AZ::MakePerspectiveFovMatrixRH(viewToClipMatrix, AZ::Constants::HalfPi, aspectRatio, 0.1f, 100.f, true);
-
- m_view->SetViewToClipMatrix(viewToClipMatrix);
-
- renderPipeline = bootstrapScene->GetDefaultRenderPipeline();
- renderPipeline->SetDefaultView(m_view);
- }
- else
- {
- m_view = renderPipeline->GetDefaultView();
- }
- auto auxGeomFP = bootstrapScene->GetFeatureProcessor();
- if (auxGeomFP)
- {
- auxGeomFP->GetOrCreateDrawQueueForView(m_view.get());
- }
-
- // Make default AtomDebugDisplayViewportInterface for the scene
+ AZ_UNUSED(bootstrapScene);
+ // Make default AtomDebugDisplayViewportInterface
AZStd::shared_ptr mainEntityDebugDisplay = AZStd::make_shared(AzFramework::g_defaultSceneEntityDebugDisplayId);
m_activeViewportsList[AzFramework::g_defaultSceneEntityDebugDisplayId] = mainEntityDebugDisplay;
}
diff --git a/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/synthetic_env.py b/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/synthetic_env.py
index 86e4b68488..6a3340788b 100644
--- a/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/synthetic_env.py
+++ b/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/synthetic_env.py
@@ -384,8 +384,7 @@ def stash_env(_SYNTH_ENV_DICT = OrderedDict()):
# changed to just make the fallback what is set in boostrap
# so now it's less of a fallnack and more correct if not
# explicitly set
- _LY_PROJECT = os.getenv(ENVAR_LY_PROJECT,
- get_current_project(_LY_DEV))
+ _LY_PROJECT = os.getenv(ENVAR_LY_PROJECT)
_SYNTH_ENV_DICT[ENVAR_LY_PROJECT] = _LY_PROJECT
_LY_BUILD_DIR_NAME = os.getenv(ENVAR_LY_BUILD_DIR_NAME,
diff --git a/Gems/DebugDraw/Code/Source/DebugDrawSystemComponent.cpp b/Gems/DebugDraw/Code/Source/DebugDrawSystemComponent.cpp
index 1f677d7b6f..1304c7b392 100644
--- a/Gems/DebugDraw/Code/Source/DebugDrawSystemComponent.cpp
+++ b/Gems/DebugDraw/Code/Source/DebugDrawSystemComponent.cpp
@@ -274,12 +274,15 @@ namespace DebugDraw
AzFramework::DebugDisplayRequests* debugDisplay =
AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus);
- OnTickAabbs(*debugDisplay);
- OnTickLines(*debugDisplay);
- OnTickObbs(*debugDisplay);
- OnTickRays(*debugDisplay);
- OnTickSpheres(*debugDisplay);
- OnTickText(*debugDisplay);
+ if (debugDisplay)
+ {
+ OnTickAabbs(*debugDisplay);
+ OnTickLines(*debugDisplay);
+ OnTickObbs(*debugDisplay);
+ OnTickRays(*debugDisplay);
+ OnTickSpheres(*debugDisplay);
+ OnTickText(*debugDisplay);
+ }
}
template
diff --git a/Gems/EMotionFX/Code/Tests/SystemComponentFixture.h b/Gems/EMotionFX/Code/Tests/SystemComponentFixture.h
index 04a1ca4f81..f8c70a5fee 100644
--- a/Gems/EMotionFX/Code/Tests/SystemComponentFixture.h
+++ b/Gems/EMotionFX/Code/Tests/SystemComponentFixture.h
@@ -59,7 +59,16 @@ namespace EMotionFX
{
public:
- ComponentFixtureApp() = default;
+ ComponentFixtureApp()
+ {
+ using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString;
+ constexpr auto projectPathKey = FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ if(auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
+ {
+ settingsRegistry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*settingsRegistry);
+ }
+ }
AZ::ComponentTypeList GetRequiredSystemComponents() const override
{
diff --git a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp
index 8045499b4a..8e3a19c1ca 100644
--- a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp
+++ b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp
@@ -77,7 +77,6 @@ namespace EMotionFX
{
auto testAssetsPath = AZ::IO::Path(GetEMotionFX().GetAssetCacheFolder()) / "TmpTestAssets";
QString dataDir = QString::fromUtf8(testAssetsPath.c_str(), aznumeric_cast(testAssetsPath.Native().size()));
- dataDir += "TmpTestAssets";
if (!QDir(dataDir).exists())
{
diff --git a/Gems/EditorPythonBindings/Code/Tests/EditorPythonBindingsTest.cpp b/Gems/EditorPythonBindings/Code/Tests/EditorPythonBindingsTest.cpp
index 86628d08a1..440638c61f 100644
--- a/Gems/EditorPythonBindings/Code/Tests/EditorPythonBindingsTest.cpp
+++ b/Gems/EditorPythonBindings/Code/Tests/EditorPythonBindingsTest.cpp
@@ -18,6 +18,7 @@
#include
#include
+#include
#include
#include
@@ -322,6 +323,13 @@ sys.version
void SetUp() override
{
PythonTestingFixture::SetUp();
+
+ auto registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey = AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey)
+ + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.RegisterComponentDescriptor(EditorPythonBindings::PythonSystemComponent::CreateDescriptor());
}
diff --git a/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp b/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp
index 58e7e9e093..470a2abff6 100644
--- a/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp
+++ b/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -98,6 +99,12 @@ class LevelBuilderTest
protected:
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(m_descriptor);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
diff --git a/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp
index b8911738f7..99213484fc 100644
--- a/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp
+++ b/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -32,6 +33,12 @@ namespace UnitTest
{
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(m_descriptor);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
diff --git a/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp
index 20dd3db446..49fc06c160 100644
--- a/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp
+++ b/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp
@@ -12,6 +12,7 @@
#include "LmbrCentral_precompiled.h"
#include
+#include
#include
#include
#include
@@ -22,6 +23,12 @@ class SeedBuilderTests
{
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(AZ::ComponentApplication::Descriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
diff --git a/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp b/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp
index 9e57ac26fd..68da6e6009 100644
--- a/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp
+++ b/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -88,6 +89,12 @@ protected:
m_data->m_stubEnv.pSystem = &m_data->m_mockSystem;
gEnv = &m_data->m_stubEnv;
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(m_descriptor);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h
index 2a3b5fb3cc..f3eb1922fd 100644
--- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h
+++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h
@@ -34,11 +34,11 @@ namespace Multiplayer
private:
void OnRotationChangedEvent(const AZ::Quaternion& rotation);
void OnTranslationChangedEvent(const AZ::Vector3& translation);
- void OnScaleChangedEvent(const AZ::Vector3& scale);
+ void OnScaleChangedEvent(float scale);
AZ::Event::Handler m_rotationEventHandler;
AZ::Event::Handler m_translationEventHandler;
- AZ::Event::Handler m_scaleEventHandler;
+ AZ::Event::Handler m_scaleEventHandler;
};
class NetworkTransformComponentController
diff --git a/Gems/Multiplayer/Code/Source/AutoGen/NetworkTransformComponent.AutoComponent.xml b/Gems/Multiplayer/Code/Source/AutoGen/NetworkTransformComponent.AutoComponent.xml
index 96653a607c..a112cde4e6 100644
--- a/Gems/Multiplayer/Code/Source/AutoGen/NetworkTransformComponent.AutoComponent.xml
+++ b/Gems/Multiplayer/Code/Source/AutoGen/NetworkTransformComponent.AutoComponent.xml
@@ -14,7 +14,7 @@
-
+
diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp
index 0cc4cb131e..682f7ea988 100644
--- a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp
+++ b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp
@@ -32,7 +32,7 @@ namespace Multiplayer
NetworkTransformComponent::NetworkTransformComponent()
: m_rotationEventHandler([this](const AZ::Quaternion& rotation) { OnRotationChangedEvent(rotation); })
, m_translationEventHandler([this](const AZ::Vector3& translation) { OnTranslationChangedEvent(translation); })
- , m_scaleEventHandler([this](const AZ::Vector3& scale) { OnScaleChangedEvent(scale); })
+ , m_scaleEventHandler([this](float scale) { OnScaleChangedEvent(scale); })
{
;
}
@@ -68,10 +68,10 @@ namespace Multiplayer
GetTransformComponent()->SetWorldTM(worldTm);
}
- void NetworkTransformComponent::OnScaleChangedEvent(const AZ::Vector3& scale)
+ void NetworkTransformComponent::OnScaleChangedEvent(float scale)
{
AZ::Transform worldTm = GetTransformComponent()->GetWorldTM();
- worldTm.SetScale(scale);
+ worldTm.SetUniformScale(scale);
GetTransformComponent()->SetWorldTM(worldTm);
}
@@ -100,7 +100,7 @@ namespace Multiplayer
{
SetRotation(worldTm.GetRotation());
SetTranslation(worldTm.GetTranslation());
- SetScale(worldTm.GetScale());
+ SetScale(worldTm.GetUniformScale());
}
}
}
diff --git a/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.cpp b/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.cpp
index 6fa69c7a24..431dbd9ac4 100644
--- a/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.cpp
+++ b/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.cpp
@@ -105,39 +105,55 @@ namespace PhysX
AZ::Vector3 CharacterControllerComponent::GetBasePosition() const
{
- return IsPhysicsEnabled() ? m_controller->GetBasePosition() : AZ::Vector3::CreateZero();
+ if (auto* controller = GetControllerConst())
+ {
+ return controller->GetBasePosition();
+ }
+ return AZ::Vector3::CreateZero();
}
void CharacterControllerComponent::SetBasePosition(const AZ::Vector3& position)
{
- if (IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- m_controller->SetBasePosition(position);
+ controller->SetBasePosition(position);
AZ::TransformBus::Event(GetEntityId(), &AZ::TransformBus::Events::SetWorldTranslation, position);
}
}
AZ::Vector3 CharacterControllerComponent::GetCenterPosition() const
{
- return IsPhysicsEnabled() ? m_controller->GetCenterPosition() : AZ::Vector3::CreateZero();
+ if (auto* controller = GetControllerConst())
+ {
+ return controller->GetCenterPosition();
+ }
+ return AZ::Vector3::CreateZero();
}
float CharacterControllerComponent::GetStepHeight() const
{
- return IsPhysicsEnabled() ? m_controller->GetStepHeight() : 0.0f;
+ if (auto* controller = GetControllerConst())
+ {
+ return controller->GetStepHeight();
+ }
+ return 0.0f;
}
void CharacterControllerComponent::SetStepHeight(float stepHeight)
{
- if (IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- m_controller->SetStepHeight(stepHeight);
+ controller->SetStepHeight(stepHeight);
}
}
AZ::Vector3 CharacterControllerComponent::GetUpDirection() const
{
- return IsPhysicsEnabled() ? m_controller->GetUpDirection() : AZ::Vector3::CreateZero();
+ if (auto* controller = GetControllerConst())
+ {
+ return controller->GetUpDirection();
+ }
+ return AZ::Vector3::CreateZero();
}
void CharacterControllerComponent::SetUpDirection([[maybe_unused]] const AZ::Vector3& upDirection)
@@ -147,51 +163,58 @@ namespace PhysX
float CharacterControllerComponent::GetSlopeLimitDegrees() const
{
- return IsPhysicsEnabled() ? m_controller->GetSlopeLimitDegrees() : 0.0f;
+ if (auto* controller = GetControllerConst())
+ {
+ return controller->GetSlopeLimitDegrees();
+ }
+ return 0.0f;
}
void CharacterControllerComponent::SetSlopeLimitDegrees(float slopeLimitDegrees)
{
- if (IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- m_controller->SetSlopeLimitDegrees(slopeLimitDegrees);
+ controller->SetSlopeLimitDegrees(slopeLimitDegrees);
}
}
float CharacterControllerComponent::GetMaximumSpeed() const
{
- if (IsPhysicsEnabled())
+ if (auto* controller = GetControllerConst())
{
- return m_controller->GetMaximumSpeed();
+ return controller->GetMaximumSpeed();
}
-
return 0.0f;
}
void CharacterControllerComponent::SetMaximumSpeed(float maximumSpeed)
{
- if (IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- m_controller->SetMaximumSpeed(maximumSpeed);
+ controller->SetMaximumSpeed(maximumSpeed);
}
}
AZ::Vector3 CharacterControllerComponent::GetVelocity() const
{
- return IsPhysicsEnabled() ? m_controller->GetVelocity() : AZ::Vector3::CreateZero();
+ if (auto* controller = GetControllerConst())
+ {
+ return controller->GetVelocity();
+ }
+ return AZ::Vector3::CreateZero();
}
void CharacterControllerComponent::AddVelocity(const AZ::Vector3& velocity)
{
- if (IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- m_controller->AddVelocity(velocity);
+ controller->AddVelocity(velocity);
}
}
Physics::Character* CharacterControllerComponent::GetCharacter()
{
- return m_controller;
+ return GetController();
}
void CharacterControllerComponent::EnablePhysics()
@@ -206,14 +229,14 @@ namespace PhysX
bool CharacterControllerComponent::IsPhysicsEnabled() const
{
- return m_controller != nullptr;
+ return GetControllerConst() != nullptr;
}
AZ::Aabb CharacterControllerComponent::GetAabb() const
{
- if (m_controller)
+ if (auto* controller = GetControllerConst())
{
- return m_controller->GetAabb();
+ return controller->GetAabb();
}
return AZ::Aabb::CreateNull();
}
@@ -225,94 +248,121 @@ namespace PhysX
AzPhysics::SimulatedBodyHandle CharacterControllerComponent::GetSimulatedBodyHandle() const
{
- if (m_controller)
- {
- return m_controller->m_bodyHandle;
- }
- return AzPhysics::InvalidSimulatedBodyHandle;
+ return m_controllerBodyHandle;
}
AzPhysics::SceneQueryHit CharacterControllerComponent::RayCast(const AzPhysics::RayCastRequest& request)
{
- if (m_controller)
+ if (auto* controller = GetController())
{
- return m_controller->RayCast(request);
+ return controller->RayCast(request);
}
+
return AzPhysics::SceneQueryHit();
}
// CharacterControllerRequestBus
void CharacterControllerComponent::Resize(float height)
{
- return m_controller->Resize(height);
+ if (auto* controller = GetController())
+ {
+ controller->Resize(height);
+ }
}
float CharacterControllerComponent::GetHeight()
{
- return m_controller->GetHeight();
+ if (auto* controller = GetController())
+ {
+ return controller->GetHeight();
+ }
+ return 0.0f;
}
void CharacterControllerComponent::SetHeight(float height)
{
- return m_controller->SetHeight(height);
+ if (auto* controller = GetController())
+ {
+ controller->SetHeight(height);
+ }
}
float CharacterControllerComponent::GetRadius()
{
- return m_controller->GetRadius();
+ if (auto* controller = GetController())
+ {
+ return controller->GetRadius();
+ }
+ return 0.0f;
}
void CharacterControllerComponent::SetRadius(float radius)
{
- return m_controller->SetRadius(radius);
+ if (auto* controller = GetController())
+ {
+ controller->SetRadius(radius);
+ }
}
float CharacterControllerComponent::GetHalfSideExtent()
{
- return m_controller->GetHalfSideExtent();
+ if (auto* controller = GetController())
+ {
+ return controller->GetHalfSideExtent();
+ }
+ return 0.0f;
}
void CharacterControllerComponent::SetHalfSideExtent(float halfSideExtent)
{
- return m_controller->SetHalfSideExtent(halfSideExtent);
+ if (auto* controller = GetController())
+ {
+ controller->SetHalfSideExtent(halfSideExtent);
+ }
}
float CharacterControllerComponent::GetHalfForwardExtent()
{
- return m_controller->GetHalfForwardExtent();
+ if (auto* controller = GetController())
+ {
+ return controller->GetHalfForwardExtent();
+ }
+ return 0.0f;
}
void CharacterControllerComponent::SetHalfForwardExtent(float halfForwardExtent)
{
- return m_controller->SetHalfForwardExtent(halfForwardExtent);
+ if (auto* controller = GetController())
+ {
+ controller->SetHalfForwardExtent(halfForwardExtent);
+ }
}
// TransformNotificationBus
void CharacterControllerComponent::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& world)
{
- if (!IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- return;
+ controller->SetBasePosition(world.GetTranslation());
}
-
- m_controller->SetBasePosition(world.GetTranslation());
}
void CharacterControllerComponent::SetCollisionLayer(const AZStd::string& layerName, AZ::Crc32 colliderTag)
{
- if (!IsPhysicsEnabled())
+ auto* controller = GetController();
+ if (controller == nullptr)
{
return;
}
- if (Physics::Utils::FilterTag(m_controller->GetColliderTag(), colliderTag))
+ if (Physics::Utils::FilterTag(controller->GetColliderTag(), colliderTag))
{
bool success = false;
AzPhysics::CollisionLayer collisionLayer;
Physics::CollisionRequestBus::BroadcastResult(success, &Physics::CollisionRequests::TryGetCollisionLayerByName, layerName, collisionLayer);
if (success)
{
- m_controller->SetCollisionLayer(collisionLayer);
+ controller->SetCollisionLayer(collisionLayer);
}
}
}
@@ -320,30 +370,33 @@ namespace PhysX
AZStd::string CharacterControllerComponent::GetCollisionLayerName()
{
AZStd::string layerName;
- if (!IsPhysicsEnabled())
+ auto* controller = GetControllerConst();
+ if (controller == nullptr)
{
return layerName;
}
- Physics::CollisionRequestBus::BroadcastResult(layerName, &Physics::CollisionRequests::GetCollisionLayerName, m_controller->GetCollisionLayer());
+ Physics::CollisionRequestBus::BroadcastResult(
+ layerName, &Physics::CollisionRequests::GetCollisionLayerName, controller->GetCollisionLayer());
return layerName;
}
void CharacterControllerComponent::SetCollisionGroup(const AZStd::string& groupName, AZ::Crc32 colliderTag)
{
- if (!IsPhysicsEnabled())
+ auto* controller = GetController();
+ if (controller == nullptr)
{
return;
}
- if (Physics::Utils::FilterTag(m_controller->GetColliderTag(), colliderTag))
+ if (Physics::Utils::FilterTag(controller->GetColliderTag(), colliderTag))
{
bool success = false;
AzPhysics::CollisionGroup collisionGroup;
Physics::CollisionRequestBus::BroadcastResult(success, &Physics::CollisionRequests::TryGetCollisionGroupByName, groupName, collisionGroup);
if (success)
{
- m_controller->SetCollisionGroup(collisionGroup);
+ controller->SetCollisionGroup(collisionGroup);
}
}
}
@@ -351,23 +404,26 @@ namespace PhysX
AZStd::string CharacterControllerComponent::GetCollisionGroupName()
{
AZStd::string groupName;
- if (!IsPhysicsEnabled())
+ auto* controller = GetControllerConst();
+ if (controller == nullptr)
{
return groupName;
}
-
- Physics::CollisionRequestBus::BroadcastResult(groupName, &Physics::CollisionRequests::GetCollisionGroupName, m_controller->GetCollisionGroup());
+
+ Physics::CollisionRequestBus::BroadcastResult(
+ groupName, &Physics::CollisionRequests::GetCollisionGroupName, controller->GetCollisionGroup());
return groupName;
}
void CharacterControllerComponent::ToggleCollisionLayer(const AZStd::string& layerName, AZ::Crc32 colliderTag, bool enabled)
{
- if (!IsPhysicsEnabled())
+ auto* controller = GetController();
+ if (controller == nullptr)
{
return;
}
- if (Physics::Utils::FilterTag(m_controller->GetColliderTag(), colliderTag))
+ if (Physics::Utils::FilterTag(controller->GetColliderTag(), colliderTag))
{
bool success = false;
AzPhysics::CollisionLayer collisionLayer;
@@ -375,23 +431,43 @@ namespace PhysX
if (success)
{
AzPhysics::CollisionLayer layer(layerName);
- AzPhysics::CollisionGroup group = m_controller->GetCollisionGroup();
+ AzPhysics::CollisionGroup group = controller->GetCollisionGroup();
group.SetLayer(layer, enabled);
- m_controller->SetCollisionGroup(group);
+ controller->SetCollisionGroup(group);
}
}
}
void CharacterControllerComponent::OnPreSimulate(float deltaTime)
{
- if (m_controller)
+ if (auto* controller = GetController())
{
- m_controller->ApplyRequestedVelocity(deltaTime);
- const AZ::Vector3 newPosition = GetBasePosition();
+ controller->ApplyRequestedVelocity(deltaTime);
+ const AZ::Vector3 newPosition = controller->GetBasePosition();
AZ::TransformBus::Event(GetEntityId(), &AZ::TransformBus::Events::SetWorldTranslation, newPosition);
}
}
+ const PhysX::CharacterController* CharacterControllerComponent::GetControllerConst() const
+ {
+ if (m_controllerBodyHandle == AzPhysics::InvalidSimulatedBodyHandle || m_attachedSceneHandle == AzPhysics::InvalidSceneHandle)
+ {
+ return nullptr;
+ }
+
+ if (auto* sceneInterface = AZ::Interface::Get())
+ {
+ return azdynamic_cast(
+ sceneInterface->GetSimulatedBodyFromHandle(m_attachedSceneHandle, m_controllerBodyHandle));
+ }
+ return nullptr;
+ }
+
+ PhysX::CharacterController* CharacterControllerComponent::GetController()
+ {
+ return const_cast(GetControllerConst());
+ }
+
void CharacterControllerComponent::CreateController()
{
if (IsPhysicsEnabled())
@@ -399,9 +475,8 @@ namespace PhysX
return;
}
- AzPhysics::SceneHandle defaultSceneHandle = AzPhysics::InvalidSceneHandle;
- Physics::DefaultWorldBus::BroadcastResult(defaultSceneHandle, &Physics::DefaultWorldRequests::GetDefaultSceneHandle);
- if (defaultSceneHandle == AzPhysics::InvalidSceneHandle)
+ Physics::DefaultWorldBus::BroadcastResult(m_attachedSceneHandle, &Physics::DefaultWorldRequests::GetDefaultSceneHandle);
+ if (m_attachedSceneHandle == AzPhysics::InvalidSceneHandle)
{
AZ_Error("PhysX Character Controller Component", false, "Failed to retrieve default scene.");
return;
@@ -427,11 +502,9 @@ namespace PhysX
auto* sceneInterface = AZ::Interface::Get();
if (sceneInterface != nullptr)
{
- m_controllerBodyHandle = sceneInterface->AddSimulatedBody(defaultSceneHandle, m_characterConfig.get());
- m_controller = azdynamic_cast(
- sceneInterface->GetSimulatedBodyFromHandle(defaultSceneHandle, m_controllerBodyHandle));
+ m_controllerBodyHandle = sceneInterface->AddSimulatedBody(m_attachedSceneHandle, m_characterConfig.get());
}
- if (m_controller == nullptr)
+ if (m_controllerBodyHandle == AzPhysics::InvalidSimulatedBodyHandle)
{
AZ_Error("PhysX Character Controller Component", false, "Failed to create character controller.");
return;
@@ -447,7 +520,7 @@ namespace PhysX
DestroyController();
}
});
- sceneInterface->RegisterSimulationBodyRemovedHandler(defaultSceneHandle, m_onSimulatedBodyRemovedHandler);
+ sceneInterface->RegisterSimulationBodyRemovedHandler(m_attachedSceneHandle, m_onSimulatedBodyRemovedHandler);
}
CharacterControllerRequestBus::Handler::BusConnect(GetEntityId());
@@ -467,24 +540,23 @@ namespace PhysX
void CharacterControllerComponent::DisableController()
{
- if (!IsPhysicsEnabled())
+ if (auto* controller = GetController())
{
- return;
+ controller->DisablePhysics();
+
+ if (auto* sceneInterface = AZ::Interface::Get())
+ {
+ sceneInterface->RemoveSimulatedBody(m_attachedSceneHandle, controller->m_bodyHandle);
+ }
+
+ DestroyController();
}
-
- m_controller->DisablePhysics();
-
- if (auto* sceneInterface = AZ::Interface::Get())
- {
- sceneInterface->RemoveSimulatedBody(m_controller->m_sceneOwner, m_controller->m_bodyHandle);
- }
-
- DestroyController();
}
void CharacterControllerComponent::DestroyController()
{
- m_controller = nullptr;
+ m_controllerBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
+ m_attachedSceneHandle = AzPhysics::InvalidSceneHandle;
m_preSimulateHandler.Disconnect();
m_onSimulatedBodyRemovedHandler.Disconnect();
CharacterControllerRequestBus::Handler::BusDisconnect();
diff --git a/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.h b/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.h
index 7c25312b72..54513d52f4 100644
--- a/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.h
+++ b/Gems/PhysX/Code/Source/PhysXCharacters/Components/CharacterControllerComponent.h
@@ -131,6 +131,8 @@ namespace PhysX
void ToggleCollisionLayer(const AZStd::string& layerName, AZ::Crc32 colliderTag, bool enabled) override;
private:
+ const PhysX::CharacterController* GetControllerConst() const;
+ PhysX::CharacterController* GetController();
// Creates the physics character controller in the current default physics scene.
// This will do nothing if the controller is already created.
void CreateController();
@@ -143,8 +145,8 @@ namespace PhysX
AZStd::unique_ptr m_characterConfig;
AZStd::shared_ptr m_shapeConfig;
- PhysX::CharacterController* m_controller = nullptr;
AzPhysics::SimulatedBodyHandle m_controllerBodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
+ AzPhysics::SceneHandle m_attachedSceneHandle = AzPhysics::InvalidSceneHandle;
AzPhysics::SystemEvents::OnPresimulateEvent::Handler m_preSimulateHandler;
AzPhysics::SceneEvents::OnSimulationBodyRemoved::Handler m_onSimulatedBodyRemovedHandler;
};
diff --git a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp
index 2bb0d8aaf3..ace089b9bd 100644
--- a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp
+++ b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.cpp
@@ -14,6 +14,7 @@
#include
#include
#include
+#include
#include
namespace UnitTest
@@ -172,6 +173,12 @@ namespace UnitTest
void PrefabBuilderTests::SetUp()
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
AZ::ComponentApplication::Descriptor desc;
m_app.Start(desc);
m_app.CreateReflectionManager();
diff --git a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderPhasesTests.cpp b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderPhasesTests.cpp
index 5f96353996..2a89911fda 100644
--- a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderPhasesTests.cpp
+++ b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderPhasesTests.cpp
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -139,6 +140,12 @@ class SceneBuilderPhasesFixture
public:
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(AZ::ComponentApplication::Descriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
diff --git a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp
index 66fd717508..2287077c89 100644
--- a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp
+++ b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -30,6 +31,12 @@ class SceneBuilderTests
protected:
void SetUp() override
{
+ AZ::SettingsRegistryInterface* registry = AZ::SettingsRegistry::Get();
+ auto projectPathKey =
+ AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path";
+ registry->Set(projectPathKey, "AutomatedTesting");
+ AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
+
m_app.Start(AZ::ComponentApplication::Descriptor());
AZ::Debug::TraceMessageBus::Handler::BusConnect();
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
diff --git a/Tools/LyTestTools/ly_test_tools/_internal/managers/abstract_resource_locator.py b/Tools/LyTestTools/ly_test_tools/_internal/managers/abstract_resource_locator.py
index 5f6db7ac05..5a14ef9419 100755
--- a/Tools/LyTestTools/ly_test_tools/_internal/managers/abstract_resource_locator.py
+++ b/Tools/LyTestTools/ly_test_tools/_internal/managers/abstract_resource_locator.py
@@ -250,9 +250,6 @@ class AbstractResourceLocator(object):
"""
return os.path.join(self.build_directory(), 'CrySCompileServer')
- def bootstrap_config_file(self):
- return os.path.join(self.engine_root(), 'bootstrap.cfg')
-
def asset_processor_config_file(self):
return os.path.join(self.engine_root(), 'Registry', 'AssetProcessorPlatformConfig.setreg')
diff --git a/Tools/LyTestTools/ly_test_tools/launchers/platforms/base.py b/Tools/LyTestTools/ly_test_tools/launchers/platforms/base.py
index 1b0afb3efe..386de62048 100755
--- a/Tools/LyTestTools/ly_test_tools/launchers/platforms/base.py
+++ b/Tools/LyTestTools/ly_test_tools/launchers/platforms/base.py
@@ -123,7 +123,6 @@ class Launcher(object):
"""
backup_path = self.workspace.settings.get_temp_path()
log.debug(f"Performing automatic backup of bootstrap, platform and user settings in path {backup_path}")
- self.workspace.settings.backup_bootstrap_settings(backup_path)
self.workspace.settings.backup_platform_settings(backup_path)
self.workspace.settings.backup_shader_compiler_settings(backup_path)
diff --git a/Tools/LyTestTools/ly_test_tools/o3de/asset_processor.py b/Tools/LyTestTools/ly_test_tools/o3de/asset_processor.py
index 5507588ae3..d8b08cad24 100644
--- a/Tools/LyTestTools/ly_test_tools/o3de/asset_processor.py
+++ b/Tools/LyTestTools/ly_test_tools/o3de/asset_processor.py
@@ -664,8 +664,7 @@ class AssetProcessor(object):
make_dir = os.path.join(self._temp_asset_root, copy_dir)
if not os.path.isdir(make_dir):
os.makedirs(make_dir)
- for copyfile_name in ['bootstrap.cfg',
- 'Registry/AssetProcessorPlatformConfig.setreg',
+ for copyfile_name in ['Registry/AssetProcessorPlatformConfig.setreg',
os.path.join(self._workspace.project, "project.json"),
os.path.join('Assets', 'Engine', 'exclude.filetag')]:
shutil.copyfile(os.path.join(self._workspace.paths.engine_root(), copyfile_name),
diff --git a/Tools/LyTestTools/ly_test_tools/o3de/settings.py b/Tools/LyTestTools/ly_test_tools/o3de/settings.py
index 9677a4d3a3..a1e83abe51 100644
--- a/Tools/LyTestTools/ly_test_tools/o3de/settings.py
+++ b/Tools/LyTestTools/ly_test_tools/o3de/settings.py
@@ -57,14 +57,6 @@ class LySettings(object):
"""
self._backup_settings(self._resource_locator.platform_config_file(), backup_path)
- def backup_bootstrap_settings(self, backup_path=None):
- """
- Creates a backup of the bootstrap settings file (~/dev/bootstrap.cfg) in the backup_path. If no path is
- provided, it will store in the workspace temp path (the contents of the workspace temp directory are removed
- during workspace teardown)
- """
- self._backup_settings(self._resource_locator.bootstrap_config_file(), backup_path)
-
def backup_shader_compiler_settings(self, backup_path=None):
self._backup_settings(self._resource_locator.shader_compiler_config_file(), backup_path)
@@ -79,14 +71,6 @@ class LySettings(object):
"""
self._restore_settings(self._resource_locator.platform_config_file(), backup_path)
- def restore_bootstrap_settings(self, backup_path=None):
- """
- Restores the bootstrap settings file (~/dev/bootstrap.cfg) from its backup.
- The backup is stored in the backup_path.
- If no backup_path is provided, it will attempt to retrieve the backup from the workspace temp path.
- """
- self._restore_settings(self._resource_locator.bootstrap_config_file(), backup_path)
-
def restore_shader_compiler_settings(self, backup_path=None):
self._restore_settings(self._resource_locator.shader_compiler_config_file(), backup_path)
diff --git a/Tools/LyTestTools/tests/unit/test_abstract_resource_locator.py b/Tools/LyTestTools/tests/unit/test_abstract_resource_locator.py
index e46fefa461..12286b3dd7 100755
--- a/Tools/LyTestTools/tests/unit/test_abstract_resource_locator.py
+++ b/Tools/LyTestTools/tests/unit/test_abstract_resource_locator.py
@@ -158,13 +158,6 @@ class TestAbstractResourceLocator(object):
assert mock_abstract_resource_locator.shader_cache() == expected_path
- def test_BootstrapConfigFile_IsCalled_ReturnBootstrapConfigFilePath(self):
- mock_abstract_resource_locator = abstract_resource_locator.AbstractResourceLocator(
- mock_build_directory, mock_project)
- expected_path = os.path.join(mock_abstract_resource_locator.engine_root(), 'bootstrap.cfg')
-
- assert mock_abstract_resource_locator.bootstrap_config_file() == expected_path
-
def test_AssetProcessorConfigFile_IsCalled_ReturnsAssetProcessorConfigFilePath(self):
mock_abstract_resource_locator = abstract_resource_locator.AbstractResourceLocator(
mock_build_directory, mock_project)
diff --git a/bootstrap.cfg b/bootstrap.cfg
deleted file mode 100644
index 858e9093f5..0000000000
--- a/bootstrap.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-; This file is deprecated and is only use currently for setting the path when running O3DE in an engine-centric manner
-; By engine-centric, what is meant is using CMake to configure from the directory and passing in the LY_PROJECTS value
-
-project_path=AutomatedTesting
-
-; The Asset Processor Specific settings are now the /Engine/Registry/bootstrap.setreg settings
-; The Engine specific settings can be overridden in order of least precedence to most
-; 1. Override the settings in a "/Registry/*.setreg(patch)" file (Shared per Gem Settings)
-; 2. Override the settings in a "/Registry/*.setreg(patch)" file (Shared per Project Settings)
-; 3. Override the settings in a "/user/Registry/*.setreg(patch)" file (User per Project Settings)
-; 4. Override the settings in a "~/.o3de/Registry/*.setreg(patch)" file (User Global Settings)
-; Where "~" is %USERPROFILE% on Windows and $HOME on Unix like platforms
diff --git a/cmake/LYWrappers.cmake b/cmake/LYWrappers.cmake
index f6a36afc89..8aba6ccb99 100644
--- a/cmake/LYWrappers.cmake
+++ b/cmake/LYWrappers.cmake
@@ -46,6 +46,7 @@ define_property(TARGET PROPERTY GEM_MODULE
#
# \arg:NAME name of the target
# \arg:STATIC (bool) defines this target to be a static library
+# \arg:GEM_STATIC (bool) defines this target to be a static library while also setting the GEM_MODULE property
# \arg:SHARED (bool) defines this target to be a dynamic library
# \arg:MODULE (bool) defines this target to be a module library
# \arg:GEM_MODULE (bool) defines this target to be a module library while also marking the target as a "Gem" via the GEM_MODULE property
@@ -76,7 +77,7 @@ define_property(TARGET PROPERTY GEM_MODULE
# \arg:AUTOGEN_RULES a set of AutoGeneration rules to be passed to the AzAutoGen expansion system
function(ly_add_target)
- set(options STATIC SHARED MODULE GEM_MODULE HEADERONLY EXECUTABLE APPLICATION UNKNOWN IMPORTED AUTOMOC AUTOUIC AUTORCC NO_UNITY)
+ set(options STATIC GEM_STATIC SHARED MODULE GEM_MODULE HEADERONLY EXECUTABLE APPLICATION UNKNOWN IMPORTED AUTOMOC AUTOUIC AUTORCC NO_UNITY)
set(oneValueArgs NAME NAMESPACE OUTPUT_SUBDIRECTORY OUTPUT_NAME)
set(multiValueArgs FILES_CMAKE GENERATED_FILES INCLUDE_DIRECTORIES COMPILE_DEFINITIONS BUILD_DEPENDENCIES RUNTIME_DEPENDENCIES PLATFORM_INCLUDE_FILES TARGET_PROPERTIES AUTOGEN_RULES)
@@ -96,6 +97,10 @@ function(ly_add_target)
if(ly_add_target_GEM_MODULE)
set(ly_add_target_MODULE ${ly_add_target_GEM_MODULE})
endif()
+ # If the GEM_STATIC tag is passed mark the target as STATIC
+ if(ly_add_target_GEM_STATIC)
+ set(ly_add_target_STATIC ${ly_add_target_GEM_STATIC})
+ endif()
foreach(file_cmake ${ly_add_target_FILES_CMAKE})
ly_include_cmake_file_list(${file_cmake})
@@ -199,7 +204,7 @@ function(ly_add_target)
endif()
- if(ly_add_target_GEM_MODULE)
+ if(ly_add_target_GEM_MODULE OR ly_add_target_GEM_STATIC)
set_target_properties(${ly_add_target_NAME} PROPERTIES GEM_MODULE TRUE)
endif()
@@ -719,3 +724,23 @@ function(ly_project_add_subdirectory project_name)
endif()
endif()
endfunction()
+
+# given a target name, returns the "real" name of the target if its an alias.
+# this function recursively de-aliases
+function(ly_de_alias_target target_name output_variable_name)
+ # its not okay to call get_target_property on a non-existent target
+ if (NOT TARGET ${target_name})
+ message(FATAL_ERROR "ly_de_alias_target called on non-existent target: ${target_name}")
+ endif()
+
+ while(target_name)
+ set(de_aliased_target_name ${target_name})
+
+ get_target_property(target_name ${target_name} ALIASED_TARGET)
+ endwhile()
+
+ if(NOT de_aliased_target_name)
+ message(FATAL_ERROR "Empty de_aliased for ${target_name}")
+ endif()
+ set(${output_variable_name} ${de_aliased_target_name} PARENT_SCOPE)
+endfunction()
diff --git a/cmake/Monolithic.cmake b/cmake/Monolithic.cmake
index db45c182fd..dfd6816dde 100644
--- a/cmake/Monolithic.cmake
+++ b/cmake/Monolithic.cmake
@@ -14,7 +14,7 @@ set(LY_MONOLITHIC_GAME FALSE CACHE BOOL "Indicates if the game will be built mon
if(LY_MONOLITHIC_GAME)
add_compile_definitions(AZ_MONOLITHIC_BUILD)
ly_set(PAL_TRAIT_MONOLITHIC_DRIVEN_LIBRARY_TYPE STATIC)
- ly_set(PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE STATIC)
+ ly_set(PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE GEM_STATIC)
# Disable targets that are not supported with monolithic
ly_set(PAL_TRAIT_BUILD_HOST_TOOLS FALSE)
ly_set(PAL_TRAIT_BUILD_HOST_GUI_TOOLS FALSE)
diff --git a/cmake/SettingsRegistry.cmake b/cmake/SettingsRegistry.cmake
index fd5985a5a1..e1c07f4492 100644
--- a/cmake/SettingsRegistry.cmake
+++ b/cmake/SettingsRegistry.cmake
@@ -64,18 +64,16 @@ function(ly_get_gem_load_dependencies ly_GEM_LOAD_DEPENDENCIES ly_TARGET)
get_target_property(load_dependencies ${ly_TARGET} MANUALLY_ADDED_DEPENDENCIES)
if(load_dependencies)
foreach(load_dependency ${load_dependencies})
- # Skip wrapping produced when targets are not created in the same directory
- if(NOT ${load_dependency} MATCHES "^::@")
- get_property(dependency_type TARGET ${load_dependency} PROPERTY TYPE)
- get_property(is_gem_target TARGET ${load_dependency} PROPERTY GEM_MODULE SET)
- # If the dependency is a "gem module" then add it as a load dependencies
- # and recurse into its manually added dependencies
- if (is_gem_target)
- unset(dependencies)
- ly_get_gem_load_dependencies(dependencies ${load_dependency})
- list(APPEND all_gem_load_dependencies ${load_dependency})
- list(APPEND all_gem_load_dependencies ${dependencies})
- endif()
+ # Skip wrapping produced when targets are not created in the same directory
+ ly_de_alias_target(${load_dependency} dealias_load_dependency)
+ get_property(is_gem_target TARGET ${dealias_load_dependency} PROPERTY GEM_MODULE SET)
+ # If the dependency is a "gem module" then add it as a load dependencies
+ # and recurse into its manually added dependencies
+ if (is_gem_target)
+ unset(dependencies)
+ ly_get_gem_load_dependencies(dependencies ${dealias_load_dependency})
+ list(APPEND all_gem_load_dependencies ${dependencies})
+ list(APPEND all_gem_load_dependencies ${dealias_load_dependency})
endif()
endforeach()
endif()
@@ -133,8 +131,8 @@ function(ly_delayed_generate_settings_registry)
file(RELATIVE_PATH gem_relative_source_dir ${ly_root_folder_cmake} ${gem_relative_source_dir})
endif()
- # Strip target namespace from gem targets before configuring them into the json template
- ly_strip_target_namespace(TARGET ${gem_target} OUTPUT_VARIABLE stripped_gem_target)
+ # De-alias namespace from gem targets before configuring them into the json template
+ ly_de_alias_target(${gem_target} stripped_gem_target)
string(CONFIGURE ${gem_module_template} gem_module_json @ONLY)
list(APPEND target_gem_dependencies_names ${gem_module_json})
endforeach()
diff --git a/cmake/Tools/common.py b/cmake/Tools/common.py
index b271c59766..8189bb3ca3 100755
--- a/cmake/Tools/common.py
+++ b/cmake/Tools/common.py
@@ -137,19 +137,32 @@ def get_config_file_values(config_file_path, keys_to_extract):
return result_map
-def get_bootstrap_values(engine_root, keys_to_extract):
+def get_bootstrap_values(bootstrap_dir, keys_to_extract):
"""
- Extract requested values from the bootstrap.cfg file in the def root folder
- :param engine_root: The engine root folder where bootstrap.cfg exists
+ Extract requested values from the bootstrap.setreg file in the Registry folder
+ :param bootstrap_dir: The parent directory of the bootstrap.setreg file
:param keys_to_extract: The keys to extract into a dictionary
:return: Dictionary of keys and its values (for matched keys)
"""
- bootstrap_file = os.path.join(engine_root, 'bootstrap.cfg')
+ bootstrap_file = os.path.join(bootstrap_dir, 'bootstrap.setreg')
if not os.path.isfile(bootstrap_file):
- raise LmbrCmdError("Missing 'bootstrap.cfg' file from engine root ('{}')".format(engine_root),
- ERROR_CODE_FILE_NOT_FOUND)
+ raise logging.error(f'Bootstrap.setreg file {bootstrap_file} does not exist.')
+
+ result_map = {}
+ with bootstrap_file.open('r') as f:
+ try:
+ json_data = json.load(f)
+ except Exception as e:
+ logging.error(f'Bootstrap.setreg failed to load: {str(e)}')
+ else:
+ for search_key in keys_to_extract:
+ try:
+ search_result = json_data["Amazon"]["AzCore"]["Bootstrap"][f'"{search_key}"']
+ except KeyError as e:
+ logging.error(f'Bootstrap.setreg cannot find Amazon:AzCore:Bootstrap:{search_result}: {str(e)}')
+ else:
+ result_map[search_key] = search_result
- result_map = get_config_file_values(bootstrap_file, keys_to_extract)
return result_map
diff --git a/cmake/Tools/generate_game_paks.py b/cmake/Tools/generate_game_paks.py
deleted file mode 100755
index 6a1ff1e458..0000000000
--- a/cmake/Tools/generate_game_paks.py
+++ /dev/null
@@ -1,244 +0,0 @@
-#
-# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-# its licensors.
-#
-# For complete copyright and license terms please see the LICENSE at the root of this
-# distribution (the "License"). All use of this software is governed by the License,
-# or, if provided, by the license below or the license accompanying this file. Do not
-# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#
-
-import argparse
-import datetime
-import logging
-import pathlib
-import platform
-import sys
-import os
-import subprocess
-
-ROOT_DEV_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..'))
-if ROOT_DEV_PATH not in sys.path:
- sys.path.append(ROOT_DEV_PATH)
-
-from cmake.Tools import common
-
-# The location of this python script is not portable relative to the engine root, we determine the engine root based
-# on its relative location
-DEV_ROOT = os.path.realpath(os.path.join(__file__, '../../..'))
-
-BOOTSTRAP_CFG = os.path.join(DEV_ROOT, 'bootstrap.cfg')
-
-EXECUTABLE_EXTN = '.exe' if platform.system() == 'Windows' else ''
-RC_NAME = f'rc{EXECUTABLE_EXTN}'
-APB_NAME = f'AssetProcessorBatch{EXECUTABLE_EXTN}'
-
-# Depending on the user request for verbosity, the argument list to subprocess may or may not redirect stdout to NULL
-VERBOSE_CALL_ARGS = dict(
- shell=True,
- cwd=DEV_ROOT
-)
-NON_VERBOSE_CALL_ARGS = dict(
- **VERBOSE_CALL_ARGS,
- stdout=subprocess.DEVNULL
-)
-
-
-def command_arg(arg):
- """
- Work-around for an issue when running subprocess on Linux: subprocess.check_call will take in the argument as an array
- but only invokes the first item in the array, ignoring the arguments. As quick fix, we will combine the array into the
- full command line and execute it that way on non-windows platforms
- """
- if platform.system() == 'Windows':
- return arg
- else:
- return ' '.join(arg)
-
-
-def validate(binfolder, game_name, pak_script):
-
- #
- # Validate the binfolder is relative and contains 'rc' and 'AssetProcessorBatch'
- #
- if os.path.isabs(binfolder):
- raise common.LmbrCmdError("Invalid value for '-b/--binfolder'. It must be a path relative to the engine root folder",
- common.ERROR_CODE_ERROR_DIRECTORY)
-
- binfolder_abs_path = pathlib.Path(DEV_ROOT) / binfolder
- if not binfolder_abs_path.is_dir():
- raise common.LmbrCmdError("Invalid value for '-b/--binfolder'. Path does not exist or is not a directory",
- common.ERROR_CODE_ERROR_DIRECTORY)
-
- rc_check = binfolder_abs_path / RC_NAME
- if not rc_check.is_file():
- raise common.LmbrCmdError(f"Invalid value for '-b/--binfolder'. Path does not contain {RC_NAME}",
- common.ERROR_CODE_ERROR_DIRECTORY)
-
- apb_check = binfolder_abs_path / APB_NAME
- if not apb_check.is_file():
- raise common.LmbrCmdError(f"Invalid value for '-b/--binfolder'. Path does not contain {APB_NAME}",
- common.ERROR_CODE_ERROR_DIRECTORY)
-
- #
- # Validate the game name represents a game project within the game engine
- #
- gamefolder_abs_path = pathlib.Path(DEV_ROOT) / game_name
- if not gamefolder_abs_path.is_dir():
- raise common.LmbrCmdError(f"Invalid value for '-g/--game-name'. No game '{game_name} exists.",
- common.ERROR_CODE_ERROR_DIRECTORY)
-
- project_json_path = gamefolder_abs_path / 'project.json'
- if not project_json_path.is_file():
- raise common.LmbrCmdError(
- f"Invalid value for '-g/--game-name'. Folder '{game_name} is not a valid game project.",
- common.ERROR_CODE_FILE_NOT_FOUND)
-
- if not os.path.isfile(pak_script):
- raise common.LmbrCmdError(f'Pak script file {pak_script} does not exist.',
- common.ERROR_CODE_FILE_NOT_FOUND)
-
-
-def process(binfolder, game_name, asset_platform, autorun_assetprocessor, recompress, fastest_compression, target,
- pak_script, warn_on_assetprocessor_error, verbose):
-
- logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG if verbose else logging.INFO)
-
- target_path_root_abs = pathlib.Path(DEV_ROOT) / target
- if target_path_root_abs.is_file():
- raise common.LmbrCmdError(f"Target '{target}' already exists as a file.",
- common.ERROR_CODE_GENERAL_ERROR)
- os.makedirs(target_path_root_abs.absolute(), exist_ok=True)
-
- target_pak_folder_name = f'{game_name.lower()}_{asset_platform}_paks'
- target_pak = target_path_root_abs / target_pak_folder_name
-
- # Prepare the asset processor batch arguments and execute if requested
- if autorun_assetprocessor:
- ap_executable = os.path.join(binfolder, APB_NAME)
- ap_cmd_args = [ap_executable,
- f'/gamefolder={game_name}',
- f'/platforms={asset_platform}']
- logging.debug("Calling {}".format(' '.join(ap_cmd_args)))
- try:
- logging.info(f"Running {APB_NAME} on {game_name}")
- start_time = datetime.datetime.now()
-
- call_args = VERBOSE_CALL_ARGS if verbose else NON_VERBOSE_CALL_ARGS
-
- subprocess.check_call(command_arg(ap_cmd_args),
- **call_args)
-
- total_time = datetime.datetime.now() - start_time
- logging.info(f"Asset Processing Complete. Elapse: {total_time}")
- except subprocess.CalledProcessError:
- if warn_on_assetprocessor_error:
- logging.warning('AssetProcessorBatch reported errors')
- else:
- raise common.LmbrCmdError("AssetProcessorBatch has one or more failed assets.",
- common.ERROR_CODE_GENERAL_ERROR)
-
- rc_executable = os.path.join(binfolder, RC_NAME)
- rc_cmd_args = [rc_executable,
- f'/job={pak_script}',
- f'/p={asset_platform}',
- f'/game={game_name}',
- f'/trg={target_pak}']
- if recompress:
- rc_cmd_args.append('/recompress=1')
- if fastest_compression:
- rc_cmd_args.append('/use_fastest=1')
- logging.debug("Calling {}".format(' '.join(rc_cmd_args)))
-
- try:
- logging.info(f"Running {APB_NAME} on {game_name}")
- start_time = datetime.datetime.now()
-
- call_args = VERBOSE_CALL_ARGS if verbose else NON_VERBOSE_CALL_ARGS
-
- subprocess.check_call(command_arg(rc_cmd_args),
- **call_args)
-
- total_time = datetime.datetime.now() - start_time
- logging.info(f"Asset Processing Complete. Elapse: {total_time}")
- logging.info(f"Pak files for {game_name} written to {target_pak}")
-
- except subprocess.CalledProcessError as err:
- raise common.LmbrCmdError(f"{RC_NAME} returned an error: {str(err)}.",
- err.returncode)
-
-
-def main(args):
-
- parser = argparse.ArgumentParser()
-
- parser.add_argument('-b', '--binfolder',
- help='The relative location of the binary folder that contains the resource compiler and asset processor')
-
- bootstrap = common.get_bootstrap_values(DEV_ROOT, ['project_path'])
- parser.add_argument('-g', '--game-name',
- help='The name of the Game whose asset pak will be generated for',
- default=bootstrap.get('project_path'))
-
- parser.add_argument('-p', '--asset-platform',
- help='The asset platform type to process')
-
- parser.add_argument('-a', '--autorun-assetprocessor',
- help='Option to automatically invoke asset processor batch on the game before generating the pak',
- action='store_true')
-
- parser.add_argument('-w', '--warn-on-assetprocessor-error',
- help='When -a/--autorun-assetprocessor is specified, warn on asset processor failure rather than aborting the process',
- action='store_true')
-
- parser.add_argument('-r', '--recompress',
- action='store_true',
- help='If present, the ResourceCompiler (RC.exe) will decompress and compress back each PAK file '
- 'found as they are transferred from the cache folder to the game_pc_pak folder.')
- parser.add_argument('-fc', '--fastest-compression',
- action='store_true',
- help='As each file is being added to its PAK file, they will be compressed across all available '
- 'codecs (ZLIB, ZSTD and LZ4) and the one with the fastest decompression time will be '
- 'chosen. The default is to always use ZLIB')
- parser.add_argument('--target',
- default='Pak',
- help='Specify a target folder for the pak files. (Default : Pak)')
- parser.add_argument('--pak-script',
- default=f'{DEV_ROOT}/{os.path.normpath("Code/Tools/RC/Config/rc/RCJob_Generic_MakePaks.xml")}',
- help="The absolute path of the pak script configuration file to use to create the paks.")
-
- parser.add_argument('-v', '--verbose',
- help='Enable debug messages',
- action='store_true')
-
- parsed = parser.parse_args(args)
-
- validate(binfolder=parsed.binfolder,
- game_name=parsed.game_name,
- pak_script=parsed.pak_script)
-
- process(binfolder=parsed.binfolder,
- game_name=parsed.game_name,
- asset_platform=parsed.asset_platform,
- autorun_assetprocessor=parsed.autorun_assetprocessor,
- recompress=parsed.recompress,
- fastest_compression=parsed.fastest_compression,
- target=parsed.target,
- pak_script=parsed.pak_script,
- warn_on_assetprocessor_error=parsed.warn_on_assetprocessor_error,
- verbose=parsed.verbose)
-
-
-if __name__ == '__main__':
- try:
- if not os.path.isfile(BOOTSTRAP_CFG):
- raise common.LmbrCmdError("Invalid dev root, missing bootstrap.cfg.",
- common.ERROR_CODE_FILE_NOT_FOUND)
-
- main(sys.argv[1:])
- exit(0)
-
- except common.LmbrCmdError as err:
- print(str(err), file=sys.stderr)
- exit(err.code)
diff --git a/cmake/Tools/layout_tool.py b/cmake/Tools/layout_tool.py
index 8f573b61f5..69f5b34ae7 100755
--- a/cmake/Tools/layout_tool.py
+++ b/cmake/Tools/layout_tool.py
@@ -78,19 +78,19 @@ def verify_layout(layout_dir, platform_name, project_path, asset_mode, asset_typ
if remote_on_check is None:
# Validate that if '_connect_to_remote is enabled, that the 'input_remote_ip' is not set to local host
if input_remote_connect == '1' and input_remote_ip == LOCAL_HOST:
- return _warn("'bootstrap.cfg' is configured to connect to Asset Processor remotely, but the 'remote_ip' "
+ return _warn("'bootstrap.setreg' is configured to connect to Asset Processor remotely, but the 'remote_ip' "
" is configured for LOCAL HOST")
else:
if remote_on_check:
# Verify we are set for remote AP connection
if input_remote_ip == LOCAL_HOST:
- return _warn(f"'bootstrap.cfg' is not configured for a remote Asset Processor connection (remote_ip={input_remote_ip})")
+ return _warn(f"'bootstrap.setreg' is not configured for a remote Asset Processor connection (remote_ip={input_remote_ip})")
if input_remote_connect != '1':
- return _warn(f"'bootstrap.cfg' is not configured for a remote Asset Processor connection ({platform_name}_connect_to_remote={input_remote_connect}")
+ return _warn(f"'bootstrap.setreg' is not configured for a remote Asset Processor connection ({platform_name}_connect_to_remote={input_remote_connect}")
else:
# Verify we are disabled for remote AP connection
if input_remote_connect != '0':
- return _warn(f"'bootstrap.cfg' is not configured for a remote Asset Processor connection ({platform_name}_connect_to_remote={input_remote_connect}")
+ return _warn(f"'bootstrap.setreg' is not configured for a remote Asset Processor connection ({platform_name}_connect_to_remote={input_remote_connect}")
return 0
@@ -107,20 +107,15 @@ def verify_layout(layout_dir, platform_name, project_path, asset_mode, asset_typ
project_name_lower = project_path.lower()
layout_path = pathlib.Path(layout_dir)
- # Validate bootstrap.cfg exists
- bootstrap_file = layout_path / 'bootstrap.cfg'
- if not bootstrap_file.is_file():
- warning_count += _warn(f"'bootstrap.cfg' is missing from {str(layout_path)}")
- bootstrap_values = None
- else:
- bootstrap_values = common.get_config_file_values(str(bootstrap_file), [f'{platform_name_lower}_remote_filesystem',
- f'{platform_name_lower}_connect_to_remote',
- f'{platform_name_lower}_wait_for_connect',
- f'{platform_name_lower}_assets',
- f'assets',
- f'{platform_name_lower}_remote_ip',
- f'remote_ip'
- ])
+ bootstrap_path = layout_path / 'Registry'
+ bootstrap_values = common.get_bootstrap_values(str(bootstrap_path), [f'{platform_name_lower}_remote_filesystem',
+ f'{platform_name_lower}_connect_to_remote',
+ f'{platform_name_lower}_wait_for_connect',
+ f'{platform_name_lower}_assets',
+ f'assets',
+ f'{platform_name_lower}_remote_ip',
+ f'remote_ip'
+ ])
# Validate the system_{platform}_{asset type}.cfg exists
platform_system_cfg_file = layout_path / f'system_{platform_name_lower}_{asset_type}.cfg'
@@ -141,9 +136,9 @@ def verify_layout(layout_dir, platform_name, project_path, asset_mode, asset_typ
# Validate that the asset type for the platform matches the one set for the build
bootstrap_asset_type = bootstrap_values.get(f'{platform_name_lower}_assets') or bootstrap_values.get('assets')
if not bootstrap_asset_type:
- warning_count += _warn("'bootstrap.cfg' is missing specifications for asset type.")
+ warning_count += _warn("'bootstrap.setreg' is missing specifications for asset type.")
elif bootstrap_asset_type != asset_type:
- warning_count += _warn(f"The asset type specified in bootstrap.cfg ({bootstrap_asset_type}) does not match the asset type specified for this deployment({asset_type}).")
+ warning_count += _warn(f"The asset type specified in bootstrap.setreg ({bootstrap_asset_type}) does not match the asset type specified for this deployment({asset_type}).")
# Validate that if '_connect_to_remote is enabled, that the 'remote_ip' is not set to local host
warning_count += _validate_remote_ap(remote_ip, remote_connect, None)
@@ -211,7 +206,7 @@ def verify_layout(layout_dir, platform_name, project_path, asset_mode, asset_typ
elif asset_mode == ASSET_MODE_VFS:
remote_file_system = bootstrap_values.get(f'{platform_name_lower}_remote_filesystem') or '0'
if not remote_file_system != '1':
- warning_count += _warn("Remote file system is not configured in bootstrap.cfg for VFS mode.")
+ warning_count += _warn("Remote file system is not configured in bootstrap.setreg for VFS mode.")
else:
warning_count += _validate_remote_ap(remote_ip, remote_connect, True)
diff --git a/cmake/Tools/unit_test_common.py b/cmake/Tools/unit_test_common.py
index 58f89876c3..655c2a32c1 100755
--- a/cmake/Tools/unit_test_common.py
+++ b/cmake/Tools/unit_test_common.py
@@ -48,60 +48,6 @@ def test_determine_engine_root(tmpdir, engine_json_content, expected_success):
assert result is None
-TEST_BOOTSTRAP_CONTENT_1 = """
-project_path = Game1
-foo = bar
-key1 = value1
-key2 = value2
-assets = pc
---No Assets
-"""
-
-TEST_BOOTSTRAP_CONTENT_2 = """
-project_path = Game2
- foo = bar
-#-------------------------
- key1 = value1
-key2 = value2
-assets = pc
---No Assets
-"""
-
-
-@pytest.mark.parametrize(
- "contents, input_keys, expected_result_map", [
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, ['project_path', 'foo', 'assets'], {'project_path': 'Game1',
- 'foo': 'bar',
- 'assets': 'pc'}, id="TestFullMatch"),
- pytest.param(TEST_BOOTSTRAP_CONTENT_2, ['project_path', 'foo', 'barnone'], {'project_path': 'Game2',
- 'foo': 'bar'}, id="TestPartialMatch"),
- pytest.param(TEST_BOOTSTRAP_CONTENT_2, ['project_pathnone', 'foonone', 'barnone'], {}, id="TestNoMatch")
- ]
-)
-def test_get_bootstrap_values_success(tmpdir, contents, input_keys, expected_result_map):
-
- test_dev_root = 'dev'
- tmpdir.ensure('{}/bootstrap.cfg'.format(test_dev_root))
- bootstrap_file = tmpdir.join('{}/bootstrap.cfg'.format(test_dev_root))
- bootstrap_file.write(contents)
-
- bootstrap_file_path = str(tmpdir.join(test_dev_root).realpath())
-
- result = common.get_bootstrap_values(bootstrap_file_path, input_keys)
-
- assert expected_result_map == result
-
-
-def test_get_bootstrap_values_fail():
- try:
- bad_file = 'x:\\foo\\bar\\file\\'
- common.get_bootstrap_values(bad_file, ['input_keys'])
- except common.LmbrCmdError as err:
- assert 'Missing' in str(err)
- else:
- assert False, "Excepted LayoutToolError (missing file)"
-
-
TEST_AP_CONFIG_1 = """
[Platforms]
;pc=enabled
@@ -245,7 +191,6 @@ def test_verify_game_project_and_dev_root_success(tmpdir):
game_name = 'MyFoo'
game_folder = 'myfoo'
game_project_json = TEST_GAME_PROJECT_JSON_FORMAT.format(project_name=game_name)
- tmpdir.ensure(f'{dev_root}/bootstrap.cfg')
tmpdir.ensure(f'{dev_root}/{game_folder}/project.json')
project_json_path = tmpdir / dev_root / game_folder / 'project.json'
project_json_path.write_text(game_project_json, encoding='ascii')
@@ -285,72 +230,6 @@ asset_deploy_type={test_asset_deploy_type}
assert result.asset_deploy_type == test_asset_deploy_type
-def test_transform_bootstrap_project_path(tmpdir):
-
- tmpdir.ensure('bootstrap.cfg')
-
- test_bootstrap_content = """
--- Blah Blah
--- Blah Blah
-
-project_path=OldProject
-
--- remote_filesystem - enable Virtual File System (VFS)
--- This feature allows a remote instance of the game to run off assets
--- on the asset processor computers cache instead of deploying them the remote device
--- By default it is off and can be overridden for any platform
-remote_filesystem=0
-"""
- test_src_bootstrap = tmpdir / 'bootstrap.cfg'
- test_src_bootstrap.write_text(test_bootstrap_content, encoding='ascii')
-
- test_dst_bootstrap = tmpdir / 'bootstrap.transformed.cfg'
- test_game_name = 'FooBar'
-
- common.transform_bootstrap_for_project(game_name=test_game_name,
- src_bootstrap=str(test_src_bootstrap),
- dst_bootstrap=str(test_dst_bootstrap))
-
- transformed_text = test_dst_bootstrap.read_text('ascii')
-
- search_gamename = re.search(r"project_path\s*=\s*(.*)", transformed_text)
- assert search_gamename
- assert search_gamename.group(1)
- assert search_gamename.group(1) == test_game_name
-
-
-def test_transform_bootstrap_project_path_missing(tmpdir):
-
- tmpdir.ensure('bootstrap.cfg')
-
- test_bootstrap_content = """
--- Blah Blah
--- Blah Blah
-
--- remote_filesystem - enable Virtual File System (VFS)
--- This feature allows a remote instance of the game to run off assets
--- on the asset processor computers cache instead of deploying them the remote device
--- By default it is off and can be overridden for any platform
-remote_filesystem=0
-"""
- test_src_bootstrap = tmpdir / 'bootstrap.cfg'
- test_src_bootstrap.write_text(test_bootstrap_content, encoding='ascii')
-
- test_dst_bootstrap = tmpdir / 'bootstrap.transformed.cfg'
- test_game_name = 'FooBar'
-
- common.transform_bootstrap_for_project(game_name=test_game_name,
- src_bootstrap=str(test_src_bootstrap),
- dst_bootstrap=str(test_dst_bootstrap))
-
- transformed_text = test_dst_bootstrap.read_text('ascii')
-
- search_gamename = re.search(r"project_path\s*=\s*(.*)", transformed_text)
- assert search_gamename
- assert search_gamename.group(1)
- assert search_gamename.group(1) == test_game_name
-
-
def test_cmake_dependency_success(tmpdir):
test_module = 'FooBar'
diff --git a/cmake/Tools/unit_test_current_project.py b/cmake/Tools/unit_test_current_project.py
deleted file mode 100755
index 7db48b62aa..0000000000
--- a/cmake/Tools/unit_test_current_project.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#
-# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-# its licensors.
-#
-# For complete copyright and license terms please see the LICENSE at the root of this
-# distribution (the "License"). All use of this software is governed by the License,
-# or, if provided, by the license below or the license accompanying this file. Do not
-# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#
-
-import os
-import pytest
-
-from . import current_project
-
-TEST_BOOTSTRAP_CONTENT_1 = """
-project_path = Game1
-foo = bar
-key1 = value1
-key2 = value2
-assets = pc
-"""
-TEST_BOOTSTRAP_CONTENT_2 = """
-project_path=Game1
-foo = bar
-key1 = value1
-key2 = value2
-assets = pc
-"""
-TEST_BOOTSTRAP_CONTENT_3 = """
-project_path= Game1
-foo = bar
-key1 = value1
-key2 = value2
-assets = pc
-"""
-TEST_BOOTSTRAP_CONTENT_4 = """
-project_path =Game1
-foo = bar
-key1 = value1
-key2 = value2
-assets = pc
-"""
-TEST_BOOTSTRAP_CONTENT_5 = """
-project_path = Game1
-foo = bar
-key1 = value1
-key2 = value2
-assets = pc
-"""
-
-@pytest.mark.parametrize(
- "contents, expected_result", [
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, 'Game1'),
- pytest.param(TEST_BOOTSTRAP_CONTENT_2, 'Game1'),
- pytest.param(TEST_BOOTSTRAP_CONTENT_3, 'Game1'),
- pytest.param(TEST_BOOTSTRAP_CONTENT_4, 'Game1'),
- pytest.param(TEST_BOOTSTRAP_CONTENT_5, 'Game1'),
- ]
-)
-def test_get_current_project(tmpdir, contents, expected_result):
- dev_root = str(tmpdir.join('dev').realpath()).replace('\\', '/')
- os.makedirs(dev_root, exist_ok=True)
-
- bootstrap_file = f'{dev_root}/bootstrap.cfg'
- if os.path.isfile(bootstrap_file):
- os.unlink(bootstrap_file)
- with open(bootstrap_file, 'a') as s:
- s.write(contents)
-
- result = current_project.get_current_project(dev_root)
- assert expected_result == result
-
-
-@pytest.mark.parametrize(
- "contents, project_to_set, expected_result", [
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, 'Test1', 0),
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, ' Test2', 0),
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, 'Test3 ', 0),
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, '/Test4', 1),
- pytest.param(TEST_BOOTSTRAP_CONTENT_1, '=Test5', 1),
- ]
-)
-def test_set_current_project(tmpdir, contents, project_to_set, expected_result):
- dev_root = str(tmpdir.join('dev').realpath()).replace('\\', '/')
- os.makedirs(dev_root, exist_ok=True)
-
- bootstrap_file = f'{dev_root}/bootstrap.cfg'
- if os.path.isfile(bootstrap_file):
- os.unlink(bootstrap_file)
- with open(bootstrap_file, 'a') as s:
- s.write(contents)
-
- result = current_project.set_current_project(dev_root, project_to_set)
- assert expected_result == result
-
- if result == 0:
- project_that_is_set = current_project.get_current_project(dev_root)
- print(project_that_is_set)
- print(project_to_set)
- assert project_to_set.strip() == project_that_is_set
\ No newline at end of file
diff --git a/cmake/Tools/unit_test_layout_tool.py b/cmake/Tools/unit_test_layout_tool.py
index 5be2c23f11..37684654b1 100755
--- a/cmake/Tools/unit_test_layout_tool.py
+++ b/cmake/Tools/unit_test_layout_tool.py
@@ -212,16 +212,15 @@ def test_create_link_error():
@pytest.mark.parametrize(
- "project_path, asset_type, ensure_path, warn_on_missing, expected_result", [
- pytest.param('Foo', 'pc', 'Foo/Cache/pc/bootstrap.cfg', False, 'Foo/Cache/pc'),
- pytest.param('Foo', 'pc', 'dev/bootstrap.cfg', True, None),
- pytest.param('Foo', 'pc', 'Foo/Cache/es3/bootstrap.cfg', True, None),
- pytest.param('Foo', 'pc', 'dev/bootstrap.cfg', False, common.LmbrCmdError),
- pytest.param('Foo', 'pc', 'Foo/Cache/es3/bootstrap.cfg', False, common.LmbrCmdError),
+ "project_path, asset_type, warn_on_missing, expected_result", [
+ pytest.param('Foo', 'pc', False, 'Foo/Cache/pc'),
+ pytest.param('Foo', 'pc', True, None),
+ pytest.param('Foo', 'pc', True, None),
+ pytest.param('Foo', 'pc', False, common.LmbrCmdError),
+ pytest.param('Foo', 'pc', False, common.LmbrCmdError),
]
)
-def test_construct_and_validate_cache_game_asset_folder_success(tmpdir, project_path, asset_type, ensure_path, warn_on_missing, expected_result):
- tmpdir.ensure(ensure_path)
+def test_construct_and_validate_cache_game_asset_folder_success(tmpdir, project_path, asset_type, warn_on_missing, expected_result):
if isinstance(expected_result, str):
expected_path_realpath = str(tmpdir.join(expected_result).realpath())
elif expected_result == common.LmbrCmdError:
@@ -385,7 +384,6 @@ def test_sync_layout_non_vfs_success(tmpdir, mode, existing_game_link, existing_
old_remove_link = layout_tool.remove_link
try:
# Simple Test Parameters
- tmpdir.ensure('engine-root/bootstrap.cfg')
engine_root_realpath = str(tmpdir.join('engine-root').realpath())
test_project_path = str(tmpdir.join('Foo').realpath())
test_project_name_lower = 'foo'
diff --git a/scripts/build/Platform/Linux/build_config.json b/scripts/build/Platform/Linux/build_config.json
index c1646fc863..610c6a6514 100644
--- a/scripts/build/Platform/Linux/build_config.json
+++ b/scripts/build/Platform/Linux/build_config.json
@@ -83,7 +83,7 @@
"CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=TRUE -DLY_PARALLEL_LINK_JOBS=4 -DO3DE_HOME_PATH=\"${WORKSPACE}/home\" -DO3DE_REGISTER_ENGINE_PATH=\"${WORKSPACE}/o3de\" -DO3DE_REGISTER_THIS_ENGINE=TRUE",
"CMAKE_LY_PROJECTS": "AutomatedTesting",
"CMAKE_TARGET": "all",
- "CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSClientAuth.Tests|Gem::AWSCore.Editor.Tests) -L FRAMEWORK_googletest"
+ "CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSClientAuth.Tests|Gem::AWSCore.Editor.Tests) -LE SUITE_sandbox -L FRAMEWORK_googletest"
}
},
"test_profile_nounity": {
@@ -95,7 +95,7 @@
"CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=FALSE -DLY_PARALLEL_LINK_JOBS=4 -DO3DE_HOME_PATH=\"${WORKSPACE}/home\" -DO3DE_REGISTER_ENGINE_PATH=\"${WORKSPACE}/o3de\" -DO3DE_REGISTER_THIS_ENGINE=TRUE",
"CMAKE_LY_PROJECTS": "AutomatedTesting",
"CMAKE_TARGET": "all",
- "CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSClientAuth.Tests|Gem::AWSCore.Editor.Tests) -L FRAMEWORK_googletest"
+ "CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSClientAuth.Tests|Gem::AWSCore.Editor.Tests) -LE SUITE_sandbox -L FRAMEWORK_googletest"
}
},
"asset_profile": {
diff --git a/scripts/build/package/package.py b/scripts/build/package/package.py
index 96b39f0753..4cb09f3918 100755
--- a/scripts/build/package/package.py
+++ b/scripts/build/package/package.py
@@ -25,9 +25,6 @@ from glob3 import glob
def package(options):
package_env = PackageEnv(options.platform, options.type, options.package_env)
- # Override values in bootstrap.cfg for PC package
- override_bootstrap_cfg(package_env)
-
if not package_env.get('SKIP_BUILD'):
print(package_env.get('SKIP_BUILD'))
print('SKIP_BUILD is False, running CMake build...')
@@ -51,34 +48,6 @@ def get_python_path(package_env):
return os.path.join(package_env.get('ENGINE_ROOT'), 'python', 'python.sh')
-def override_bootstrap_cfg(package_env):
- print('Override values in bootstrap.cfg')
- engine_root = package_env.get('ENGINE_ROOT')
- bootstrap_path = os.path.join(engine_root, 'bootstrap.cfg')
- replace_values = {'project_path':'{}'.format(package_env.get('BOOTSTRAP_CFG_GAME_FOLDER'))}
- try:
- with open(bootstrap_path, 'r') as bootstrap_cfg:
- content = bootstrap_cfg.read()
- except:
- error('Cannot read file {}'.format(bootstrap_path))
- content = content.split('\n')
- new_content = []
- for line in content:
- if not line.startswith('--'):
- strs = line.split('=')
- if len(strs):
- key = strs[0].strip(' ')
- if key in replace_values:
- line = '{}={}'.format(key, replace_values[key])
- new_content.append(line)
- try:
- with open(bootstrap_path, 'w') as out:
- out.write('\n'.join(new_content))
- except:
- error('Cannot write to file {}'.format(bootstrap_path))
- print('{} updated with value {}'.format(bootstrap_path, replace_values))
-
-
def cmake_build(package_env):
build_targets = package_env.get('BUILD_TARGETS')
for build_target in build_targets: