Merge pull request #1011 from aws-lumberyard-dev/ly-as-sdk/LYN-2948

Integration of the LY as an SDK work
This commit is contained in:
Esteban Papp
2021-05-28 11:30:13 -07:00
committed by GitHub
247 changed files with 6904 additions and 7991 deletions
+2
View File
@@ -4,6 +4,7 @@ __pycache__
AssetProcessorTemp/**
[Bb]uild/**
[Cc]ache/
/install/
Editor/EditorEventLog.xml
Editor/EditorLayout.xml
**/*egg-info/**
@@ -19,3 +20,4 @@ _savebackup/
TestResults/**
*.swatches
/imgui.ini
/scripts/project_manager/logs/
+36 -18
View File
@@ -20,31 +20,49 @@ if(json_error)
message(FATAL_ERROR "Unable to read key 'engine' from 'project.json', error: ${json_error}")
endif()
# Read the list of paths from ~.o3de/o3de_manifest.json
file(TO_CMAKE_PATH "$ENV{USERPROFILE}" home_directory) # Windows
if((NOT home_directory) OR (NOT EXISTS ${home_directory}))
file(TO_CMAKE_PATH "$ENV{HOME}" home_directory)# Unix
if(DEFINED ENV{USERPROFILE} AND EXISTS $ENV{USERPROFILE})
set(manifest_path $ENV{USERPROFILE}/.o3de/o3de_manifest.json) # Windows
else()
set(manifest_path $ENV{HOME}/.o3de/o3de_manifest.json) # Unix
endif()
if (NOT home_directory)
message(FATAL_ERROR "Cannot find user home directory, the o3de manifest cannot be found")
endif()
# Set manifest path to path in the user home directory
set(manifest_path ${home_directory}/.o3de/o3de_manifest.json)
# Read the ~/.o3de/o3de_manifest.json file and look through the 'engines_path' object.
# Find a key that matches LY_ENGINE_NAME_TO_USE and use that as the engine path.
if(EXISTS ${manifest_path})
file(READ ${manifest_path} manifest_json)
string(JSON engines_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engines)
string(JSON engines_path_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engines_path)
if(json_error)
message(FATAL_ERROR "Unable to read key 'engines' from '${manifest_path}', error: ${json_error}")
message(FATAL_ERROR "Unable to read key 'engines_path' from '${manifest_path}', error: ${json_error}")
endif()
math(EXPR engines_count "${engines_count}-1")
foreach(engine_path_index RANGE ${engines_count})
string(JSON engine_path ERROR_VARIABLE json_error GET ${manifest_json} engines ${engine_path_index})
if(${json_error})
message(FATAL_ERROR "Unable to read engines[${engine_path_index}] '${manifest_path}', error: ${json_error}")
string(JSON engines_path_type ERROR_VARIABLE json_error TYPE ${manifest_json} engines_path)
if(json_error OR NOT ${engines_path_type} STREQUAL "OBJECT")
message(FATAL_ERROR "Type of 'engines_path' in '${manifest_path}' is not a JSON Object, error: ${json_error}")
endif()
math(EXPR engines_path_count "${engines_path_count}-1")
foreach(engine_path_index RANGE ${engines_path_count})
string(JSON engine_name ERROR_VARIABLE json_error MEMBER ${manifest_json} engines_path ${engine_path_index})
if(json_error)
message(FATAL_ERROR "Unable to read 'engines_path/${engine_path_index}' from '${manifest_path}', error: ${json_error}")
endif()
if(LY_ENGINE_NAME_TO_USE STREQUAL engine_name)
string(JSON engine_path ERROR_VARIABLE json_error GET ${manifest_json} engines_path ${engine_name})
if(json_error)
message(FATAL_ERROR "Unable to read value from 'engines_path/${engine_name}', error: ${json_error}")
endif()
if(engine_path)
list(APPEND CMAKE_MODULE_PATH "${engine_path}/cmake")
break()
endif()
endif()
list(APPEND CMAKE_MODULE_PATH "${engine_path}/cmake")
endforeach()
else()
# If the user is passing CMAKE_MODULE_PATH we assume thats where we will find the engine
if(NOT CMAKE_MODULE_PATH)
message(FATAL_ERROR "Engine registration is required before configuring a project. Please register an engine by running 'scripts/o3de register --this-engine'")
endif()
endif()
+33 -22
View File
@@ -28,30 +28,41 @@ ly_add_target(
Gem::Atom_AtomBridge.Static
)
# if enabled, AutomatedTesting is used by all kinds of applications
ly_create_alias(NAME AutomatedTesting.Builders NAMESPACE Gem TARGETS Gem::AutomatedTesting)
ly_create_alias(NAME AutomatedTesting.Tools NAMESPACE Gem TARGETS Gem::AutomatedTesting)
ly_create_alias(NAME AutomatedTesting.Clients NAMESPACE Gem TARGETS Gem::AutomatedTesting)
ly_create_alias(NAME AutomatedTesting.Servers NAMESPACE Gem TARGETS Gem::AutomatedTesting)
################################################################################
# Gem dependencies
################################################################################
ly_add_project_dependencies(
PROJECT_NAME
AutomatedTesting
TARGETS
AutomatedTesting.GameLauncher
DEPENDENCIES_FILES
runtime_dependencies.cmake
${pal_dir}/runtime_dependencies.cmake
)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_project_dependencies(
PROJECT_NAME
AutomatedTesting
TARGETS
AssetBuilder
AssetProcessor
AssetProcessorBatch
Editor
DEPENDENCIES_FILES
tool_dependencies.cmake
${pal_dir}/tool_dependencies.cmake
)
# The GameLauncher uses "Clients" gem variants:
ly_enable_gems(PROJECT_NAME AutomatedTesting GEM_FILE enabled_gems.cmake
TARGETS AutomatedTesting.GameLauncher
VARIANTS Clients)
# If we build a server, then apply the gems to the server
if(PAL_TRAIT_BUILD_SERVER_SUPPORTED)
# if we're making a server, then add the "Server" gem variants to it:
ly_enable_gems(PROJECT_NAME AutomatedTesting GEM_FILE enabled_gems.cmake
TARGETS AutomatedTesting.ServerLauncher
VARIANTS Servers)
set_property(GLOBAL APPEND PROPERTY LY_LAUNCHER_SERVER_PROJECTS AutomatedTesting)
endif()
if (PAL_TRAIT_BUILD_HOST_TOOLS)
# The Editor uses "Tools" gem variants:
ly_enable_gems(
PROJECT_NAME AutomatedTesting GEM_FILE enabled_gems.cmake
TARGETS Editor
VARIANTS Tools)
# The pipeline tools use "Builders" gem variants:
ly_enable_gems(
PROJECT_NAME AutomatedTesting GEM_FILE enabled_gems.cmake
TARGETS AssetBuilder AssetProcessor AssetProcessorBatch
VARIANTS Builders)
endif()
@@ -0,0 +1,58 @@
#
# 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.
#
set(ENABLED_GEMS
ImGui
ScriptEvents
ExpressionEvaluation
Gestures
CertificateManager
DebugDraw
SceneProcessing
GraphCanvas
InAppPurchases
AutomatedTesting
EditorPythonBindings
QtForPython
PythonAssetBuilder
Metastream
AudioSystem
Camera
EMotionFX
PhysX
CameraFramework
StartingPointMovement
StartingPointCamera
ScriptCanvas
ScriptCanvasPhysics
ScriptCanvasTesting
LyShineExamples
StartingPointInput
PhysXDebug
WhiteBox
FastNoise
SurfaceData
GradientSignal
Vegetation
GraphModel
LandscapeCanvas
NvCloth
Blast
Maestro
TextureAtlas
LmbrCentral
LyShine
HttpRequestor
Atom_AtomBridge
AWSCore
AWSClientAuth
AWSMetrics
)
@@ -1,48 +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.
#
# Extracted from Game
set(GEM_DEPENDENCIES
Gem::Maestro
Gem::TextureAtlas
Gem::LmbrCentral
Gem::LyShine
Gem::HttpRequestor
Gem::ScriptEvents
Gem::ExpressionEvaluation
Gem::Gestures
Gem::CertificateManager
Gem::DebugDraw
Gem::AudioSystem
Gem::InAppPurchases
Gem::AutomatedTesting
Gem::Metastream
Gem::Camera
Gem::EMotionFX
Gem::PhysX
Gem::CameraFramework
Gem::StartingPointMovement
Gem::StartingPointCamera
Gem::ScriptCanvas
Gem::ImGui
Gem::LyShineExamples
Gem::StartingPointInput
Gem::ScriptCanvasPhysics
Gem::PhysXDebug
Gem::WhiteBox
Gem::FastNoise
Gem::SurfaceData
Gem::GradientSignal
Gem::Vegetation
Gem::Atom_AtomBridge
Gem::NvCloth
Gem::Blast
)
@@ -1,60 +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.
#
# Extracted from Editor.xml
set(GEM_DEPENDENCIES
Gem::Maestro.Editor
Gem::TextureAtlas.Editor
Gem::LmbrCentral.Editor
Gem::LyShine.Editor
Gem::HttpRequestor
Gem::ScriptEvents.Editor
Gem::ExpressionEvaluation
Gem::Gestures
Gem::CertificateManager
Gem::DebugDraw.Editor
Gem::SceneProcessing.Editor
Gem::GraphCanvas.Editor
Gem::InAppPurchases
Gem::AutomatedTesting
Gem::EditorPythonBindings.Editor
Gem::PythonAssetBuilder.Editor
Gem::Metastream
Gem::AudioSystem.Editor
Gem::Camera.Editor
Gem::EMotionFX.Editor
Gem::PhysX.Editor
Gem::CameraFramework
Gem::StartingPointMovement
Gem::StartingPointCamera
Gem::ScriptCanvas.Editor
Gem::ScriptEvents.Editor
Gem::ImGui.Editor
Gem::LyShineExamples
Gem::StartingPointInput.Editor
Gem::ScriptCanvasPhysics
Gem::ScriptCanvasTesting.Editor
Gem::PhysXDebug.Editor
Gem::WhiteBox.Editor
Gem::FastNoise.Editor
Gem::SurfaceData.Editor
Gem::GradientSignal.Editor
Gem::Vegetation.Editor
Gem::GraphModel.Editor
Gem::LandscapeCanvas.Editor
Gem::EMotionFX.Editor
Gem::ImGui.Editor
Gem::Atom_RHI.Private
Gem::Atom_Feature_Common.Editor
Gem::Atom_AtomBridge.Editor
Gem::NvCloth.Editor
Gem::Blast.Editor
)
+63 -69
View File
@@ -25,34 +25,13 @@ include(cmake/LySet.cmake)
include(cmake/Version.cmake)
include(cmake/OutputDirectory.cmake)
# Set the engine_path and engine_json
set(o3de_engine_path ${CMAKE_CURRENT_LIST_DIR})
set(o3de_engine_json ${o3de_engine_path}/engine.json)
if(NOT PROJECT_NAME)
project(O3DE
LANGUAGES C CXX
VERSION ${LY_VERSION_STRING}
)
# o3de manifest
include(cmake/o3de_manifest.cmake)
endif()
################################################################################
# Resolve this engines name and restricted path
################################################################################
o3de_engine_name(${o3de_engine_json} o3de_engine_name)
o3de_restricted_path(${o3de_engine_json} o3de_engine_restricted_path)
message(STATUS "O3DE Engine Name: ${o3de_engine_name}")
message(STATUS "O3DE Engine Path: ${o3de_engine_path}")
if(o3de_engine_restricted_path)
message(STATUS "O3DE Engine Restricted Path: ${o3de_engine_restricted_path}")
endif()
# add the engines cmake folder to the CMAKE_MODULE_PATH
list(APPEND CMAKE_MODULE_PATH "${o3de_engine_path}/cmake")
################################################################################
# Initialize
################################################################################
@@ -60,6 +39,7 @@ include(cmake/GeneralSettings.cmake)
include(cmake/FileUtil.cmake)
include(cmake/PAL.cmake)
include(cmake/PALTools.cmake)
include(cmake/RuntimeDependencies.cmake)
include(cmake/Install.cmake)
include(cmake/Configurations.cmake) # Requires to be after PAL so we get platform variable definitions
include(cmake/Dependencies.cmake)
@@ -67,92 +47,106 @@ include(cmake/Deployment.cmake)
include(cmake/3rdParty.cmake)
include(cmake/LYPython.cmake)
include(cmake/LYWrappers.cmake)
include(cmake/Gems.cmake)
include(cmake/UnitTest.cmake)
include(cmake/LYTestWrappers.cmake)
include(cmake/Monolithic.cmake)
include(cmake/SettingsRegistry.cmake)
include(cmake/TestImpactFramework/LYTestImpactFramework.cmake)
include(cmake/CMakeFiles.cmake)
include(cmake/O3DEJson.cmake)
################################################################################
# Subdirectory processing
################################################################################
function(add_engine_json_external_subdirectories)
read_json_external_subdirs(external_subdis ${LY_ROOT_FOLDER}/engine.json)
foreach(external_subdir ${external_subdis})
file(REAL_PATH ${external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER})
list(APPEND engine_external_subdirs ${real_external_subdir})
endforeach()
set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${engine_external_subdirs})
endfunction()
# Add the projects first so the Launcher can find them
include(cmake/Projects.cmake)
if(NOT INSTALLED_ENGINE)
# Add the rest of the targets
add_subdirectory(Code)
add_subdirectory(scripts)
# SPEC-1417 will investigate and fix this
if(NOT PAL_PLATFORM_NAME STREQUAL "Mac")
add_subdirectory(Tools/LyTestTools/tests/)
add_subdirectory(Tools/RemoteConsole/ly_remote_console/tests/)
endif()
# Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
# external subdirectories
add_engine_json_external_subdirectories()
get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS)
list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs})
# Loop over the additional external subdirectories and invoke add_subdirectory on them
foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
# Hash the extenal_directory name and append it to the Binary Directory section of add_subdirectory
# This is to deal with potential situations where multiple external directories has the same last directory name
# For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory
file(REAL_PATH ${external_directory} full_directory_path)
string(SHA256 full_directory_hash ${full_directory_path})
# Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit
# when the external subdirectory contains relative paths of significant length
string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash)
# Use the last directory as the suffix path to use for the Binary Directory
get_filename_component(directory_name ${external_directory} NAME)
add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash})
endforeach()
else()
ly_find_o3de_packages()
endif()
# Add external subdirectories listed in the manifest
list(APPEND LY_EXTERNAL_SUBDIRS ${o3de_engine_external_subdirectories})
set(enabled_platforms
${PAL_PLATFORM_NAME}
${LY_PAL_TOOLS_ENABLED})
# Add any engine restricted platforms as external subdirs
o3de_add_engine_restricted_platform_external_subdirs()
if(NOT INSTALLED_ENGINE)
add_subdirectory(scripts)
endif()
# SPEC-1417 will investigate and fix this
if(NOT PAL_PLATFORM_NAME STREQUAL "Mac")
add_subdirectory(Tools/LyTestTools/tests/)
add_subdirectory(Tools/RemoteConsole/ly_remote_console/tests/)
endif()
################################################################################
# Post-processing
################################################################################
# Loop over the additional external subdirectories and invoke add_subdirectory on them
foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
# Hash the extenal_directory name and append it to the Binary Directory section of add_subdirectory
# This is to deal with potential situations where multiple external directories has the same last directory name
# For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory
file(REAL_PATH ${external_directory} full_directory_path)
string(SHA256 full_directory_hash ${full_directory_path})
# Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit
# when the external subdirectory contains relative paths of significant length
string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash)
# Use the last directory as the suffix path to use for the Binary Directory
get_filename_component(directory_name ${external_directory} NAME)
add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash})
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
# 1. Add any dependencies registered via ly_enable_gems
ly_enable_gems_delayed()
# 2. 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
# if the build dependency is a MODULE_LIBRARY. That would cause a false load dependency to be generated
ly_delayed_generate_settings_registry()
# 2. link targets where the dependency was yet not declared, we need to have the declaration so we do different
# 3. link targets where the dependency was yet not declared, we need to have the declaration so we do different
# linking logic depending on the type of target
ly_delayed_target_link_libraries()
# 3. generate a registry file for unit testing for platforms that support unit testing
# 4. generate a registry file for unit testing for platforms that support unit testing
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
ly_delayed_generate_unit_test_module_registry()
endif()
# 4. inject runtime dependencies to the targets. We need to do this after (1) since we are going to walk through
# the dependencies
include(cmake/RuntimeDependencies.cmake)
# 5. Perform test impact framework post steps once all of the targets have been enumerated
ly_test_impact_post_step()
# 6. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
if(NOT INSTALLED_ENGINE)
ly_setup_o3de_install()
# IMPORTANT: must be included last
# 5. inject runtime dependencies to the targets. We need to do this after (1) since we are going to walk through
# the dependencies
ly_delayed_generate_runtime_dependencies()
# 6. Perform test impact framework post steps once all of the targets have been enumerated
ly_test_impact_post_step()
# 7. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
if(NOT INSTALLED_ENGINE)
# 8. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
ly_setup_o3de_install()
# 9. CPack information (to be included after install)
include(cmake/Packaging.cmake)
endif()
@@ -36,8 +36,8 @@ namespace LegacyLevelSystem
//------------------------------------------------------------------------
static void LoadLevel(const AZ::ConsoleCommandContainer& arguments)
{
AZ_Error("SpawnableLevelSystem", arguments.empty(), "LoadLevel requires a level file name to be provided.");
AZ_Error("SpawnableLevelSystem", arguments.size() > 1, "LoadLevel requires a single level file name to be provided.");
AZ_Error("SpawnableLevelSystem", !arguments.empty(), "LoadLevel requires a level file name to be provided.");
AZ_Error("SpawnableLevelSystem", arguments.size() == 1, "LoadLevel requires a single level file name to be provided.");
if (!arguments.empty() && gEnv->pSystem && gEnv->pSystem->GetILevelSystem() && !gEnv->IsEditor())
{
-5
View File
@@ -864,11 +864,6 @@ bool CSystem::InitShine([[maybe_unused]] const SSystemInitParams& initParams)
EBUS_EVENT(UiSystemBus, InitializeSystem);
if (!m_env.pLyShine)
{
AZ_Error(AZ_TRACE_SYSTEM_WINDOW, false, "LYShine System did not initialize correctly. Please check that the LyShine gem is enabled for this project in *_dependencies.cmake.");
return false;
}
return true;
}
@@ -1260,7 +1260,7 @@ namespace AZ
// So auto load is turned off if option "AutoLoad" key is bool that is false
if (valueName == "AutoLoad" && !value)
{
// Strip off the AutoLoead entry from the path
// Strip off the AutoLoad entry from the path
auto autoLoadKey = AZ::StringFunc::TokenizeLast(path, "/");
if (!autoLoadKey)
{
@@ -1330,7 +1330,7 @@ namespace AZ
{
auto CompareDynamicModuleDescriptor = [&dynamicLibraryPath](const DynamicModuleDescriptor& entry)
{
return entry.m_dynamicLibraryPath.contains(dynamicLibraryPath);
return AZ::IO::PathView(entry.m_dynamicLibraryPath).Stem() == AZ::IO::PathView(dynamicLibraryPath).Stem();
};
if (auto moduleIter = AZStd::find_if(gemModules.begin(), gemModules.end(), CompareDynamicModuleDescriptor);
moduleIter == gemModules.end())
@@ -95,6 +95,12 @@ namespace AZ::IO
constexpr int Compare(AZStd::string_view pathString) const noexcept;
constexpr int Compare(const value_type* pathString) const noexcept;
// Extension for fixed strings
//! extension: fixed string types with MaxPathLength capacity
//! Returns a new instance of an AZStd::fixed_string with capacity of MaxPathLength
//! made from the internal string
constexpr AZStd::fixed_string<MaxPathLength> FixedMaxPathString() const noexcept;
// decomposition
//! Given a windows path of "C:\O3DE\foo\bar\name.txt" and a posix path of
//! "/O3DE/foo/bar/name.txt"
@@ -915,6 +915,11 @@ namespace AZ::IO
return compare_string_view(path);
}
constexpr AZStd::fixed_string<MaxPathLength> PathView::FixedMaxPathString() const noexcept
{
return AZStd::fixed_string<MaxPathLength>(m_path.begin(), m_path.end());
}
// decomposition
constexpr auto PathView::RootName() const -> PathView
{
@@ -512,7 +512,7 @@ namespace AZ
// Load DLLs specified in the application descriptor
for (const auto& moduleDescriptor : modules)
{
// For each module that is loaded, attempt to set the module's folder as a path for dependent module resolution
// For each module that is loaded, attempt to set the module's folder as a path for dependent module resolution
moduleSearchPathHelper.SetModuleSearchPath(moduleDescriptor);
LoadModuleOutcome result = LoadDynamicModule(moduleDescriptor.m_dynamicLibraryPath.c_str(), lastStepToPerform, maintainReferences);
@@ -88,6 +88,35 @@ namespace AZ::Internal
m_enginePaths.emplace_back(EngineInfo{AZ::IO::FixedMaxPath{value}.LexicallyNormal(), {}});
}
AZ::SettingsRegistryInterface::VisitResponse Traverse(
[[maybe_unused]] AZStd::string_view path, AZStd::string_view valueName,
AZ::SettingsRegistryInterface::VisitAction action, AZ::SettingsRegistryInterface::Type type) override
{
auto response = AZ::SettingsRegistryInterface::VisitResponse::Continue;
if (action == AZ::SettingsRegistryInterface::VisitAction::Begin)
{
if (type == AZ::SettingsRegistryInterface::Type::Array)
{
if (valueName.compare("engines") != 0)
{
response = AZ::SettingsRegistryInterface::VisitResponse::Skip;
}
}
}
else if (action == AZ::SettingsRegistryInterface::VisitAction::Value)
{
if (type == AZ::SettingsRegistryInterface::Type::String)
{
if (valueName.compare("path") != 0)
{
response = AZ::SettingsRegistryInterface::VisitResponse::Skip;
}
}
}
return response;
}
AZStd::vector<EngineInfo> m_enginePaths{};
};
@@ -35,7 +35,8 @@ namespace AzFramework::AssetSystem::Platform
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
{
// Check for existence of one under a "bin" directory, i.e. engineRoot is an SDK structure.
assetProcessorPath = AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor";
assetProcessorPath =
AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_TRAIT_OS_PLATFORM_NAME / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor";
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
{
@@ -34,7 +34,8 @@ namespace AzFramework::AssetSystem::Platform
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
{
// Check for existence of one under a "bin" directory, i.e. engineRoot is an SDK structure.
assetProcessorPath = AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor.app";
assetProcessorPath =
AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_TRAIT_OS_PLATFORM_NAME / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor.app";
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
{
@@ -71,7 +71,8 @@ namespace AzFramework::AssetSystem::Platform
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
{
// Check for existence of one under a "bin" directory, i.e. engineRoot is an SDK structure.
assetProcessorPath = AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor.exe";
assetProcessorPath =
AZ::IO::FixedMaxPath{engineRoot} / "bin" / AZ_TRAIT_OS_PLATFORM_NAME / AZ_BUILD_CONFIGURATION_TYPE / "AssetProcessor.exe";
if (!AZ::IO::SystemFile::Exists(assetProcessorPath.c_str()))
{
+4 -3
View File
@@ -488,8 +488,8 @@ namespace O3DELauncher
const AZStd::string_view buildTargetName = GetBuildTargetName();
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddBuildSystemTargetSpecialization(*settingsRegistry, buildTargetName);
AZ_TracePrintf("Launcher", R"(Running project "%.*s.)" "\n"
R"(The project name value has been successfully set in the Settings Registry at key "%s/project_name)"
AZ_TracePrintf("Launcher", R"(Running project "%.*s")" "\n"
R"(The project name has been successfully set in the Settings Registry at key "%s/project_name")"
R"( for Launcher target "%.*s")" "\n",
aznumeric_cast<int>(launcherProjectName.size()), launcherProjectName.data(),
AZ::SettingsRegistryMergeUtils::ProjectSettingsRootKey,
@@ -643,7 +643,8 @@ namespace O3DELauncher
if (gEnv && gEnv->pConsole)
{
// Execute autoexec.cfg to load the initial level
AZ::Interface<AZ::IConsole>::Get()->ExecuteConfigFile("autoexec.cfg");
auto autoExecFile = AZ::IO::FixedMaxPath{pathToAssets} / "autoexec.cfg";
AZ::Interface<AZ::IConsole>::Get()->ExecuteConfigFile(autoExecFile.Native());
// Find out if console command file was passed
// via --console-command-file=%filename% and execute it
@@ -10,6 +10,11 @@
#
set(ICON_FILE ${project_real_path}/Gem/Resources/GameSDK.ico)
if(NOT EXISTS ${ICON_FILE})
# Try another project-relative path
set(ICON_FILE ${project_real_path}/Resources/GameSDK.ico)
endif()
if(NOT EXISTS ${ICON_FILE})
# Try the common LauncherUnified icon instead
set(ICON_FILE Resources/GameSDK.ico)
+4 -1
View File
@@ -129,6 +129,8 @@ ly_add_target(
3rdParty::AWSNativeSDK::Core
3rdParty::Qt::Network
Legacy::EditorCore
RUNTIME_DEPENDENCIES
Gem::AtomViewportDisplayInfo
)
ly_add_source_properties(
SOURCES CryEdit.cpp
@@ -244,7 +246,8 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
Legacy::CryCommon
AZ::AzToolsFramework
Legacy::EditorLib
Gem::LmbrCentral
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
)
ly_add_googletest(
NAME Legacy::EditorLib.Tests
-8
View File
@@ -1259,9 +1259,6 @@ CBaseObject* CRenderViewport::GetCameraObject() const
//////////////////////////////////////////////////////////////////////////
void CRenderViewport::OnEditorNotifyEvent(EEditorNotifyEvent event)
{
static ICVar* outputToHMD = gEnv->pConsole->GetCVar("output_to_hmd");
AZ_Assert(outputToHMD, "cvar output_to_hmd is undeclared");
switch (event)
{
case eNotify_OnBeginGameMode:
@@ -1282,7 +1279,6 @@ void CRenderViewport::OnEditorNotifyEvent(EEditorNotifyEvent event)
if (deviceInfo)
{
outputToHMD->Set(1);
m_previousContext = SetCurrentContext(deviceInfo->renderWidth, deviceInfo->renderHeight);
if (m_renderer->GetIStereoRenderer())
{
@@ -1313,10 +1309,6 @@ void CRenderViewport::OnEditorNotifyEvent(EEditorNotifyEvent event)
// failed to set the context back when done, or set it back to the wrong one.
CryWarning(VALIDATOR_MODULE_3DENGINE, VALIDATOR_WARNING, "RenderViewport render context was not correctly restored by someone else.");
}
if (gSettings.bEnableGameModeVR)
{
outputToHMD->Set(0);
}
RestorePreviousContext(m_previousContext);
m_bInRotateMode = false;
m_bInMoveMode = false;
@@ -35,10 +35,12 @@ ly_add_target(
AZ::AzToolsFramework
Legacy::CryCommon
Legacy::EditorLib
Gem::LmbrCentral
AZ::AtomCore
Gem::Atom_RPI.Public
Gem::AtomToolsFramework.Static
Gem::LmbrCentral.Editor
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
)
ly_add_dependencies(Editor ComponentEntityEditorPlugin)
@@ -68,7 +70,9 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
AZ::AzToolsFrameworkTestCommon
Legacy::CryCommon
Legacy::EditorLib
Gem::LmbrCentral
Gem::LmbrCentral.Editor
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
)
ly_add_googletest(
NAME Legacy::ComponentEntityEditorPlugin.Tests
@@ -14,6 +14,7 @@
#include "ProductAssetTreeItemData.h"
#include <AzCore/Component/TickBus.h>
#include <AzCore/IO/Path/Path.h>
#include <AzFramework/StringFunc/StringFunc.h>
namespace AssetProcessor
@@ -159,31 +160,33 @@ namespace AssetProcessor
return;
}
AZ::IO::Path productNamePath(product.m_productName, AZ::IO::PosixPathSeparator);
AZStd::vector<AZStd::string> tokens;
AzFramework::StringFunc::Tokenize(product.m_productName.c_str(), tokens, AZ_CORRECT_DATABASE_SEPARATOR, false, true);
if (tokens.empty())
if (productNamePath.empty())
{
AZ_Warning("AssetProcessor", false, "Product id %d has an invalid name: %s", product.m_productID, product.m_productName.c_str());
return;
}
AssetTreeItem* parentItem = m_root.get();
AZStd::string fullFolderName;
for (int i = 0; i < tokens.size() - 1; ++i)
AZ::IO::Path currentFullFolderPath;
const AZ::IO::PathView filename = productNamePath.Filename();
const AZ::IO::PathView fullPathWithoutFilename = productNamePath.RemoveFilename();
AZStd::fixed_string<AZ::IO::MaxPathLength> currentPath;
for (auto pathIt = fullPathWithoutFilename.begin(); pathIt != fullPathWithoutFilename.end(); ++pathIt)
{
AzFramework::StringFunc::AssetDatabasePath::Join(fullFolderName.c_str(), tokens[i].c_str(), fullFolderName);
AssetTreeItem* nextParent = parentItem->GetChildFolder(tokens[i].c_str());
currentPath = pathIt->FixedMaxPathString();
currentFullFolderPath /= currentPath;
AssetTreeItem* nextParent = parentItem->GetChildFolder(currentPath.c_str());
if (!nextParent)
{
if (!modelIsResetting)
{
QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem);
QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem);
beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount());
}
nextParent = parentItem->CreateChild(ProductAssetTreeItemData::MakeShared(nullptr, fullFolderName, tokens[i].c_str(), true, AZ::Uuid::CreateNull()));
m_productToTreeItem[fullFolderName] = nextParent;
nextParent = parentItem->CreateChild(ProductAssetTreeItemData::MakeShared(nullptr, currentFullFolderPath.Native(), currentPath.c_str(), true, AZ::Uuid::CreateNull()));
m_productToTreeItem[currentFullFolderPath.Native()] = nextParent;
// m_productIdToTreeItem is not used for folders, folders don't have product IDs.
if (!modelIsResetting)
@@ -205,12 +208,12 @@ namespace AssetProcessor
if (!modelIsResetting)
{
QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem);
QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem);
beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount());
}
AZStd::shared_ptr<ProductAssetTreeItemData> productItemData =
ProductAssetTreeItemData::MakeShared(&product, product.m_productName, tokens[tokens.size() - 1].c_str(), false, sourceId);
ProductAssetTreeItemData::MakeShared(&product, product.m_productName, AZStd::fixed_string<AZ::IO::MaxPathLength>(filename.Native()).c_str(), false, sourceId);
m_productToTreeItem[product.m_productName] =
parentItem->CreateChild(productItemData);
m_productIdToTreeItem[product.m_productID] = m_productToTreeItem[product.m_productName];
@@ -63,8 +63,7 @@ namespace AssetProcessor
}
auto fullPath = AZ::IO::Path(scanFolder.m_scanFolder) / source.m_sourceName;
AZ::IO::Path fullPath = AZ::IO::Path(scanFolder.m_scanFolder, AZ::IO::PosixPathSeparator) / source.m_sourceName;
// It's common for Open 3D Engine game projects and scan folders to be in a subfolder
// of the engine install. To improve readability of the source files, strip out
@@ -78,34 +77,35 @@ namespace AssetProcessor
AzFramework::StringFunc::Replace(fullPath.Native(), m_assetRoot.absolutePath().toUtf8(), "");
}
AZStd::vector<AZStd::string> tokens;
AzFramework::StringFunc::Tokenize(fullPath.c_str(), tokens, AZ_CORRECT_DATABASE_SEPARATOR, false, true);
if (tokens.empty())
if (fullPath.empty())
{
AZ_Warning("AssetProcessor", false, "Source id %s has an invalid name: %s",
source.m_sourceGuid.ToString<AZStd::string>().c_str(), source.m_sourceName.c_str());
AZ_Warning(
"AssetProcessor", false, "Source id %s has an invalid name: %s", source.m_sourceGuid.ToString<AZStd::string>().c_str(),
source.m_sourceName.c_str());
return;
}
QModelIndex newIndicesStart;
AssetTreeItem* parentItem = m_root.get();
AZStd::string fullFolderName;
for (int i = 0; i < tokens.size() - 1; ++i)
AZ::IO::Path currentFullFolderPath;
const AZ::IO::PathView filename = fullPath.Filename();
const AZ::IO::PathView fullPathWithoutFilename = fullPath.RemoveFilename();
AZStd::fixed_string<AZ::IO::MaxPathLength> currentPath;
for (auto pathIt = fullPathWithoutFilename.begin(); pathIt != fullPathWithoutFilename.end(); ++pathIt)
{
AzFramework::StringFunc::AssetDatabasePath::Join(fullFolderName.c_str(), tokens[i].c_str(), fullFolderName);
AssetTreeItem* nextParent = parentItem->GetChildFolder(tokens[i].c_str());
currentPath = pathIt->FixedMaxPathString();
currentFullFolderPath /= currentPath;
AssetTreeItem* nextParent = parentItem->GetChildFolder(currentPath.c_str());
if (!nextParent)
{
if (!modelIsResetting)
{
QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem);
QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem);
beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount());
}
nextParent = parentItem->CreateChild(SourceAssetTreeItemData::MakeShared(nullptr, nullptr, fullFolderName, tokens[i].c_str(), true));
m_sourceToTreeItem[fullFolderName] = nextParent;
nextParent = parentItem->CreateChild(SourceAssetTreeItemData::MakeShared(nullptr, nullptr, currentFullFolderPath.Native(), currentPath.c_str(), true));
m_sourceToTreeItem[currentFullFolderPath.Native()] = nextParent;
// Folders don't have source IDs, don't add to m_sourceIdToTreeItem
if (!modelIsResetting)
{
@@ -117,12 +117,12 @@ namespace AssetProcessor
if (!modelIsResetting)
{
QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem);
QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem);
beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount());
}
m_sourceToTreeItem[source.m_sourceName] =
parentItem->CreateChild(SourceAssetTreeItemData::MakeShared(&source, &scanFolder, source.m_sourceName, tokens[tokens.size() - 1].c_str(), false));
parentItem->CreateChild(SourceAssetTreeItemData::MakeShared(&source, &scanFolder, source.m_sourceName, AZStd::fixed_string<AZ::IO::MaxPathLength>(filename.Native()).c_str(), false));
m_sourceIdToTreeItem[source.m_sourceID] = m_sourceToTreeItem[source.m_sourceName];
if (!modelIsResetting)
{
-3
View File
@@ -37,11 +37,8 @@ ly_add_target(
PRIVATE
PY_PACKAGE="${python_package_name}"
INCLUDE_DIRECTORIES
PUBLIC
.
PRIVATE
Source
BUILD_DEPENDENCIES
PRIVATE
3rdParty::Qt::Core
@@ -25,7 +25,7 @@ namespace O3DE::ProjectManager
bool GemInfo::IsValid() const
{
return !m_path.isEmpty() && !m_uuid.IsNull();
return !m_name.isEmpty() && !m_path.isEmpty();
}
QString GemInfo::GetPlatformString(Platform platform)
@@ -64,7 +64,6 @@ namespace O3DE::ProjectManager
QString m_path;
QString m_name = "Unknown Gem Name";
QString m_displayName = "Unknown Gem Name";
AZ::Uuid m_uuid;
QString m_creator = "Unknown Creator";
GemOrigin m_gemOrigin = Local;
bool m_isAdded = false; //! Is the gem currently added and enabled in the project?
@@ -33,8 +33,6 @@ namespace O3DE::ProjectManager
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
item->setData(gemInfo.m_name, RoleName);
const QString uuidString = gemInfo.m_uuid.ToString<AZStd::string>().c_str();
item->setData(uuidString, RoleUuid);
item->setData(gemInfo.m_creator, RoleCreator);
item->setData(gemInfo.m_gemOrigin, RoleGemOrigin);
item->setData(aznumeric_cast<int>(gemInfo.m_platforms), RolePlatforms);
@@ -53,7 +51,7 @@ namespace O3DE::ProjectManager
appendRow(item);
const QModelIndex modelIndex = index(rowCount()-1, 0);
m_uuidToIndexMap[uuidString] = modelIndex;
m_nameToIndexMap[gemInfo.m_name] = modelIndex;
}
void GemModel::Clear()
@@ -76,11 +74,6 @@ namespace O3DE::ProjectManager
return static_cast<GemInfo::GemOrigin>(modelIndex.data(RoleGemOrigin).toInt());
}
QString GemModel::GetUuidString(const QModelIndex& modelIndex)
{
return modelIndex.data(RoleUuid).toString();
}
GemInfo::Platforms GemModel::GetPlatforms(const QModelIndex& modelIndex)
{
return static_cast<GemInfo::Platforms>(modelIndex.data(RolePlatforms).toInt());
@@ -111,10 +104,10 @@ namespace O3DE::ProjectManager
return modelIndex.data(RoleDocLink).toString();
}
QModelIndex GemModel::FindIndexByUuidString(const QString& uuidString) const
QModelIndex GemModel::FindIndexByNameString(const QString& nameString) const
{
const auto iterator = m_uuidToIndexMap.find(uuidString);
if (iterator != m_uuidToIndexMap.end())
const auto iterator = m_nameToIndexMap.find(nameString);
if (iterator != m_nameToIndexMap.end())
{
return iterator.value();
}
@@ -122,11 +115,11 @@ namespace O3DE::ProjectManager
return {};
}
void GemModel::FindGemNamesByUuidStrings(QStringList& inOutGemNames)
void GemModel::FindGemNamesByNameStrings(QStringList& inOutGemNames)
{
for (QString& dependingGemString : inOutGemNames)
{
QModelIndex modelIndex = FindIndexByUuidString(dependingGemString);
QModelIndex modelIndex = FindIndexByNameString(dependingGemString);
if (modelIndex.isValid())
{
dependingGemString = GetName(modelIndex);
@@ -147,7 +140,7 @@ namespace O3DE::ProjectManager
return {};
}
FindGemNamesByUuidStrings(result);
FindGemNamesByNameStrings(result);
return result;
}
@@ -164,7 +157,7 @@ namespace O3DE::ProjectManager
return {};
}
FindGemNamesByUuidStrings(result);
FindGemNamesByNameStrings(result);
return result;
}
@@ -33,8 +33,8 @@ namespace O3DE::ProjectManager
void AddGem(const GemInfo& gemInfo);
void Clear();
QModelIndex FindIndexByUuidString(const QString& uuidString) const;
void FindGemNamesByUuidStrings(QStringList& inOutGemNames);
QModelIndex FindIndexByNameString(const QString& nameString) const;
void FindGemNamesByNameStrings(QStringList& inOutGemNames);
QStringList GetDependingGemUuids(const QModelIndex& modelIndex);
QStringList GetDependingGemNames(const QModelIndex& modelIndex);
QStringList GetConflictingGemUuids(const QModelIndex& modelIndex);
@@ -43,7 +43,6 @@ namespace O3DE::ProjectManager
static QString GetName(const QModelIndex& modelIndex);
static QString GetCreator(const QModelIndex& modelIndex);
static GemInfo::GemOrigin GetGemOrigin(const QModelIndex& modelIndex);
static QString GetUuidString(const QModelIndex& modelIndex);
static GemInfo::Platforms GetPlatforms(const QModelIndex& modelIndex);
static GemInfo::Types GetTypes(const QModelIndex& modelIndex);
static QString GetSummary(const QModelIndex& modelIndex);
@@ -59,7 +58,6 @@ namespace O3DE::ProjectManager
enum UserRole
{
RoleName = Qt::UserRole,
RoleUuid,
RoleCreator,
RoleGemOrigin,
RolePlatforms,
@@ -76,7 +74,7 @@ namespace O3DE::ProjectManager
RoleTypes
};
QHash<QString, QModelIndex> m_uuidToIndexMap;
QHash<QString, QModelIndex> m_nameToIndexMap;
QItemSelectionModel* m_selectionModel = nullptr;
};
} // namespace O3DE::ProjectManager
@@ -220,7 +220,7 @@ namespace RedirectOutput
}
} // namespace RedirectOutput
namespace O3DE::ProjectManager
namespace O3DE::ProjectManager
{
PythonBindings::PythonBindings(const AZ::IO::PathView& enginePath)
: m_enginePath(enginePath)
@@ -283,8 +283,11 @@ namespace O3DE::ProjectManager
AZ_Warning("ProjectManagerWindow", result != -1, "Append to sys path failed");
// import required modules
m_registration = pybind11::module::import("cmake.Tools.registration");
m_engineTemplate = pybind11::module::import("cmake.Tools.engine_template");
m_register = pybind11::module::import("o3de.register");
m_manifest = pybind11::module::import("o3de.manifest");
m_engineTemplate = pybind11::module::import("o3de.engine_template");
m_enableGemProject = pybind11::module::import("o3de.enable_gem");
m_disableGemProject = pybind11::module::import("o3de.disable_gem");
return result == 0 && !PyErr_Occurred();
} catch ([[maybe_unused]] const std::exception& e)
@@ -326,30 +329,30 @@ namespace O3DE::ProjectManager
}
}
AZ::Outcome<EngineInfo> PythonBindings::GetEngineInfo()
AZ::Outcome<EngineInfo> PythonBindings::GetEngineInfo()
{
EngineInfo engineInfo;
bool result = ExecuteWithLock([&] {
pybind11::str enginePath = m_registration.attr("get_this_engine_path")();
pybind11::str enginePath = m_manifest.attr("get_this_engine_path")();
auto o3deData = m_registration.attr("load_o3de_manifest")();
auto o3deData = m_manifest.attr("load_o3de_manifest")();
if (pybind11::isinstance<pybind11::dict>(o3deData))
{
engineInfo.m_path = Py_To_String(enginePath);
engineInfo.m_defaultGemsFolder = Py_To_String(o3deData["default_gems_folder"]);
engineInfo.m_defaultProjectsFolder = Py_To_String(o3deData["default_projects_folder"]);
engineInfo.m_defaultRestrictedFolder = Py_To_String(o3deData["default_restricted_folder"]);
engineInfo.m_defaultTemplatesFolder = Py_To_String(o3deData["default_templates_folder"]);
engineInfo.m_thirdPartyPath = Py_To_String_Optional(o3deData,"third_party_path","");
engineInfo.m_path = Py_To_String(enginePath);
engineInfo.m_defaultGemsFolder = Py_To_String(o3deData["default_gems_folder"]);
engineInfo.m_defaultProjectsFolder = Py_To_String(o3deData["default_projects_folder"]);
engineInfo.m_defaultRestrictedFolder = Py_To_String(o3deData["default_restricted_folder"]);
engineInfo.m_defaultTemplatesFolder = Py_To_String(o3deData["default_templates_folder"]);
engineInfo.m_thirdPartyPath = Py_To_String_Optional(o3deData,"third_party_path","");
}
auto engineData = m_registration.attr("get_engine_data")(pybind11::none(), enginePath);
auto engineData = m_manifest.attr("get_engine_json_data")(pybind11::none(), enginePath);
if (pybind11::isinstance<pybind11::dict>(engineData))
{
try
{
engineInfo.m_version = Py_To_String_Optional(engineData,"O3DEVersion","0.0.0.0");
engineInfo.m_name = Py_To_String_Optional(engineData,"engine_name","O3DE");
engineInfo.m_version = Py_To_String_Optional(engineData,"O3DEVersion","0.0.0.0");
engineInfo.m_name = Py_To_String_Optional(engineData,"engine_name","O3DE");
}
catch ([[maybe_unused]] const std::exception& e)
{
@@ -364,13 +367,13 @@ namespace O3DE::ProjectManager
}
else
{
return AZ::Success(AZStd::move(engineInfo));
return AZ::Success(AZStd::move(engineInfo));
}
return AZ::Failure();
}
bool PythonBindings::SetEngineInfo(const EngineInfo& engineInfo)
bool PythonBindings::SetEngineInfo(const EngineInfo& engineInfo)
{
bool result = ExecuteWithLock([&] {
pybind11::str enginePath = engineInfo.m_path.toStdString();
@@ -378,17 +381,18 @@ namespace O3DE::ProjectManager
pybind11::str defaultGemsFolder = engineInfo.m_defaultGemsFolder.toStdString();
pybind11::str defaultTemplatesFolder = engineInfo.m_defaultTemplatesFolder.toStdString();
auto registrationResult = m_registration.attr("register")(
enginePath, // engine_path
pybind11::none(), // project_path
pybind11::none(), // gem_path
pybind11::none(), // template_path
pybind11::none(), // restricted_path
pybind11::none(), // repo_uri
pybind11::none(), // default_engines_folder
auto registrationResult = m_register.attr("register")(
enginePath, // engine_path
pybind11::none(), // project_path
pybind11::none(), // gem_path
pybind11::none(), // external_subdir_path
pybind11::none(), // template_path
pybind11::none(), // restricted_path
pybind11::none(), // repo_uri
pybind11::none(), // default_engines_folder
defaultProjectsFolder,
defaultGemsFolder,
defaultTemplatesFolder
defaultGemsFolder,
defaultTemplatesFolder
);
if (registrationResult.cast<int>() != 0)
@@ -396,13 +400,13 @@ namespace O3DE::ProjectManager
result = false;
}
auto manifest = m_registration.attr("load_o3de_manifest")();
auto manifest = m_manifest.attr("load_o3de_manifest")();
if (pybind11::isinstance<pybind11::dict>(manifest))
{
try
{
manifest["third_party_path"] = engineInfo.m_thirdPartyPath.toStdString();
m_registration.attr("save_o3de_manifest")(manifest);
m_manifest.attr("save_o3de_manifest")(manifest);
}
catch ([[maybe_unused]] const std::exception& e)
{
@@ -415,12 +419,12 @@ namespace O3DE::ProjectManager
return result;
}
AZ::Outcome<GemInfo> PythonBindings::GetGem(const QString& path)
AZ::Outcome<GemInfo> PythonBindings::GetGem(const QString& path)
{
GemInfo gemInfo = GemInfoFromPath(pybind11::str(path.toStdString()));
if (gemInfo.IsValid())
{
return AZ::Success(AZStd::move(gemInfo));
return AZ::Success(AZStd::move(gemInfo));
}
else
{
@@ -428,19 +432,19 @@ namespace O3DE::ProjectManager
}
}
AZ::Outcome<QVector<GemInfo>> PythonBindings::GetGems()
AZ::Outcome<QVector<GemInfo>> PythonBindings::GetGems()
{
QVector<GemInfo> gems;
bool result = ExecuteWithLock([&] {
// external gems
for (auto path : m_registration.attr("get_gems")())
// external gems
for (auto path : m_manifest.attr("get_gems")())
{
gems.push_back(GemInfoFromPath(path));
}
// gems from the engine
for (auto path : m_registration.attr("get_engine_gems")())
// gems from the engine
for (auto path : m_manifest.attr("get_engine_gems")())
{
gems.push_back(GemInfoFromPath(path));
}
@@ -452,7 +456,7 @@ namespace O3DE::ProjectManager
}
else
{
return AZ::Success(AZStd::move(gems));
return AZ::Success(AZStd::move(gems));
}
}
@@ -463,7 +467,7 @@ namespace O3DE::ProjectManager
[&]
{
pybind11::str projectPath = path.toStdString();
auto pythonRegistrationResult = m_registration.attr("register")(pybind11::none(), projectPath);
auto pythonRegistrationResult = m_register.attr("register")(pybind11::none(), projectPath);
// Returns an exit code so boolify it then invert result
registrationResult = !pythonRegistrationResult.cast<bool>();
@@ -479,19 +483,23 @@ namespace O3DE::ProjectManager
[&]
{
pybind11::str projectPath = path.toStdString();
auto pythonRegistrationResult = m_registration.attr("register")(
auto pythonRegistrationResult = m_register.attr("register")(
pybind11::none(), // engine_path
projectPath, // project_path
pybind11::none(), // gem_path
pybind11::none(), // external_subdir_path
pybind11::none(), // template_path
pybind11::none(), // restricted_path
pybind11::none(), // repo_uri
pybind11::none(), // default_engines_folder
pybind11::none(), // default_projects_folder
pybind11::none(), // default_gems_folder
pybind11::none(), // default_templates_folder
pybind11::none(), // default_restricted_folder
pybind11::none(), // default_restricted_folder
true // remove
pybind11::none(), // external_subdir_engine_path
pybind11::none(), // external_subdir_project_path
true, // remove
false // force
);
// Returns an exit code so boolify it then invert result
@@ -501,7 +509,7 @@ namespace O3DE::ProjectManager
return result && registrationResult;
}
AZ::Outcome<ProjectInfo> PythonBindings::CreateProject(const QString& projectTemplatePath, const ProjectInfo& projectInfo)
AZ::Outcome<ProjectInfo> PythonBindings::CreateProject(const QString& projectTemplatePath, const ProjectInfo& projectInfo)
{
ProjectInfo createdProjectInfo;
bool result = ExecuteWithLock([&] {
@@ -521,16 +529,16 @@ namespace O3DE::ProjectManager
}
else
{
return AZ::Success(AZStd::move(createdProjectInfo));
return AZ::Success(AZStd::move(createdProjectInfo));
}
}
AZ::Outcome<ProjectInfo> PythonBindings::GetProject(const QString& path)
AZ::Outcome<ProjectInfo> PythonBindings::GetProject(const QString& path)
{
ProjectInfo projectInfo = ProjectInfoFromPath(pybind11::str(path.toStdString()));
if (projectInfo.IsValid())
{
return AZ::Success(AZStd::move(projectInfo));
return AZ::Success(AZStd::move(projectInfo));
}
else
{
@@ -541,30 +549,21 @@ namespace O3DE::ProjectManager
GemInfo PythonBindings::GemInfoFromPath(pybind11::handle path)
{
GemInfo gemInfo;
gemInfo.m_path = Py_To_String(path);
gemInfo.m_path = Py_To_String(path);
auto data = m_registration.attr("get_gem_data")(pybind11::none(), path);
auto data = m_manifest.attr("get_gem_json_data")(pybind11::none(), path);
if (pybind11::isinstance<pybind11::dict>(data))
{
try
{
// required
gemInfo.m_name = Py_To_String(data["Name"]);
gemInfo.m_uuid = AZ::Uuid(Py_To_String(data["Uuid"]));
gemInfo.m_name = Py_To_String(data["gem_name"]);
// optional
gemInfo.m_displayName = Py_To_String_Optional(data, "DisplayName", gemInfo.m_name);
gemInfo.m_summary = Py_To_String_Optional(data, "Summary", "");
gemInfo.m_version = Py_To_String_Optional(data, "Version", "");
gemInfo.m_displayName = Py_To_String_Optional(data, "DisplayName", gemInfo.m_name);
gemInfo.m_summary = Py_To_String_Optional(data, "Summary", "");
gemInfo.m_version = Py_To_String_Optional(data, "Version", "");
if (data.contains("Dependencies"))
{
for (auto dependency : data["Dependencies"])
{
const AZ::Uuid uuid = Py_To_String(dependency["Uuid"]);
gemInfo.m_dependingGemUuids.push_back(uuid.ToString<AZStd::string>().c_str());
}
}
if (data.contains("Tags"))
{
for (auto tag : data["Tags"])
@@ -588,13 +587,13 @@ namespace O3DE::ProjectManager
projectInfo.m_path = Py_To_String(path);
projectInfo.m_isNew = false;
auto projectData = m_registration.attr("get_project_data")(pybind11::none(), path);
auto projectData = m_manifest.attr("get_project_json_data")(pybind11::none(), path);
if (pybind11::isinstance<pybind11::dict>(projectData))
{
try
{
projectInfo.m_projectName = Py_To_String(projectData["project_name"]);
projectInfo.m_displayName = Py_To_String_Optional(projectData,"display_name", projectInfo.m_projectName);
projectInfo.m_projectName = Py_To_String(projectData["project_name"]);
projectInfo.m_displayName = Py_To_String_Optional(projectData,"display_name", projectInfo.m_projectName);
}
catch ([[maybe_unused]] const std::exception& e)
{
@@ -605,19 +604,19 @@ namespace O3DE::ProjectManager
return projectInfo;
}
AZ::Outcome<QVector<ProjectInfo>> PythonBindings::GetProjects()
AZ::Outcome<QVector<ProjectInfo>> PythonBindings::GetProjects()
{
QVector<ProjectInfo> projects;
bool result = ExecuteWithLock([&] {
// external projects
for (auto path : m_registration.attr("get_projects")())
// external projects
for (auto path : m_manifest.attr("get_projects")())
{
projects.push_back(ProjectInfoFromPath(path));
}
// projects from the engine
for (auto path : m_registration.attr("get_engine_projects")())
// projects from the engine
for (auto path : m_manifest.attr("get_engine_projects")())
{
projects.push_back(ProjectInfoFromPath(path));
}
@@ -629,7 +628,7 @@ namespace O3DE::ProjectManager
}
else
{
return AZ::Success(AZStd::move(projects));
return AZ::Success(AZStd::move(projects));
}
}
@@ -639,10 +638,9 @@ namespace O3DE::ProjectManager
pybind11::str pyGemPath = gemPath.toStdString();
pybind11::str pyProjectPath = projectPath.toStdString();
m_registration.attr("add_gem_to_project")(
m_enableGemProject.attr("enable_gem_in_project")(
pybind11::none(), // gem_name
pyGemPath,
pybind11::none(), // gem_target
pybind11::none(), // project_name
pyProjectPath
);
@@ -657,10 +655,9 @@ namespace O3DE::ProjectManager
pybind11::str pyGemPath = gemPath.toStdString();
pybind11::str pyProjectPath = projectPath.toStdString();
m_registration.attr("remove_gem_to_project")(
m_disableGemProject.attr("disable_gem_in_project")(
pybind11::none(), // gem_name
pyGemPath,
pybind11::none(), // gem_target
pybind11::none(), // project_name
pyProjectPath
);
@@ -669,7 +666,7 @@ namespace O3DE::ProjectManager
return result;
}
bool PythonBindings::UpdateProject([[maybe_unused]] const ProjectInfo& projectInfo)
bool PythonBindings::UpdateProject([[maybe_unused]] const ProjectInfo& projectInfo)
{
return false;
}
@@ -677,18 +674,18 @@ namespace O3DE::ProjectManager
ProjectTemplateInfo PythonBindings::ProjectTemplateInfoFromPath(pybind11::handle path)
{
ProjectTemplateInfo templateInfo;
templateInfo.m_path = Py_To_String(path);
templateInfo.m_path = Py_To_String(path);
auto data = m_registration.attr("get_template_data")(pybind11::none(), path);
auto data = m_manifest.attr("get_template_json_data")(pybind11::none(), path);
if (pybind11::isinstance<pybind11::dict>(data))
{
try
{
// required
templateInfo.m_displayName = Py_To_String(data["display_name"]);
templateInfo.m_name = Py_To_String(data["template_name"]);
templateInfo.m_summary = Py_To_String(data["summary"]);
templateInfo.m_displayName = Py_To_String(data["display_name"]);
templateInfo.m_name = Py_To_String(data["template_name"]);
templateInfo.m_summary = Py_To_String(data["summary"]);
// optional
if (data.contains("canonical_tags"))
{
@@ -714,12 +711,12 @@ namespace O3DE::ProjectManager
return templateInfo;
}
AZ::Outcome<QVector<ProjectTemplateInfo>> PythonBindings::GetProjectTemplates()
AZ::Outcome<QVector<ProjectTemplateInfo>> PythonBindings::GetProjectTemplates()
{
QVector<ProjectTemplateInfo> templates;
bool result = ExecuteWithLock([&] {
for (auto path : m_registration.attr("get_project_templates")())
for (auto path : m_manifest.attr("get_project_templates")())
{
templates.push_back(ProjectTemplateInfoFromPath(path));
}
@@ -731,7 +728,7 @@ namespace O3DE::ProjectManager
}
else
{
return AZ::Success(AZStd::move(templates));
return AZ::Success(AZStd::move(templates));
}
}
}
@@ -12,7 +12,7 @@
#pragma once
#include <PythonBindingsInterface.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/std/parallel/semaphore.h>
// Qt defines slots, which interferes with the use here.
@@ -25,7 +25,7 @@
namespace O3DE::ProjectManager
{
class PythonBindings
class PythonBindings
: public PythonBindingsInterface::Registrar
{
public:
@@ -68,6 +68,9 @@ namespace O3DE::ProjectManager
AZ::IO::FixedMaxPath m_enginePath;
pybind11::handle m_engineTemplate;
AZStd::recursive_mutex m_lock;
pybind11::handle m_registration;
pybind11::handle m_register;
pybind11::handle m_manifest;
pybind11::handle m_enableGemProject;
pybind11::handle m_disableGemProject;
};
}
+16 -3
View File
@@ -29,6 +29,9 @@ ly_add_target(
Gem::HttpRequestor
3rdParty::AWSNativeSDK::AWSClientAuth
3rdParty::AWSNativeSDK::Core
RUNTIME_DEPENDENCIES
Gem::AWSCore
Gem::HttpRequestor
)
ly_add_target(
@@ -44,13 +47,19 @@ ly_add_target(
AZ::AzCore
AZ::AzFramework
Gem::AWSCore
Gem::HttpRequestor
3rdParty::AWSNativeSDK::AWSClientAuth
3rdParty::AWSNativeSDK::Core
PUBLIC
Gem::AWSClientAuth.Static
RUNTIME_DEPENDENCIES
Gem::AWSCore
Gem::HttpRequestor
)
# servers and clients use the above module.
ly_create_alias(NAME AWSClientAuth.Servers NAMESPACE Gem TARGETS Gem::AWSClientAuth)
ly_create_alias(NAME AWSClientAuth.Clients NAMESPACE Gem TARGETS Gem::AWSClientAuth)
################################################################################
# Tests
################################################################################
@@ -71,10 +80,14 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
3rdParty::AWSNativeSDK::AWSClientAuth
AZ::AzCore
AZ::AzFramework
Gem::AWSCore
Gem::AWSClientAuth.Static
AZ::AWSNativeSDKInit
Gem::AWSClientAuth.Static
Gem::AWSCore
Gem::HttpRequestor
RUNTIME_DEPENDENCIES
Gem::AWSCore
AZ::AWSNativeSDKInit
Gem::HttpRequestor
)
ly_add_googletest(
NAME Gem::AWSClientAuth.Tests
+9
View File
@@ -45,6 +45,10 @@ ly_add_target(
Gem::AWSCore.Static
)
# clients and servers will use the above Gem::AWSCore module.
ly_create_alias(NAME AWSCore.Servers NAMESPACE Gem TARGETS Gem::AWSCore)
ly_create_alias(NAME AWSCore.Clients NAMESPACE Gem TARGETS Gem::AWSCore)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME AWSCore.Editor.Static STATIC
@@ -99,6 +103,11 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::AWSCore.Editor.Static
)
ly_add_dependencies(AWSCore.Editor AWSCore.ResourceMappingTool)
# Builders and Tools (such as the Editor use AWSCore.Editor) use the .Editor module above.
ly_create_alias(NAME AWSCore.Tools NAMESPACE Gem TARGETS Gem::AWSCore.Editor)
ly_create_alias(NAME AWSCore.Builders NAMESPACE Gem TARGETS Gem::AWSCore.Editor)
endif()
################################################################################
+9 -2
View File
@@ -23,6 +23,7 @@ ly_add_target(
PRIVATE
AZ::AzCore
AZ::AzFramework
PUBLIC
Gem::AWSCore
)
@@ -40,10 +41,15 @@ ly_add_target(
PRIVATE
AZ::AzCore
AZ::AzFramework
Gem::AWSCore
Gem::AWSMetrics.Static
RUNTIME_DEPENDENCIES
Gem::AWSCore
)
# Servers and Clients use the above metrics module
ly_create_alias(NAME AWSMetrics.Servers NAMESPACE Gem TARGETS Gem::AWSMetrics)
ly_create_alias(NAME AWSMetrics.Clients NAMESPACE Gem TARGETS Gem::AWSMetrics)
################################################################################
# Tests
################################################################################
@@ -63,8 +69,9 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
AZ::AzTest
AZ::AzCore
AZ::AzFramework
Gem::AWSCore
Gem::AWSMetrics.Static
RUNTIME_DEPENDENCIES
Gem::AWSCore
)
ly_add_googletest(
NAME Gem::AWSMetrics.Tests
+3
View File
@@ -44,3 +44,6 @@ ly_add_target(
PRIVATE
Gem::Achievements.Static
)
# we'll load the above "Gem::Achievements" module in clients only.
ly_create_alias(NAME Achievements.Clients NAMESPACE Gem TARGETS Gem::Achievements)
@@ -43,6 +43,10 @@ ly_add_target(
Gem::ImGui
)
# AssetMemoryAnalyzer is available in clients and servers.
ly_create_alias(NAME AssetMemoryAnalyzer.Clients NAMESPACE Gem TARGETS Gem::AssetMemoryAnalyzer)
ly_create_alias(NAME AssetMemoryAnalyzer.Servers NAMESPACE Gem TARGETS Gem::AssetMemoryAnalyzer)
################################################################################
# Tests
################################################################################
@@ -65,3 +69,4 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
NAME Gem::AssetMemoryAnalyzer.Tests
)
endif()
+5
View File
@@ -65,3 +65,8 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
NAME Gem::AssetValidation.Tests
)
endif()
# AssetValidation should be active in all clients plus tools
ly_create_alias(NAME AssetValidation.Clients NAMESPACE Gem TARGETS Gem::AssetValidation)
ly_create_alias(NAME AssetValidation.Tools NAMESPACE Gem TARGETS Gem::AssetValidation)
@@ -0,0 +1,10 @@
{
"gem_name": "ImageProcessingAtom",
"display_name": "Atom Image Processing",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "AtomShader",
"display_name": "Atom Shader Builder",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_Bootstrap",
"display_name": "Atom Bootstrap",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_Component_DebugCamera",
"display_name": "Atom Debug Camera Component",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_Feature_Common",
"display_name": "Atom Feature Common",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_RHI_DX12",
"display_name": "Atom RHI DX12",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_RHI_Metal",
"display_name": "Atom RHI Metal",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_RHI_Null",
"display_name": "Atom RHI Null",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_RHI_Vulkan",
"display_name": "Atom RHI Vulkan",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_RHI",
"display_name": "Atom RHI",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_RPI",
"display_name": "Atom API",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -0,0 +1,10 @@
{
"gem_name": "AtomToolsFramework",
"display_name": "Atom Tools Framework",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+3 -1
View File
@@ -1,3 +1,5 @@
{
"gem_name": "Atom"
"gem_name": "Atom",
"display_name": "Atom",
"summary": "Next-Gen Rendering Package for the O3DE engine"
}
+14
View File
@@ -0,0 +1,14 @@
{
"gem_name": "AtomContent",
"origin": "The primary repo for Atom goes here: i.e. http://www.mydomain.com",
"license": "What license Atom uses goes here: i.e. https://opensource.org/licenses/MIT",
"display_name": "Atom Content",
"summary": "ontains multiple packages containing source Assets that can be used with Atom",
"canonical_tags": [
"Gem"
],
"user_tags": [
"AtomConent"
],
"icon_path": "preview.png"
}
@@ -66,6 +66,10 @@ ly_add_target(
Gem::AtomViewportDisplayInfo
)
# Any 'runtime-like' applications should use Gem::Atom_AtomBridge:
ly_create_alias(NAME Atom_AtomBridge.Clients NAMESPACE Gem TARGETS Gem::Atom_AtomBridge)
ly_create_alias(NAME Atom_AtomBridge.Servers NAMESPACE Gem TARGETS Gem::Atom_AtomBridge)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME Atom_AtomBridge.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
@@ -108,4 +112,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::AtomViewportDisplayInfo
Gem::AtomViewportDisplayIcons.Editor
)
# Any 'tool' and 'builder' type applications should use Gem::Atom_AtomBridge.Editor:
ly_create_alias(NAME Atom_AtomBridge.Builders NAMESPACE Gem TARGETS Gem::Atom_AtomBridge.Editor)
ly_create_alias(NAME Atom_AtomBridge.Tools NAMESPACE Gem TARGETS Gem::Atom_AtomBridge.Editor)
endif()
@@ -0,0 +1,10 @@
{
"gem_name": "Atom_AtomBridge",
"display_name": "Atom Bridge",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "AtomFont",
"display_name": "Atom Font",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -0,0 +1,10 @@
{
"gem_name": "AtomImGuiTools",
"display_name": "Atom ImGui",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -0,0 +1,10 @@
{
"gem_name": "AtomViewportDisplayIcons",
"display_name": "Atom Viewport Display Icons",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -303,7 +303,10 @@ namespace AZ::Render
lastTime = time;
}
const double averageFPS = aznumeric_cast<double>(m_fpsHistory.size()) / actualInterval.count();
const double averageFPS = (actualInterval.count() != 0.0)
? aznumeric_cast<double>(m_fpsHistory.size()) / actualInterval.count()
: 0.0;
const double frameIntervalSeconds = m_fpsInterval.count();
DrawLine(
@@ -0,0 +1,10 @@
{
"gem_name": "AtomViewportDisplayInfo",
"display_name": "Atom Viewport Display Info",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -0,0 +1,10 @@
{
"gem_name": "CommonFeaturesAtom",
"display_name": "Common Features Atom",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -43,6 +43,8 @@ ly_add_target(
PRIVATE
AZ::AzCore
Gem::EMotionFX_Atom.Static
RUNTIME_DEPENDENCIES
Gem::EMotionFX
)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
@@ -0,0 +1,10 @@
{
"gem_name": "EMotionFX_Atom",
"display_name": "EMotionFX Atom",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"gem_name": "ImguiAtom",
"display_name": "Imgui Atom",
"summary": "",
"canonical_tags": [
"Gem"
],
"user_tags": [
]
}
@@ -1,17 +1,14 @@
{
"gem_name": "Atom_DccScriptingInterface",
"GemFormatVersion": 4,
"Uuid": "7bf5a77dacd8438bb4966a66b5a678d8",
"Name": "Atom_DccScriptingInterface",
"DisplayName": "Atom DccScriptingInterface (DCCsi)",
"Version": "0.1.0",
"Summary": "A python framework for working with various DCC tools and workflows.",
"Tags": ["DCC","Digital","Content","Creation"],
"IconPath": "preview.png",
"Modules": [
{
"Name": "Editor",
"Type": "EditorModule"
}
"gem_name": "DccScriptingInterface",
"display_name": "Atom DccScriptingInterface (DCCsi)",
"summary": "A python framework for working with various DCC tools and workflows.",
"canonical_tags": [
"Gem"
],
"user_tags": [
"DCC",
"Digital",
"Content",
"Creation"
]
}
+3 -1
View File
@@ -1,3 +1,5 @@
{
"gem_name": "AtomLyIntegration"
"gem_name": "AtomLyIntegration",
"display_name": "Atom O3DE Integration",
"summary": "Collection of module targets for integrating Atom with the O3DE engine"
}
@@ -93,6 +93,9 @@ ly_add_target(
Gem::AudioEngineWwise.Static
)
# we'll load the above "Gem::AudioEngineWwise" module in clients.
ly_create_alias(NAME AudioEngineWwise.Clients NAMESPACE Gem TARGETS Gem::AudioEngineWwise)
################################################################################
# Tests
################################################################################
@@ -206,6 +209,8 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
AZ::AssetBuilderSDK
Gem::AudioEngineWwise.Static
Gem::AudioSystem.Editor
RUNTIME_DEPENDENCIES
Gem::AudioSystem.Editor
)
ly_add_target(
@@ -230,6 +235,10 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::AudioSystem.Editor
)
# by default, we'll load the above "Gem::AudioEngineWwise.Editor" module in builders and tools.
ly_create_alias(NAME AudioEngineWwise.Builders NAMESPACE Gem TARGETS Gem::AudioEngineWwise.Editor)
ly_create_alias(NAME AudioEngineWwise.Tools NAMESPACE Gem TARGETS Gem::AudioEngineWwise.Editor)
if (PAL_TRAIT_BUILD_TESTS_SUPPORTED)
ly_add_target(
NAME AudioEngineWwise.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+11 -17
View File
@@ -61,22 +61,8 @@ ly_add_target(
Gem::AudioSystem.Static
)
################################################################################
# Server
################################################################################
if (PAL_TRAIT_BUILD_SERVER_SUPPORTED)
# Stub gem for server. Audio system is client only
ly_add_target(
NAME AudioSystem.Server GEM_MODULE
NAMESPACE Gem
FILES_CMAKE
audiosystem_stub_files.cmake
BUILD_DEPENDENCIES
PRIVATE
AZ::AzCore
)
endif ()
# AudioSystem should use the above target on clients.
ly_create_alias(NAME AudioSystem.Clients NAMESPACE Gem TARGETS Gem::AudioSystem)
################################################################################
# Tests
@@ -101,7 +87,8 @@ if (PAL_TRAIT_BUILD_TESTS_SUPPORTED)
AZ::AzFramework
Legacy::CryCommon
Gem::AudioSystem.Static
Gem::LmbrCentral
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
)
ly_add_googletest(
NAME Gem::AudioSystem.Tests
@@ -230,6 +217,10 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::AudioSystem.Editor.Static
)
# use the above "Editor" target in tools and builders:
ly_create_alias(NAME AudioSystem.Tools NAMESPACE Gem TARGETS Gem::AudioSystem.Editor)
ly_create_alias(NAME AudioSystem.Builders NAMESPACE Gem TARGETS Gem::AudioSystem.Editor)
if (PAL_TRAIT_BUILD_TESTS_SUPPORTED)
ly_add_target(
NAME AudioSystem.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
@@ -253,3 +244,6 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
)
endif()
endif ()
@@ -42,3 +42,7 @@ ly_add_target(
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
)
# servers and clients use the above module.
ly_create_alias(NAME AutomatedLauncherTesting.Servers NAMESPACE Gem TARGETS Gem::AutomatedLauncherTesting)
ly_create_alias(NAME AutomatedLauncherTesting.Clients NAMESPACE Gem TARGETS Gem::AutomatedLauncherTesting)
+8
View File
@@ -59,6 +59,11 @@ ly_add_target(
Gem::PhysX
)
# clients and servers use the above Gem module.
ly_create_alias(NAME Blast.Servers NAMESPACE Gem TARGETS Gem::Blast)
ly_create_alias(NAME Blast.Clients NAMESPACE Gem TARGETS Gem::Blast)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
@@ -110,6 +115,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::PhysX.Editor
)
# tools and builders use the above module.
ly_create_alias(NAME Blast.Tools NAMESPACE Gem TARGETS Gem::Blast.Editor)
ly_create_alias(NAME Blast.Builders NAMESPACE Gem TARGETS Gem::Blast.Editor)
endif()
################################################################################
+7
View File
@@ -39,6 +39,10 @@ ly_add_target(
Gem::Camera.Static
)
# clients and servers use the above module:
ly_create_alias(NAME Camera.Clients NAMESPACE Gem TARGETS Gem::Camera)
ly_create_alias(NAME Camera.Servers NAMESPACE Gem TARGETS Gem::Camera)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
@@ -62,4 +66,7 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::Camera.Static
)
# tools and builders use the above module.
ly_create_alias(NAME Camera.Tools NAMESPACE Gem TARGETS Gem::Camera.Editor)
ly_create_alias(NAME Camera.Builders NAMESPACE Gem TARGETS Gem::Camera.Editor)
endif()
+6
View File
@@ -38,3 +38,9 @@ ly_add_target(
PRIVATE
Gem::CameraFramework.Static
)
# Every kind of application uses the above target module.
ly_create_alias(NAME CameraFramework.Clients NAMESPACE Gem TARGETS Gem::CameraFramework)
ly_create_alias(NAME CameraFramework.Servers NAMESPACE Gem TARGETS Gem::CameraFramework)
ly_create_alias(NAME CameraFramework.Tools NAMESPACE Gem TARGETS Gem::CameraFramework)
ly_create_alias(NAME CameraFramework.Builders NAMESPACE Gem TARGETS Gem::CameraFramework)
@@ -41,3 +41,7 @@ ly_add_target(
PRIVATE
Gem::CertificateManager.Static
)
# we'll load the above "Gem::CertificateManager" module in Clients and Servers
ly_create_alias(NAME CertificateManager.Clients NAMESPACE Gem TARGETS Gem::CertificateManager)
ly_create_alias(NAME CertificateManager.Servers NAMESPACE Gem TARGETS Gem::CertificateManager)
+5
View File
@@ -33,6 +33,11 @@ ly_add_target(
AZ::CrashHandler
)
# Load the "Gem::CrashReporting" module in Clients and Servers
ly_create_alias(NAME CrashReporting.Clients NAMESPACE Gem TARGETS Gem::CrashReporting)
ly_create_alias(NAME CrashReporting.Servers NAMESPACE Gem TARGETS Gem::CrashReporting)
ly_add_target(
NAME CrashReporting.Uploader APPLICATION
NAMESPACE AZ
@@ -22,6 +22,10 @@ ly_add_target(
AZ::AzCore
)
# clients and servers use the above module.
ly_create_alias(NAME CustomAssetExample.Clients NAMESPACE Gem TARGETS CustomAssetExample)
ly_create_alias(NAME CustomAssetExample.Servers NAMESPACE Gem TARGETS CustomAssetExample)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME CustomAssetExample.Editor GEM_MODULE
@@ -37,4 +41,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
AZ::AzCore
AZ::AssetBuilderSDK
)
# other tools use the above tools module:
ly_create_alias(NAME CustomAssetExample.Builders NAMESPACE Gem TARGETS CustomAssetExample.Editor)
ly_create_alias(NAME CustomAssetExample.Tools NAMESPACE Gem TARGETS CustomAssetExample.Editor)
endif()
+8
View File
@@ -42,6 +42,9 @@ ly_add_target(
Gem::DebugDraw.Static
)
# servers do not need debug draw components, only clients
ly_create_alias(NAME DebugDraw.Clients NAMESPACE Gem TARGETS DebugDraw)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME DebugDraw.Editor GEM_MODULE
@@ -62,4 +65,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::DebugDraw.Static
AZ::AzToolsFramework
)
# builders and tools use DebugDraw.Editor
ly_create_alias(NAME DebugDraw.Builders NAMESPACE Gem TARGETS DebugDraw.Editor)
ly_create_alias(NAME DebugDraw.Tools NAMESPACE Gem TARGETS DebugDraw.Editor)
endif()
+10 -1
View File
@@ -36,10 +36,10 @@ ly_add_target(
AZ::AzCore
AZ::AzFramework
Legacy::CryCommon
Gem::LmbrCentral
PUBLIC
AZ::AtomCore
Gem::Atom_RPI.Public
Gem::LmbrCentral
COMPILE_DEFINITIONS
PUBLIC
EMFX_DEVELOPMENT_BUILD
@@ -67,6 +67,10 @@ ly_add_target(
Gem::LmbrCentral
)
# Clients and servers use the above EMotionFX module
ly_create_alias(NAME EMotionFX.Clients NAMESPACE Gem TARGETS EMotionFX)
ly_create_alias(NAME EMotionFX.Servers NAMESPACE Gem TARGETS EMotionFX)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
@@ -129,6 +133,11 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
)
# builders and tools use the above EMotionFX.Editor module
ly_create_alias(NAME EMotionFX.Builders NAMESPACE Gem TARGETS EMotionFX.Editor)
ly_create_alias(NAME EMotionFX.Tools NAMESPACE Gem TARGETS EMotionFX.Editor)
endif()
################################################################################
@@ -64,6 +64,10 @@ ly_add_target(
Gem::EditorPythonBindings.Static
)
# builders and tools use EditorPythonBindings.Editor
ly_create_alias(NAME EditorPythonBindings.Builders NAMESPACE Gem TARGETS EditorPythonBindings.Editor)
ly_create_alias(NAME EditorPythonBindings.Tools NAMESPACE Gem TARGETS EditorPythonBindings.Editor)
################################################################################
# Tests
################################################################################
@@ -41,6 +41,12 @@ ly_add_target(
Gem::ExpressionEvaluation.Static
)
# all types of applications use the above module
ly_create_alias(NAME ExpressionEvaluation.Clients NAMESPACE Gem TARGETS ExpressionEvaluation)
ly_create_alias(NAME ExpressionEvaluation.Servers NAMESPACE Gem TARGETS ExpressionEvaluation)
ly_create_alias(NAME ExpressionEvaluation.Builders NAMESPACE Gem TARGETS ExpressionEvaluation)
ly_create_alias(NAME ExpressionEvaluation.Tools NAMESPACE Gem TARGETS ExpressionEvaluation)
################################################################################
# Tests
################################################################################
+17 -2
View File
@@ -23,6 +23,7 @@ ly_add_target(
PUBLIC
Legacy::CryCommon
Gem::GradientSignal
PRIVATE
Gem::LmbrCentral
)
@@ -42,6 +43,10 @@ ly_add_target(
Gem::GradientSignal
)
# Clients and Servers use the above module
ly_create_alias(NAME FastNoise.Clients NAMESPACE Gem TARGETS FastNoise)
ly_create_alias(NAME FastNoise.Servers NAMESPACE Gem TARGETS FastNoise)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME FastNoise.Editor.Static STATIC
@@ -57,6 +62,8 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
PUBLIC
Include
BUILD_DEPENDENCIES
PRIVATE
Gem::LmbrCentral.Editor
PUBLIC
Gem::FastNoise.Static
AZ::AzToolsFramework
@@ -65,7 +72,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME FastNoise.Editor GEM_MODULE
NAMESPACE Gem
FILES_CMAKE
fastnoise_editor_shared_files.cmake
@@ -76,11 +82,18 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
Include
BUILD_DEPENDENCIES
PRIVATE
FastNoise.Editor.Static
Gem::FastNoise.Editor.Static
Gem::LmbrCentral.Editor
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
Gem::SurfaceData.Editor
)
# builders and tools load the above tool module.
ly_create_alias(NAME FastNoise.Builders NAMESPACE Gem TARGETS FastNoise.Editor)
ly_create_alias(NAME FastNoise.Tools NAMESPACE Gem TARGETS FastNoise.Editor)
endif()
################################################################################
@@ -103,6 +116,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
PRIVATE
AZ::AzTest
FastNoise.Editor.Static
Gem::LmbrCentral.Editor
)
ly_add_googletest(
NAME Gem::FastNoise.Editor.Tests
@@ -120,6 +134,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
PRIVATE
AZ::AzTest
Gem::FastNoise.Static
Gem::LmbrCentral
)
ly_add_googletest(
NAME Gem::FastNoise.Tests
+4
View File
@@ -40,6 +40,10 @@ ly_add_target(
Gem::GameState.Static
)
# Clients and Servers use the above module. There is no editor or tools module required.
ly_create_alias(NAME GameState.Clients NAMESPACE Gem TARGETS GameState)
ly_create_alias(NAME GameState.Servers NAMESPACE Gem TARGETS GameState)
################################################################################
# Tests
################################################################################
@@ -44,4 +44,12 @@ ly_add_target(
AZ::AzFramework
Gem::LmbrCentral
Gem::GameStateSamples.Headers
RUNTIME_DEPENDENCIES
Gem::GameState
Gem::LocalUser
Gem::LmbrCentral
)
# Clients and Servers use the above module. There is no editor or tools module required.
ly_create_alias(NAME GameStateSamples.Clients NAMESPACE Gem TARGETS GameStateSamples)
ly_create_alias(NAME GameStateSamples.Servers NAMESPACE Gem TARGETS GameStateSamples)
+6
View File
@@ -43,6 +43,12 @@ ly_add_target(
Gem::Gestures.Static
)
# All types of applications use the same module.
ly_create_alias(NAME Gestures.Clients NAMESPACE Gem TARGETS Gestures)
ly_create_alias(NAME Gestures.Servers NAMESPACE Gem TARGETS Gestures)
ly_create_alias(NAME Gestures.Builders NAMESPACE Gem TARGETS Gestures)
ly_create_alias(NAME Gestures.Tools NAMESPACE Gem TARGETS Gestures)
################################################################################
# Tests
################################################################################
+20 -6
View File
@@ -22,9 +22,10 @@ ly_add_target(
BUILD_DEPENDENCIES
PUBLIC
Legacy::CryCommon
Gem::LmbrCentral
Gem::SurfaceData
Gem::ImageProcessingAtom.Headers
PRIVATE
Gem::LmbrCentral
)
ly_add_target(
@@ -40,13 +41,17 @@ ly_add_target(
BUILD_DEPENDENCIES
PRIVATE
Gem::GradientSignal.Static
Gem::LmbrCentral
PUBLIC
Gem::ImageProcessingAtom.Headers # Atom/ImageProcessing/PixelFormats.h is part of a header in Includes
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
Gem::SurfaceData
)
# Load the "Gem::GradientSignal" module in Clients and Servers
ly_create_alias(NAME GradientSignal.Clients NAMESPACE Gem TARGETS Gem::GradientSignal)
ly_create_alias(NAME GradientSignal.Servers NAMESPACE Gem TARGETS Gem::GradientSignal)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
@@ -63,19 +68,21 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
PUBLIC
GRADIENTSIGNAL_EDITOR
BUILD_DEPENDENCIES
PRIVATE
Gem::LmbrCentral.Editor
PUBLIC
3rdParty::Qt::Widgets
Legacy::CryCommon
AZ::AzToolsFramework
Gem::LmbrCentral
Gem::SurfaceData
AZ::AssetBuilderSDK
Gem::GradientSignal.Static
Gem::SurfaceData
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
)
ly_add_target(
NAME GradientSignal.Editor GEM_MODULE
NAMESPACE Gem
FILES_CMAKE
gradientsignal_editor_shared_files.cmake
@@ -87,11 +94,16 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
BUILD_DEPENDENCIES
PRIVATE
Gem::GradientSignal.Editor.Static
Gem::LmbrCentral.Editor
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
Gem::SurfaceData.Editor
)
# Load the "Gem::GradientSignal.Editor" module in Builders and Tools
ly_create_alias(NAME GradientSignal.Builders NAMESPACE Gem TARGETS Gem::GradientSignal.Editor)
ly_create_alias(NAME GradientSignal.Tools NAMESPACE Gem TARGETS Gem::GradientSignal.Editor)
endif()
################################################################################
@@ -112,6 +124,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
PRIVATE
AZ::AzTest
Gem::GradientSignal.Static
Gem::LmbrCentral
)
ly_add_googletest(
NAME Gem::GradientSignal.Tests
@@ -132,6 +145,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
AZ::AzTest
Gem::GradientSignal.Static
Gem::GradientSignal.Editor.Static
Gem::LmbrCentral.Editor
)
ly_add_googletest(
NAME Gem::GradientSignal.Editor.Tests
+6 -1
View File
@@ -51,7 +51,6 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME GraphCanvas.Editor GEM_MODULE
NAMESPACE Gem
AUTOMOC
AUTORCC
@@ -75,4 +74,10 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
3rdParty::Qt::Xml
AZ::AzQtComponents
)
# Load the "Gem::GraphCanvas" module in Builders and Tools
ly_create_alias(NAME GraphCanvas.Builders NAMESPACE Gem TARGETS Gem::GraphCanvas.Editor)
ly_create_alias(NAME GraphCanvas.Tools NAMESPACE Gem TARGETS Gem::GraphCanvas.Editor)
endif ()
+5
View File
@@ -52,6 +52,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
RUNTIME_DEPENDENCIES
Gem::GraphCanvas.Editor
)
# Load the "Gem::GraphModel" module in Builders and Tools
ly_create_alias(NAME GraphModel.Builders NAMESPACE Gem TARGETS Gem::GraphModel.Editor)
ly_create_alias(NAME GraphModel.Tools NAMESPACE Gem TARGETS Gem::GraphModel.Editor)
endif()
################################################################################
+6
View File
@@ -48,6 +48,12 @@ ly_add_target(
Gem::HttpRequestor.Static
)
# Load the "Gem::HttpRequestor" module in all types of applicatons.
ly_create_alias(NAME HttpRequestor.Clients NAMESPACE Gem TARGETS Gem::HttpRequestor)
ly_create_alias(NAME HttpRequestor.Servers NAMESPACE Gem TARGETS Gem::HttpRequestor)
ly_create_alias(NAME HttpRequestor.Builders NAMESPACE Gem TARGETS Gem::HttpRequestor)
ly_create_alias(NAME HttpRequestor.Tools NAMESPACE Gem TARGETS Gem::HttpRequestor)
################################################################################
# Tests
################################################################################
+12
View File
@@ -53,6 +53,8 @@ ly_add_target(
PUBLIC
Gem::ImGui.imguilib
Legacy::CryCommon
RUNTIME_DEPENDENCIES
Gem::ImGui.imguilib
)
ly_add_target(
@@ -70,6 +72,7 @@ ly_add_target(
BUILD_DEPENDENCIES
PUBLIC
Gem::ImGui.ImGuiLYUtils
PRIVATE
Gem::LmbrCentral
)
@@ -90,6 +93,10 @@ ly_add_target(
Gem::LmbrCentral
)
# Load the above "Gem::ImGui" module in Clients and Servers:
ly_create_alias(NAME ImGui.Clients NAMESPACE Gem TARGETS Gem::ImGui)
ly_create_alias(NAME ImGui.Servers NAMESPACE Gem TARGETS Gem::ImGui)
if(PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME ImGui.Editor GEM_MODULE
@@ -113,4 +120,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
)
# Load the above "Gem::ImGui.Editor" module in only tools and builders.
ly_create_alias(NAME ImGui.Builders NAMESPACE Gem TARGETS Gem::ImGui.Editor)
ly_create_alias(NAME ImGui.Tools NAMESPACE Gem TARGETS Gem::ImGui.Editor)
endif()
+5
View File
@@ -43,3 +43,8 @@ ly_add_target(
PRIVATE
Gem::InAppPurchases.Static
)
# Load the above "Gem::InAppPurchases" module in all app types
ly_create_alias(NAME InAppPurchases.Clients NAMESPACE Gem TARGETS Gem::InAppPurchases)
ly_create_alias(NAME InAppPurchases.Servers NAMESPACE Gem TARGETS Gem::InAppPurchases)
ly_create_alias(NAME InAppPurchases.Builders NAMESPACE Gem TARGETS Gem::InAppPurchases)
ly_create_alias(NAME InAppPurchases.Tools NAMESPACE Gem TARGETS Gem::InAppPurchases)
+15 -5
View File
@@ -35,16 +35,21 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
Legacy::CryCommon
Legacy::Editor.Headers
Legacy::EditorCommon
Gem::LmbrCentral
Gem::GraphCanvasWidgets
Gem::GraphModel.Editor.Static
Gem::GradientSignal.Editor
Gem::SurfaceData.Editor
Gem::Vegetation.Editor
Gem::LmbrCentral.Editor
PUBLIC
Gem::GraphCanvasWidgets
RUNTIME_DEPENDENCIES
Gem::GradientSignal.Editor
Gem::SurfaceData.Editor
Gem::Vegetation.Editor
Gem::LmbrCentral.Editor
)
ly_add_target(
NAME LandscapeCanvas.Editor GEM_MODULE
NAMESPACE Gem
FILES_CMAKE
landscapecanvas_editor_files.cmake
@@ -61,7 +66,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
AZ::AzCore
AZ::AzToolsFramework
Legacy::Editor.Headers
Gem::GraphCanvasWidgets
Gem::GraphModel.Editor.Static
Gem::LandscapeCanvas.Editor.Static
RUNTIME_DEPENDENCIES
@@ -72,6 +76,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::SurfaceData.Editor
Gem::Vegetation.Editor
)
# by default, load the above "Gem::LandscapeCanvas.Editor" module in dev applications
ly_create_alias(NAME LandscapeCanvas.Builders NAMESPACE Gem TARGETS Gem::LandscapeCanvas.Editor)
ly_create_alias(NAME LandscapeCanvas.Tools NAMESPACE Gem TARGETS Gem::LandscapeCanvas.Editor)
endif()
################################################################################
@@ -97,9 +106,10 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
AZ::AzTest
AZ::AzFramework
AZ::AzToolsFramework
Gem::GraphCanvasWidgets
Gem::GraphModel.Editor.Static
Gem::LandscapeCanvas.Editor.Static
RUNTIME_DEPENDENCIES
Gem::GraphCanvasWidgets
)
ly_add_googletest(
NAME Gem::LandscapeCanvas.Editor.Tests
+9
View File
@@ -48,6 +48,11 @@ ly_add_target(
Gem::LmbrCentral.Static
)
# by default, load the above "Gem::LmbrCentral" module in Client and Server
ly_create_alias(NAME LmbrCentral.Clients NAMESPACE Gem TARGETS Gem::LmbrCentral)
ly_create_alias(NAME LmbrCentral.Servers NAMESPACE Gem TARGETS Gem::LmbrCentral)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME LmbrCentral.Editor.Static STATIC
@@ -102,6 +107,10 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
FILES ${QT_LRELEASE_EXECUTABLE}
)
# by default, load the above "Gem::LmbrCentral.Editor" module in dev tools
ly_create_alias(NAME LmbrCentral.Builders NAMESPACE Gem TARGETS Gem::LmbrCentral.Editor)
ly_create_alias(NAME LmbrCentral.Tools NAMESPACE Gem TARGETS Gem::LmbrCentral.Editor)
endif()
################################################################################
+3
View File
@@ -43,6 +43,9 @@ ly_add_target(
Gem::LocalUser.Static
)
# by default, load the above "Gem::LocalUser" module in client applications
ly_create_alias(NAME LocalUser.Clients NAMESPACE Gem TARGETS Gem::LocalUser)
################################################################################
# Tests
################################################################################
+20 -7
View File
@@ -27,12 +27,12 @@ ly_add_target(
PRIVATE
Legacy::CryCommon
Gem::LmbrCentral
Gem::TextureAtlas
PUBLIC
Gem::Atom_RPI.Public
Gem::Atom_Utils.Static
Gem::Atom_Bootstrap.Headers
Gem::AtomFont
Gem::TextureAtlas
)
ly_add_target(
@@ -50,12 +50,14 @@ ly_add_target(
Gem::LyShine.Static
Legacy::CryCommon
Gem::LmbrCentral
Gem::TextureAtlas
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
Gem::TextureAtlas
)
# by default, load the above "Gem::LyShine" module in Client applications:
ly_create_alias(NAME LyShine.Clients NAMESPACE Gem TARGETS Gem::LyShine)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME LyShine.Editor.Static STATIC
@@ -85,7 +87,7 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Legacy::EditorCore
Gem::LyShine.Static
Legacy::CryCommon
Gem::LmbrCentral
Gem::LmbrCentral.Editor
Gem::TextureAtlas.Editor
Gem::AtomToolsFramework.Static
Gem::AtomToolsFramework.Editor
@@ -94,6 +96,8 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Gem::Atom_RPI.Public
Gem::Atom_Utils.Static
Gem::Atom_Bootstrap.Headers
RUNTIME_DEPENDENCIES
Gem::TextureAtlas.Editor
)
ly_add_target(
@@ -117,12 +121,16 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
Legacy::CryCommon
AZ::AssetBuilderSDK
Gem::LyShine.Editor.Static
Gem::LmbrCentral
Gem::LmbrCentral.Editor
Gem::TextureAtlas.Editor
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
Gem::TextureAtlas.Editor
)
# by default, load the above "Gem::LyShine.Editor" module in dev tools:
ly_create_alias(NAME LyShine.Builders NAMESPACE Gem TARGETS Gem::LyShine.Editor)
ly_create_alias(NAME LyShine.Tools NAMESPACE Gem TARGETS Gem::LyShine.Editor)
endif()
################################################################################
@@ -146,7 +154,9 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
Gem::LyShine.Static
Legacy::CryCommon
Gem::LmbrCentral
Gem::TextureAtlas
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
Gem::TextureAtlas
)
ly_add_googletest(
NAME Gem::LyShine.Tests
@@ -175,9 +185,12 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
AZ::AzTest
Legacy::CryCommon
AZ::AssetBuilderSDK
Gem::LmbrCentral
Gem::TextureAtlas.Editor
Gem::LyShine.Editor.Static
Gem::LmbrCentral.Editor
Gem::TextureAtlas
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
Gem::TextureAtlas.Editor
)
ly_add_googletest(
NAME Gem::LyShine.Editor.Tests
@@ -208,8 +208,6 @@ namespace LyShine
////////////////////////////////////////////////////////////////////////////////////////////////////
void LyShineSystemComponent::InitializeSystem()
{
m_pLyShine = new CLyShine(gEnv->pSystem);
gEnv->pLyShine = m_pLyShine;
BroadcastCursorImagePathname();
}
@@ -374,6 +372,25 @@ namespace LyShine
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
void LyShineSystemComponent::OnCrySystemInitialized(ISystem& system, [[maybe_unused]] const SSystemInitParams& startupParams)
{
#if !defined(AZ_MONOLITHIC_BUILD)
// When module is linked dynamically, we must set our gEnv pointer.
// When module is linked statically, we'll share the application's gEnv pointer.
gEnv = system.GetGlobalEnvironment();
#endif
m_pLyShine = new CLyShine(gEnv->pSystem);
gEnv->pLyShine = m_pLyShine;
}
void LyShineSystemComponent::OnCrySystemShutdown([[maybe_unused]] ISystem& system)
{
gEnv->pLyShine = nullptr;
delete m_pLyShine;
m_pLyShine = nullptr;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void LyShineSystemComponent::BroadcastCursorImagePathname()
{
@@ -38,6 +38,7 @@ namespace LyShine
, protected UiSystemToolsBus::Handler
, protected LyShineAllocatorScope
, protected UiFrameworkBus::Handler
, protected CrySystemEventBus::Handler
{
public:
AZ_COMPONENT(LyShineSystemComponent, lyShineSystemComponentUuid);
@@ -89,6 +90,11 @@ namespace LyShine
void HandleEditorOnlyEntities(const EntityList& exportSliceEntities, const EntityIdSet& editorOnlyEntityIds) override;
////////////////////////////////////////////////////////////////////////
// CrySystemEventBus ///////////////////////////////////////////////////////
void OnCrySystemInitialized(ISystem& system, const SSystemInitParams&) override;
virtual void OnCrySystemShutdown(ISystem&) override;
////////////////////////////////////////////////////////////////////////////
void BroadcastCursorImagePathname();
protected: // data
+11 -1
View File
@@ -20,9 +20,10 @@ ly_add_target(
PUBLIC
Include
BUILD_DEPENDENCIES
PRIVATE
Gem::LmbrCentral
PUBLIC
Legacy::CryCommon
Gem::LmbrCentral
Gem::LyShine.Static
)
@@ -39,4 +40,13 @@ ly_add_target(
BUILD_DEPENDENCIES
PRIVATE
Gem::LyShineExamples.Static
Gem::LmbrCentral
)
# if enabled, LyShineExamples is used by all kinds of applications, however, the dependency to LmbrCentral is different
# per application type
ly_create_alias(NAME LyShineExamples.Builders NAMESPACE Gem TARGETS Gem::LyShineExamples Gem::LmbrCentral.Editor)
ly_create_alias(NAME LyShineExamples.Tools NAMESPACE Gem TARGETS Gem::LyShineExamples Gem::LmbrCentral.Editor)
ly_create_alias(NAME LyShineExamples.Clients NAMESPACE Gem TARGETS Gem::LyShineExamples Gem::LmbrCentral)
ly_create_alias(NAME LyShineExamples.Servers NAMESPACE Gem TARGETS Gem::LyShineExamples Gem::LmbrCentral)
+8 -3
View File
@@ -22,7 +22,6 @@ ly_add_target(
BUILD_DEPENDENCIES
PRIVATE
Legacy::CryCommon
Gem::LmbrCentral
)
ly_add_target(
@@ -39,11 +38,14 @@ ly_add_target(
PRIVATE
Legacy::CryCommon
Gem::Maestro.Static
Gem::LmbrCentral
RUNTIME_DEPENDENCIES
Gem::LmbrCentral
)
# if enabled, "Maestro" module is used for Clients and Servers:
ly_create_alias(NAME Maestro.Clients NAMESPACE Gem TARGETS Gem::Maestro)
ly_create_alias(NAME Maestro.Servers NAMESPACE Gem TARGETS Gem::Maestro)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME Maestro.Editor GEM_MODULE
@@ -69,10 +71,13 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
AZ::AzToolsFramework
AZ::AssetBuilderSDK
Gem::Maestro.Static
Gem::LmbrCentral
RUNTIME_DEPENDENCIES
Gem::LmbrCentral.Editor
)
# the .Editor variant is used in dev tools:
ly_create_alias(NAME Maestro.Tools NAMESPACE Gem TARGETS Gem::Maestro.Editor)
ly_create_alias(NAME Maestro.Builders NAMESPACE Gem TARGETS Gem::Maestro.Editor)
endif()
################################################################################
+4
View File
@@ -38,3 +38,7 @@ ly_add_target(
PRIVATE
Gem::MessagePopup.Static
)
# MessagePopup is used only in client applications
ly_create_alias(NAME MessagePopup.Clients NAMESPACE Gem TARGETS Gem::MessagePopup)
+5
View File
@@ -50,6 +50,11 @@ ly_add_target(
Legacy::CryCommon
)
# The above "Metastream" target is used by all types of applications, including dev tools.
ly_create_alias(NAME Metastream.Clients NAMESPACE Gem TARGETS Gem::Metastream)
ly_create_alias(NAME Metastream.Servers NAMESPACE Gem TARGETS Gem::Metastream)
ly_create_alias(NAME Metastream.Builders NAMESPACE Gem TARGETS Gem::Metastream)
ly_create_alias(NAME Metastream.Tools NAMESPACE Gem TARGETS Gem::Metastream)
################################################################################
# Tests

Some files were not shown because too many files have changed in this diff Show More