diff --git a/Assets/Engine/exclude.filetag b/Assets/Engine/exclude.filetag
index 52534a87d8..3528454ec4 100644
--- a/Assets/Engine/exclude.filetag
+++ b/Assets/Engine/exclude.filetag
@@ -125,17 +125,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -207,27 +196,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
index ef0a592df0..b21c74de19 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
@@ -211,7 +211,7 @@ class Timeout:
return time.time() > self.die_after
-screenshotsFolder = os.path.join(azlmbr.paths.devroot, "AtomTest", "Cache" "pc", "Screenshots")
+screenshotsFolder = os.path.join(azlmbr.paths.products, "Screenshots")
class ScreenshotHelper:
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py
index 602e7564b3..bbc8463152 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py
@@ -17,7 +17,7 @@ import azlmbr.legacy.general as general
import azlmbr.editor as editor
import azlmbr.render as render
-sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests"))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import TestHelper
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
index 751f425916..7ecdc6859b 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
@@ -14,7 +14,7 @@ import azlmbr.math as math
import azlmbr.paths
import azlmbr.legacy.general as general
-sys.path.append(os.path.join(azlmbr.paths.devassets, "Gem", "PythonTests"))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
import editor_python_test_tools.hydra_editor_utils as hydra
from Atom.atom_utils.atom_constants import LIGHT_TYPES
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
index 88a1ef4c7b..9f8f6c44b2 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
@@ -16,7 +16,7 @@ import time
import azlmbr.math as math
import azlmbr.paths
-sys.path.append(os.path.join(azlmbr.paths.devassets, "Gem", "PythonTests"))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
import Atom.atom_utils.material_editor_utils as material_editor
@@ -27,10 +27,10 @@ TEST_MATERIAL_1 = "001_DefaultWhite.material"
TEST_MATERIAL_2 = "002_BaseColorLerp.material"
TEST_MATERIAL_3 = "003_MetalMatte.material"
TEST_DATA_PATH = os.path.join(
- azlmbr.paths.devroot, "Gems", "Atom", "TestData", "TestData", "Materials", "StandardPbrTestCases"
+ azlmbr.paths.engroot, "Gems", "Atom", "TestData", "TestData", "Materials", "StandardPbrTestCases"
)
MATERIAL_TYPE_PATH = os.path.join(
- azlmbr.paths.devroot, "Gems", "Atom", "Feature", "Common", "Assets",
+ azlmbr.paths.engroot, "Gems", "Atom", "Feature", "Common", "Assets",
"Materials", "Types", "StandardPBR.materialtype",
)
CACHE_FILE_EXTENSION = ".azmaterial"
@@ -61,7 +61,7 @@ def run():
print(f"Material opened: {material_editor.is_open(document_id)}")
# Verify if the test material exists initially
- target_path = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL)
+ target_path = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL)
print(f"Test asset doesn't exist initially: {not os.path.exists(target_path)}")
# 2) Test Case: Creating a New Material Using Existing One
@@ -109,10 +109,10 @@ def run():
# Assign new color to the material file and save the document as copy
expected_color_1 = math.Color(0.5, 0.5, 0.5, 1.0)
material_editor.set_property(document_id, property_name, expected_color_1)
- target_path_1 = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL_1)
+ target_path_1 = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL_1)
cache_file_name_1 = os.path.splitext(NEW_MATERIAL_1) # Example output: ('test_material_1', '.material')
cache_file_1 = f"{cache_file_name_1[0]}{CACHE_FILE_EXTENSION}"
- target_path_1_cache = os.path.join(azlmbr.paths.devassets, "Cache", "pc", "materials", cache_file_1)
+ target_path_1_cache = os.path.join(azlmbr.paths.products, "materials", cache_file_1)
material_editor.save_document_as_copy(document_id, target_path_1)
material_editor.wait_for_condition(lambda: os.path.exists(target_path_1_cache), 4.0)
@@ -120,10 +120,10 @@ def run():
# Assign new color to the material file save the document as child
expected_color_2 = math.Color(0.75, 0.75, 0.75, 1.0)
material_editor.set_property(document_id, property_name, expected_color_2)
- target_path_2 = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL_2)
+ target_path_2 = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL_2)
cache_file_name_2 = os.path.splitext(NEW_MATERIAL_1) # Example output: ('test_material_2', '.material')
cache_file_2 = f"{cache_file_name_2[0]}{CACHE_FILE_EXTENSION}"
- target_path_2_cache = os.path.join(azlmbr.paths.devassets, "Cache", "pc", "materials", cache_file_2)
+ target_path_2_cache = os.path.join(azlmbr.paths.products, "materials", cache_file_2)
material_editor.save_document_as_child(document_id, target_path_2)
material_editor.wait_for_condition(lambda: os.path.exists(target_path_2_cache), 4.0)
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py
index 4f7edeba75..92199bf196 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py
@@ -10,7 +10,7 @@ import sys
import azlmbr.legacy.general as general
-sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests"))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.editor_test_helper import EditorTestHelper
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py
index 62a122a723..ac28e67fa1 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py
@@ -17,7 +17,7 @@ import azlmbr.math as math
import azlmbr.paths
import azlmbr.editor as editor
-sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests"))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.editor_test_helper import EditorTestHelper
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py
index 4a3ae8c85d..1c3e6226c1 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py
@@ -14,7 +14,7 @@ import azlmbr.math as math
import azlmbr.paths
import azlmbr.legacy.general as general
-sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests"))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
import editor_python_test_tools.hydra_editor_utils as hydra
from Atom.atom_utils import atom_component_helper, atom_constants, screenshot_utils
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py
index 1d3ca11618..fcce6eab37 100755
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py
@@ -42,7 +42,6 @@ class TestEditorAutomation(object):
"editor command line arg bar",
"editor command line arg baz",
"editor engroot set",
- "editor devroot set",
"path resolved worked"
]
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py
index bd8791fad6..c6ae65612f 100755
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py
@@ -20,12 +20,6 @@ if (engroot is not None and len(engroot) is not 0):
print ('engroot is {}'.format(engroot))
print ('editor engroot set')
-# make sure the @devroot@ exists as a azlmbr.paths property
-devroot = azlmbr.paths.devroot
-if (devroot is not None and len(devroot) != 0):
- print ('devroot is {}'.format(devroot))
- print ('editor devroot set')
-
# resolving a basic path
path = azlmbr.paths.resolve_path('@engroot@/engineassets/texturemsg/defaultsolids.mtl')
if (len(path) != 0 and path.find('@engroot@') == -1):
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py
index 5b7f2f42c1..c5ca4de603 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py
@@ -16,7 +16,7 @@ import azlmbr.entity as entity
import azlmbr.math as math
import azlmbr.paths
-sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests'))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests'))
from automatedtesting_shared.editor_test_helper import EditorTestHelper
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg
index 3adc32d20a..ccc605cec9 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg
@@ -1,2 +1,2 @@
# this file is copied to $/dev/editor_autoexec.cfg so the the Editor automation runs for this Hydra test
-pyRunFile @devroot@/Tests/hydra/LevelComponentCommands_test_case.py exit_when_done
\ No newline at end of file
+pyRunFile @engroot@/Tests/hydra/LevelComponentCommands_test_case.py exit_when_done
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg
index 6230dfe0fa..3cbd84c1b5 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg
@@ -1,2 +1,2 @@
# this file is copied to $/dev/editor_autoexec.cfg so the the Editor automation runs for this Hydra test
-pyRunFile @devroot@/Tests/hydra/ViewportTitleDlgCommands_test_case.py
\ No newline at end of file
+pyRunFile @engroot@/Tests/hydra/ViewportTitleDlgCommands_test_case.py
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
index e51be58ec6..84c661873c 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
@@ -109,7 +109,7 @@ def DynamicSliceInstanceSpawner_Embedded_E2E():
# 6) Save and export to engine
general.save_level()
general.export_to_engine()
- pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak")
+ pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
index 7a0abdd969..de2554034f 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
@@ -131,7 +131,7 @@ def DynamicSliceInstanceSpawner_External_E2E():
# 6) Save and export to engine
general.save_level()
general.export_to_engine()
- pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak")
+ pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py
index f56c0b836e..bf6501f469 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py
@@ -155,7 +155,7 @@ def LayerBlender_E2E_Editor():
# 6) Save and export to engine
general.save_level()
general.export_to_engine()
- pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak")
+ pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py b/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py
index 65ebf8e59e..957536fffb 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py
@@ -17,7 +17,7 @@ import azlmbr.vegetation as vegetation
import azlmbr.areasystem as areasystem
import azlmbr.paths
-sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests'))
+sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests'))
import editor_python_test_tools.hydra_editor_utils as hydra
@@ -25,7 +25,7 @@ def create_surface_entity(name, center_point, box_size_x, box_size_y, box_size_z
# Create a "flat surface" entity to use as a plantable vegetation surface
surface_entity = hydra.Entity(name)
surface_entity.create_entity(
- center_point,
+ center_point,
["Box Shape", "Shape Surface Tag Emitter"]
)
if surface_entity.id.IsValid():
@@ -56,7 +56,7 @@ def create_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_
# Create a vegetation area entity to use as our test vegetation spawner
spawner_entity = hydra.Entity(name)
spawner_entity.create_entity(
- center_point,
+ center_point,
["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List"]
)
if spawner_entity.id.IsValid():
diff --git a/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace b/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace
index 188fee9f05..05140f340b 100644
--- a/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace
+++ b/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace
@@ -1,3 +1,3 @@
[General]
version=1
-startScript="ImportActor -filename \"@assets@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\n"
+startScript="ImportActor -filename \"@products@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\n"
diff --git a/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace b/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace
index e429d74a57..870b9a8579 100644
--- a/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace
+++ b/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace
@@ -1,3 +1,3 @@
[General]
version=1
-startScript="ImportActor -filename \"@assets@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_skeleton_newgeo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@assets@/Levels/Physics/C15096734_PhysxMaterials_DefaultMaterialLibrary/custom_motionset.motionset\"\nLoadAnimGraph -filename \"@assets@/Levels/Physics/C15096734_PhysxMaterials_DefaultMaterialLibrary/rin_physics.animgraph\"\n"
+startScript="ImportActor -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_skeleton_newgeo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/custom_motionset.motionset\"\nLoadAnimGraph -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_physics.animgraph\"\n"
diff --git a/Code/Editor/Controls/FolderTreeCtrl.cpp b/Code/Editor/Controls/FolderTreeCtrl.cpp
index b1cbb9414e..4088ab976f 100644
--- a/Code/Editor/Controls/FolderTreeCtrl.cpp
+++ b/Code/Editor/Controls/FolderTreeCtrl.cpp
@@ -278,17 +278,16 @@ void CFolderTreeCtrl::LoadTreeRec(const QString& currentFolder)
void CFolderTreeCtrl::AddItem(const QString& path)
{
- QString folder;
- QString fileNameWithoutExtension;
- QString ext;
-
- Path::Split(path, folder, fileNameWithoutExtension, ext);
+ AZ::IO::FixedMaxPath folder{ AZ::IO::PathView(path.toUtf8().constData()) };
+ AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Extension();
+ folder = folder.ParentPath();
auto regex = QRegExp(m_fileNameSpec, Qt::CaseInsensitive, QRegExp::Wildcard);
if (regex.exactMatch(path))
{
- CTreeItem* folderTreeItem = CreateFolderItems(folder);
- folderTreeItem->AddChild(fileNameWithoutExtension, path, eTreeImage_File);
+ CTreeItem* folderTreeItem = CreateFolderItems(QString::fromUtf8(folder.c_str(), static_cast(folder.Native().size())));
+ folderTreeItem->AddChild(QString::fromUtf8(fileNameWithoutExtension.c_str(),
+ static_cast(fileNameWithoutExtension.Native().size())), path, eTreeImage_File);
}
}
diff --git a/Code/Editor/Core/Tests/test_Main.cpp b/Code/Editor/Core/Tests/test_Main.cpp
index 3d3e286f18..16b0aa92cf 100644
--- a/Code/Editor/Core/Tests/test_Main.cpp
+++ b/Code/Editor/Core/Tests/test_Main.cpp
@@ -33,6 +33,7 @@ public:
protected:
void SetupEnvironment() override
{
+ AttachEditorCoreAZEnvironment(AZ::Environment::GetInstance());
m_allocatorScope.ActivateAllocators();
m_cryPak = new NiceMock();
@@ -49,6 +50,7 @@ protected:
{
delete m_cryPak;
m_allocatorScope.DeactivateAllocators();
+ DetachEditorCoreAZEnvironment();
}
private:
diff --git a/Code/Editor/Core/Tests/test_PathUtil.cpp b/Code/Editor/Core/Tests/test_PathUtil.cpp
index 83e50a5947..cade19eb81 100644
--- a/Code/Editor/Core/Tests/test_PathUtil.cpp
+++ b/Code/Editor/Core/Tests/test_PathUtil.cpp
@@ -5,22 +5,29 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
-#include "EditorDefs.h"
-#include
-#include "Util/PathUtil.h"
-#include
-
-TEST(PathUtil, GamePathToFullPath_DoesNotBufferOverflow)
+#include
+#include
+namespace UnitTest
{
- // There are no test assertions in this test because the purpose is just to verify that the test runs without crashing
- QString pngExtension(".png");
+ class PathUtil
+ : public ScopedAllocatorSetupFixture
+ {
+ };
+
+ TEST_F(PathUtil, GamePathToFullPath_DoesNotBufferOverflow)
+ {
+ // There are no test assertions in this test because the purpose is just to verify that the test runs without crashing
+ QString pngExtension(".png");
- // Create a string of lenth AZ_MAX_PATH_LEN that ends in .png
- QString longStringMaxPath(AZ_MAX_PATH_LEN, 'x');
- longStringMaxPath.replace(longStringMaxPath.length() - pngExtension.length(), longStringMaxPath.length(), pngExtension);
- Path::GamePathToFullPath(longStringMaxPath);
+ // Create a string of length AZ_MAX_PATH_LEN that ends in .png
+ QString longStringMaxPath(AZ_MAX_PATH_LEN, 'x');
+ longStringMaxPath.replace(longStringMaxPath.length() - pngExtension.length(), longStringMaxPath.length(), pngExtension);
+ AZ_TEST_START_TRACE_SUPPRESSION;
+ Path::GamePathToFullPath(longStringMaxPath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT;
- QString longStringMaxPathPlusOne(AZ_MAX_PATH_LEN + 1, 'x');
- longStringMaxPathPlusOne.replace(longStringMaxPathPlusOne.length() - pngExtension.length(), longStringMaxPathPlusOne.length(), pngExtension);
- Path::GamePathToFullPath(longStringMaxPathPlusOne);
+ QString longStringMaxPathPlusOne(AZ_MAX_PATH_LEN + 1, 'x');
+ longStringMaxPathPlusOne.replace(longStringMaxPathPlusOne.length() - pngExtension.length(), longStringMaxPathPlusOne.length(), pngExtension);
+ Path::GamePathToFullPath(longStringMaxPathPlusOne);
+ }
}
diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp
index b5eb4229df..4aa3d22114 100644
--- a/Code/Editor/CryEdit.cpp
+++ b/Code/Editor/CryEdit.cpp
@@ -2642,7 +2642,7 @@ void CCryEditApp::OnFileResaveSlices()
sliceAssetInfos.reserve(5000);
AZ::Data::AssetCatalogRequests::AssetEnumerationCB sliceCountCb = [&sliceAssetInfos]([[maybe_unused]] const AZ::Data::AssetId id, const AZ::Data::AssetInfo& info)
{
- // Only add slices and nothing that has been temporarily added to the catalog with a macro in it (ie @devroot@)
+ // Only add slices and nothing that has been temporarily added to the catalog with a macro in it (ie @engroot@)
if (info.m_assetType == azrtti_typeid() && info.m_relativePath[0] != '@')
{
sliceAssetInfos.push_back(info);
diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp
index 07d946c609..75bd0ad270 100644
--- a/Code/Editor/CryEditDoc.cpp
+++ b/Code/Editor/CryEditDoc.cpp
@@ -1108,7 +1108,7 @@ bool CCryEditDoc::SaveLevel(const QString& filename)
if (QFileInfo(filename).isRelative())
{
// Resolving the path through resolvepath would normalize and lowcase it, and in this case, we don't want that.
- fullPathName = Path::ToUnixPath(QDir(QString::fromUtf8(gEnv->pFileIO->GetAlias("@devassets@"))).absoluteFilePath(fullPathName));
+ fullPathName = Path::ToUnixPath(QDir(QString::fromUtf8(gEnv->pFileIO->GetAlias("@projectroot@"))).absoluteFilePath(fullPathName));
}
if (!CFileUtil::OverwriteFile(fullPathName))
@@ -2159,7 +2159,7 @@ bool CCryEditDoc::LoadXmlArchiveArray(TDocMultiArchive& arrXmlAr, const QString&
xmlAr.bLoading = true;
// bound to the level folder, as if it were the assets folder.
- // this mounts (whateverlevelname.ly) as @assets@/Levels/whateverlevelname/ and thus it works...
+ // this mounts (whateverlevelname.ly) as @products@/Levels/whateverlevelname/ and thus it works...
bool openLevelPakFileSuccess = pIPak->OpenPack(levelPath.toUtf8().data(), absoluteLevelPath.toUtf8().data());
if (!openLevelPakFileSuccess)
{
diff --git a/Code/Editor/Dialogs/PythonScriptsDialog.cpp b/Code/Editor/Dialogs/PythonScriptsDialog.cpp
index e95fb90c0a..35047947ac 100644
--- a/Code/Editor/Dialogs/PythonScriptsDialog.cpp
+++ b/Code/Editor/Dialogs/PythonScriptsDialog.cpp
@@ -91,7 +91,7 @@ CPythonScriptsDialog::CPythonScriptsDialog(QWidget* parent)
{
AZ::IO::Path newSourcePath = jsonSourcePathPointer;
// Resolve any file aliases first - Do not use ResolvePath() as that assumes
- // any relative path is underneath the @assets@ alias
+ // any relative path is underneath the @products@ alias
if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr)
{
AZ::IO::FixedMaxPath replacedAliasPath;
diff --git a/Code/Editor/EditorFileMonitor.cpp b/Code/Editor/EditorFileMonitor.cpp
index 7feb9d32a8..311c42befa 100644
--- a/Code/Editor/EditorFileMonitor.cpp
+++ b/Code/Editor/EditorFileMonitor.cpp
@@ -14,6 +14,8 @@
// Editor
#include "CryEdit.h"
+#include
+
//////////////////////////////////////////////////////////////////////////
CEditorFileMonitor::CEditorFileMonitor()
{
@@ -177,26 +179,14 @@ void CEditorFileMonitor::OnFileMonitorChange(const SFileChangeInfo& rChange)
// Make file relative to PrimaryCD folder.
QString filename = rChange.filename;
- // Remove game directory if present in path.
- const QString rootPath =
- QDir::fromNativeSeparators(QString::fromLatin1(Path::GetEditingRootFolder().c_str()));
- if (filename.startsWith(rootPath, Qt::CaseInsensitive))
- {
- filename = filename.right(filename.length() - rootPath.length());
- }
-
- // Make sure there is no leading slash
- if (!filename.isEmpty() && (filename[0] == '\\' || filename[0] == '/'))
- {
- filename = filename.mid(1);
- }
+ // Make path relative to the the project directory
+ AZ::IO::Path projectPath{ AZ::Utils::GetProjectPath() };
+ AZ::IO::FixedMaxPath projectRelativeFilePath = AZ::IO::PathView(filename.toUtf8().constData()).LexicallyProximate(
+ projectPath);
- if (!filename.isEmpty())
+ if (!projectRelativeFilePath.empty())
{
- //remove game name. Make it relative to the game folder
- const QString filenameRelGame = RemoveGameName(filename);
- const int extIndex = filename.lastIndexOf('.');
- const QString ext = filename.right(filename.length() - 1 - extIndex);
+ AZ::IO::PathView ext = projectRelativeFilePath.Extension();
// Check for File Monitor callback
std::vector::iterator iter;
@@ -207,15 +197,11 @@ void CEditorFileMonitor::OnFileMonitorChange(const SFileChangeInfo& rChange)
// We compare against length of callback string, so we get directory matches as well as full filenames
if (sCallback.pListener)
{
- if (sCallback.extension == "*" || ext.compare(sCallback.extension, Qt::CaseInsensitive) == 0)
+ if (sCallback.extension == "*" || AZ::IO::PathView(sCallback.extension.toUtf8().constData()) == ext)
{
- if (filenameRelGame.compare(sCallback.item, Qt::CaseInsensitive) == 0)
- {
- sCallback.pListener->OnFileChange(qPrintable(filenameRelGame), IFileChangeListener::EChangeType(rChange.changeType));
- }
- else if (filename.compare(sCallback.item, Qt::CaseInsensitive) == 0)
+ if (AZ::IO::PathView(sCallback.item.toUtf8().constData()) == projectRelativeFilePath)
{
- sCallback.pListener->OnFileChange(qPrintable(filename), IFileChangeListener::EChangeType(rChange.changeType));
+ sCallback.pListener->OnFileChange(qPrintable(projectRelativeFilePath.c_str()), IFileChangeListener::EChangeType(rChange.changeType));
}
}
}
diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp
index b9e4878879..41e950a058 100644
--- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp
+++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp
@@ -1895,7 +1895,7 @@ void SandboxIntegrationManager::MakeSliceFromEntities(const AzToolsFramework::En
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(entitiesAndDescendants,
&AzToolsFramework::ToolsApplicationRequestBus::Events::GatherEntitiesAndAllDescendents, entities);
- const AZStd::string slicesAssetsPath = "@devassets@/Slices";
+ const AZStd::string slicesAssetsPath = "@projectroot@/Slices";
if (!gEnv->pFileIO->Exists(slicesAssetsPath.c_str()))
{
diff --git a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp
index 98bf228391..0ff9467f33 100644
--- a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp
+++ b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp
@@ -30,6 +30,7 @@ class CXTPDockingPaneLayout; // Needed for settings.h
#include
#include
#include
+#include
#include
#include
#include
@@ -47,41 +48,6 @@ class CXTPDockingPaneLayout; // Needed for settings.h
const char* AssetImporterWindow::s_documentationWebAddress = "http://docs.aws.amazon.com/lumberyard/latest/userguide/char-fbx-importer.html";
const AZ::Uuid AssetImporterWindow::s_browseTag = AZ::Uuid::CreateString("{C240D2E1-BFD2-4FFA-BB5B-CC0FA389A5D3}");
-void MakeUserFriendlySourceAssetPath(QString& out, const QString& sourcePath)
-{
- char devAssetsRoot[AZ_MAX_PATH_LEN] = { 0 };
- if (!gEnv->pFileIO->ResolvePath("@devroot@", devAssetsRoot, AZ_MAX_PATH_LEN))
- {
- out = sourcePath;
- return;
- }
-
- AZStd::replace(devAssetsRoot, devAssetsRoot + AZ_MAX_PATH_LEN- 1, AZ_WRONG_FILESYSTEM_SEPARATOR, AZ_CORRECT_FILESYSTEM_SEPARATOR);
-
- // Find if the sourcePathArray is a sub directory of the devAssets folder
- // Keep reference to sourcePathArray long enough to use in PathView
- QByteArray sourcePathArray = sourcePath.toUtf8();
- AZ::IO::PathView sourcePathRootView(sourcePathArray.data());
- AZ::IO::PathView devAssetsRootView(devAssetsRoot);
- auto [sourcePathIter, devAssetsIter] = AZStd::mismatch(sourcePathRootView.begin(), sourcePathRootView.end(),
- devAssetsRootView.begin(), devAssetsRootView.end());
- // If the devAssets path iterator is not equal to the end, then there was a mismistch while comparing it
- // against the source path indicating that the source path is not a sub-directory
- if (devAssetsIter != devAssetsRootView.end())
- {
- out = sourcePath;
- return;
- }
-
- int offset = aznumeric_cast(strlen(devAssetsRoot));
- if (sourcePath.at(offset) == AZ_CORRECT_FILESYSTEM_SEPARATOR)
- {
- ++offset;
- }
- out = sourcePath.right(sourcePath.length() - offset);
-
-}
-
AssetImporterWindow::AssetImporterWindow()
: AssetImporterWindow(nullptr)
{
@@ -102,7 +68,7 @@ AssetImporterWindow::AssetImporterWindow(QWidget* parent)
AssetImporterWindow::~AssetImporterWindow()
{
- AZ_Assert(m_processingOverlayIndex == AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex,
+ AZ_Assert(m_processingOverlayIndex == AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex,
"Processing overlay (and potentially background thread) still active at destruction.");
AZ_Assert(!m_processingOverlay, "Processing overlay (and potentially background thread) still active at destruction.");
}
@@ -133,7 +99,7 @@ void AssetImporterWindow::OpenFile(const AZStd::string& filePath)
QMessageBox::warning(this, "In progress", "Unable to close one or more windows at this time.");
return;
}
-
+
OpenFileInternal(filePath);
}
@@ -146,7 +112,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev)
if (m_processingOverlay)
{
- AZ_Assert(m_processingOverlayIndex != AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex,
+ AZ_Assert(m_processingOverlayIndex != AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex,
"Processing overlay present, but not the index in the overlay for it.");
if (m_processingOverlay->HasProcessingCompleted())
{
@@ -157,7 +123,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev)
}
else
{
- QMessageBox::critical(this, "Processing In Progress", "Unable to close the result window at this time.",
+ QMessageBox::critical(this, "Processing In Progress", "Unable to close the result window at this time.",
QMessageBox::Ok, QMessageBox::Ok);
ev->ignore();
return;
@@ -165,7 +131,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev)
}
else
{
- QMessageBox::critical(this, "Processing In Progress", "Please wait until processing has completed to try again.",
+ QMessageBox::critical(this, "Processing In Progress", "Please wait until processing has completed to try again.",
QMessageBox::Ok, QMessageBox::Ok);
ev->ignore();
return;
@@ -199,7 +165,9 @@ void AssetImporterWindow::Init()
// Load the style sheets
AzQtComponents::StylesheetPreprocessor styleSheetProcessor(nullptr);
- AZStd::string mainWindowQSSPath = Path::GetEditingRootFolder() + "\\Editor\\Styles\\AssetImporterWindow.qss";
+ auto mainWindowQSSPath = AZ::IO::Path(AZ::Utils::GetEnginePath()) / "Assets";
+ mainWindowQSSPath /= "Editor/Styles/AssetImporterWindow.qss";
+ mainWindowQSSPath.MakePreferred();
QFile mainWindowStyleSheetFile(mainWindowQSSPath.c_str());
if (mainWindowStyleSheetFile.open(QFile::ReadOnly))
{
@@ -212,7 +180,7 @@ void AssetImporterWindow::Init()
{
ui->m_actionInspect->setVisible(false);
}
-
+
ResetMenuAccess(WindowState::InitialNothingLoaded);
// Setup the overlay system, and set the root to be the root display. The root display has the browse,
@@ -220,7 +188,7 @@ void AssetImporterWindow::Init()
m_overlay.reset(aznew AZ::SceneAPI::UI::OverlayWidget(this));
m_rootDisplay.reset(aznew ImporterRootDisplay(m_serializeContext));
connect(m_rootDisplay.data(), &ImporterRootDisplay::UpdateClicked, this, &AssetImporterWindow::UpdateClicked);
-
+
connect(m_overlay.data(), &AZ::SceneAPI::UI::OverlayWidget::LayerAdded, this, &AssetImporterWindow::OverlayLayerAdded);
connect(m_overlay.data(), &AZ::SceneAPI::UI::OverlayWidget::LayerRemoved, this, &AssetImporterWindow::OverlayLayerRemoved);
@@ -242,7 +210,7 @@ void AssetImporterWindow::Init()
AZStd::string joinedExtensions;
AzFramework::StringFunc::Join(joinedExtensions, extensions.begin(), extensions.end(), " or ");
- AZStd::string firstLineText =
+ AZStd::string firstLineText =
AZStd::string::format(
"%s files are available for use after placing them in any folder within your game project. "
"These files will automatically be processed and may be accessed via the Asset Browser. Learn more...",
@@ -250,13 +218,13 @@ void AssetImporterWindow::Init()
ui->m_initialPromptFirstLine->setText(firstLineText.c_str());
- AZStd::string secondLineText =
+ AZStd::string secondLineText =
AZStd::string::format("To adjust the %s settings, right-click the file in the Asset Browser and select \"Edit Settings\" from the context menu.", joinedExtensions.c_str());
ui->m_initialPromptSecondLine->setText(secondLineText.c_str());
}
else
{
- AZStd::string firstLineText =
+ AZStd::string firstLineText =
AZStd::string::format(
"Files are available for use after placing them in any folder within your game project. "
"These files will automatically be processed and may be accessed via the Asset Browser. Learn more...", s_documentationWebAddress);
@@ -282,12 +250,12 @@ void AssetImporterWindow::OpenFileInternal(const AZStd::string& filePath)
auto asyncLoadHandler = AZStd::make_shared(
s_browseTag,
[this, filePath]()
- {
- m_assetImporterDocument->LoadScene(filePath);
+ {
+ m_assetImporterDocument->LoadScene(filePath);
},
[this]()
{
- HandleAssetLoadingCompleted();
+ HandleAssetLoadingCompleted();
}, this);
m_processingOverlay.reset(new ProcessingOverlayWidget(m_overlay.data(), ProcessingOverlayWidget::Layout::Loading, s_browseTag));
@@ -304,7 +272,7 @@ bool AssetImporterWindow::IsAllowedToChangeSourceFile()
return true;
}
- QMessageBox messageBox(QMessageBox::Icon::NoIcon, "Unsaved changes",
+ QMessageBox messageBox(QMessageBox::Icon::NoIcon, "Unsaved changes",
"You have unsaved changes. Do you want to discard those changes?",
QMessageBox::StandardButton::Discard | QMessageBox::StandardButton::Cancel, this);
messageBox.exec();
@@ -406,7 +374,7 @@ void AssetImporterWindow::OnSceneResetRequested()
else
{
m_assetImporterDocument->ClearScene();
- AZ_TracePrintf(ErrorWindow, "Manifest reset returned in '%s'",
+ AZ_TracePrintf(ErrorWindow, "Manifest reset returned in '%s'",
result.GetResult() == ProcessingResult::Failure ? "Failure" : "Ignored");
}
},
@@ -456,7 +424,7 @@ void AssetImporterWindow::OnInspect()
// make sure the inspector doesn't outlive the AssetImporterWindow, since we own the data it will be inspecting.
auto* theInspectWidget = aznew AZ::SceneAPI::UI::SceneGraphInspectWidget(*m_assetImporterDocument->GetScene());
QObject::connect(this, &QObject::destroyed, theInspectWidget, [theInspectWidget]() { theInspectWidget->window()->close(); } );
-
+
m_overlay->PushLayer(label, theInspectWidget, "Scene Inspector", buttons);
}
@@ -483,7 +451,7 @@ void AssetImporterWindow::OverlayLayerRemoved()
else
{
ResetMenuAccess(WindowState::InitialNothingLoaded);
-
+
ui->m_initialBrowseContainer->show();
m_rootDisplay->hide();
}
@@ -533,8 +501,9 @@ void AssetImporterWindow::HandleAssetLoadingCompleted()
m_fullSourcePath = m_assetImporterDocument->GetScene()->GetSourceFilename();
SetTitle(m_fullSourcePath.c_str());
- QString userFriendlyFileName;
- MakeUserFriendlySourceAssetPath(userFriendlyFileName, m_fullSourcePath.c_str());
+ AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath();
+ AZ::IO::FixedMaxPath relativeSourcePath = AZ::IO::PathView(m_fullSourcePath).LexicallyProximate(projectPath);
+ auto userFriendlyFileName = QString::fromUtf8(relativeSourcePath.c_str(), static_cast(relativeSourcePath.Native().size()));
m_rootDisplay->SetSceneDisplay(userFriendlyFileName, m_assetImporterDocument->GetScene());
// Once we've browsed to something successfully, we need to hide the initial browse button layer and
diff --git a/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp b/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp
index b1d07af41c..5ee54667b9 100644
--- a/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp
+++ b/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp
@@ -7,9 +7,11 @@
*/
#include
+#include
#include
#include
#include
+#include
#include
#include
#include
@@ -50,22 +52,15 @@ namespace AZ
return nullptr;
}
- AZStd::string cleanPath = filePath;
- if (AzFramework::StringFunc::Path::IsRelative(filePath.c_str()))
+ AZ::IO::Path enginePath;
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
{
- const char* absolutePath = nullptr;
- AzToolsFramework::AssetSystemRequestBus::BroadcastResult(absolutePath,
- &AzToolsFramework::AssetSystemRequestBus::Events::GetAbsoluteDevRootFolderPath);
- AZ_Assert(absolutePath, "Unable to retrieve the dev folder path");
- AzFramework::StringFunc::Path::Join(absolutePath, cleanPath.c_str(), cleanPath);
- }
- else
- {
- // Normalizing is not needed if the path is relative as Join(...) will also normalize.
- AzFramework::StringFunc::Path::Normalize(cleanPath);
+ settingsRegistry->Get(enginePath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder);
}
- auto sceneIt = m_scenes.find(cleanPath);
+ AZ::IO::Path cleanPath = (enginePath / filePath).LexicallyNormal();
+
+ auto sceneIt = m_scenes.find(cleanPath.Native());
if (sceneIt != m_scenes.end())
{
AZStd::shared_ptr scene = sceneIt->second.lock();
@@ -98,14 +93,14 @@ namespace AZ
}
AZStd::shared_ptr scene =
- AssetImportRequest::LoadSceneFromVerifiedPath(cleanPath, sceneSourceGuid, AssetImportRequest::RequestingApplication::Editor, SceneAPI::SceneCore::LoadingComponent::TYPEINFO_Uuid());
+ AssetImportRequest::LoadSceneFromVerifiedPath(cleanPath.Native(), sceneSourceGuid, AssetImportRequest::RequestingApplication::Editor, SceneAPI::SceneCore::LoadingComponent::TYPEINFO_Uuid());
if (!scene)
{
AZ_TracePrintf(Utilities::ErrorWindow, "Failed to load the requested scene.");
return nullptr;
}
- m_scenes.emplace(AZStd::move(cleanPath), scene);
+ m_scenes.emplace(AZStd::move(cleanPath.Native()), scene);
return scene;
}
diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp
index 6b454474be..a53ce966c4 100644
--- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp
+++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp
@@ -46,7 +46,6 @@ namespace ProjectSettingsTool
, LastPathBus::Handler()
, m_ui(new Ui::ProjectSettingsToolWidget())
, m_reconfigureProcess()
- , m_devRoot(GetDevRoot())
, m_projectRoot(GetProjectRoot())
, m_projectName(GetProjectName())
, m_plistsInitVector(
diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h
index 1c9aa4b1bf..daa5bea27c 100644
--- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h
+++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h
@@ -147,7 +147,6 @@ namespace ProjectSettingsTool
// The process used to reconfigure settings
QProcess m_reconfigureProcess;
- AZStd::string m_devRoot;
AZStd::string m_projectRoot;
AZStd::string m_projectName;
diff --git a/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp b/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp
index 0e171adf04..d5b94469cc 100644
--- a/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp
+++ b/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp
@@ -27,37 +27,31 @@ namespace
}
template
- StringType GetAbsoluteDevRoot()
+ StringType GetAbsoluteEngineRoot()
{
- const char* devRoot = nullptr;
- AzToolsFramework::AssetSystemRequestBus::BroadcastResult(
- devRoot,
- &AzToolsFramework::AssetSystemRequestBus::Handler::GetAbsoluteDevRootFolderPath);
+ AZ::IO::FixedMaxPath engineRoot = AZ::Utils::GetEnginePath();
- if (!devRoot)
+ if (engineRoot.empty())
{
return "";
}
- StringType devRootString(devRoot);
- ToUnixPath(devRootString);
- return devRootString;
+ StringType engineRootString(engineRoot.c_str());
+ ToUnixPath(engineRootString);
+ return engineRootString;
}
template
StringType GetAbsoluteProjectRoot()
{
- const char* projectRoot = nullptr;
- AzToolsFramework::AssetSystemRequestBus::BroadcastResult(
- projectRoot,
- &AzToolsFramework::AssetSystemRequestBus::Handler::GetAbsoluteDevGameFolderPath);
+ AZ::IO::FixedMaxPath projectRoot = AZ::Utils::GetProjectPath();
- if (!projectRoot)
+ if (projectRoot.empty())
{
return "";
}
- StringType projectRootString(projectRoot);
+ StringType projectRootString(projectRoot.c_str());
ToUnixPath(projectRootString);
return projectRootString;
}
@@ -87,9 +81,9 @@ namespace ProjectSettingsTool
return reinterpret_cast(func);
}
- AZStd::string GetDevRoot()
+ AZStd::string GetEngineRoot()
{
- return GetAbsoluteDevRoot();
+ return GetAbsoluteEngineRoot();
}
AZStd::string GetProjectRoot()
{
@@ -104,7 +98,7 @@ namespace ProjectSettingsTool
QString SelectXmlFromFileDialog(const QString& currentFile)
{
// The selected file must be relative to this path
- QString defaultPath = GetAbsoluteDevRoot();
+ QString defaultPath = GetAbsoluteEngineRoot();
QString startPath;
// Choose the starting path for file dialog
@@ -139,7 +133,7 @@ namespace ProjectSettingsTool
QString SelectImageFromFileDialog(const QString& currentFile)
{
- QString defaultPath = QStringLiteral("%1Code%2/Resources/").arg(GetAbsoluteDevRoot(), ::GetProjectName());
+ QString defaultPath = QStringLiteral("%1Code%2/Resources/").arg(GetAbsoluteEngineRoot(), ::GetProjectName());
QString startPath;
@@ -188,7 +182,7 @@ namespace ProjectSettingsTool
// Android
if (group <= ImageGroup::AndroidPortrait)
{
- root = GetDevRoot() + "/Code/Tools/Android/ProjectBuilder/app_";
+ root = GetEngineRoot() + "/Code/Tools/Android/ProjectBuilder/app_";
}
//Ios
else
diff --git a/Code/Editor/Plugins/ProjectSettingsTool/Utils.h b/Code/Editor/Plugins/ProjectSettingsTool/Utils.h
index 4226d534a6..050fb3b85b 100644
--- a/Code/Editor/Plugins/ProjectSettingsTool/Utils.h
+++ b/Code/Editor/Plugins/ProjectSettingsTool/Utils.h
@@ -17,7 +17,7 @@
namespace ProjectSettingsTool
{
void* ConvertFunctorToVoid(AZStd::pair(*func)(const QString&));
- AZStd::string GetDevRoot();
+ AZStd::string GetEngineRoot();
AZStd::string GetProjectRoot();
AZStd::string GetProjectName();
diff --git a/Code/Editor/Settings.cpp b/Code/Editor/Settings.cpp
index 05a6960695..47743d1c42 100644
--- a/Code/Editor/Settings.cpp
+++ b/Code/Editor/Settings.cpp
@@ -935,8 +935,9 @@ void SEditorSettings::LoadDefaultGamePaths()
searchPaths[EDITOR_PATH_MATERIALS].push_back((Path::GetEditingGameDataFolder() + "/Materials").c_str());
}
- AZStd::string iconsPath;
- AZ::StringFunc::Path::Join(Path::GetEditingRootFolder().c_str(), "Editor/UI/Icons", iconsPath);
+ auto iconsPath = AZ::IO::Path(AZ::Utils::GetEnginePath()) / "Assets";
+ iconsPath /= "Editor/UI/Icons";
+ iconsPath.MakePreferred();
searchPaths[EDITOR_PATH_UI_ICONS].push_back(iconsPath.c_str());
}
diff --git a/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp b/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp
index b510315995..d7901e338a 100644
--- a/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp
+++ b/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp
@@ -269,7 +269,7 @@ void CSequenceBatchRenderDialog::OnRenderItemSelChange()
// Enable/disable the 'remove'/'update' button properly.
bool bNoSelection = !m_ui->m_renderList->selectionModel()->hasSelection();
m_ui->BATCH_RENDER_REMOVE_SEQ->setEnabled(bNoSelection ? false : true);
-
+
CheckForEnableUpdateButton();
if (bNoSelection)
@@ -360,7 +360,7 @@ void CSequenceBatchRenderDialog::OnRenderItemSelChange()
cvarsText += item.cvars[static_cast(i)];
cvarsText += "\r\n";
}
- m_ui->m_cvarsEdit->setPlainText(cvarsText);
+ m_ui->m_cvarsEdit->setPlainText(cvarsText);
}
void CSequenceBatchRenderDialog::CheckForEnableUpdateButton()
@@ -494,7 +494,7 @@ void CSequenceBatchRenderDialog::OnSavePreset()
}
void CSequenceBatchRenderDialog::stashActiveViewportResolution()
-{
+{
// stash active resolution in global vars
activeViewportWidth = resolutions[0][0];
activeViewportHeight = resolutions[0][1];
@@ -502,7 +502,7 @@ void CSequenceBatchRenderDialog::stashActiveViewportResolution()
if (activeViewport)
{
activeViewport->GetDimensions(&activeViewportWidth, &activeViewportHeight);
- }
+ }
}
void CSequenceBatchRenderDialog::OnGo()
@@ -640,7 +640,7 @@ void CSequenceBatchRenderDialog::OnResolutionSelected()
int defaultH;
const QString currentCustomResText = m_ui->m_resolutionCombo->currentText();
GetResolutionFromCustomResText(currentCustomResText.toStdString().c_str(), defaultW, defaultH);
-
+
CCustomResolutionDlg resDlg(defaultW, defaultH, this);
if (resDlg.exec() == QDialog::Accepted)
{
@@ -752,7 +752,7 @@ bool CSequenceBatchRenderDialog::LoadOutputOptions(const QString& pathname)
{
const QString customResText = resolutionNode->getContent();
m_ui->m_resolutionCombo->setItemText(curSel, customResText);
-
+
GetResolutionFromCustomResText(customResText.toStdString().c_str(), m_customResW, m_customResH);
}
m_ui->m_resolutionCombo->setCurrentIndex(curSel);
@@ -907,12 +907,12 @@ void CSequenceBatchRenderDialog::CaptureItemStart()
folder += "/";
folder += itemText;
- // If this is a relative path, prepend the @assets@ folder to match where the Renderer is going
+ // If this is a relative path, prepend the @products@ folder to match where the Renderer is going
// to dump the frame buffer image captures.
if (AzFramework::StringFunc::Path::IsRelative(folder.toUtf8().data()))
{
AZStd::string absolutePath;
- AZStd::string assetsRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@");
+ AZStd::string assetsRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@");
AzFramework::StringFunc::Path::Join(assetsRoot.c_str(), folder.toUtf8().data(), absolutePath);
folder = absolutePath.c_str();
}
@@ -962,7 +962,7 @@ void CSequenceBatchRenderDialog::CaptureItemStart()
m_renderContext.cvarDisplayInfoBU = cvarDebugInfo->GetIVal();
if (renderItem.disableDebugInfo && cvarDebugInfo->GetIVal())
{
- const int DISPLAY_INFO_OFF = 0;
+ const int DISPLAY_INFO_OFF = 0;
cvarDebugInfo->Set(DISPLAY_INFO_OFF);
}
}
@@ -1100,13 +1100,13 @@ void CSequenceBatchRenderDialog::OnUpdateEnd(IAnimSequence* sequence)
sequence->SetActiveDirector(m_renderContext.pActiveDirectorBU);
const auto imageFormat = m_ui->m_imageFormatCombo->currentText();
-
+
SRenderItem renderItem = m_renderItems[m_renderContext.currentItemIndex];
if (m_bFFMPEGCommandAvailable && renderItem.bCreateVideo)
{
// Create a video using the ffmpeg plug-in from captured images.
m_renderContext.processingFFMPEG = true;
-
+
AZStd::string outputFolder = m_renderContext.captureOptions.folder;
auto future = QtConcurrent::run(
[renderItem, outputFolder, imageFormat]
@@ -1238,7 +1238,7 @@ void CSequenceBatchRenderDialog::OnKickIdleTimout()
}
void CSequenceBatchRenderDialog::OnKickIdle()
-{
+{
if (m_renderContext.captureState == CaptureState::WarmingUpAfterResChange)
{
OnUpdateWarmingUpAfterResChange();
@@ -1254,7 +1254,7 @@ void CSequenceBatchRenderDialog::OnKickIdle()
else if (m_renderContext.captureState == CaptureState::Capturing)
{
OnUpdateCapturing();
- }
+ }
else if (m_renderContext.captureState == CaptureState::End)
{
OnUpdateEnd(m_renderContext.endingSequence);
diff --git a/Code/Editor/Util/PathUtil.cpp b/Code/Editor/Util/PathUtil.cpp
index c9e6823824..ca3481ddae 100644
--- a/Code/Editor/Util/PathUtil.cpp
+++ b/Code/Editor/Util/PathUtil.cpp
@@ -11,9 +11,9 @@
#include "PathUtil.h"
-#include // for AZ_MAX_PATH_LEN
+#include
+#include
#include // for ebus events
-#include
#include
#include
#include
@@ -179,7 +179,7 @@ namespace Path
EBUS_EVENT_RESULT(engineRoot, AzFramework::ApplicationRequests::Bus, GetEngineRoot);
return QString(engineRoot);
}
-
+
//////////////////////////////////////////////////////////////////////////
QString& ReplaceFilename(const QString& strFilepath, const QString& strFilename, QString& strOutputFilename, bool bCallCaselessPath)
{
@@ -216,30 +216,21 @@ namespace Path
//////////////////////////////////////////////////////////////////////////
QString GetResolvedUserSandboxFolder()
{
- char resolvedPath[AZ_MAX_PATH_LEN] = { 0 };
- gEnv->pFileIO->ResolvePath(GetUserSandboxFolder().toUtf8().data(), resolvedPath, AZ_MAX_PATH_LEN);
- return QString::fromLatin1(resolvedPath);
+ AZ::IO::FixedMaxPath userSandboxFolderPath;
+ gEnv->pFileIO->ResolvePath(userSandboxFolderPath, GetUserSandboxFolder().toUtf8().constData());
+ return QString::fromUtf8(userSandboxFolderPath.c_str(), static_cast(userSandboxFolderPath.Native().size()));
}
// internal function, you should use GetEditingGameDataFolder instead.
AZStd::string GetGameAssetsFolder()
{
- const char* resultValue = nullptr;
- EBUS_EVENT_RESULT(resultValue, AzToolsFramework::AssetSystemRequestBus, GetAbsoluteDevGameFolderPath);
- if (!resultValue)
- {
- if ((gEnv) && (gEnv->pFileIO))
- {
- resultValue = gEnv->pFileIO->GetAlias("@devassets@");
- }
- }
-
- if (!resultValue)
+ AZ::IO::Path projectPath;
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
{
- resultValue = ".";
+ settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath);
}
- return resultValue;
+ return projectPath.Native();
}
/// Get the data folder
@@ -258,26 +249,6 @@ namespace Path
return str;
}
- //! Get the root folder (in source control or other writable assets) where you should save root data.
- AZStd::string GetEditingRootFolder()
- {
- const char* resultValue = nullptr;
- EBUS_EVENT_RESULT(resultValue, AzToolsFramework::AssetSystemRequestBus, GetAbsoluteDevRootFolderPath);
-
- if (!resultValue)
- {
- if ((gEnv) && (gEnv->pFileIO))
- {
- resultValue = gEnv->pFileIO->GetAlias("@devassets@");
- }
- }
- if (!resultValue)
- {
- resultValue = ".";
- }
- return resultValue;
- }
-
AZStd::string MakeModPathFromGamePath(const char* relGamePath)
{
@@ -335,165 +306,60 @@ namespace Path
return "";
}
- bool relPathfound = false;
+ bool relPathFound = false;
AZStd::string relativePath;
AZStd::string fullAssetPath(fullPath.toUtf8().data());
- EBUS_EVENT_RESULT(relPathfound, AzToolsFramework::AssetSystemRequestBus, GetRelativeProductPathFromFullSourceOrProductPath, fullAssetPath, relativePath);
+ EBUS_EVENT_RESULT(relPathFound, AzToolsFramework::AssetSystemRequestBus, GetRelativeProductPathFromFullSourceOrProductPath, fullAssetPath, relativePath);
- if (relPathfound)
+ if (relPathFound)
{
// do not normalize this path, it will already be an appropriate asset ID.
return CaselessPaths(relativePath.c_str());
}
- char rootpath[_MAX_PATH] = { 0 };
- azstrcpy(rootpath, _MAX_PATH, Path::GetEditingRootFolder().c_str());
-
- if (bRelativeToGameFolder)
- {
- azstrcpy(rootpath, _MAX_PATH, Path::GetEditingGameDataFolder().c_str());
- }
-
- QString rootPathNormalized(rootpath);
- QString srcPathNormalized(fullPath);
-
-#if defined(AZ_PLATFORM_WINDOWS)
- // avoid confusing PathRelativePathTo
- rootPathNormalized.replace('/', '\\');
- srcPathNormalized.replace('/', '\\');
-#endif
+ AZ::IO::FixedMaxPath rootPath = bRelativeToGameFolder ? AZ::Utils::GetProjectPath() : AZ::Utils::GetEnginePath();
+ AZ::IO::FixedMaxPath resolvedFullPath;
+ AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(resolvedFullPath, fullPath.toUtf8().constData());
// Create relative path
- char resolvedSrcPath[AZ_MAX_PATH_LEN] = { 0 };
- AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(srcPathNormalized.toUtf8().data(), resolvedSrcPath, AZ_MAX_PATH_LEN);
- QByteArray path = QDir(rootPathNormalized).relativeFilePath(resolvedSrcPath).toUtf8();
- if (path.isEmpty())
- {
- return fullPath;
- }
- // The following code is required because the windows PathRelativePathTo function will always return "./SomePath" instead of just "SomePath"
- // Only remove single dot (.) and slash parts of a path, never the double dot (..)
- const char* pBuffer = path.data();
- bool bHasDot = false;
- while (*pBuffer && pBuffer != path.end())
- {
- switch (*pBuffer)
- {
- case '.':
- if (bHasDot)
- {
- // Found a double dot, rewind and stop removing
- pBuffer--;
- break;
- }
- // Fall through intended
- case '/':
- case '\\':
- bHasDot = (*pBuffer == '.');
- pBuffer++;
- continue;
- }
- break;
- }
-
- QString relPath = pBuffer;
- return CaselessPaths(relPath);
+ return CaselessPaths(resolvedFullPath.LexicallyProximate(rootPath).MakePreferred().c_str());
}
QString GamePathToFullPath(const QString& path)
{
using namespace AzToolsFramework;
- AZ_Warning("GamePathToFullPath", path.size() <= AZ_MAX_PATH_LEN, "Path exceeds maximum path length of %d", AZ_MAX_PATH_LEN);
- if ((gEnv) && (gEnv->pFileIO) && gEnv->pCryPak && path.size() <= AZ_MAX_PATH_LEN)
+ AZ_Warning("GamePathToFullPath", path.size() <= AZ::IO::MaxPathLength, "Path exceeds maximum path length of %zu", AZ::IO::MaxPathLength);
+ if (path.size() <= AZ::IO::MaxPathLength)
{
// first, adjust the file name for mods:
- bool fullPathfound = false;
- AZStd::string assetFullPath;
- AZStd::string adjustedFilePath = path.toUtf8().data();
- AssetSystemRequestBus::BroadcastResult(fullPathfound, &AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, adjustedFilePath, assetFullPath);
- if (fullPathfound)
+ bool fullPathFound = false;
+ AZ::IO::Path assetFullPath;
+ AZ::IO::Path adjustedFilePath = path.toUtf8().constData();
+ AssetSystemRequestBus::BroadcastResult(fullPathFound, &AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath,
+ adjustedFilePath.Native(), assetFullPath.Native());
+ if (fullPathFound)
{
- //if the bus message succeeds than normalize and lowercase the path
- AzFramework::StringFunc::Path::Normalize(assetFullPath);
- return assetFullPath.c_str();
+ //if the bus message succeeds than normalize
+ return assetFullPath.LexicallyNormal().c_str();
}
- // if the bus message didn't succeed, 'guess' the source assets:
+ // if the bus message didn't succeed, check if he path exist as a resolved path
else
{
// Not all systems have been converted to use local paths. Some editor files save XML files directly, and a full or correctly aliased path is already passed in.
// If the path passed in exists already, then return the resolved filepath
if (AZ::IO::FileIOBase::GetDirectInstance()->Exists(adjustedFilePath.c_str()))
{
- char resolvedPath[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 };
- AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(adjustedFilePath.c_str(), resolvedPath, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength);
- return QString::fromUtf8(resolvedPath);
+ AZ::IO::FixedMaxPath resolvedPath;
+ AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(resolvedPath, adjustedFilePath);
+ return QString::fromUtf8(resolvedPath.c_str(), static_cast(resolvedPath.Native().size()));
}
- // if we get here it means that the Asset Processor does not know about this file. most of the time we should never get here
- // the rest of this code just does a bunch of heuristic guesses in case of missing files or if the user has hand-edited
- // the asset cache by moving files in via some other means or external process.
- if (adjustedFilePath[0] != '@')
- {
- const char* prefix = (adjustedFilePath[0] == '/' || adjustedFilePath[0] == '\\') ? "@devassets@" : "@devassets@/";
- adjustedFilePath = prefix + adjustedFilePath;
- }
-
- char szAdjustedFile[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 };
- gEnv->pFileIO->ResolvePath(adjustedFilePath.c_str(), szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile));
-
- if ((azstrnicmp(szAdjustedFile, "@devassets@", 11) == 0) && ((szAdjustedFile[11] == '/') || (szAdjustedFile[11] == '\\')))
- {
- if (!gEnv->pCryPak->IsFileExist(szAdjustedFile))
- {
- AZStd::string newName(szAdjustedFile);
- AzFramework::StringFunc::Replace(newName, "@devassets@", "@devroot@/engine", false);
-
- if (gEnv->pCryPak->IsFileExist(newName.c_str()))
- {
- azstrcpy(szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile), newName.c_str());
- }
- else
- {
- // getting tricky here, try @devroot@ alone, in case its 'editor'
- AzFramework::StringFunc::Replace(newName, "@devassets@", "@devroot@", false);
- if (gEnv->pCryPak->IsFileExist(szAdjustedFile))
- {
- azstrcpy(szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile), newName.c_str());
- }
- // give up, best guess is just @devassets@
- }
- }
- }
-
- // we should very rarely actually get to this point in the code.
-
- // szAdjustedFile may contain an alias at this point. (@assets@/blah.whatever)
- // there is a case in which the loose asset exists only within a pak file for some reason
- // this is not recommended but it is possible.in that case, we want to return the original szAdjustedFile
- // without touching it or resolving it so that crypak can open it successfully.
- char adjustedPath[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 };
- if (gEnv->pFileIO->ResolvePath(szAdjustedFile, adjustedPath, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength)) // resolve to full path
- {
- if ((gEnv->pCryPak->IsFileExist(adjustedPath)) || (!gEnv->pCryPak->IsFileExist(szAdjustedFile)))
- {
- // note that if we get here, then EITHER
- // the file exists as a loose asset in the actual adjusted path
- // OR the file does not exist in the original passed-in aliased name (like '@assets@/whatever')
- // in which case we may as well just resolve the path to a full path and return it.
- assetFullPath = adjustedPath;
- AzFramework::StringFunc::Path::Normalize(assetFullPath);
- azstrcpy(szAdjustedFile, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength, assetFullPath.c_str());
- }
- // if the above case succeeded then it means that the file does NOT exist loose
- // but DOES exist in a pak, in which case we leave szAdjustedFile with the alias on the front of it, meaning
- // fopens via crypak will actually succeed.
- }
- return szAdjustedFile;
+ return path;
}
}
else
{
- return "";
+ return QString{};
}
}
diff --git a/Code/Editor/Util/PathUtil.h b/Code/Editor/Util/PathUtil.h
index 2c49031155..163d74e358 100644
--- a/Code/Editor/Util/PathUtil.h
+++ b/Code/Editor/Util/PathUtil.h
@@ -44,9 +44,6 @@ namespace Path
//! always returns a full path
EDITOR_CORE_API AZStd::string GetEditingGameDataFolder();
- //! Get the root folder (in source control or other writable assets) where you should save root data.
- EDITOR_CORE_API AZStd::string GetEditingRootFolder();
-
//! Set the current mod NAME for editing purposes. After doing this the above functions will take this into account
//! name only, please!
EDITOR_CORE_API void SetModName(const char* input);
@@ -69,93 +66,6 @@ namespace Path
return strPath;
}
- //! Split full file name to path and filename
- //! @param filepath [IN] Full file name inclusing path.
- //! @param path [OUT] Extracted file path.
- //! @param file [OUT] Extracted file (with extension).
- inline void Split(const QString& filepath, QString& path, QString& file)
- {
- char path_buffer[_MAX_PATH];
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
- char fname[_MAX_FNAME];
- char ext[_MAX_EXT];
-#ifdef AZ_COMPILER_MSVC
- _splitpath_s(filepath.toUtf8().data(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext));
- _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0);
- path = path_buffer;
- _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), 0, 0, fname, ext);
-#else
- _splitpath(filepath.toUtf8().data(), drive, dir, fname, ext);
- _makepath(path_buffer, drive, dir, 0, 0);
- path = path_buffer;
- _makepath(path_buffer, 0, 0, fname, ext);
-#endif
- file = path_buffer;
- }
- inline void Split(const AZStd::string& filepath, AZStd::string& path, AZStd::string& file)
- {
- char path_buffer[_MAX_PATH];
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
- char fname[_MAX_FNAME];
- char ext[_MAX_EXT];
-#ifdef AZ_COMPILER_MSVC
- _splitpath_s(filepath.c_str(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), 0, 0, 0, 0);
- _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0);
- path = path_buffer;
- _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), 0, 0, fname, ext);
-#else
- _splitpath(filepath.c_str(), drive, dir, fname, ext);
- _makepath(path_buffer, drive, dir, 0, 0);
- path = path_buffer;
- _makepath(path_buffer, 0, 0, fname, ext);
-#endif
- file = path_buffer;
- }
-
- //! Split full file name to path and filename
- //! @param filepath [IN] Full file name inclusing path.
- //! @param path [OUT] Extracted file path.
- //! @param filename [OUT] Extracted file (without extension).
- //! @param ext [OUT] Extracted files extension.
- inline void Split(const QString& filepath, QString& path, QString& filename, QString& fext)
- {
- char path_buffer[_MAX_PATH];
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
- char fname[_MAX_FNAME];
- char ext[_MAX_EXT];
-#ifdef AZ_COMPILER_MSVC
- _splitpath_s(filepath.toUtf8().data(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext));
- _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0);
-#else
- _splitpath(filepath.toUtf8().data(), drive, dir, fname, ext);
- _makepath(path_buffer, drive, dir, 0, 0);
-#endif
- path = path_buffer;
- filename = fname;
- fext = ext;
- }
- inline void Split(const AZStd::string& filepath, AZStd::string& path, AZStd::string& filename, AZStd::string& fext)
- {
- char path_buffer[_MAX_PATH];
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
- char fname[_MAX_FNAME];
- char ext[_MAX_EXT];
-#ifdef AZ_COMPILER_MSVC
- _splitpath_s(filepath.c_str(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext));
- _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0);
-#else
- _splitpath(filepath.c_str(), drive, dir, fname, ext);
- _makepath(path_buffer, drive, dir, 0, 0);
-#endif
- path = path_buffer;
- filename = fname;
- fext = ext;
- }
-
//! Split path into segments
//! @param filepath [IN] path
inline QStringList SplitIntoSegments(const QString& path)
diff --git a/Code/Framework/AzCore/AzCore/IO/FileIO.h b/Code/Framework/AzCore/AzCore/IO/FileIO.h
index 6406025417..25dd422a47 100644
--- a/Code/Framework/AzCore/AzCore/IO/FileIO.h
+++ b/Code/Framework/AzCore/AzCore/IO/FileIO.h
@@ -148,7 +148,7 @@ namespace AZ
virtual AZ::u64 ModificationTime(HandleType fileHandle) = 0;
virtual AZ::u64 ModificationTime(const char* filePath) = 0;
- /// Get the size of the file. Returns Success if we report size.
+ /// Get the size of the file. Returns Success if we report size.
virtual Result Size(const char* filePath, AZ::u64& size) = 0;
virtual Result Size(HandleType fileHandle, AZ::u64& size) = 0;
@@ -198,7 +198,7 @@ namespace AZ
/// note: the callback will contain the full concatenated path (filePath + slash + fileName)
/// not just the individual file name found.
/// note: if the file path of the found file corresponds to a registered ALIAS, the longest matching alias will be returned
- /// so expect return values like @assets@/textures/mytexture.dds instead of a full path. This is so that fileIO works over remote connections.
+ /// so expect return values like @products@/textures/mytexture.dds instead of a full path. This is so that fileIO works over remote connections.
/// note: if rootPath is specified the implementation has the option of substituting it for the current directory
/// as would be the case on a file server.
typedef AZStd::function FindFilesCallbackType;
@@ -206,13 +206,18 @@ namespace AZ
// Alias system
- /// SetAlias - Adds an alias to the path resolution system, e.g. @user@, @root@, etc.
+ /// SetAlias - Adds an alias to the path resolution system, e.g. @user@, @products@, etc.
virtual void SetAlias(const char* alias, const char* path) = 0;
/// ClearAlias - Removes an alias from the path resolution system
virtual void ClearAlias(const char* alias) = 0;
/// GetAlias - Returns the destination path for a given alias, or nullptr if the alias does not exist
virtual const char* GetAlias(const char* alias) const = 0;
+ /// SetDeprecateAlias - Adds a deprecated alias with path resolution which points to a new alias
+ /// When the DeprecatedAlias is used an Error is logged and the alias is resolved to the path
+ /// specified by the new alais
+ virtual void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) = 0;
+
/// Shorten the given path if it contains an alias. it will always pick the longest alias match.
/// note that it re-uses the buffer, since the data can only get smaller and we don't want to internally allocate memory if we
/// can avoid it.
@@ -230,8 +235,8 @@ namespace AZ
//! ResolvePath - Replaces any aliases in path with their values and stores the result in resolvedPath,
//! also ensures that the path is absolute
- //! NOTE: If the path does not start with an alias then the resolved value of the @assets@ is used
- //! which has the effect of making the path relative to the @assets@/ folder
+ //! NOTE: If the path does not start with an alias then the resolved value of the @products@ is used
+ //! which has the effect of making the path relative to the @products@/ folder
//! returns true if path was resolved, false otherwise
//! note that all of the above file-finding and opening functions automatically resolve the path before operating
//! so you should not need to call this except in very exceptional circumstances where you absolutely need to
diff --git a/Code/Framework/AzCore/AzCore/IO/IStreamer.h b/Code/Framework/AzCore/AzCore/IO/IStreamer.h
index d959fa716c..438384e687 100644
--- a/Code/Framework/AzCore/AzCore/IO/IStreamer.h
+++ b/Code/Framework/AzCore/AzCore/IO/IStreamer.h
@@ -42,8 +42,8 @@ namespace AZ::IO
// These functions can't be called after a request has been queued.
//
- //! Creates a request to read a file.
- //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@.
+ //! Creates a request to read a file.
+ //! @param relativePath Relative path to the file to load. This can include aliases such as @products@.
//! @param outputBuffer The buffer that will hold the loaded data. This must be able to at least hold "size" number of bytes.
//! @param outputBufferSize The size of the buffer that will hold the loaded data. This must be equal or larger than "size" number of bytes.
//! @param readSize The number of bytes to read from the file at the relative path.
@@ -62,9 +62,9 @@ namespace AZ::IO
IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium,
size_t offset = 0) = 0;
- //! Sets a request to the read command.
+ //! Sets a request to the read command.
//! @param request The request that will store the read command.
- //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file to load. This can include aliases such as @products@.
//! @param outputBuffer The buffer that will hold the loaded data. This must be able to at least hold "size" number of bytes.
//! @param outputBufferSize The size of the buffer that will hold the loaded data. This must be equal or larger than "size" number of bytes.
//! @param readSize The number of bytes to read from the file at the relative path.
@@ -84,8 +84,8 @@ namespace AZ::IO
IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium,
size_t offset = 0) = 0;
- //! Creates a request to the read command.
- //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@.
+ //! Creates a request to the read command.
+ //! @param relativePath Relative path to the file to load. This can include aliases such as @products@.
//! @param allocator The allocator used to reserve and release memory for the read request. Memory allocated this way will
//! be automatically freed when there are no more references to the FileRequestPtr. To avoid this, use GetReadRequestResult
//! to claim the pointer and use the provided allocator to release the memory at a later point.
@@ -106,9 +106,9 @@ namespace AZ::IO
IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium,
size_t offset = 0) = 0;
- //! Sets a request to the read command.
+ //! Sets a request to the read command.
//! @param request The request that will store the read command.
- //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file to load. This can include aliases such as @products@.
//! @param allocator The allocator used to reserve and release memory for the read request. Memory allocated this way will
//! be automatically freed when there are no more references to the FileRequestPtr. To avoid this, use GetReadRequestResult
//! to claim the pointer and use the provided allocator to release the memory at a later point.
@@ -138,7 +138,7 @@ namespace AZ::IO
//! @result A smart pointer to the newly created request with the cancel command.
virtual FileRequestPtr Cancel(FileRequestPtr target) = 0;
- //! Sets a request to the cancel command.
+ //! Sets a request to the cancel command.
//! When this request completes it's not guaranteed to have canceled the target request. Not all requests can be canceled and requests
//! that already processing may complete. It's recommended to let the target request handle the completion of the request as normal
//! and handle cancellation by checking the status on the target request is set to IStreamerTypes::RequestStatus::Canceled.
@@ -177,7 +177,7 @@ namespace AZ::IO
//! DestroyDedicatedCache is called. Typical use of a dedicated cache is for files that have their own compression
//! and are periodically visited to read a section, e.g. streaming video play or streaming audio banks. This
//! request will fail if there are no nodes in Streamer's stack that deal with dedicated caches.
- //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @products@.
//! @return A smart pointer to the newly created request with the command to create a dedicated cache.
virtual FileRequestPtr CreateDedicatedCache(AZStd::string_view relativePath) = 0;
@@ -186,25 +186,25 @@ namespace AZ::IO
//! and are periodically visited to read a section, e.g. streaming video play or streaming audio banks. This
//! request will fail if there are no nodes in Streamer's stack that deal with dedicated caches.
//! @param request The request that will store the command to create a dedicated cache.
- //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @products@.
//! @return A reference to the provided request.
virtual FileRequestPtr& CreateDedicatedCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0;
//! Destroy a dedicated cache created by CreateDedicatedCache. See CreateDedicatedCache for more details.
- //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @products@.
//! @return A smart pointer to the newly created request with the command to destroy a dedicated cache.
virtual FileRequestPtr DestroyDedicatedCache(AZStd::string_view relativePath) = 0;
//! Destroy a dedicated cache created by CreateDedicatedCache. See CreateDedicatedCache for more details.
//! @param request The request that will store the command to destroy a dedicated cache.
- //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @products@.
//! @return A reference to the provided request.
virtual FileRequestPtr& DestroyDedicatedCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0;
//! Clears a file from all caches in use by Streamer.
//! Flushing the cache will cause the streaming stack to pause processing until it's idle before issuing the flush and resuming
//! processing. This can result in a noticeable interruption.
- //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @products@.
//! @return A smart pointer to the newly created request with the command to flush a file from all caches.
virtual FileRequestPtr FlushCache(AZStd::string_view relativePath) = 0;
@@ -212,7 +212,7 @@ namespace AZ::IO
//! Flushing the cache will cause the streaming stack to pause processing until it's idle before issuing the flush and resuming
//! processing. This can result in a noticeable interruption.
//! @param request The request that will store the command to flush a file from all caches.
- //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @assets@.
+ //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @products@.
//! @return A reference to the provided request.
virtual FileRequestPtr& FlushCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0;
@@ -334,7 +334,7 @@ namespace AZ::IO
//
//! Collect statistics from all the components that make up Streamer.
- //! This is thread safe in the sense that it won't crash.
+ //! This is thread safe in the sense that it won't crash.
//! Data is collected lockless from involved threads and might be slightly
//! out of date in some cases.
//! @param statistics The container where statistics will be added to.
diff --git a/Code/Framework/AzCore/AzCore/IO/Path/Path.h b/Code/Framework/AzCore/AzCore/IO/Path/Path.h
index 24f26daa51..3b5c224957 100644
--- a/Code/Framework/AzCore/AzCore/IO/Path/Path.h
+++ b/Code/Framework/AzCore/AzCore/IO/Path/Path.h
@@ -98,6 +98,11 @@ namespace AZ::IO
//! made from the internal string
constexpr AZStd::fixed_string FixedMaxPathString() const noexcept;
+ // as_posix
+ //! Replicates the behavior of the Python pathlib as_posix method
+ //! by replacing the Windows Path Separator with the Posix Path Seperator
+ constexpr AZStd::fixed_string FixedMaxPathStringAsPosix() const noexcept;
+
// decomposition
//! Given a windows path of "C:\O3DE\foo\bar\name.txt" and a posix path of
//! "/O3DE/foo/bar/name.txt"
@@ -178,7 +183,7 @@ namespace AZ::IO
//! Normalizes a path in a purely lexical manner.
//! # Path separators are converted to their preferred path separator
//! # Path parts of "." are collapsed to nothing empty
- //! # Paths parts of ".." are removed if there is a preceding directory
+ //! # Paths parts of ".." are removed if there is a preceding directory
//! The preceding directory is also removed
//! # Runs of Two or more path separators are collapsed into one path separator
//! unless the path begins with two path separators
@@ -238,7 +243,7 @@ namespace AZ::IO
// iterators
//! Returns an iterator to the beginning of the path that can be used to traverse the path
- //! according to the following
+ //! according to the following
//! 1. Root name - (0 or 1)
//! 2. Root directory - (0 or 1)
//! 3. Filename - (0 or more)
@@ -253,24 +258,23 @@ namespace AZ::IO
template
friend class BasicPath;
friend struct AZStd::hash;
+ struct PathIterable;
- template
- static constexpr void MakeRelativeTo(PathResultType& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base);
+ static constexpr void MakeRelativeTo(PathIterable& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base) noexcept;
- struct PathIterable;
//! Returns a structure that provides a view of the path parts which can be used for iteration
//! Only the path parts that correspond to creating an normalized path is returned
//! This function is useful for returning a "view" into a normalized path without the need
//! to allocate memory for the heap
static constexpr PathIterable GetNormalPathParts(const AZ::IO::PathView& path) noexcept;
- // joins the input path to the Path Iterable structure using similiar logic to Path::Append
- // If the input path is absolute it will replace the current PathIterable otherwise
- // the input path will be appended to the Path Iterable structure
- // For example a PathIterable with parts = ['C:', '/', 'foo']
- // If the path input = 'bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar']
- // If the path input = 'C:/bar', then the new PathIterable parts = [C:', '/', 'bar']
- // If the path input = 'C:bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar' ]
- // If the path input = 'D:bar', then the new PathIterable parts = [D:, 'bar' ]
+ //! joins the input path to the Path Iterable structure using similiar logic to Path::Append
+ //! If the input path is absolute it will replace the current PathIterable otherwise
+ //! the input path will be appended to the Path Iterable structure
+ //! For example a PathIterable with parts = ['C:', '/', 'foo']
+ //! If the path input = 'bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar']
+ //! If the path input = 'C:/bar', then the new PathIterable parts = [C:', '/', 'bar']
+ //! If the path input = 'C:bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar' ]
+ //! If the path input = 'D:bar', then the new PathIterable parts = [D:, 'bar' ]
static constexpr void AppendNormalPathParts(PathIterable& pathIterableResult, const AZ::IO::PathView& path) noexcept;
constexpr int ComparePathView(const PathView& other) const;
@@ -325,32 +329,32 @@ namespace AZ::IO
constexpr BasicPath(BasicPath&& other) = default;
// Conversion constructor for other types of BasicPath instantiations
- constexpr BasicPath(const PathView& other);
+ constexpr BasicPath(const PathView& other) noexcept;
// String constructors
//! Constructs a Path by copying the pathString to its internal string
//! The preferred separator is to the OS default path separator
constexpr BasicPath(const string_type& pathString) noexcept;
//! Constructs a Path by copying the pathString to its internal string
- //! The preferred separator it set to the parameter
+ //! The preferred separator is set to the parameter
constexpr BasicPath(const string_type& pathString, const char preferredSeparator) noexcept;
//! Constructs a Path by moving the pathString to its internal string
//! The preferred separator is to the OS default path separator
constexpr BasicPath(string_type&& pathString) noexcept;
//! Constructs a Path by copying the pathString to its internal string
- //! The preferred separator it set to the parameter
+ //! The preferred separator is set to the parameter
constexpr BasicPath(string_type&& pathString, const char preferredSeparator) noexcept;
//! Constructs a Path by constructing it's internal out of a string_view
//! The preferred separator is to the OS default path separator
constexpr BasicPath(AZStd::string_view src) noexcept;
//! Constructs a Path by constructing it's internal out of a string_view
- //! The preferred separators it set to the parameter
+ //! The preferred separator is set to the parameter
constexpr BasicPath(AZStd::string_view src, const char preferredSeparator) noexcept;
//! Constructs a Path by constructing it's internal out of a value_type*
//! The preferred separator is to the OS default path separator
constexpr BasicPath(const value_type* pathString) noexcept;
//! Constructs a Path by constructing it's internal out of a value_type*
- //! The preferred separator it set to the parameter
+ //! The preferred separator is set to the parameter
constexpr BasicPath(const value_type* pathString, const char preferredSeparator) noexcept;
//! Constructs a empty Path with the preferred separator set to the parameter
explicit constexpr BasicPath(const char preferredSeparator) noexcept;
@@ -371,7 +375,7 @@ namespace AZ::IO
constexpr BasicPath& operator=(BasicPath&& other) = default;
// conversion assignment operator
- constexpr BasicPath& operator=(const PathView& pathView);
+ constexpr BasicPath& operator=(const PathView& pathView) noexcept;
constexpr BasicPath& operator=(const string_type& str) noexcept;
constexpr BasicPath& operator=(string_type&& str) noexcept;
constexpr BasicPath& operator=(AZStd::string_view str) noexcept;
@@ -477,6 +481,12 @@ namespace AZ::IO
//! made from the internal string
constexpr AZStd::fixed_string FixedMaxPathString() const;
+ // as_posix
+ //! Replicates the behavior of the Python pathlib as_posix method
+ //! by replacing the Windows Path Separator with the Posix Path Seperator
+ AZStd::string StringAsPosix() const;
+ constexpr AZStd::fixed_string FixedMaxPathStringAsPosix() const noexcept;
+
// compare
//! Performs a compare of each of the path parts for equivalence
//! Each part of the path is compare using string comparison
@@ -574,7 +584,7 @@ namespace AZ::IO
//! Normalizes a path in a purely lexical manner.
//! # Path separators are converted to their preferred path separator
//! # Path parts of "." are collapsed to nothing empty
- //! # Paths parts of ".." are removed if there is a preceding directory
+ //! # Paths parts of ".." are removed if there is a preceding directory
//! The preceding directory is also removed
//! # Runs of Two or more path separators are collapsed into one path separator
//! unless the path begins with two path separators
@@ -616,7 +626,7 @@ namespace AZ::IO
// iterators
//! Returns an iterator to the beginning of the path that can be used to traverse the path
- //! according to the following
+ //! according to the following
//! 1. Root name - (0 or 1)
//! 2. Root directory - (0 or 1)
//! 3. Filename - (0 or more)
diff --git a/Code/Framework/AzCore/AzCore/IO/Path/Path.inl b/Code/Framework/AzCore/AzCore/IO/Path/Path.inl
index 0147ad3356..1d654c1502 100644
--- a/Code/Framework/AzCore/AzCore/IO/Path/Path.inl
+++ b/Code/Framework/AzCore/AzCore/IO/Path/Path.inl
@@ -240,6 +240,14 @@ namespace AZ::IO
return AZStd::fixed_string(m_path.begin(), m_path.end());
}
+ // as_posix
+ constexpr AZStd::fixed_string PathView::FixedMaxPathStringAsPosix() const noexcept
+ {
+ AZStd::fixed_string resultPath(m_path.begin(), m_path.end());
+ AZStd::replace(resultPath.begin(), resultPath.end(), AZ::IO::WindowsPathSeparator, AZ::IO::PosixPathSeparator);
+ return resultPath;
+ }
+
// decomposition
constexpr auto PathView::RootName() const -> PathView
{
@@ -473,8 +481,7 @@ namespace AZ::IO
return lhs.Compare(rhs) >= 0;
}
- template
- constexpr void PathView::MakeRelativeTo(PathResultType& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base)
+ constexpr void PathView::MakeRelativeTo(PathIterable& pathIterable, const AZ::IO::PathView& path, const AZ::IO::PathView& base) noexcept
{
const bool exactCaseCompare = path.m_preferred_separator == PosixPathSeparator
|| base.m_preferred_separator == PosixPathSeparator;
@@ -492,13 +499,11 @@ namespace AZ::IO
if (int res = Internal::ComparePathSegment(*pathParser, *pathParserBase, exactCaseCompare);
res != 0)
{
- pathResult.m_path = AZStd::string_view{};
return;
}
}
else if (CheckIterMismatchAtBase())
{
- pathResult.m_path = AZStd::string_view{};
return;
}
@@ -512,7 +517,6 @@ namespace AZ::IO
}
if (CheckIterMismatchAtBase())
{
- pathResult.m_path = AZStd::string_view{};
return;
}
}
@@ -530,7 +534,7 @@ namespace AZ::IO
// If there is no mismatch, return ".".
if (!pathParser && !pathParserBase)
{
- pathResult.m_path = AZStd::string_view{ "." };
+ pathIterable.emplace_back(".", parser::PathPartKind::PK_Dot);
return;
}
@@ -539,27 +543,25 @@ namespace AZ::IO
int elemCount = parser::DetermineLexicalElementCount(pathParserBase);
if (elemCount < 0)
{
- pathResult.m_path = AZStd::string_view{};
return;
}
// if elemCount == 0 and (pathParser == end() || pathParser->empty()), returns path("."); otherwise
if (elemCount == 0 && (pathParser.AtEnd() || *pathParser == ""))
{
- pathResult.m_path = AZStd::string_view{ "." };
+ pathIterable.emplace_back(".", parser::PathPartKind::PK_Dot);
return;
}
// return a path constructed with 'n' dot-dot elements, followed by the
// elements of '*this' after the mismatch.
- pathResult = PathResultType(path.m_preferred_separator);
while (elemCount--)
{
- pathResult /= "..";
+ pathIterable.emplace_back("..", parser::PathPartKind::PK_DotDot);
}
for (; pathParser; ++pathParser)
{
- pathResult /= *pathParser;
+ pathIterable.emplace_back(*pathParser, parser::ClassifyPathPart(pathParser));
}
}
@@ -673,7 +675,7 @@ namespace AZ::IO
// Basic Path implementation
template
- constexpr BasicPath::BasicPath(const PathView& other)
+ constexpr BasicPath::BasicPath(const PathView& other) noexcept
: m_path(other.m_path)
, m_preferred_separator(other.m_preferred_separator) {}
@@ -726,6 +728,7 @@ namespace AZ::IO
: m_path(first, last)
, m_preferred_separator(preferredSeparator) {}
+
template
constexpr BasicPath::operator PathView() const noexcept
{
@@ -733,7 +736,7 @@ namespace AZ::IO
}
template
- constexpr auto BasicPath::operator=(const PathView& other) -> BasicPath&
+ constexpr auto BasicPath::operator=(const PathView& other) noexcept -> BasicPath&
{
m_path = other.m_path;
m_preferred_separator = other.m_preferred_separator;
@@ -974,13 +977,13 @@ namespace AZ::IO
template
constexpr auto BasicPath::MakePreferred() -> BasicPath&
{
- if (m_preferred_separator != '/')
+ if (m_preferred_separator != PosixPathSeparator)
{
- AZStd::replace(m_path.begin(), m_path.end(), '/', m_preferred_separator);
+ AZStd::replace(m_path.begin(), m_path.end(), PosixPathSeparator, m_preferred_separator);
}
else
{
- AZStd::replace(m_path.begin(), m_path.end(), '\\', m_preferred_separator);
+ AZStd::replace(m_path.begin(), m_path.end(), WindowsPathSeparator, m_preferred_separator);
}
return *this;
}
@@ -1033,6 +1036,24 @@ namespace AZ::IO
return AZStd::fixed_string(m_path.begin(), m_path.end());
}
+ // as_posix
+ // Returns a copy of the path with the path separators converted to PosixPathSeparator
+ template
+ AZStd::string BasicPath::StringAsPosix() const
+ {
+ AZStd::string resultPath(m_path.begin(), m_path.end());
+ AZStd::replace(resultPath.begin(), resultPath.end(), WindowsPathSeparator, PosixPathSeparator);
+ return resultPath;
+ }
+
+ template
+ constexpr AZStd::fixed_string BasicPath::FixedMaxPathStringAsPosix() const noexcept
+ {
+ AZStd::fixed_string resultPath(m_path.begin(), m_path.end());
+ AZStd::replace(resultPath.begin(), resultPath.end(), WindowsPathSeparator, PosixPathSeparator);
+ return resultPath;
+ }
+
template
constexpr void BasicPath::swap(BasicPath& rhs) noexcept
{
@@ -1234,6 +1255,7 @@ namespace AZ::IO
{
pathResult /= pathPartView;
}
+
return pathResult;
}
@@ -1241,7 +1263,13 @@ namespace AZ::IO
constexpr auto BasicPath::LexicallyRelative(const PathView& base) const -> BasicPath
{
BasicPath pathResult(m_preferred_separator);
- static_cast(*this).MakeRelativeTo(pathResult, *this, base);
+ PathView::PathIterable pathIterable;
+ PathView::MakeRelativeTo(pathIterable, *this, base);
+ for ([[maybe_unused]] auto [pathPartView, pathPartKind] : pathIterable)
+ {
+ pathResult /= pathPartView;
+ }
+
return pathResult;
}
@@ -1355,7 +1383,7 @@ namespace AZ::IO
return !basePathParts.empty() || !thisPathParts.IsAbsolute();
}
- constexpr FixedMaxPath PathView::LexicallyNormal() const
+ constexpr auto PathView::LexicallyNormal() const -> FixedMaxPath
{
FixedMaxPath pathResult(m_preferred_separator);
PathIterable pathIterable = GetNormalPathParts(*this);
@@ -1367,21 +1395,28 @@ namespace AZ::IO
return pathResult;
}
- constexpr FixedMaxPath PathView::LexicallyRelative(const PathView& base) const
+ constexpr auto PathView::LexicallyRelative(const PathView& base) const -> FixedMaxPath
{
FixedMaxPath pathResult(m_preferred_separator);
- MakeRelativeTo(pathResult, *this, base);
+ PathIterable pathIterable;
+ MakeRelativeTo(pathIterable, *this, base);
+ for ([[maybe_unused]] auto [pathPartView, pathPartKind] : pathIterable)
+ {
+ pathResult /= pathPartView;
+ }
+
return pathResult;
}
- constexpr FixedMaxPath PathView::LexicallyProximate(const PathView& base) const
+ constexpr auto PathView::LexicallyProximate(const PathView& base) const -> FixedMaxPath
{
- FixedMaxPath result = LexicallyRelative(base);
- if (result.empty())
+ FixedMaxPath pathResult = LexicallyRelative(base);
+ if (pathResult.empty())
{
return FixedMaxPath(*this);
}
- return result;
+
+ return pathResult;
}
}
diff --git a/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl b/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl
index a1faa29b31..e700ab0196 100644
--- a/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl
+++ b/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl
@@ -49,8 +49,8 @@ namespace AZ::IO
constexpr void clear() noexcept;
- friend constexpr auto PathView::GetNormalPathParts(const AZ::IO::PathView&) noexcept -> PathIterable;
friend constexpr auto PathView::AppendNormalPathParts(PathIterable& pathIterable, const AZ::IO::PathView&) noexcept -> void;
+ friend constexpr auto PathView::MakeRelativeTo(PathIterable& pathIterable, const AZ::IO::PathView&, const AZ::IO::PathView&) noexcept -> void;
PartKindArray m_parts{};
size_t m_size{};
};
diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp
index e1bd717e7b..36f66312d8 100644
--- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp
+++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp
@@ -546,7 +546,7 @@ namespace AZ::SettingsRegistryMergeUtils
AZ::IO::FixedMaxPath path = AZ::Utils::GetExecutableDirectory();
registry.Set(FilePathKey_BinaryFolder, path.LexicallyNormal().Native());
- // Engine root folder - corresponds to the @engroot@ and @devroot@ aliases
+ // Engine root folder - corresponds to the @engroot@ and @engroot@ aliases
AZ::IO::FixedMaxPath engineRoot = FindEngineRoot(registry);
registry.Set(FilePathKey_EngineRootFolder, engineRoot.LexicallyNormal().Native());
@@ -570,7 +570,7 @@ namespace AZ::SettingsRegistryMergeUtils
assetPlatform = AZ::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME);
}
- // Project path - corresponds to the @devassets@ alias
+ // Project path - corresponds to the @projectroot@ alias
// NOTE: Here we append to engineRoot, but if projectPathValue is absolute then engineRoot is discarded.
path = engineRoot / projectPathValue;
@@ -662,7 +662,7 @@ namespace AZ::SettingsRegistryMergeUtils
}
else
{
- // Cache: root - same as the @root@ alias, this is the starting path for cache files.
+ // Cache: root - same as the @products@ alias, this is the starting path for cache files.
path = normalizedProjectPath / "Cache";
registry.Set(FilePathKey_CacheProjectRootFolder, path.LexicallyNormal().Native());
path /= assetPlatform;
diff --git a/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h b/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h
index c9b7d44e1f..d7d0789c1a 100644
--- a/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h
+++ b/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h
@@ -52,6 +52,7 @@ namespace AZ
MOCK_METHOD2(SetAlias, void(const char* alias, const char* path));
MOCK_METHOD1(ClearAlias, void(const char* alias));
MOCK_CONST_METHOD1(GetAlias, const char*(const char* alias));
+ MOCK_METHOD2(SetDeprecatedAlias, void(AZStd::string_view, AZStd::string_view));
MOCK_CONST_METHOD2(ConvertToAlias, AZStd::optional(char* inOutBuffer, AZ::u64 bufferLength));
MOCK_CONST_METHOD2(ConvertToAlias, bool(AZ::IO::FixedMaxPath& aliasPath, const AZ::IO::PathView& path));
MOCK_CONST_METHOD3(ResolvePath, bool(const char* path, char* resolvedPath, AZ::u64 resolvedPathSize));
diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.cpp b/Code/Framework/AzCore/AzCore/Utils/Utils.cpp
index c4dd24be35..2031d14d08 100644
--- a/Code/Framework/AzCore/AzCore/Utils/Utils.cpp
+++ b/Code/Framework/AzCore/AzCore/Utils/Utils.cpp
@@ -51,6 +51,20 @@ namespace AZ::Utils
return executableDirectory;
}
+ AZStd::optional ConvertToAbsolutePath(AZStd::string_view path)
+ {
+ AZ::IO::FixedMaxPathString absolutePath;
+ AZ::IO::FixedMaxPathString srcPath{ path };
+ if (ConvertToAbsolutePath(srcPath.c_str(), absolutePath.data(), absolutePath.capacity()))
+ {
+ // Fix the size value of the fixed string by calculating the c-string length using char traits
+ absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data()));
+ return srcPath;
+ }
+
+ return AZStd::nullopt;
+ }
+
AZ::IO::FixedMaxPathString GetEngineManifestPath()
{
AZ::IO::FixedMaxPath o3deManifestPath = GetO3deManifestDirectory();
diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.h b/Code/Framework/AzCore/AzCore/Utils/Utils.h
index d8d4290f7f..c147e38bfb 100644
--- a/Code/Framework/AzCore/AzCore/Utils/Utils.h
+++ b/Code/Framework/AzCore/AzCore/Utils/Utils.h
@@ -104,6 +104,7 @@ namespace AZ
// Attempts the supplied path to an absolute path.
//! Returns nullopt if path cannot be converted to an absolute path
AZStd::optional ConvertToAbsolutePath(AZStd::string_view path);
+ bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 absolutePathMaxSize);
//! Save a string to a file. Otherwise returns a failure with error message.
AZ::Outcome WriteFile(AZStd::string_view content, AZStd::string_view filePath);
diff --git a/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp b/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp
index 1333006c4c..9a3f825bfc 100644
--- a/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp
+++ b/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp
@@ -60,23 +60,34 @@ namespace AZ
return writeStorage ? AZStd::make_optional(writeStorage) : AZStd::nullopt;
}
- AZStd::optional ConvertToAbsolutePath(AZStd::string_view path)
+ bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength)
{
- AZ::IO::FixedMaxPathString absolutePath;
- AZ::IO::FixedMaxPathString srcPath{ path };
- if (AZ::Android::Utils::IsApkPath(srcPath.c_str()))
+ if (AZ::Android::Utils::IsApkPath(path))
{
- return srcPath;
+ azstrcpy(absolutePath, maxLength, path);
+ return true;
}
- if(char* result = realpath(srcPath.c_str(), absolutePath.data()); result)
+#ifdef PATH_MAX
+ static constexpr size_t UnixMaxPathLength = PATH_MAX;
+#else
+ // Fallback to 4096 if the PATH_MAX macro isn't defined on the Unix System
+ static constexpr size_t UnixMaxPathLength = 4096;
+#endif
+ if (!AZ::IO::PathView(path).IsAbsolute())
{
- // Fix the size value of the fixed string by calculating the c-string length using char traits
- absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data()));
- return absolutePath;
+ // note that realpath fails if the path does not exist and actually changes the return value
+ // to be the actual place that FAILED, which we don't want.
+ // if we fail, we'd prefer to fall through and at least use the original path.
+ char absolutePathBuffer[UnixMaxPathLength];
+ if (const char* result = realpath(path, absolutePathBuffer); result != nullptr)
+ {
+ azstrcpy(absolutePath, maxLength, absolutePathBuffer);
+ return true;
+ }
}
-
- return AZStd::nullopt;
+ azstrcpy(absolutePath, maxLength, path);
+ return AZ::IO::PathView(absolutePath).IsAbsolute();
}
}
}
diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp
index 2e31936057..7327c8f152 100644
--- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp
+++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp
@@ -47,23 +47,32 @@ namespace AZ
AZ::IO::FixedMaxPath path{pass->pw_dir};
return path.Native();
}
-
+
return {};
}
- AZStd::optional ConvertToAbsolutePath(AZStd::string_view path)
+ bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength)
{
- AZ::IO::FixedMaxPathString absolutePath;
- AZ::IO::FixedMaxPathString srcPath{ path };
-
- if (char* result = realpath(srcPath.c_str(), absolutePath.data()); result)
+#ifdef PATH_MAX
+ static constexpr size_t UnixMaxPathLength = PATH_MAX;
+#else
+ // Fallback to 4096 if the PATH_MAX macro isn't defined on the Unix System
+ static constexpr size_t UnixMaxPathLength = 4096;
+#endif
+ if (!AZ::IO::PathView(path).IsAbsolute())
{
- // Fix the size value of the fixed string by calculating the c-string length using char traits
- absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data()));
- return absolutePath;
+ // note that realpath fails if the path does not exist and actually changes the return value
+ // to be the actual place that FAILED, which we don't want.
+ // if we fail, we'd prefer to fall through and at least use the original path.
+ char absolutePathBuffer[UnixMaxPathLength];
+ if (const char* result = realpath(path, absolutePathBuffer); result != nullptr)
+ {
+ azstrcpy(absolutePath, maxLength, absolutePathBuffer);
+ return true;
+ }
}
-
- return AZStd::nullopt;
+ azstrcpy(absolutePath, maxLength, path);
+ return AZ::IO::PathView(absolutePath).IsAbsolute();
}
} // namespace Utils
} // namespace AZ
diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp
index bcba24b768..24786e2bc9 100644
--- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp
+++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp
@@ -67,19 +67,12 @@ namespace AZ
return AZStd::nullopt;
}
- AZStd::optional ConvertToAbsolutePath(AZStd::string_view path)
+ bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength)
{
- AZ::IO::FixedMaxPathString absolutePath;
- AZ::IO::FixedMaxPathString srcPath{ path };
- char* result = _fullpath(absolutePath.data(), srcPath.c_str(), absolutePath.capacity());
- // Force update of the fixed_string size() value
- absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data()));
- if (result)
- {
- return absolutePath;
- }
-
- return AZStd::nullopt;
+ char* result = _fullpath(absolutePath, path, maxLength);
+ return result != nullptr;
}
+
+
}
}
diff --git a/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h b/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h
index 26b3df55bb..5897b3aaee 100644
--- a/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h
+++ b/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h
@@ -426,6 +426,10 @@ public:
return nullptr;
}
+ void SetDeprecatedAlias(AZStd::string_view, AZStd::string_view) override
+ {
+ }
+
void ClearAlias(const char* ) override { }
AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64) const override
diff --git a/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp b/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp
index 34076a10f6..cf239a0821 100644
--- a/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp
+++ b/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp
@@ -698,7 +698,7 @@ AZ_POP_DISABLE_WARNING
using PathViewLexicallyProximateFixture = PathLexicallyFixture;
- TEST_P(PathViewLexicallyProximateFixture, LexicallyProximate_ReturnsRelativePathIfNotEmptyOrTestPathIfNot)
+ TEST_P(PathViewLexicallyProximateFixture, LexicallyProximate_ReturnsRelativePathIfNotEmptyOrTestPath)
{
const auto& testParams = GetParam();
AZ::IO::PathView testPath(testParams.m_testPathString, testParams.m_preferredSeparator);
diff --git a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp
index e72e2de472..1f99a594fa 100644
--- a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp
@@ -77,11 +77,15 @@
namespace AzFramework
{
+
namespace ApplicationInternal
{
static constexpr const char s_prefabSystemKey[] = "/Amazon/Preferences/EnablePrefabSystem";
static constexpr const char s_prefabWipSystemKey[] = "/Amazon/Preferences/EnablePrefabSystemWipFeatures";
static constexpr const char s_legacySlicesAssertKey[] = "/Amazon/Preferences/ShouldAssertForLegacySlicesUsage";
+ static constexpr const char* DeprecatedFileIOAliasesRoot = "/O3DE/AzCore/FileIO/DeprecatedAliases";
+ static constexpr const char* DeprecatedFileIOAliasesOldAliasKey = "OldAlias";
+ static constexpr const char* DeprecatedFileIOAliasesNewAliasKey = "NewAlias";
}
Application::Application()
@@ -563,6 +567,68 @@ namespace AzFramework
}
}
+ struct DeprecatedAliasesKeyVisitor
+ : AZ::SettingsRegistryInterface::Visitor
+ {
+ using VisitResponse = AZ::SettingsRegistryInterface::VisitResponse;
+ using VisitAction = AZ::SettingsRegistryInterface::VisitAction;
+ using Type = AZ::SettingsRegistryInterface::Type;
+
+ using AZ::SettingsRegistryInterface::Visitor::Visit;
+
+ VisitResponse Traverse(AZStd::string_view path, AZStd::string_view,
+ VisitAction action, Type type) override
+ {
+ if (action == AZ::SettingsRegistryInterface::VisitAction::Begin)
+ {
+ if (type == AZ::SettingsRegistryInterface::Type::Array)
+ {
+ m_parentArrayPath = path;
+ }
+
+ // Strip off last path segment from json path and check if is a child element of the array
+ if (AZ::StringFunc::TokenizeLast(path, '/');
+ m_parentArrayPath == path)
+ {
+ m_aliases.emplace_back();
+ }
+ }
+ else if (action == AZ::SettingsRegistryInterface::VisitAction::End)
+ {
+ if (type == AZ::SettingsRegistryInterface::Type::Array)
+ {
+ m_parentArrayPath = AZStd::string{};
+ }
+ }
+
+ return AZ::SettingsRegistryInterface::VisitResponse::Continue;
+ }
+
+ void Visit(AZStd::string_view, AZStd::string_view valueName, Type, AZStd::string_view value) override
+ {
+ if (!m_aliases.empty())
+ {
+ if (valueName == ApplicationInternal::DeprecatedFileIOAliasesOldAliasKey)
+ {
+ m_aliases.back().m_oldAlias = value;
+ }
+ else if (valueName == ApplicationInternal::DeprecatedFileIOAliasesNewAliasKey)
+ {
+ m_aliases.back().m_newAlias = value;
+ }
+ }
+ }
+
+ struct AliasPair
+ {
+ AZStd::string m_oldAlias;
+ AZStd::string m_newAlias;
+ };
+ AZStd::vector m_aliases;
+
+ private:
+ AZStd::string m_parentArrayPath;
+ };
static void CreateUserCache(const AZ::IO::FixedMaxPath& cacheUserPath, AZ::IO::FileIOBase& fileIoBase)
{
@@ -610,9 +676,8 @@ namespace AzFramework
void Application::SetFileIOAliases()
{
- if (m_archiveFileIO)
+ if (auto fileIoBase = m_archiveFileIO.get(); fileIoBase)
{
- auto fileIoBase = m_archiveFileIO.get();
// Set up the default file aliases based on the settings registry
fileIoBase->SetAlias("@engroot@", GetEngineRoot());
fileIoBase->SetAlias("@projectroot@", GetEngineRoot());
@@ -620,29 +685,20 @@ namespace AzFramework
{
AZ::IO::FixedMaxPath pathAliases;
- if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheProjectRootFolder))
- {
- fileIoBase->SetAlias("@projectcache@", pathAliases.c_str());
- }
pathAliases.clear();
if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder))
{
- fileIoBase->SetAlias("@assets@", pathAliases.c_str());
- fileIoBase->SetAlias("@projectplatformcache@", pathAliases.c_str());
- fileIoBase->SetAlias("@root@", pathAliases.c_str()); // Deprecated Use @projectplatformcache@
+ fileIoBase->SetAlias("@products@", pathAliases.c_str());
}
pathAliases.clear();
if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder))
{
fileIoBase->SetAlias("@engroot@", pathAliases.c_str());
- fileIoBase->SetAlias("@devroot@", pathAliases.c_str()); // Deprecated - Use @engroot@
}
pathAliases.clear();
if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath))
{
- fileIoBase->SetAlias("@devassets@", pathAliases.c_str()); // Deprecated - Use @projectsourceassets@
fileIoBase->SetAlias("@projectroot@", pathAliases.c_str());
- fileIoBase->SetAlias("@projectsourceassets@", (pathAliases / "Assets").c_str());
}
}
@@ -663,6 +719,15 @@ namespace AzFramework
}
fileIoBase->SetAlias("@log@", projectLogPath.c_str());
fileIoBase->CreatePath(projectLogPath.c_str());
+
+ DeprecatedAliasesKeyVisitor visitor;
+ if (m_settingsRegistry->Visit(visitor, ApplicationInternal::DeprecatedFileIOAliasesRoot))
+ {
+ for (const auto& [oldAlias, newAlias] : visitor.m_aliases)
+ {
+ fileIoBase->SetDeprecatedAlias(oldAlias, newAlias);
+ }
+ }
}
}
diff --git a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp
index 8064ba6669..e5a42aabbc 100644
--- a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp
@@ -1121,7 +1121,7 @@ namespace AZ::IO
if (AZ::IO::FixedMaxPath pathBindRoot; !AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, szBindRoot))
{
- AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, "@assets@");
+ AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, "@products@");
desc.m_pathBindRoot = pathBindRoot.LexicallyNormal().String();
}
else
@@ -1807,9 +1807,9 @@ namespace AZ::IO
if (m_eRecordFileOpenList != IArchive::RFOM_Disabled)
{
// we only want to record ASSET access
- // assets are identified as files that are relative to the resolved @assets@ alias path
+ // assets are identified as files that are relative to the resolved @products@ alias path
auto fileIoBase = AZ::IO::FileIOBase::GetInstance();
- const char* aliasValue = fileIoBase->GetAlias("@assets@");
+ const char* aliasValue = fileIoBase->GetAlias("@products@");
if (AZ::IO::FixedMaxPath resolvedFilePath;
fileIoBase->ResolvePath(resolvedFilePath, szFilename)
diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp
index 85ce0b6f9a..9e6e1034ea 100644
--- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp
@@ -546,6 +546,16 @@ namespace AZ::IO
realUnderlyingFileIO->GetAlias(alias);
}
+ void ArchiveFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias)
+ {
+ FileIOBase* realUnderlyingFileIO = FileIOBase::GetDirectInstance();
+ if (!realUnderlyingFileIO)
+ {
+ return;
+ }
+ realUnderlyingFileIO->SetDeprecatedAlias(oldAlias, newAlias);
+ }
+
AZStd::optional ArchiveFileIO::ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const
{
if ((!inOutBuffer) || (bufferLength == 0))
diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h
index 21cef18a7a..7fd4e15e3a 100644
--- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h
+++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h
@@ -63,6 +63,7 @@ namespace AZ::IO
IO::Result FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) override;
void SetAlias(const char* alias, const char* path) override;
void ClearAlias(const char* alias) override;
+ void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override;
AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override;
bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override;
using FileIOBase::ConvertToAlias;
diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp
index d7a92efbf6..7b483dc5de 100644
--- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp
@@ -186,8 +186,8 @@ namespace AZ::IO
{
// filter out the stuff which does not match.
- // the problem here is that szDir might be something like "@assets@/levels/*"
- // but our archive might be mounted at the root, or at some other folder at like "@assets@" or "@assets@/levels/mylevel"
+ // the problem here is that szDir might be something like "@products@/levels/*"
+ // but our archive might be mounted at the root, or at some other folder at like "@products@" or "@products@/levels/mylevel"
// so there's really no way to filter out opening the pack and looking at the files inside.
// however, the bind root is not part of the inner zip entry name either
// and the ZipDir::FindFile actually expects just the chopped off piece.
@@ -202,22 +202,22 @@ namespace AZ::IO
// Example:
- // "@assets@\\levels\\*" <--- szDir
- // "@assets@\\" <--- mount point
+ // "@products@\\levels\\*" <--- szDir
+ // "@products@\\" <--- mount point
// ~~~~~~~~~~~ Common part
// "levels\\*" <---- remainder that is not in common
// "" <--- mount point remainder. In this case, we should scan the contents of the pak for the remainder
// Example:
- // "@assets@\\levels\\*" <--- szDir
- // "@assets@\\levels\\mylevel\\" <--- mount point (its level.pak)
+ // "@products@\\levels\\*" <--- szDir
+ // "@products@\\levels\\mylevel\\" <--- mount point (its level.pak)
// ~~~~~~~~~~~~~~~~~~ common part
// "*" <---- remainder that is not in common
// "mylevel\\" <--- mount point remainder.
// example:
- // "@assets@\\levels\\otherlevel\\*" <--- szDir
- // "@assets@\\levels\\mylevel\\" <--- mount point (its level.pak)
+ // "@products@\\levels\\otherlevel\\*" <--- szDir
+ // "@products@\\levels\\mylevel\\" <--- mount point (its level.pak)
// "otherlevel\\*" <---- remainder
// "mylevel\\" <--- mount point remainder.
@@ -249,7 +249,7 @@ namespace AZ::IO
// which means we may search inside the pack.
ScanInZip(it->pZip.get(), sourcePathRemainder.Native());
}
-
+
}
}
diff --git a/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp b/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp
index 0a6116d313..4c6ed0363e 100644
--- a/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp
@@ -94,7 +94,7 @@ namespace AZ::IO::Internal
}
AZStd::smatch matches;
- const AZStd::regex lodRegex("@assets@\\\\(.*)_lod[0-9]+(\\.cgfm?)");
+ const AZStd::regex lodRegex("@products@\\\\(.*)_lod[0-9]+(\\.cgfm?)");
if (!AZStd::regex_match(szPath, matches, lodRegex) || matches.size() != 3)
{
// The current file is not a valid LOD file
diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp b/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp
index 9b1946701c..e6b8211c28 100644
--- a/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp
@@ -725,7 +725,7 @@ namespace AzFramework
if (!info.m_relativePath.empty())
{
- const char* devAssetRoot = fileIO->GetAlias("@devassets@");
+ const char* devAssetRoot = fileIO->GetAlias("@projectroot@");
if (devAssetRoot)
{
AZ::Data::AssetStreamInfo streamInfo;
diff --git a/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp b/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp
index a7c6b18061..cc31df3dbc 100644
--- a/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp
+++ b/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp
@@ -61,7 +61,7 @@ namespace AzFramework
AZ::IO::Path& gemAbsPath = gemInfo.m_absoluteSourcePaths.emplace_back(value);
// Resolve any file aliases first - Do not use ResolvePath() as that assumes
- // any relative path is underneath the @assets@ alias
+ // any relative path is underneath the @products@ alias
if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr)
{
AZ::IO::FixedMaxPath replacedAliasPath;
diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp
index 49e16dcb90..c1b9c941bc 100644
--- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp
+++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp
@@ -12,10 +12,12 @@
#include
#include
#include
+#include
#include
#include
#include
#include
+#include
#include
namespace AZ
@@ -292,7 +294,7 @@ namespace AZ
void LocalFileIO::CheckInvalidWrite([[maybe_unused]] const char* path)
{
#if defined(AZ_ENABLE_TRACING)
- const char* assetAliasPath = GetAlias("@assets@");
+ const char* assetAliasPath = GetAlias("@products@");
if (path && assetAliasPath)
{
const AZ::IO::PathView pathView(path);
@@ -478,17 +480,15 @@ namespace AZ
return false;
}
- if (IsAbsolutePath(path))
+ if (AZ::IO::PathView(path).HasRootPath())
{
size_t pathLen = strlen(path);
if (pathLen + 1 < resolvedPathSize)
{
azstrncpy(resolvedPath, resolvedPathSize, path, pathLen + 1);
- //see if the absolute path uses @assets@ or @root@, if it does lowercase the relative part
- [[maybe_unused]] bool lowercasePath = LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@assets@"))
- || LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@root@"))
- || LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@projectplatformcache@"));
+ //see if the absolute path matches the resolved value of @products@, if it does lowercase the relative part
+ LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@products@"));
ToUnixSlashes(resolvedPath, resolvedPathSize);
return true;
@@ -499,34 +499,39 @@ namespace AZ
}
}
- char rootedPathBuffer[AZ_MAX_PATH_LEN] = {0};
+ constexpr AZStd::string_view productAssetAlias = "@products@";
+ // Add plus one for the path separator: /
+ constexpr size_t MaxPathSizeWithProductAssetAlias = AZ::IO::MaxPathLength + productAssetAlias.size() + 1;
+ using RootedPathString = AZStd::fixed_string;
+ RootedPathString rootedPathBuffer;
const char* rootedPath = path;
- // if the path does not begin with an alias, then it is assumed to begin with @assets@
+ // if the path does not begin with an alias, then it is assumed to begin with @products@
if (path[0] != '@')
{
- if (GetAlias("@assets@"))
+ if (GetAlias("@products@"))
{
- const int rootLength = 9;// strlen("@assets@/")
- azstrncpy(rootedPathBuffer, AZ_MAX_PATH_LEN, "@assets@/", rootLength);
- size_t pathLen = strlen(path);
- size_t rootedPathBufferlength = rootLength + pathLen + 1;// +1 for null terminator
- if (rootedPathBufferlength > resolvedPathSize)
+
+ if (const size_t requiredSize = productAssetAlias.size() + strlen(path) + 1;
+ requiredSize > rootedPathBuffer.capacity())
{
- AZ_Assert(rootedPathBufferlength < resolvedPathSize, "Constructed path length is wrong:%s", rootedPathBuffer);//path constructed is wrong
- size_t remainingSize = resolvedPathSize - rootLength - 1;// - 1 for null terminator
- azstrncpy(rootedPathBuffer + rootLength, AZ_MAX_PATH_LEN, path, remainingSize);
- rootedPathBuffer[resolvedPathSize - 1] = '\0';
+ AZ_Error("FileIO", false, "Prepending the %.*s alias to the input path results in a path longer than the"
+ " AZ::IO::MaxPathLength + the alias size of %zu. The size of the potential failed path is %zu",
+ AZ_STRING_ARG(productAssetAlias), rootedPathBuffer.capacity(), requiredSize)
}
else
{
- azstrncpy(rootedPathBuffer + rootLength, AZ_MAX_PATH_LEN - rootLength, path, pathLen + 1);
+ rootedPathBuffer = RootedPathString::format("%.*s/%s", AZ_STRING_ARG(productAssetAlias), path);
}
}
else
{
- ConvertToAbsolutePath(path, rootedPathBuffer, AZ_MAX_PATH_LEN);
+ if (ConvertToAbsolutePath(path, rootedPathBuffer.data(), rootedPathBuffer.capacity()))
+ {
+ // Recalculate the internal string length
+ rootedPathBuffer.resize_no_construct(AZStd::char_traits::length(rootedPathBuffer.data()));
+ }
}
- rootedPath = rootedPathBuffer;
+ rootedPath = rootedPathBuffer.c_str();
}
if (ResolveAliases(rootedPath, resolvedPath, resolvedPathSize))
@@ -561,11 +566,57 @@ namespace AZ
const char* LocalFileIO::GetAlias(const char* key) const
{
- const auto it = m_aliases.find(key);
- if (it != m_aliases.end())
+ if (const auto it = m_aliases.find(key); it != m_aliases.end())
{
return it->second.c_str();
}
+ else if (const auto deprecatedIt = m_deprecatedAliases.find(key);
+ deprecatedIt != m_deprecatedAliases.end())
+ {
+ AZ_Error("FileIO", false, R"(Alias "%s" is deprecated. Please use alias "%s" instead)",
+ key, deprecatedIt->second.c_str());
+ AZStd::string_view aliasValue = deprecatedIt->second;
+ // Contains the list of aliases resolved so far
+ // If max_size is hit, than an error is logged and nullptr is returned
+ using VisitedAliasSet = AZStd::fixed_unordered_set;
+ VisitedAliasSet visitedAliasSet;
+ while (aliasValue.starts_with("@"))
+ {
+ if (visitedAliasSet.contains(aliasValue))
+ {
+ AZ_Error("FileIO", false, "Cycle found with for alias %.*s when trying to resolve deprecated alias %s",
+ AZ_STRING_ARG(aliasValue), key);
+ return nullptr;
+ }
+
+ if(visitedAliasSet.size() == visitedAliasSet.max_size())
+ {
+ AZ_Error("FileIO", false, "Unable to resolve path to deprecated alias %s within %zu steps",
+ key, visitedAliasSet.max_size());
+ return nullptr;
+ }
+
+ // Add the current alias value to the visited set
+ visitedAliasSet.emplace(aliasValue);
+
+ // Check if the alias value corresponds to another alias
+ if (auto resolvedIter = m_aliases.find(aliasValue); resolvedIter != m_aliases.end())
+ {
+ aliasValue = resolvedIter->second;
+ }
+ else if (resolvedIter = m_deprecatedAliases.find(aliasValue);
+ resolvedIter != m_deprecatedAliases.end())
+ {
+ aliasValue = resolvedIter->second;
+ }
+ else
+ {
+ return nullptr;
+ }
+ }
+
+ return aliasValue.data();
+ }
return nullptr;
}
@@ -574,6 +625,11 @@ namespace AZ
m_aliases.erase(key);
}
+ void LocalFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias)
+ {
+ m_deprecatedAliases[oldAlias] = newAlias;
+ }
+
AZStd::optional LocalFileIO::ConvertToAliasBuffer(char* outBuffer, AZ::u64 outBufferLength, AZStd::string_view inBuffer) const
{
size_t longestMatch = 0;
@@ -675,7 +731,9 @@ namespace AZ
: string_view_pair{};
size_t requiredResolvedPathSize = pathView.size() - aliasKey.size() + aliasValue.size() + 1;
- AZ_Assert(path != resolvedPath && resolvedPathSize >= requiredResolvedPathSize, "Resolved path is incorrect");
+ AZ_Assert(path != resolvedPath, "ResolveAliases does not support inplace update of the path");
+ AZ_Assert(resolvedPathSize >= requiredResolvedPathSize, "Resolved path size %llu not large enough. It needs to be %zu",
+ resolvedPathSize, requiredResolvedPathSize);
// we assert above, but we also need to properly handle the case when the resolvedPath buffer size
// is too small to copy the source into.
if (path == resolvedPath || (resolvedPathSize < requiredResolvedPathSize))
@@ -699,13 +757,9 @@ namespace AZ
resolvedPath[resolvedPathLen] = '\0';
// If the path started with one of the "asset cache" path aliases, lowercase the path
- const char* assetAliasPath = GetAlias("@assets@");
- const char* rootAliasPath = GetAlias("@root@");
- const char* projectPlatformCacheAliasPath = GetAlias("@projectplatformcache@");
+ const char* projectPlatformCacheAliasPath = GetAlias("@products@");
- const bool lowercasePath = (assetAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, assetAliasPath)) ||
- (rootAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, rootAliasPath)) ||
- (projectPlatformCacheAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, projectPlatformCacheAliasPath));
+ const bool lowercasePath = projectPlatformCacheAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, projectPlatformCacheAliasPath);
if (lowercasePath)
{
@@ -822,5 +876,10 @@ namespace AZ
return pathStr + "/";
}
+
+ bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const
+ {
+ return AZ::Utils::ConvertToAbsolutePath(path, absolutePath, maxLength);
+ }
} // namespace IO
} // namespace AZ
diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h
index a9db55b320..a5ee1519a2 100644
--- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h
+++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h
@@ -61,6 +61,8 @@ namespace AZ
void SetAlias(const char* alias, const char* path) override;
void ClearAlias(const char* alias) override;
const char* GetAlias(const char* alias) const override;
+ void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override;
+
AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override;
bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override;
using FileIOBase::ConvertToAlias;
@@ -71,7 +73,7 @@ namespace AZ
bool GetFilename(HandleType fileHandle, char* filename, AZ::u64 filenameSize) const override;
bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const;
-
+
private:
SystemFile* GetFilePointerFromHandle(HandleType fileHandle);
@@ -79,7 +81,6 @@ namespace AZ
AZStd::optional ConvertToAliasBuffer(char* outBuffer, AZ::u64 outBufferLength, AZStd::string_view inBuffer) const;
bool ResolveAliases(const char* path, char* resolvedPath, AZ::u64 resolvedPathSize) const;
- bool IsAbsolutePath(const char* path) const;
bool LowerIfBeginsWith(char* inOutBuffer, AZ::u64 bufferLen, const char* alias) const;
@@ -91,6 +92,7 @@ namespace AZ
AZStd::atomic m_nextHandle;
AZStd::unordered_map m_openFiles;
AZStd::unordered_map m_aliases;
+ AZStd::unordered_map m_deprecatedAliases;
void CheckInvalidWrite(const char* path);
};
diff --git a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp
index 041e5baf4a..9e05cd5cb9 100644
--- a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp
+++ b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp
@@ -49,14 +49,14 @@ namespace AZ
s_IOLog.append(m_name);
s_IOLog.append("\r\n");
}
-
+
void Append(const char* line)
{
s_IOLog.append(AZStd::string::format("%u ", m_fileOperation));
s_IOLog.append(line);
s_IOLog.append("\r\n");
}
-
+
~LogCall()
{
s_IOLog.append(AZStd::string::format("%u End ", m_fileOperation));
@@ -251,7 +251,7 @@ namespace AZ
REMOTEFILE_LOG_APPEND(AZStd::string::format("NetworkFileIO::Size(filePath=%s) size request failed. return Error", filePath).c_str());
return ResultCode::Error;
}
-
+
size = response.m_size;
REMOTEFILE_LOG_APPEND(AZStd::string::format("NetworkFileIO::Size(filePath=%s) size=%u. return Success", filePath, size).c_str());
return ResultCode::Success;
@@ -793,6 +793,12 @@ namespace AZ
REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::ClearAlias(alias=%s)", alias?alias:"nullptr").c_str());
}
+ void NetworkFileIO::SetDeprecatedAlias([[maybe_unused]] AZStd::string_view oldAlias, [[maybe_unused]] AZStd::string_view newAlias)
+ {
+ REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::SetDeprecatedAlias(oldAlias=%.*s, newAlias=%.*s)",
+ AZ_STRING_ARG(oldAlias), AZ_STRING_ARG(newAlias)).c_str());
+ }
+
AZStd::optional NetworkFileIO::ConvertToAlias(char* inOutBuffer, [[maybe_unused]] AZ::u64 bufferLength) const
{
REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::ConvertToAlias(inOutBuffer=%s, bufferLength=%u)", inOutBuffer?inOutBuffer:"nullptr", bufferLength).c_str());
@@ -927,7 +933,7 @@ namespace AZ
{
m_cacheLookaheadPos = filePosition - CacheStartFilePosition();
}
-
+
void RemoteFileCache::SyncCheck()
{
#ifdef REMOTEFILEIO_SYNC_CHECK
@@ -955,7 +961,7 @@ namespace AZ
AZ_TracePrintf(RemoteFileCacheChannel, "RemoteFileCache::SyncCheck(m_fileHandle=%u) tell request failed.", m_fileHandle);
REMOTEFILE_LOG_APPEND(AZStd::string::format("RemoteFileCache::SyncCheck(m_fileHandle=%u) tell request failed.", m_fileHandle).c_str());
}
-
+
if (responce.m_offset != m_filePosition)
{
AZ_TracePrintf(RemoteFileCacheChannel, "RemoteFileCache::SyncCheck(m_fileHandle=%u) failed!!! m_filePosition=%u tell=%u", m_fileHandle, m_filePosition, responce.m_offset);
@@ -1028,7 +1034,7 @@ namespace AZ
{
REMOTEFILE_LOG_CALL(AZStd::string::format("RemoteFileIO()::Close(fileHandle=%u)", fileHandle).c_str());
Result returnValue = NetworkFileIO::Close(fileHandle);
-
+
if (returnValue == ResultCode::Success)
{
AZStd::lock_guard lock(m_remoteFileCacheGuard);
@@ -1160,7 +1166,7 @@ namespace AZ
REMOTEFILE_LOG_CALL(AZStd::string::format("RemoteFileIO()::Read(fileHandle=%u, buffer=OUT, size=%u, failOnFewerThanSizeBytesRead=%s, bytesRead=OUT)", fileHandle, size, failOnFewerThanSizeBytesRead ? "True" : "False").c_str());
AZStd::lock_guard lock(m_remoteFileCacheGuard);
RemoteFileCache& cache = GetCache(fileHandle);
-
+
AZ::u64 remainingBytesToRead = size;
AZ::u64 bytesReadFromCache = 0;
AZ::u64 remainingBytesInCache = cache.RemainingBytes();
@@ -1263,7 +1269,7 @@ namespace AZ
RemoteFileCache& cache = GetCache(fileHandle);
if (cache.m_cacheLookaheadBuffer.size() && cache.RemainingBytes())
{
- // find out where we are
+ // find out where we are
AZ::u64 seekPosition = cache.CacheFilePosition();
// note, seeks are predicted, and do not ask for a response.
@@ -1361,6 +1367,14 @@ namespace AZ
}
}
+ void RemoteFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias)
+ {
+ if (m_excludedFileIO)
+ {
+ m_excludedFileIO->SetDeprecatedAlias(oldAlias, newAlias);
+ }
+ }
+
AZStd::optional RemoteFileIO::ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const
{
return m_excludedFileIO ? m_excludedFileIO->ConvertToAlias(inOutBuffer, bufferLength) : strlen(inOutBuffer);
diff --git a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h
index d91e59bebc..77e91e1978 100644
--- a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h
+++ b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h
@@ -102,6 +102,7 @@ namespace AZ
Result FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) override;
void SetAlias(const char* alias, const char* path) override;
void ClearAlias(const char* alias) override;
+ void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override;
AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override;
bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override;
using FileIOBase::ConvertToAlias;
@@ -194,6 +195,7 @@ namespace AZ
void SetAlias(const char* alias, const char* path) override;
const char* GetAlias(const char* alias) const override;
void ClearAlias(const char* alias) override;
+ void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override;
AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override;
bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override;
using FileIOBase::ConvertToAlias;
diff --git a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp
index b454755cd4..bd5ba39d76 100644
--- a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp
+++ b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp
@@ -13,7 +13,6 @@
#include
#include
#include
-#include
#include
#include
@@ -42,10 +41,10 @@ namespace AZ
{
Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath)
{
- char resolvedSourcePath[AZ_MAX_PATH_LEN];
- char resolvedDestPath[AZ_MAX_PATH_LEN];
- ResolvePath(sourceFilePath, resolvedSourcePath, AZ_MAX_PATH_LEN);
- ResolvePath(destinationFilePath, resolvedDestPath, AZ_MAX_PATH_LEN);
+ char resolvedSourcePath[AZ::IO::MaxPathLength];
+ char resolvedDestPath[AZ::IO::MaxPathLength];
+ ResolvePath(sourceFilePath, resolvedSourcePath, AZ::IO::MaxPathLength);
+ ResolvePath(destinationFilePath, resolvedDestPath, AZ::IO::MaxPathLength);
if (AZ::Android::Utils::IsApkPath(sourceFilePath) || AZ::Android::Utils::IsApkPath(destinationFilePath))
{
@@ -77,18 +76,17 @@ namespace AZ
{
ANDROID_IO_PROFILE_SECTION_ARGS("FindFiles:%s", filePath);
- char resolvedPath[AZ_MAX_PATH_LEN];
- ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN);
+ char resolvedPath[AZ::IO::MaxPathLength];
+ ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength);
AZStd::string pathWithoutSlash = RemoveTrailingSlash(resolvedPath);
bool isInAPK = AZ::Android::Utils::IsApkPath(pathWithoutSlash.c_str());
+ AZ::IO::FixedMaxPath tempBuffer;
if (isInAPK)
{
AZ::IO::FixedMaxPath strippedPath = AZ::Android::Utils::StripApkPrefix(pathWithoutSlash.c_str());
- char tempBuffer[AZ_MAX_PATH_LEN] = {0};
-
AZ::Android::APKFileHandler::ParseDirectory(strippedPath.c_str(), [&](const char* name)
{
AZStd::string_view filenameView = name;
@@ -98,10 +96,9 @@ namespace AZ
AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath);
foundFilePath += name;
// if aliased, de-alias!
- azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str());
- ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN);
+ ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath });
- if (!callback(tempBuffer))
+ if (!callback(tempBuffer.c_str()))
{
return false;
}
@@ -115,10 +112,6 @@ namespace AZ
if (dir != nullptr)
{
- // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to
- // use a static buffer here.
- char tempBuffer[AZ_MAX_PATH_LEN];
-
// clear the errno state so we can distinguish between errors and end of stream
errno = 0;
struct dirent* entry = readdir(dir);
@@ -133,10 +126,9 @@ namespace AZ
AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath);
foundFilePath += entry->d_name;
// if aliased, de-alias!
- azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str());
- ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN);
+ ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath });
- if (!callback(tempBuffer))
+ if (!callback(tempBuffer.c_str()))
{
break;
}
@@ -163,8 +155,8 @@ namespace AZ
Result LocalFileIO::CreatePath(const char* filePath)
{
- char resolvedPath[AZ_MAX_PATH_LEN];
- ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN);
+ char resolvedPath[AZ::IO::MaxPathLength];
+ ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength);
if (AZ::Android::Utils::IsApkPath(resolvedPath))
{
@@ -201,33 +193,5 @@ namespace AZ
mkdir(pathBuffer.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
return IsDirectory(resolvedPath) ? ResultCode::Success : ResultCode::Error;
}
-
- bool LocalFileIO::IsAbsolutePath(const char* path) const
- {
- return path && path[0] == '/';
- }
-
- bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const
- {
- if (AZ::Android::Utils::IsApkPath(path))
- {
- azstrncpy(absolutePath, maxLength, path, maxLength);
- return true;
- }
- AZ_Assert(maxLength >= AZ_MAX_PATH_LEN, "Path length is larger than AZ_MAX_PATH_LEN");
- if (!IsAbsolutePath(path))
- {
- // note that realpath fails if the path does not exist and actually changes the return value
- // to be the actual place that FAILED, which we don't want.
- // if we fail, we'd prefer to fall through and at least use the original path.
- const char* result = realpath(path, absolutePath);
- if (result)
- {
- return true;
- }
- }
- azstrcpy(absolutePath, maxLength, path);
- return IsAbsolutePath(absolutePath);
- }
} // namespace IO
}//namespace AZ
diff --git a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp
index 844464681a..cbcf4a3f56 100644
--- a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp
+++ b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp
@@ -10,7 +10,7 @@
#include
#include
#include
-#include
+#include
#include
namespace AZ
@@ -19,11 +19,11 @@ namespace AZ
{
Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath)
{
- char resolvedSourceFilePath[AZ_MAX_PATH_LEN] = {0};
- ResolvePath(sourceFilePath, resolvedSourceFilePath, AZ_MAX_PATH_LEN);
+ char resolvedSourceFilePath[AZ::IO::MaxPathLength] = {0};
+ ResolvePath(sourceFilePath, resolvedSourceFilePath, AZ::IO::MaxPathLength);
- char resolvedDestinationFilePath[AZ_MAX_PATH_LEN] = {0};
- ResolvePath(destinationFilePath, resolvedDestinationFilePath, AZ_MAX_PATH_LEN);
+ char resolvedDestinationFilePath[AZ::IO::MaxPathLength] = {0};
+ ResolvePath(destinationFilePath, resolvedDestinationFilePath, AZ::IO::MaxPathLength);
// Use standard C++ method of file copy.
{
@@ -45,17 +45,15 @@ namespace AZ
Result LocalFileIO::FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback)
{
- char resolvedPath[AZ_MAX_PATH_LEN] = {0};
- ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN);
+ char resolvedPath[AZ::IO::MaxPathLength] = {0};
+ ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength);
AZStd::string withoutSlash = RemoveTrailingSlash(resolvedPath);
DIR* dir = opendir(withoutSlash.c_str());
if (dir != nullptr)
{
- // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to
- // use a static buffer here.
- char tempBuffer[AZ_MAX_PATH_LEN];
+ AZ::IO::FixedMaxPath tempBuffer;
errno = 0;
struct dirent* entry = readdir(dir);
@@ -70,10 +68,9 @@ namespace AZ
AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath);
foundFilePath += entry->d_name;
// if aliased, dealias!
- azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str());
- ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN);
+ ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath });
- if (!callback(tempBuffer))
+ if (!callback(tempBuffer.c_str()))
{
break;
}
@@ -92,8 +89,8 @@ namespace AZ
Result LocalFileIO::CreatePath(const char* filePath)
{
- char resolvedPath[AZ_MAX_PATH_LEN] = {0};
- ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN);
+ char resolvedPath[AZ::IO::MaxPathLength] = {0};
+ ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength);
// create all paths up to that directory.
// its not an error if the path exists.
@@ -125,28 +122,5 @@ namespace AZ
mkdir(buf.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
return IsDirectory(resolvedPath) ? ResultCode::Success : ResultCode::Error;
}
-
- bool LocalFileIO::IsAbsolutePath(const char* path) const
- {
- return path && path[0] == '/';
- }
-
- bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const
- {
- AZ_Assert(maxLength >= AZ_MAX_PATH_LEN, "Path length is larger than AZ_MAX_PATH_LEN");
- if (!IsAbsolutePath(path))
- {
- // note that realpath fails if the path does not exist and actually changes the return value
- // to be the actual place that FAILED, which we don't want.
- // if we fail, we'd prefer to fall through and at least use the original path.
- const char* result = realpath(path, absolutePath);
- if (result)
- {
- return true;
- }
- }
- azstrcpy(absolutePath, maxLength, path);
- return IsAbsolutePath(absolutePath);
- }
} // namespace IO
} // namespace AZ
diff --git a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp
index 64787d4951..7ff8a96c09 100644
--- a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp
+++ b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp
@@ -47,7 +47,7 @@ namespace AZ
if (hFind != INVALID_HANDLE_VALUE)
{
- // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to
+ // because the absolute path might actually be SHORTER than the alias ("D:/o3de" -> "@engroot@"), we need to
// use a static buffer here.
char tempBuffer[AZ_MAX_PATH_LEN];
do
@@ -133,36 +133,5 @@ namespace AZ
return SystemFile::CreateDir(buf.c_str()) ? ResultCode::Success : ResultCode::Error;
}
-
- bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const
- {
- char* result = _fullpath(absolutePath, path, maxLength);
- size_t len = ::strlen(absolutePath);
- if (len > 0)
- {
- // strip trailing slash
- if (absolutePath[len - 1] == '/' || absolutePath[len - 1] == '\\')
- {
- absolutePath[len - 1] = 0;
- }
-
- // For some reason, at least on windows, _fullpath returns a lowercase drive letter even though other systems like Qt, use upper case.
- if (len > 2)
- {
- if (absolutePath[1] == ':')
- {
- absolutePath[0] = (char)toupper(absolutePath[0]);
- }
- }
- }
- return result != nullptr;
- }
-
- bool LocalFileIO::IsAbsolutePath(const char* path) const
- {
- char drive[16] = { 0 };
- _splitpath_s(path, drive, 16, nullptr, 0, nullptr, 0, nullptr, 0);
- return strlen(drive) > 0;
- }
} // namespace IO
}//namespace AZ
diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp
index b8f62a2b77..173ec61263 100644
--- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp
+++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp
@@ -7,26 +7,24 @@
*/
#include
#include
+#include
+#include
#include
-namespace AZ
+namespace AZ::IO
{
- namespace IO
+ Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath)
{
+ AZ::IO::FixedMaxPath resolvedSourcePath;
+ ResolvePath(resolvedSourcePath, sourceFilePath);
+ AZ::IO::FixedMaxPath resolvedDestPath;
+ ResolvePath(resolvedDestPath, destinationFilePath);
- Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath)
- {
- char resolvedSourcePath[AZ_MAX_PATH_LEN];
- ResolvePath(sourceFilePath, resolvedSourcePath, AZ_MAX_PATH_LEN);
- char resolvedDestPath[AZ_MAX_PATH_LEN];
- ResolvePath(destinationFilePath, resolvedDestPath, AZ_MAX_PATH_LEN);
+ AZStd::fixed_wstring resolvedSourcePathW;
+ AZStd::fixed_wstring resolvedDestPathW;
+ AZStd::to_wstring(resolvedSourcePathW, resolvedSourcePath.Native());
+ AZStd::to_wstring(resolvedDestPathW, resolvedDestPath.Native());
- if (::CopyFileA(resolvedSourcePath, resolvedDestPath, false) == 0)
- {
- return ResultCode::Error;
- }
-
- return ResultCode::Success;
- }
- } // namespace IO
-}//namespace AZ
+ return ::CopyFileW(resolvedSourcePathW.c_str(), resolvedDestPathW.c_str(), false) != 0 ? ResultCode::Success : ResultCode::Error;
+ }
+}//namespace AZ::IO
diff --git a/Code/Framework/AzFramework/Tests/Application.cpp b/Code/Framework/AzFramework/Tests/Application.cpp
index 313b5e3b56..9ad072cba5 100644
--- a/Code/Framework/AzFramework/Tests/Application.cpp
+++ b/Code/Framework/AzFramework/Tests/Application.cpp
@@ -26,7 +26,7 @@ protected:
}
if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr)
{
- fileIoBase->SetAlias("@assets@", m_tempDirectory.GetDirectory());
+ fileIoBase->SetAlias("@products@", m_tempDirectory.GetDirectory());
}
}
diff --git a/Code/Framework/AzFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp
index 8e88ccfc39..37babb49a8 100644
--- a/Code/Framework/AzFramework/Tests/ArchiveTests.cpp
+++ b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp
@@ -50,7 +50,7 @@ namespace UnitTest
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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
}
@@ -262,7 +262,7 @@ namespace UnitTest
pArchive.reset();
EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders.c_str()));
- EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders.c_str()));
+ EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders.c_str()));
EXPECT_TRUE(archive->IsFileExist(fileInArchiveFile));
}
@@ -353,7 +353,7 @@ namespace UnitTest
// and be able to IMMEDIATELY
// * read the file in the subfolder
// * enumerate the folders (including that subfolder) even though they are 'virtual', not real folders on physical media
- // * all of the above even though the mount point for the archive is @assets@ wheras the physical pack lives in @usercache@
+ // * all of the above even though the mount point for the archive is @products@ wheras the physical pack lives in @usercache@
// finally, we're going to repeat the above test but with files mounted with subfolders
// so for example, the pack will contain levelinfo.xml at the root of it
// but it will be mounted at a subfolder (levels/mylevel).
@@ -388,7 +388,7 @@ namespace UnitTest
pArchive.reset();
EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders));
- EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders));
+ EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders));
// ---- BARRAGE OF TESTS
EXPECT_TRUE(archive->IsFileExist("levels\\mylevel\\levelinfo.xml"));
EXPECT_TRUE(archive->IsFileExist("levels//mylevel//levelinfo.xml"));
@@ -484,7 +484,7 @@ namespace UnitTest
pArchive.reset();
EXPECT_TRUE(IsPackValid(testArchivePath_withMountPoint));
- EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2", testArchivePath_withMountPoint));
+ EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2", testArchivePath_withMountPoint));
// ---- BARRAGE OF TESTS
EXPECT_TRUE(archive->IsFileExist("uniquename\\mylevel2\\levelinfo.xml"));
@@ -543,7 +543,7 @@ namespace UnitTest
archive->ClosePack(testArchivePath_withMountPoint);
// --- test to make sure that when you iterate only the first component is found, so bury it deep and ask for the root
- EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint));
+ EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint));
found_mylevel_folder = false;
handle = archive->FindFirst("uniquename\\*");
@@ -574,9 +574,9 @@ namespace UnitTest
found_mylevel_folder = false;
// now make sure no red herrings appear
- // for example, if a file is mounted at "@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4"
- // and the file "@assets@\\somethingelse" is requested it should not be found
- // in addition if the file "@assets@\\uniquename\\mylevel3" is requested it should not be found
+ // for example, if a file is mounted at "@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4"
+ // and the file "@products@\\somethingelse" is requested it should not be found
+ // in addition if the file "@products@\\uniquename\\mylevel3" is requested it should not be found
handle = archive->FindFirst("somethingelse\\*");
EXPECT_FALSE(static_cast(handle));
@@ -610,7 +610,7 @@ namespace UnitTest
cpfio.Remove(genericArchiveFileName);
// create the asset alias directory
- cpfio.CreatePath("@assets@");
+ cpfio.CreatePath("@products@");
// create generic file
@@ -635,11 +635,11 @@ namespace UnitTest
pArchive.reset();
EXPECT_TRUE(IsPackValid(genericArchiveFileName));
- EXPECT_TRUE(archive->OpenPack("@assets@", genericArchiveFileName));
+ EXPECT_TRUE(archive->OpenPack("@products@", genericArchiveFileName));
// ---- BARRAGE OF TESTS
EXPECT_TRUE(cpfio.Exists("testfile.xml"));
- EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml")); // this should be hte same file
+ EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml")); // this should be hte same file
EXPECT_TRUE(!cpfio.Exists("@log@/testfile.xml"));
EXPECT_TRUE(!cpfio.Exists("@usercache@/testfile.xml"));
EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml"));
@@ -685,9 +685,9 @@ namespace UnitTest
EXPECT_EQ(ResultCode::Success, cpfio.Close(normalFileHandle));
EXPECT_TRUE(!cpfio.IsDirectory("testfile.xml"));
- EXPECT_TRUE(cpfio.IsDirectory("@assets@"));
+ EXPECT_TRUE(cpfio.IsDirectory("@products@"));
EXPECT_TRUE(cpfio.IsReadOnly("testfile.xml"));
- EXPECT_TRUE(cpfio.IsReadOnly("@assets@/testfile.xml"));
+ EXPECT_TRUE(cpfio.IsReadOnly("@products@/testfile.xml"));
EXPECT_TRUE(!cpfio.IsReadOnly("@log@/unittesttemp/realfileforunittest.xml"));
@@ -714,10 +714,10 @@ namespace UnitTest
// find files test.
AZ::IO::FixedMaxPath resolvedTestFilePath;
- EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@assets@/testfile.xml")));
+ EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@products@/testfile.xml")));
bool foundIt = false;
// note that this file exists only in the archive.
- cpfio.FindFiles("@assets@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName)
+ cpfio.FindFiles("@products@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName)
{
AZ::IO::FixedMaxPath resolvedFoundPath;
EXPECT_TRUE(cpfio.ResolvePath(resolvedFoundPath, AZ::IO::PathView(foundName)));
@@ -734,10 +734,10 @@ namespace UnitTest
// The following test is disabled because it will trigger an AZ_ERROR which will affect the outcome of this entire test
- // EXPECT_NE(ResultCode::Success, cpfio.Remove("@assets@/testfile.xml")); // may not delete archive files
+ // EXPECT_NE(ResultCode::Success, cpfio.Remove("@products@/testfile.xml")); // may not delete archive files
// make sure it works with and without alias:
- EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml"));
+ EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml"));
EXPECT_TRUE(cpfio.Exists("testfile.xml"));
EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml"));
@@ -788,22 +788,22 @@ namespace UnitTest
EXPECT_TRUE(archive->ClosePack(realNameBuf));
// change its actual location:
- EXPECT_TRUE(archive->OpenPack("@assets@", realNameBuf));
- EXPECT_TRUE(archive->IsFileExist("@assets@/foundit.dat"));
+ EXPECT_TRUE(archive->OpenPack("@products@", realNameBuf));
+ EXPECT_TRUE(archive->IsFileExist("@products@/foundit.dat"));
EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous location!
- EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
- EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat"));
+ EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
+ EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat"));
EXPECT_TRUE(archive->ClosePack(realNameBuf));
// try sub-folders
- EXPECT_TRUE(archive->OpenPack("@assets@/mystuff", realNameBuf));
- EXPECT_TRUE(archive->IsFileExist("@assets@/mystuff/foundit.dat"));
- EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat")); // do not find it in the previous locations!
+ EXPECT_TRUE(archive->OpenPack("@products@/mystuff", realNameBuf));
+ EXPECT_TRUE(archive->IsFileExist("@products@/mystuff/foundit.dat"));
+ EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat")); // do not find it in the previous locations!
EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous locations!
- EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
- EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
- EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat")); // non-existent file
- EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/notfoundit.dat")); // non-existent file
+ EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
+ EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
+ EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat")); // non-existent file
+ EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/notfoundit.dat")); // non-existent file
EXPECT_TRUE(archive->ClosePack(realNameBuf));
}
@@ -861,7 +861,7 @@ namespace UnitTest
AZ::IO::FileIOBase* ioBase = AZ::IO::FileIOBase::GetInstance();
ASSERT_NE(nullptr, ioBase);
- const char* assetsPath = ioBase->GetAlias("@assets@");
+ const char* assetsPath = ioBase->GetAlias("@products@");
ASSERT_NE(nullptr, assetsPath);
auto stringToAdd = AZ::IO::Path(assetsPath) / "textures" / "test.dds";
@@ -872,7 +872,7 @@ namespace UnitTest
// it normalizes the string, so the slashes flip and everything is lowercased.
AZ::IO::FixedMaxPath resolvedAddedPath;
AZ::IO::FixedMaxPath resolvedResourcePath;
- EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@assets@/textures/test.dds"));
+ EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@products@/textures/test.dds"));
EXPECT_TRUE(ioBase->ReplaceAlias(resolvedResourcePath, reslist->GetFirst()));
EXPECT_EQ(resolvedAddedPath, resolvedResourcePath);
reslist->Clear();
diff --git a/Code/Framework/AzFramework/Tests/FileIO.cpp b/Code/Framework/AzFramework/Tests/FileIO.cpp
index dbee109978..ca7c46b66c 100644
--- a/Code/Framework/AzFramework/Tests/FileIO.cpp
+++ b/Code/Framework/AzFramework/Tests/FileIO.cpp
@@ -802,6 +802,51 @@ namespace UnitTest
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
}
+ TEST_F(AliasTest, GetAlias_LogsError_WhenAccessingDeprecatedAlias_Succeeds)
+ {
+ AZ::IO::LocalFileIO local;
+
+ AZ::IO::FixedMaxPathString aliasFolder;
+ EXPECT_TRUE(local.ConvertToAbsolutePath("/temp", aliasFolder.data(), aliasFolder.capacity()));
+ aliasFolder.resize_no_construct(AZStd::char_traits::length(aliasFolder.data()));
+
+ local.SetAlias("@test@", aliasFolder.c_str());
+ local.SetDeprecatedAlias("@deprecated@", "@test@");
+ local.SetDeprecatedAlias("@deprecatednonexistent@", "@nonexistent@");
+ local.SetDeprecatedAlias("@deprecatedsecond@", "@deprecated@");
+ local.SetDeprecatedAlias("@deprecatednonaliaspath@", aliasFolder);
+
+ AZ_TEST_START_TRACE_SUPPRESSION;
+ const char* testAlias = local.GetAlias("@test@");
+ ASSERT_NE(nullptr, testAlias);
+ EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
+ AZ_TEST_STOP_TRACE_SUPPRESSION(0);
+
+ // Validate that accessing Deprecated Alias results in AZ_Error
+ AZ_TEST_START_TRACE_SUPPRESSION;
+ testAlias = local.GetAlias("@deprecated@");
+ ASSERT_NE(nullptr, testAlias);
+ EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
+
+ AZ_TEST_START_TRACE_SUPPRESSION;
+ testAlias = local.GetAlias("@deprecatednonexistent@");
+ EXPECT_EQ(nullptr, testAlias);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
+
+ AZ_TEST_START_TRACE_SUPPRESSION;
+ testAlias = local.GetAlias("@deprecatedsecond@");
+ ASSERT_NE(nullptr, testAlias);
+ EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
+
+ AZ_TEST_START_TRACE_SUPPRESSION;
+ testAlias = local.GetAlias("@deprecatednonaliaspath@");
+ ASSERT_NE(nullptr, testAlias);
+ EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
+ }
+
class SmartMoveTests
: public FolderFixture
{
diff --git a/Code/Framework/AzFramework/Tests/FileTagTests.cpp b/Code/Framework/AzFramework/Tests/FileTagTests.cpp
index 134e7aad6d..2b09a5638c 100644
--- a/Code/Framework/AzFramework/Tests/FileTagTests.cpp
+++ b/Code/Framework/AzFramework/Tests/FileTagTests.cpp
@@ -27,7 +27,7 @@ namespace UnitTest
const char DummyFile[] = "dummy.txt";
const char AnotherDummyFile[] = "Foo/Dummy.txt";
-
+
const char DummyPattern[] = R"(^(.+)_([a-z]+)\..+$)";
const char MatchingPatternFile[] = "Foo/dummy_abc.txt";
const char NonMatchingPatternFile[] = "Foo/dummy_a8c.txt";
@@ -75,7 +75,7 @@ namespace UnitTest
: public AllocatorsFixture
{
public:
-
+
void SetUp() override
{
AllocatorsFixture::SetUp();
@@ -89,7 +89,7 @@ namespace UnitTest
const char* testAssetRoot = m_tempDirectory.GetDirectory();
// 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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
@@ -98,7 +98,7 @@ namespace UnitTest
AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(m_data->m_localFileIO.get());
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", testAssetRoot);
+ AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", testAssetRoot);
m_data->m_excludeFileQueryManager = AZStd::make_unique(FileTagType::Exclude);
m_data->m_includeFileQueryManager = AZStd::make_unique(FileTagType::Include);
@@ -114,7 +114,7 @@ namespace UnitTest
AZStd::vector includedWildcardTags = { DummyFileTags[DummyFileTagIndex::GIdx] };
EXPECT_TRUE(m_data->m_fileTagManager.AddFilePatternTags(DummyWildcard, FilePatternType::Wildcard, FileTagType::Include, includedWildcardTags).IsSuccess());
-
+
AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", ExcludeFile, FileTagAsset::Extension()).c_str(), m_data->m_excludeFile);
AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", IncludeFile, FileTagAsset::Extension()).c_str(), m_data->m_includeFile);
@@ -184,7 +184,7 @@ namespace UnitTest
TEST_F(FileTagTest, FileTags_QueryByAbsoluteFilePath_Valid)
{
AZStd::string absoluteDummyFilePath = DummyFile;
- EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath));
+ EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath));
AZStd::set tags = m_data->m_excludeFileQueryManager->GetTags(absoluteDummyFilePath);
@@ -196,7 +196,7 @@ namespace UnitTest
ASSERT_EQ(tags.size(), 0);
AZStd::string absoluteAnotherDummyFilePath = AnotherDummyFile;
- EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath));
+ EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath));
tags = m_data->m_includeFileQueryManager->GetTags(absoluteAnotherDummyFilePath);
ASSERT_EQ(tags.size(), 2);
@@ -213,7 +213,7 @@ namespace UnitTest
// Set the customized alias
AZStd::string customizedAliasFilePath;
- const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@");
+ const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@");
AzFramework::StringFunc::AssetDatabasePath::Join(assetsAlias, "foo", customizedAliasFilePath);
AZ::IO::FileIOBase::GetInstance()->SetAlias("@customizedalias@", customizedAliasFilePath.c_str());
@@ -305,7 +305,7 @@ namespace UnitTest
m_data->m_excludeFileQueryManager->ClearData();
EXPECT_TRUE(m_data->m_excludeFileQueryManager->Load(m_data->m_excludeFile));
-
+
AZStd::set outputTags = m_data->m_excludeFileQueryManager->GetTags(MatchingWildcardFile);
EXPECT_EQ(outputTags.size(), 2);
diff --git a/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp
index 169834249f..665c06b571 100644
--- a/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp
+++ b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp
@@ -6,81 +6,19 @@
*
*/
+#include
#include
#include
#include
-#include
-#include
+#include
+#include
namespace UnitTest
{
- using namespace AZ;
-
- class FileIOBaseRAII
- {
- public:
- FileIOBaseRAII(AZ::IO::FileIOBase& fileIO)
- : m_prevFileIO(AZ::IO::FileIOBase::GetInstance())
- {
- AZ::IO::FileIOBase::SetInstance(&fileIO);
- }
-
- ~FileIOBaseRAII()
- {
- AZ::IO::FileIOBase::SetInstance(m_prevFileIO);
- }
- private:
- AZ::IO::FileIOBase* m_prevFileIO;
- };
-
class GenAppDescriptors
: public AllocatorsTestFixture
{
public:
-
- void run()
- {
- struct Config
- {
- const char* platformName;
- const char* configName;
- const char* libSuffix;
- };
-
- ComponentApplication app;
-
- SerializeContext serializeContext;
- AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app);
- AZ::Entity::Reflect(&serializeContext);
- DynamicModuleDescriptor::Reflect(&serializeContext);
-
- AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity");
-
- const Config config = {"Platform", "Config", "libSuffix"};
-
- AZ::ComponentApplication::Descriptor descriptor;
-
- if (config.libSuffix && config.libSuffix[0])
- {
- FakePopulateModules(descriptor, config.libSuffix);
- }
-
- const AZStd::string filename = AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName);
-
- IO::FileIOStream stream(filename.c_str(), IO::OpenMode::ModeWrite);
- ObjectStream* objStream = ObjectStream::Create(&stream, serializeContext, ObjectStream::ST_XML);
- bool descWriteOk = objStream->WriteClass(&descriptor);
- (void)descWriteOk;
- AZ_Warning("ComponentApplication", descWriteOk, "Failed to write memory descriptor to application descriptor file %s!", filename.c_str());
- bool entityWriteOk = objStream->WriteClass(&dummySystemEntity);
- (void)entityWriteOk;
- AZ_Warning("ComponentApplication", entityWriteOk, "Failed to write system entity to application descriptor file %s!", filename.c_str());
- bool flushOk = objStream->Finalize();
- (void)flushOk;
- AZ_Warning("ComponentApplication", flushOk, "Failed finalizing application descriptor file %s!", filename.c_str());
-
- }
-
void FakePopulateModules(AZ::ComponentApplication::Descriptor& desc, const char* libSuffix)
{
static const char* modules[] =
@@ -100,10 +38,44 @@ namespace UnitTest
}
};
- TEST_F(GenAppDescriptors, Test)
+ TEST_F(GenAppDescriptors, WriteDescriptor_ToXML_Succeeds)
{
- AZ::IO::LocalFileIO fileIO;
- FileIOBaseRAII restoreFileIOScope(fileIO);
- run();
+ struct Config
+ {
+ const char* platformName;
+ const char* configName;
+ const char* libSuffix;
+ };
+
+ AzFramework::Application app;
+
+ AZ::SerializeContext serializeContext;
+ AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app);
+ AZ::Entity::Reflect(&serializeContext);
+ AZ::DynamicModuleDescriptor::Reflect(&serializeContext);
+
+ AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity");
+
+ const Config config = {"Platform", "Config", "libSuffix"};
+
+ AZ::ComponentApplication::Descriptor descriptor;
+
+ if (config.libSuffix && config.libSuffix[0])
+ {
+ FakePopulateModules(descriptor, config.libSuffix);
+ }
+
+ AZ::Test::ScopedAutoTempDirectory tempDirectory;
+ const auto filename = AZ::IO::Path(tempDirectory.GetDirectory()) /
+ AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName);
+
+ AZ::IO::FileIOStream stream(filename.c_str(), AZ::IO::OpenMode::ModeWrite);
+ auto objStream = AZ::ObjectStream::Create(&stream, serializeContext, AZ::ObjectStream::ST_XML);
+ const bool descWriteOk = objStream->WriteClass(&descriptor);
+ EXPECT_TRUE(descWriteOk) << "Failed to write memory descriptor to application descriptor file " << filename.c_str() << "!";
+ const bool entityWriteOk = objStream->WriteClass(&dummySystemEntity);
+ EXPECT_TRUE(entityWriteOk) << "Failed to write system entity to application descriptor file " << filename.c_str() << "!";
+ const bool flushOk = objStream->Finalize();
+ EXPECT_TRUE(flushOk) << "Failed finalizing application descriptor file " << filename.c_str() << "!";
}
}
diff --git a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp
index 424132b624..462de43262 100644
--- a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp
+++ b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp
@@ -38,12 +38,12 @@ namespace AzGameFramework
{
// fall back to checking Project Cache Root.
enginePakPath /= "engine.pak";
- enginePakOpened = m_archive->OpenPack("@projectproductassets@", enginePakPath.Native());
+ enginePakOpened = m_archive->OpenPack("@products@", enginePakPath.Native());
}
if (!enginePakOpened)
{
enginePakPath = AZ::IO::FixedMaxPath(AZ::Utils::GetExecutableDirectory()) / "engine.pak";
- m_archive->OpenPack("@projectproductassets@", enginePakPath.Native());
+ m_archive->OpenPack("@products@", enginePakPath.Native());
}
}
diff --git a/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp b/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp
index 3fdfa042a5..9f496c3e0c 100644
--- a/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp
+++ b/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp
@@ -107,7 +107,7 @@ namespace AzNetworking
if (AZ::IO::FileIOBase::GetInstance() != nullptr)
{
char buffer[AZ_MAX_PATH_LEN];
- AZ::IO::FileIOBase::GetInstance()->ResolvePath("@assets@/", buffer, sizeof(buffer));
+ AZ::IO::FileIOBase::GetInstance()->ResolvePath("@products@/", buffer, sizeof(buffer));
assetDir = AZStd::string(buffer);
}
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h
index eab2d5e1a0..c18ddc2f67 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h
@@ -47,14 +47,6 @@ namespace AzToolsFramework
//! Retrieve the absolute path for the Asset Database Location
virtual bool GetAbsoluteAssetDatabaseLocation(AZStd::string& /*result*/) { return false; }
-
- //! Retrieve the absolute folder path to the current game's source assets (the ones that go into source control)
- //! This may include the current mod path, if a mod is being edited by the editor
- virtual const char* GetAbsoluteDevGameFolderPath() = 0;
-
- //! Retrieve the absolute folder path to the current developer root ('dev'), which contains source artifacts
- //! and is generally checked into source control.
- virtual const char* GetAbsoluteDevRootFolderPath() = 0;
/// Convert a full source path like "c:\\dev\\gamename\\blah\\test.tga" into a relative product path.
/// asset paths never mention their alias and are relative to the asset cache root
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp
index cc3153ed8e..86b32d4379 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp
@@ -354,26 +354,6 @@ namespace AzToolsFramework
}
}
- const char* AssetSystemComponent::GetAbsoluteDevGameFolderPath()
- {
- AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance();
- if (fileIO)
- {
- return fileIO->GetAlias("@devassets@");
- }
- return "";
- }
-
- const char* AssetSystemComponent::GetAbsoluteDevRootFolderPath()
- {
- AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance();
- if (fileIO)
- {
- return fileIO->GetAlias("@devroot@");
- }
- return "";
- }
-
void AssetSystemComponent::OnSystemTick()
{
AssetSystemBus::ExecuteQueuedEvents();
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h
index 4774b96be4..fcd697393c 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h
@@ -56,8 +56,6 @@ namespace AzToolsFramework
//////////////////////////////////////////////////////////////////////////
// AzToolsFramework::AssetSystemRequestBus::Handler overrides
bool GetAbsoluteAssetDatabaseLocation(AZStd::string& result) override;
- const char* GetAbsoluteDevGameFolderPath() override;
- const char* GetAbsoluteDevRootFolderPath() override;
bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& outputPath) override;
bool GenerateRelativeSourcePath(
const AZStd::string& sourcePath, AZStd::string& outputPath, AZStd::string& watchFolder) override;
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp
index e09dd183f8..8856989911 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp
@@ -137,7 +137,7 @@ namespace AzToolsFramework
AssetEditorWidgetUserSettings::AssetEditorWidgetUserSettings()
{
char assetRoot[AZ_MAX_PATH_LEN] = { 0 };
- AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", assetRoot, AZ_MAX_PATH_LEN);
+ AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", assetRoot, AZ_MAX_PATH_LEN);
m_lastSavePath = assetRoot;
}
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h
index 988963eaca..3ba826804d 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h
@@ -39,7 +39,7 @@ namespace AzToolsFramework
// the TraceContextLogFormatter.
//
// Usage example:
- // const char* gameFolder = m_context.pRC->GetSystemEnvironment()->pFileIO->GetAlias("@devassets@");
+ // const char* gameFolder = m_context.pRC->GetSystemEnvironment()->pFileIO->GetAlias("@projectroot@");
// AZ_TraceContext("Game folder", gameFolder);
//
// for (int i=0; iSetAlias("@log@", logDirectory.c_str());
- fileIO->CreatePath("@root@");
+ fileIO->CreatePath("@products@");
fileIO->CreatePath("@user@");
fileIO->CreatePath("@log@");
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp
index 36f647e4c2..99d0768cf6 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp
@@ -8,6 +8,7 @@
#include
+#include
#include
#include
#include
@@ -78,13 +79,9 @@ namespace AzToolsFramework
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(entitiesAndDescendants,
&AzToolsFramework::ToolsApplicationRequestBus::Events::GatherEntitiesAndAllDescendents, AzToolsFramework::EntityIdList{ entityId });
- // Retrieve the game folder so we can use that as a root with the passed in relative path
- const char* gameFolder = nullptr;
- AzToolsFramework::AssetSystemRequestBus::BroadcastResult(gameFolder, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath);
-
// Join our relative path with the game folder to get a full path to the desired asset
- AZStd::string assetFullPath;
- AzFramework::StringFunc::Path::Join(gameFolder, assetPath, assetFullPath);
+ AZ::IO::FixedMaxPath assetFullPath = AZ::Utils::GetProjectPath();
+ assetFullPath /= assetPath;
// Call SliceUtilities::MakeNewSlice with all user input prompts disabled
bool success = AzToolsFramework::SliceUtilities::MakeNewSlice(entitiesAndDescendants,
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp
index d8b5fe0a15..9d2c58a717 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp
@@ -718,7 +718,7 @@ namespace AzToolsFramework
if (!fullPathFound)
{
- assetFullPath = AZStd::string::format("@devassets@/%s", sliceAssetPath.c_str());
+ assetFullPath = AZStd::string::format("@projectroot@/%s", sliceAssetPath.c_str());
}
return Commit(assetFullPath.c_str(), preSaveCallback, postSaveCallback, sliceCommitFlags);
@@ -1020,13 +1020,13 @@ namespace AzToolsFramework
AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance();
AZ_Assert(fileIO, "File IO is not initialized.");
- AZStd::string devAssetPath = fileIO->GetAlias("@devassets@");
+ AZStd::string devAssetPath = fileIO->GetAlias("@projectroot@");
AZStd::string userPath = fileIO->GetAlias("@user@");
AZStd::string tempPath = fullPath;
EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, devAssetPath);
EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, userPath);
EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, tempPath);
- AzFramework::StringFunc::Replace(tempPath, "@devassets@", devAssetPath.c_str());
+ AzFramework::StringFunc::Replace(tempPath, "@projectroot@", devAssetPath.c_str());
AzFramework::StringFunc::Replace(tempPath, devAssetPath.c_str(), userPath.c_str());
tempPath.append(".slicetemp");
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp
index f58f273f11..01b1213473 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp
@@ -378,11 +378,11 @@ namespace AzToolsFramework
// If this layer is being loaded, it won't have a level save dependency yet, so clear that flag.
m_mustSaveLevelWhenLayerSaves = false;
QString fullPathName = levelPakFile;
- if (fullPathName.contains("@devassets@"))
+ if (fullPathName.contains("@projectroot@"))
{
AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance();
// Resolving the path through resolvepath would normalize and lowcase it, and in this case, we don't want that.
- fullPathName.replace("@devassets@", fileIO->GetAlias("@devassets@"));
+ fullPathName.replace("@projectroot@", fileIO->GetAlias("@projectroot@"));
}
QFileInfo fileNameInfo(fullPathName);
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp
index 62842e18d5..07dcd2ab20 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp
@@ -315,7 +315,7 @@ namespace AzToolsFramework
// temporarily null after QFileDialogs close, which we need in order to
// be able to parent our message dialogs properly
QWidget* activeWindow = QApplication::activeWindow();
- const AZStd::string prefabFilesPath = "@devassets@/Prefabs";
+ const AZStd::string prefabFilesPath = "@projectroot@/Prefabs";
// Remove Level entity if it's part of the list
diff --git a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp
index 66520c804c..395e4c9049 100644
--- a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp
@@ -131,13 +131,13 @@ namespace UnitTest
m_app.reset(aznew ToolsTestApplication("ArchiveComponentTest"));
m_app->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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr)
{
- fileIoBase->SetAlias("@assets@", m_tempDir.GetDirectory());
+ fileIoBase->SetAlias("@products@", m_tempDir.GetDirectory());
}
}
diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
index 24488f3ed3..827737f561 100644
--- a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
@@ -37,10 +37,10 @@ namespace // anonymous
bool Search(const AzToolsFramework::AssetFileInfoList& assetList, const AZ::Data::AssetId& assetId)
{
- return AZStd::find_if(assetList.m_fileInfoList.begin(), assetList.m_fileInfoList.end(),
- [&](AzToolsFramework::AssetFileInfo fileInfo)
- {
- return fileInfo.m_assetId == assetId;
+ return AZStd::find_if(assetList.m_fileInfoList.begin(), assetList.m_fileInfoList.end(),
+ [&](AzToolsFramework::AssetFileInfo fileInfo)
+ {
+ return fileInfo.m_assetId == assetId;
});
}
}
@@ -74,11 +74,11 @@ namespace UnitTest
m_application->Start(AzFramework::Application::Descriptor());
- // By default @assets@ is setup to include the platform at the end. But this test is going to
+ // By default @products@ is setup to include the platform at the end. But this test is going to
// loop over platforms and it will be included as part of the relative path of the file.
// So the asset folder for these tests have to point to the cache project root folder, which
// doesn't include the platform.
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", cacheProjectRootFolder.c_str());
+ AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", cacheProjectRootFolder.c_str());
for (int idx = 0; idx < s_totalAssets; idx++)
{
@@ -158,17 +158,17 @@ namespace UnitTest
m_assetRegistry->RegisterAssetDependency(assets[5], AZ::Data::ProductDependency(assets[6], 0));
m_assetRegistry->RegisterAssetDependency(assets[6], AZ::Data::ProductDependency(assets[7], 0));
- // asset8 -> asset6
+ // asset8 -> asset6
m_assetRegistry->RegisterAssetDependency(assets[8], AZ::Data::ProductDependency(assets[6], 0));
- // asset10 -> asset11
+ // asset10 -> asset11
m_assetRegistry->RegisterAssetDependency(assets[10], AZ::Data::ProductDependency(assets[11], 0));
- // asset11 -> asset10
+ // asset11 -> asset10
m_assetRegistry->RegisterAssetDependency(assets[11], AZ::Data::ProductDependency(assets[10], 0));
// 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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
@@ -203,10 +203,6 @@ namespace UnitTest
const AZStd::string engroot = AZ::Test::GetEngineRootPath();
AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engroot.c_str());
-
- AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath());
- assetRoot /= "Cache";
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str());
}
void TearDown() override
@@ -219,7 +215,7 @@ namespace UnitTest
delete m_application;
}
- AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& id) override
+ AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& id) override
{
auto foundIter = m_assetRegistry->m_assetIdToInfo.find(id);
if (foundIter != m_assetRegistry->m_assetIdToInfo.end())
@@ -540,7 +536,7 @@ namespace UnitTest
EXPECT_TRUE(Search(assetList, assets[7]));
EXPECT_TRUE(Search(assetList, assets[8]));
- // Removing the android flag from the asset should still produce the same result
+ // Removing the android flag from the asset should still produce the same result
m_assetSeedManager->RemoveSeedAsset(assets[8], AzFramework::PlatformFlags::Platform_ANDROID);
assetList = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::PC);
@@ -564,7 +560,7 @@ namespace UnitTest
EXPECT_TRUE(Search(assetList, assets[3]));
EXPECT_TRUE(Search(assetList, assets[4]));
- // Adding the android flag again to the asset
+ // Adding the android flag again to the asset
m_assetSeedManager->AddSeedAsset(assets[8], AzFramework::PlatformFlags::Platform_ANDROID);
assetList = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::ANDROID_ID);
@@ -624,7 +620,7 @@ namespace UnitTest
EXPECT_EQ(assetList1.m_fileInfoList[0].m_assetId, assetList2.m_fileInfoList[0].m_assetId);
EXPECT_GE(assetList2.m_fileInfoList[0].m_modificationTime, assetList1.m_fileInfoList[0].m_modificationTime); // file mod time should change
-
+
// file hash should not change
for (int idx = 0; idx < 5; idx++)
{
@@ -680,7 +676,7 @@ namespace UnitTest
m_assetSeedManager->AddSeedAsset(assets[validFileIndex], AzFramework::PlatformFlags::Platform_PC, m_assetsPath[invalidFileIndex]);
const AzFramework::AssetSeedList& oldSeedList = m_assetSeedManager->GetAssetSeedList();
-
+
for (const auto& seedInfo : oldSeedList)
{
if (seedInfo.m_assetId == assets[validFileIndex])
diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h b/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h
index 2678c2f57c..ba3e38ba8f 100644
--- a/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h
+++ b/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h
@@ -18,8 +18,6 @@ namespace UnitTests
{
public:
MOCK_METHOD1(GetAbsoluteAssetDatabaseLocation, bool(AZStd::string&));
- MOCK_METHOD0(GetAbsoluteDevGameFolderPath, const char* ());
- MOCK_METHOD0(GetAbsoluteDevRootFolderPath, const char* ());
MOCK_METHOD2(GetRelativeProductPathFromFullSourceOrProductPath, bool(const AZStd::string& fullPath, AZStd::string& relativeProductPath));
MOCK_METHOD3(GenerateRelativeSourcePath,
bool(const AZStd::string& sourcePath, AZStd::string& relativePath, AZStd::string& watchFolder));
diff --git a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h
index 2128b3676a..1bf51045c0 100644
--- a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h
+++ b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h
@@ -181,8 +181,8 @@ namespace UnitTest
const char* dir = m_componentApplication->GetExecutableFolder();
- m_localFileIO.SetAlias("@assets@", dir);
- m_localFileIO.SetAlias("@devassets@", dir);
+ m_localFileIO.SetAlias("@products@", dir);
+ m_localFileIO.SetAlias("@projectroot@", dir);
}
void Destroy()
diff --git a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
index 67d40be376..9c226cbb1b 100644
--- a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
@@ -22,7 +22,7 @@
#include
#include
-namespace
+namespace
{
static const int s_totalAssets = 12;
}
@@ -53,15 +53,15 @@ namespace UnitTest
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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
- // By default @assets@ is setup to include the platform at the end. But this test is going to
+ // By default @products@ is setup to include the platform at the end. But this test is going to
// loop over all platforms and it will be included as part of the relative path of the file.
// So the asset folder for these tests have to point to the cache project root folder, which
// doesn't include the platform.
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", cacheProjectRootFolder.c_str());
+ AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", cacheProjectRootFolder.c_str());
for (int platformNum = AzFramework::PlatformId::PC; platformNum < AzFramework::PlatformId::NumPlatformIds; ++platformNum)
{
diff --git a/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h b/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h
index 93e86374db..01b40fbb16 100644
--- a/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h
+++ b/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h
@@ -142,8 +142,6 @@ namespace UnitTest
/*
* AssetSystemRequestBus
*/
- const char* GetAbsoluteDevGameFolderPath() override { return ""; }
- const char* GetAbsoluteDevRootFolderPath() override { return ""; }
bool GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) override { return false; }
bool GenerateRelativeSourcePath(
[[maybe_unused]] const AZStd::string& sourcePath, [[maybe_unused]] AZStd::string& relativePath,
diff --git a/Code/Legacy/CryCommon/CryPath.h b/Code/Legacy/CryCommon/CryPath.h
index 197c9b2d56..51b379ac51 100644
--- a/Code/Legacy/CryCommon/CryPath.h
+++ b/Code/Legacy/CryCommon/CryPath.h
@@ -520,14 +520,14 @@ namespace PathUtil
unsigned int index = 0;
if (relativePath.length() && relativePath[index] == '@') // already aliased
{
- if (AZ::StringFunc::Equal(relativePath.c_str(), "@assets@/", false, 9))
+ if (AZ::StringFunc::Equal(relativePath.c_str(), "@products@/", false, 9))
{
return relativePath.substr(9); // assets is assumed.
}
return relativePath;
}
- const char* rootValue = gEnv->pFileIO->GetAlias("@root@");
+ const char* rootValue = gEnv->pFileIO->GetAlias("@products@");
if (rootValue)
{
stack_string rootPath(ToUnixPath(rootValue));
@@ -538,7 +538,7 @@ namespace PathUtil
)
{
stack_string chopped_string = relativePath.substr(rootPath.size());
- stack_string rooted = stack_string("@root@") + chopped_string;
+ stack_string rooted = stack_string("@products@") + chopped_string;
return rooted;
}
}
diff --git a/Code/Legacy/CrySystem/ConsoleBatchFile.cpp b/Code/Legacy/CrySystem/ConsoleBatchFile.cpp
index bdc8d6de7d..5b96b943a7 100644
--- a/Code/Legacy/CrySystem/ConsoleBatchFile.cpp
+++ b/Code/Legacy/CrySystem/ConsoleBatchFile.cpp
@@ -59,10 +59,10 @@ bool CConsoleBatchFile::ExecuteConfigFile(const char* sFilename)
AZStd::string filename;
- if (sFilename[0] != '@') // console config files are actually by default in @root@ instead of @assets@
+ if (sFilename[0] != '@') // console config files are actually by default in @products@ instead of @products@
{
// However, if we've passed in a relative or absolute path that matches an existing file name,
- // don't change it. Only change it to "@root@/filename" and strip off any relative paths
+ // don't change it. Only change it to "@products@/filename" and strip off any relative paths
// if the given pattern *didn't* match a file.
if (AZ::IO::FileIOBase::GetDirectInstance()->Exists(sFilename))
{
@@ -70,7 +70,7 @@ bool CConsoleBatchFile::ExecuteConfigFile(const char* sFilename)
}
else
{
- filename = PathUtil::Make("@root@", PathUtil::GetFile(sFilename));
+ filename = PathUtil::Make("@products@", PathUtil::GetFile(sFilename));
}
}
else
diff --git a/Code/Legacy/CrySystem/DebugCallStack.cpp b/Code/Legacy/CrySystem/DebugCallStack.cpp
index bea6c8c035..8018e46d69 100644
--- a/Code/Legacy/CrySystem/DebugCallStack.cpp
+++ b/Code/Legacy/CrySystem/DebugCallStack.cpp
@@ -372,7 +372,7 @@ void DebugCallStack::LogExceptionInfo(EXCEPTION_POINTERS* pex)
const char* logAlias = gEnv->pFileIO->GetAlias("@log@");
if (!logAlias)
{
- logAlias = gEnv->pFileIO->GetAlias("@root@");
+ logAlias = gEnv->pFileIO->GetAlias("@products@");
}
if (logAlias)
{
diff --git a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp
index 2e61760d8c..49af5080ec 100644
--- a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp
+++ b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp
@@ -306,7 +306,7 @@ void CLevelSystem::ScanFolder(const char* subfolder, bool modFolder)
}
AZStd::string levelContainerPakPath;
- AZ::StringFunc::Path::Join("@assets@", m_levelsFolder.c_str(), levelContainerPakPath);
+ AZ::StringFunc::Path::Join("@products@", m_levelsFolder.c_str(), levelContainerPakPath);
if (subfolder && subfolder[0])
{
AZ::StringFunc::Path::Join(levelContainerPakPath.c_str(), subfolder, levelContainerPakPath);
diff --git a/Code/Legacy/CrySystem/SystemCFG.cpp b/Code/Legacy/CrySystem/SystemCFG.cpp
index c97345a518..7a643f2069 100644
--- a/Code/Legacy/CrySystem/SystemCFG.cpp
+++ b/Code/Legacy/CrySystem/SystemCFG.cpp
@@ -292,10 +292,10 @@ static bool ParseSystemConfig(const AZStd::string& strSysConfigFilePath, ILoadCo
// to either root or assets/config. this is done so that code can just request a simple file name and get its data
if (
!(file.Open(filename.c_str(), "rb")) &&
- !(file.Open((AZStd::string("@root@/") + filename).c_str(), "rb")) &&
- !(file.Open((AZStd::string("@assets@/") + filename).c_str(), "rb")) &&
- !(file.Open((AZStd::string("@assets@/config/") + filename).c_str(), "rb")) &&
- !(file.Open((AZStd::string("@assets@/config/spec/") + filename).c_str(), "rb"))
+ !(file.Open((AZStd::string("@products@/") + filename).c_str(), "rb")) &&
+ !(file.Open((AZStd::string("@products@/") + filename).c_str(), "rb")) &&
+ !(file.Open((AZStd::string("@products@/config/") + filename).c_str(), "rb")) &&
+ !(file.Open((AZStd::string("@products@/config/spec/") + filename).c_str(), "rb"))
)
{
if (warnIfMissing)
@@ -414,7 +414,7 @@ static bool ParseSystemConfig(const AZStd::string& strSysConfigFilePath, ILoadCo
// replace '\\\\' with '\\' and '\\\"' with '\"'
AZ::StringFunc::Replace(strValue, "\\\\", "\\");
AZ::StringFunc::Replace(strValue, "\\\"", "\"");
-
+
pSink->OnLoadConfigurationEntry(strKey.c_str(), strValue.c_str(), strGroup.c_str());
}
}
diff --git a/Code/Legacy/CrySystem/SystemInit.cpp b/Code/Legacy/CrySystem/SystemInit.cpp
index 3187095094..6de10f3855 100644
--- a/Code/Legacy/CrySystem/SystemInit.cpp
+++ b/Code/Legacy/CrySystem/SystemInit.cpp
@@ -796,7 +796,7 @@ void CSystem::OpenBasicPaks()
bBasicPaksLoaded = true;
// open pak files
- constexpr AZStd::string_view paksFolder = "@assets@/*.pak"; // (@assets@ assumed)
+ constexpr AZStd::string_view paksFolder = "@products@/*.pak"; // (@products@ assumed)
m_env.pCryPak->OpenPacks(paksFolder);
InlineInitializationProcessing("CSystem::OpenBasicPaks OpenPacks( paksFolder.c_str() )");
@@ -805,7 +805,7 @@ void CSystem::OpenBasicPaks()
// Open engine packs
//////////////////////////////////////////////////////////////////////////
- const char* const assetsDir = "@assets@";
+ const char* const assetsDir = "@products@";
// After game paks to have same search order as with files on disk
m_env.pCryPak->OpenPack(assetsDir, "engine.pak");
@@ -874,7 +874,7 @@ void CSystem::OpenLanguageAudioPak([[maybe_unused]] const char* sLanguage)
if (!AZ::StringFunc::Equal(sLocalizationFolder, "Languages", false))
{
- sLocalizationFolder = "@assets@";
+ sLocalizationFolder = "@products@";
}
// load localized pak with crc32 filenames on consoles to save memory.
@@ -1260,9 +1260,6 @@ AZ_POP_DISABLE_WARNING
InlineInitializationProcessing("CSystem::Init Create console");
- // Need to load the engine.pak that includes the config files needed during initialization
- m_env.pCryPak->OpenPack("@assets@", "engine.pak");
-
InitFileSystem_LoadEngineFolders(startupParams);
#if !defined(RELEASE) || defined(RELEASE_LOGGING)
diff --git a/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp b/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp
index e0a6725ed4..24366498a5 100644
--- a/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp
+++ b/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp
@@ -27,7 +27,7 @@ namespace AWSNativeSDKInit
void CopyCaCertBundle()
{
AZStd::vector contents;
- AZStd::string certificatePath = "@assets@/certificates/aws/cacert.pem";
+ AZStd::string certificatePath = "@products@/certificates/aws/cacert.pem";
AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath();
publicStoragePath.append("/certificates/aws/cacert.pem");
diff --git a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp
index 42a43ef84e..78244ab02c 100644
--- a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp
+++ b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp
@@ -683,31 +683,26 @@ void AssetBuilderComponent::ProcessJob(const AssetBuilderSDK::ProcessJobFunction
AZ_Assert(settingsRegistry != nullptr, "SettingsRegistry must be ready for use in the AssetBuilder.");
// The root path is the cache plus the platform name.
- AZ::IO::FixedMaxPath newRoot(m_gameCache);
+ AZ::IO::FixedMaxPath newProjectCache(m_gameCache);
// Check if the platform identifier is a valid "asset platform"
// If so, use it, other wise use the OS default platform as a fail safe
// This is to make sure the "debug platform" isn't added as a path segment
- // the Cache Root folder
+ // the Cache ProjectCache folder
if (AzFramework::PlatformHelper::GetPlatformIdFromName(request.m_platformInfo.m_identifier) != AzFramework::PlatformId::Invalid)
{
- newRoot /= request.m_platformInfo.m_identifier;
+ newProjectCache /= request.m_platformInfo.m_identifier;
}
else
{
- newRoot /= AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME);
+ newProjectCache /= AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME);
}
- // The asset path is root and the lower case game name.
- AZ::IO::FixedMaxPath newAssets = newRoot;
-
// Now set the paths and run the job.
{
// Save out the prior paths.
- ScopedAliasSetter assetAliasScope(*ioBase, "@assets@", newAssets.c_str());
- ScopedAliasSetter rootAliasScope(*ioBase, "@root@", newRoot.c_str());
- ScopedAliasSetter projectplatformCacheAliasScope(*ioBase, "@projectplatformcache@", newRoot.c_str());
+ ScopedAliasSetter projectPlatformCacheAliasScope(*ioBase, "@products@", newProjectCache.c_str());
ScopedSettingsRegistrySetter cacheRootFolderScope(*settingsRegistry,
- AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder, newRoot.Native());
+ AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder, newProjectCache.Native());
// Invoke the Process Job function
job(request, outResponse);
diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp
index 6eee3d6f2b..d7cdd30be8 100644
--- a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp
+++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp
@@ -27,7 +27,7 @@ namespace AssetProcessor
, m_registryBuiltOnce(false)
, m_registriesMutex(QMutex::Recursive)
{
-
+
for (const AssetBuilderSDK::PlatformInfo& info : m_platformConfig->GetEnabledPlatforms())
{
m_platforms.push_back(QString::fromUtf8(info.m_identifier.c_str()));
@@ -38,17 +38,9 @@ namespace AssetProcessor
// save 30mb for this. Really large projects do get this big (and bigger)
// if you don't do this, things get fragmented very fast.
- m_saveBuffer.reserve(1024 * 1024 * 30);
-
- m_absoluteDevFolderPath[0] = 0;
- m_absoluteDevGameFolderPath[0] = 0;
-
- AZStd::string engineRoot;
- AzFramework::ApplicationRequests::Bus::BroadcastResult(engineRoot, &AzFramework::ApplicationRequests::GetEngineRoot);
- azstrcpy(m_absoluteDevFolderPath, AZ_MAX_PATH_LEN, engineRoot.c_str());
+ m_saveBuffer.reserve(1024 * 1024 * 30);
- AZStd::string gameFolderPath{AssetUtilities::ComputeProjectPath().toUtf8().constData()};
- azstrcpy(m_absoluteDevGameFolderPath, AZ_MAX_PATH_LEN, gameFolderPath.c_str());
+ AssetUtilities::ComputeProjectPath();
AssetUtilities::ComputeProjectCacheRoot(m_cacheRootDir);
@@ -359,7 +351,7 @@ namespace AssetProcessor
[[maybe_unused]] bool makeDirResult = AZ::IO::SystemFile::CreateDir(absPath.toUtf8().constData());
AZ_Warning(AssetProcessor::ConsoleChannel, makeDirResult, "Failed create folder %s", platformCacheDir.toUtf8().constData());
}
-
+
// if we succeeded in doing this, then use "rename" to move the file over the previous copy.
bool moved = AssetUtilities::MoveFileWithTimeout(tempRegistryFile, actualRegistryFile, 3);
allCatalogsSaved = allCatalogsSaved && moved;
@@ -382,7 +374,7 @@ namespace AssetProcessor
}
}
}
-
+
{
// scoped to minimize the duration of this mutex lock
QMutexLocker locker(&m_savingRegistryMutex);
@@ -605,7 +597,7 @@ namespace AssetProcessor
AZStd::string nameForMap(relativeFilePath.toUtf8().constData());
AZStd::to_lower(nameForMap.begin(), nameForMap.end());
-
+
m_sourceNameToSourceUUIDMap.insert({ nameForMap, sourceUuid });
}
@@ -627,16 +619,6 @@ namespace AssetProcessor
//////////////////////////////////////////////////////////////////////////
- const char* AssetCatalog::GetAbsoluteDevGameFolderPath()
- {
- return m_absoluteDevGameFolderPath;
- }
-
- const char* AssetCatalog::GetAbsoluteDevRootFolderPath()
- {
- return m_absoluteDevFolderPath;
- }
-
bool AssetCatalog::GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullSourceOrProductPath, AZStd::string& relativeProductPath)
{
ProcessGetRelativeProductPathFromFullSourceOrProductPathRequest(fullSourceOrProductPath, relativeProductPath);
@@ -976,7 +958,7 @@ namespace AssetProcessor
// regardless of which way we come into this function we must always use ConvertToRelativePath
// to convert from whatever the input format is to a database path (which may include output prefix)
- QString databaseName;
+ QString databaseName;
QString scanFolder;
if (!AzFramework::StringFunc::Path::IsRelative(sourcePath))
{
@@ -1163,7 +1145,7 @@ namespace AssetProcessor
AZStd::string AssetCatalog::GetAssetPathById(const AZ::Data::AssetId& id)
{
return GetAssetInfoById(id).m_relativePath;
-
+
}
AZ::Data::AssetId AssetCatalog::GetAssetIdByPath(const char* path, const AZ::Data::AssetType& typeToRegister, bool autoRegisterIfNotFound)
@@ -1175,7 +1157,7 @@ namespace AssetProcessor
AZStd::string relProductPath;
GetRelativeProductPathFromFullSourceOrProductPath(path, relProductPath);
QString tempPlatformName = GetDefaultAssetPlatform();
-
+
AZ::Data::AssetId assetId;
{
QMutexLocker locker(&m_registriesMutex);
@@ -1344,7 +1326,7 @@ namespace AssetProcessor
//remove aliases if present
normalisedAssetPath = AssetUtilities::NormalizeAndRemoveAlias(normalisedAssetPath);
- if (!normalisedAssetPath.isEmpty()) // this happens if it comes in as just for example "@assets@/"
+ if (!normalisedAssetPath.isEmpty()) // this happens if it comes in as just for example "@products@/"
{
AZStd::lock_guard lock(m_databaseMutex);
@@ -1439,7 +1421,7 @@ namespace AssetProcessor
relativePath = entry.m_sourceName;
watchFolder = scanEntry.m_scanFolder;
-
+
return true;
}
@@ -1489,7 +1471,7 @@ namespace AssetProcessor
{
return foundIter->second;
}
-
+
// we did not find it - try the backup mapping!
AssetId legacyMapping = registryToUse.GetAssetIdByLegacyAssetId(assetId);
if (legacyMapping.IsValid())
@@ -1533,7 +1515,7 @@ namespace AssetProcessor
return !assetInfo.m_relativePath.empty();
}
-
+
// Asset isn't in the DB or in the APM queue, we don't know what this asset ID is
return false;
}
@@ -1588,7 +1570,7 @@ namespace AssetProcessor
AZStd::string sourceFileFullPath;
AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), sourceFileFullPath);
assetInfo.m_sizeBytes = AZ::IO::SystemFile::Length(sourceFileFullPath.c_str());
-
+
assetInfo.m_assetType = AZ::Uuid::CreateNull(); // most source files don't have a type!
// Go through the list of source assets and see if this asset's file path matches any of the filters
diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h
index 84e96bcf3e..e876e259fb 100644
--- a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h
+++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h
@@ -88,8 +88,6 @@ namespace AssetProcessor
//////////////////////////////////////////////////////////////////////////
// AzToolsFramework::AssetSystem::AssetSystemRequestBus::Handler overrides
- const char* GetAbsoluteDevGameFolderPath() override;
- const char* GetAbsoluteDevRootFolderPath() override;
bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& relativeProductPath) override;
//! Given a partial or full source file path, respond with its relative path and the watch folder it is relative to.
@@ -215,8 +213,6 @@ namespace AssetProcessor
AZStd::vector m_saveBuffer; // so that we don't realloc all the time
- char m_absoluteDevFolderPath[AZ_MAX_PATH_LEN];
- char m_absoluteDevGameFolderPath[AZ_MAX_PATH_LEN];
QDir m_cacheRootDir;
};
}
diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp
index 3a7bc6ef3e..4cd4489a4c 100644
--- a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp
+++ b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp
@@ -56,15 +56,8 @@ namespace AssetProcessor
// cache this up front. Note that it can fail here, and will retry later.
InitializeCacheRoot();
- m_absoluteDevFolderPath[0] = 0;
- m_absoluteDevGameFolderPath[0] = 0;
-
QDir assetRoot;
- if (AssetUtilities::ComputeAssetRoot(assetRoot))
- {
- azstrcpy(m_absoluteDevFolderPath, AZ_MAX_PATH_LEN, assetRoot.absolutePath().toUtf8().constData());
- azstrcpy(m_absoluteDevGameFolderPath, AZ_MAX_PATH_LEN, AssetUtilities::ComputeProjectPath().toUtf8().constData());
- }
+ AssetUtilities::ComputeAssetRoot(assetRoot);
using namespace AZStd::placeholders;
diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h
index 376af5d773..891e091f91 100644
--- a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h
+++ b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h
@@ -440,8 +440,6 @@ namespace AssetProcessor
AZStd::mutex m_sourceUUIDToSourceInfoMapMutex;
QString m_normalizedCacheRootPath;
- char m_absoluteDevFolderPath[AZ_MAX_PATH_LEN];
- char m_absoluteDevGameFolderPath[AZ_MAX_PATH_LEN];
QDir m_cacheRootDir;
bool m_isCurrentlyScanning = false;
bool m_quitRequested = false;
diff --git a/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp b/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp
index 30d8e5fada..c35f3a4b0f 100644
--- a/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp
+++ b/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp
@@ -95,7 +95,7 @@ void FileServer::ConnectionAdded(unsigned int connId, Connection* connection)
Q_UNUSED(connection);
// Connection has not completed negotiation yet, register to be notified
- // when we know what platform is connected and map the @assets@ alias then
+ // when we know what platform is connected and map the @products@ alias then
connect(connection, &Connection::AssetPlatformChanged, this, [this, connection]()
{
auto fileIO = m_fileIOs[connection->ConnectionId()];
@@ -114,8 +114,7 @@ void FileServer::ConnectionAdded(unsigned int connId, Connection* connection)
projectCacheRoot = QDir(projectCacheRoot.absoluteFilePath(assetPlatform));
}
const char* projectCachePath = projectCacheRoot.absolutePath().toUtf8().data();
- fileIO->SetAlias("@assets@", projectCachePath);
- fileIO->SetAlias("@root@", projectCachePath);
+ fileIO->SetAlias("@products@", projectCachePath);
if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
{
@@ -955,10 +954,10 @@ void FileServer::ProcessFileTreeRequest(unsigned int connId, unsigned int, unsig
FileTreeResponse::FolderList folders;
AZStd::vector untestedFolders;
- if (fileIO->IsDirectory("@assets@"))
+ if (fileIO->IsDirectory("@products@"))
{
- folders.push_back("@assets@");
- untestedFolders.push_back("@assets@");
+ folders.push_back("@products@");
+ untestedFolders.push_back("@products@");
}
if (fileIO->IsDirectory("@usercache@"))
{
@@ -975,11 +974,6 @@ void FileServer::ProcessFileTreeRequest(unsigned int connId, unsigned int, unsig
folders.push_back("@log@");
untestedFolders.push_back("@log@");
}
- if (fileIO->IsDirectory("@root@"))
- {
- folders.push_back("@root@");
- untestedFolders.push_back("@root@");
- }
AZ::IO::Result res = ResultCode::Success;
diff --git a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp
index 5d2d0e77d3..2a1c4e4755 100644
--- a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp
+++ b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp
@@ -766,7 +766,7 @@ namespace AssetProcessor
TEST_F(AssetCatalogTest_GetFullSourcePath, AliasedCachePath_ReturnsAbsolutePathToSource)
{
//feed it a path with alias and asset id
- QString fileToCheck = "@assets@/subfolder3/randomfileoutput.random1";
+ QString fileToCheck = "@products@/subfolder3/randomfileoutput.random1";
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
}
@@ -787,7 +787,7 @@ namespace AssetProcessor
TEST_F(AssetCatalogTest_GetFullSourcePath, InvalidSourcePathContainingCacheAlias_ReturnsAbsolutePathToSource)
{
//feed it a path with alias and input name
- QString fileToCheck = "@assets@/somerandomfile.random";
+ QString fileToCheck = "@products@/somerandomfile.random";
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
}
diff --git a/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp b/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp
index 5b15a6a552..a8bc714698 100644
--- a/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp
+++ b/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp
@@ -47,7 +47,7 @@ void RCcontrollerUnitTests::Reset()
m_rcController.m_RCJobListModel.m_jobs.clear();
m_rcController.m_RCJobListModel.m_jobsInFlight.clear();
m_rcController.m_RCJobListModel.m_jobsInQueueLookup.clear();
-
+
m_rcController.m_pendingCriticalJobsPerPlatform.clear();
m_rcController.m_jobsCountPerPlatform.clear();
@@ -56,7 +56,7 @@ void RCcontrollerUnitTests::Reset()
m_rcController.m_RCQueueSortModel.AttachToModel(&m_rcController.m_RCJobListModel);
m_rcController.m_RCQueueSortModel.m_currentJobRunKeyToJobEntries.clear();
m_rcController.m_RCQueueSortModel.m_currentlyConnectedPlatforms.clear();
-}
+}
void RCcontrollerUnitTests::StartTest()
{
@@ -183,11 +183,11 @@ void RCcontrollerUnitTests::RunRCControllerTests()
QStringList tempJobNames;
// Note that while this is an OS-SPECIFIC path, this test does not actually invoke the file system
- // or file operators, so is purely doing in-memory testing. So the path does not actually matter and the
+ // or file operators, so is purely doing in-memory testing. So the path does not actually matter and the
// test should function on other operating systems too.
// test - exact match
- tempJobNames << "c:/somerandomfolder/dev/blah/test.dds";
+ tempJobNames << "c:/somerandomfolder/dev/blah/test.dds";
tempJobNames << "c:/somerandomfolder/dev/blah/test.cre"; // must not match
// test - NO MATCH
@@ -218,7 +218,7 @@ void RCcontrollerUnitTests::RunRCControllerTests()
QList createdJobs;
-
+
for (QString name : tempJobNames)
{
@@ -270,7 +270,7 @@ void RCcontrollerUnitTests::RunRCControllerTests()
// EXACT MATCH TEST (with prefixes and such)
NetworkRequestID requestID(1, 1234);
- m_rcController.OnRequestCompileGroup(requestID, "pc", "@assets@/blah/test.dds", AZ::Data::AssetId());
+ m_rcController.OnRequestCompileGroup(requestID, "pc", "@products@/blah/test.dds", AZ::Data::AssetId());
QCoreApplication::processEvents(QEventLoop::AllEvents);
// this should have matched exactly one item, and when we finish that item, it should terminate:
@@ -626,9 +626,9 @@ void RCcontrollerUnitTests::RunRCControllerTests()
jobdetailsB.m_jobEntry.m_watchFolderPath = scanFolderInfo.ScanPath();
jobdetailsB.m_jobEntry.m_jobKey = "TestJobB";
jobdetailsB.m_jobEntry.m_builderGuid = builderUuid;
-
+
jobdetailsB.m_critical = true; //make jobB critical so that it will be analyzed first even though we want JobA to run first
-
+
AssetBuilderSDK::SourceFileDependency sourceFileBDependency;
sourceFileBDependency.m_sourceFileDependencyPath = "fileB.txt";
@@ -694,10 +694,10 @@ void RCcontrollerUnitTests::RunRCControllerTests()
m_rcController.DispatchJobs();
UNIT_TEST_EXPECT_TRUE(UnitTestUtils::BlockUntil(allJobsCompleted, 5000));
- UNIT_TEST_EXPECT_TRUE(jobFinishedB);
+ UNIT_TEST_EXPECT_TRUE(jobFinishedB);
- // Now test the use case where we have a cyclic dependency,
- // although the order in which these job will start is not defined but we can ensure that
+ // Now test the use case where we have a cyclic dependency,
+ // although the order in which these job will start is not defined but we can ensure that
// all the job finishes and RCController goes Idle
allJobsCompleted = false;
Reset();
@@ -728,8 +728,8 @@ void RCcontrollerUnitTests::RunRCControllerTests()
jobdetailsD.m_jobEntry.m_builderGuid = builderUuid;
AssetBuilderSDK::SourceFileDependency sourceFileDDependency;
sourceFileDDependency.m_sourceFileDependencyPath = "fileD.txt";
-
- //creating cyclic job order dependencies i.e JobC and JobD have order job dependency on each other
+
+ //creating cyclic job order dependencies i.e JobC and JobD have order job dependency on each other
AssetBuilderSDK::JobDependency jobDependencyC("TestJobC", "pc", AssetBuilderSDK::JobDependencyType::Order, sourceFileCDependency);
AssetBuilderSDK::JobDependency jobDependencyD("TestJobD", "pc", AssetBuilderSDK::JobDependencyType::Order, sourceFileDDependency);
jobdetailsC.m_jobDependencyList.push_back({ jobDependencyD });
diff --git a/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h b/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h
index f77c706421..c281b3050a 100644
--- a/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h
+++ b/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h
@@ -262,11 +262,10 @@ namespace UnitTestUtils
AZ::IO::FileIOBase::SetInstance(m_localFileIO);
- m_localFileIO->SetAlias("@assets@", (newDir + QString("/ALIAS/assets")).toUtf8().constData());
+ m_localFileIO->SetAlias("@products@", (newDir + QString("/ALIAS/assets")).toUtf8().constData());
m_localFileIO->SetAlias("@log@", (newDir + QString("/ALIAS/logs")).toUtf8().constData());
m_localFileIO->SetAlias("@usercache@", (newDir + QString("/ALIAS/cache")).toUtf8().constData());
m_localFileIO->SetAlias("@user@", (newDir + QString("/ALIAS/user")).toUtf8().constData());
- m_localFileIO->SetAlias("@root@", (newDir + QString("/ALIAS/root")).toUtf8().constData());
}
~ScopedDir()
diff --git a/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp b/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp
index 6f974a0ff6..40d3bd3caa 100644
--- a/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp
+++ b/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp
@@ -104,17 +104,17 @@ ApplicationManager::BeforeRunStatus GUIApplicationManager::BeforeRun()
// The build process may leave behind some temporaries, try to delete them
RemoveTemporaries();
- QDir devRoot;
- AssetUtilities::ComputeAssetRoot(devRoot);
+ QDir projectAssetRoot;
+ AssetUtilities::ComputeAssetRoot(projectAssetRoot);
#if defined(EXTERNAL_CRASH_REPORTING)
- CrashHandler::ToolsCrashHandler::InitCrashHandler("AssetProcessor", devRoot.absolutePath().toStdString());
+ CrashHandler::ToolsCrashHandler::InitCrashHandler("AssetProcessor", projectAssetRoot.absolutePath().toStdString());
#endif
AssetProcessor::MessageInfoBus::Handler::BusConnect();
// we have to monitor both the cache folder and the database file and restart AP if either of them gets deleted
// It is important to note that we are monitoring the parent folder and not the actual cache folder itself since
// we want to handle the use case on Mac OS if the user moves the cache folder to the trash.
- m_qtFileWatcher.addPath(devRoot.absolutePath());
+ m_qtFileWatcher.addPath(projectAssetRoot.absolutePath());
QDir projectCacheRoot;
AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot);
@@ -615,7 +615,6 @@ void GUIApplicationManager::DirectoryChanged([[maybe_unused]] QString path)
void GUIApplicationManager::FileChanged(QString path)
{
- QDir devRoot = ApplicationManager::GetSystemRoot();
QDir projectCacheRoot;
AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot);
QString assetDbPath = projectCacheRoot.filePath("assetdb.sqlite");
diff --git a/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp b/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp
index 527feac6b4..2cf7705e96 100644
--- a/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp
+++ b/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp
@@ -56,7 +56,7 @@ namespace CrashHandler
if (fileIO)
{
// If our devroot alias is available, use that
- const char* devAlias = fileIO->GetAlias("@devroot@");
+ const char* devAlias = fileIO->GetAlias("@engroot@");
if (devAlias)
{
return devAlias;
diff --git a/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp b/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp
index 91ca77fa7b..c7d85428b4 100644
--- a/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp
+++ b/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp
@@ -87,7 +87,7 @@ namespace PythonBindingsExample
TEST_F(PythonBindingsExampleTest, Application_ImportAzLmbrPaths_Works)
{
ApplicationParameters params;
- params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot); print (azlmbr.paths.devroot)";
+ params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot)";
EXPECT_TRUE(s_application->RunWithParameters(params));
}
diff --git a/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp b/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp
index aaa76e5977..aa88dee90f 100644
--- a/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp
+++ b/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp
@@ -14,8 +14,10 @@
#include
#include
#include
+#include
#include
#include
+#include
#include
#include
#include
@@ -170,11 +172,14 @@ namespace AZ
{
using AzToolsFramework::AssetSystemRequestBus;
- const char* path = nullptr;
- AssetSystemRequestBus::BroadcastResult(path, &AssetSystemRequestBus::Events::GetAbsoluteDevGameFolderPath);
- if (path)
+ AZ::IO::Path projectPath;
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
{
- return path;
+ settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath);
+ }
+ if (!projectPath.empty())
+ {
+ return projectPath.Native();
}
else
{
diff --git a/Code/Tools/SerializeContextTools/SliceConverter.cpp b/Code/Tools/SerializeContextTools/SliceConverter.cpp
index c815af3b7a..6cfe072f80 100644
--- a/Code/Tools/SerializeContextTools/SliceConverter.cpp
+++ b/Code/Tools/SerializeContextTools/SliceConverter.cpp
@@ -38,7 +38,7 @@
// SliceConverter reads in a slice file (saved in an ObjectStream format), instantiates it, creates a prefab out of the data,
// and saves the prefab in a JSON format. This can be used for one-time migrations of slices or slice-based levels to prefabs.
-//
+//
// If the slice contains legacy data, it will print out warnings / errors about the data that couldn't be serialized.
// The prefab will be generated without that data.
@@ -56,7 +56,7 @@ namespace AZ
AZ_Error("SerializeContextTools", false, "Command line not available.");
return false;
}
-
+
JsonSerializerSettings convertSettings;
convertSettings.m_keepDefaults = commandLine->HasSwitch("keepdefaults");
convertSettings.m_registrationContext = application.GetJsonRegistrationContext();
@@ -82,7 +82,7 @@ namespace AZ
// Load the asset catalog so that we can find any nested assets successfully. We also need to tick the tick bus
// so that the OnCatalogLoaded event gets processed now, instead of during application shutdown.
AZ::Data::AssetCatalogRequestBus::Broadcast(
- &AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@assets@/assetcatalog.xml");
+ &AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@products@/assetcatalog.xml");
application.Tick();
AZStd::string logggingScratchBuffer;
@@ -870,7 +870,7 @@ namespace AZ
// Wait for the disconnect to finish.
bool disconnected = false;
- AzFramework::AssetSystemRequestBus::BroadcastResult(disconnected,
+ AzFramework::AssetSystemRequestBus::BroadcastResult(disconnected,
&AzFramework::AssetSystem::AssetSystemRequests::WaitUntilAssetProcessorDisconnected, AZStd::chrono::seconds(30));
AZ_Error("Convert-Slice", disconnected, "Asset Processor failed to disconnect successfully.");
diff --git a/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp b/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp
index 4653975a52..d51539a471 100644
--- a/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp
+++ b/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp
@@ -64,7 +64,7 @@ namespace AWSCore
void AWSCoreConfiguration::InitSourceProjectFolderPath()
{
- auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
+ auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
if (!sourceProjectFolder)
{
AZ_Error(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage);
diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp
index a2c89a5af3..0b485609ad 100644
--- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp
+++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp
@@ -197,7 +197,7 @@ namespace AWSCore
subMenu->addAction(AddExternalLinkAction(
AWSMetricsAdvancedTopicsActionText, AWSMetricsAdvancedTopicsUrl, ":/Notifications/link.svg"));
- AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devroot@");
+ AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@engroot@");
AZStd::string configFilePath = priorAlias + "\\Gems\\AWSMetrics\\Code\\" + AZ::SettingsRegistryInterface::RegistryFolder;
AzFramework::StringFunc::Path::Normalize(configFilePath);
diff --git a/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp b/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp
index 6bde2c2fbf..e54a55f728 100644
--- a/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp
+++ b/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp
@@ -60,7 +60,7 @@ public:
m_normalizedSourceProjectFolder.c_str(), AZ::SettingsRegistryInterface::RegistryFolder);
AzFramework::StringFunc::Path::Normalize(m_normalizedSetRegFolderPath);
- m_localFileIO->SetAlias("@devassets@", m_normalizedSourceProjectFolder.c_str());
+ m_localFileIO->SetAlias("@projectroot@", m_normalizedSourceProjectFolder.c_str());
CreateTestSetRegFile(TEST_VALID_RESOURCE_MAPPING_SETREG);
}
@@ -122,7 +122,7 @@ private:
TEST_F(AWSCoreConfigurationTest, InitConfig_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath)
{
m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
- m_localFileIO->ClearAlias("@devassets@");
+ m_localFileIO->ClearAlias("@projectroot@");
AZ_TEST_START_TRACE_SUPPRESSION;
m_awsCoreConfiguration->InitConfig();
@@ -154,7 +154,7 @@ TEST_F(AWSCoreConfigurationTest, InitConfig_LoadValidSettingsRegistry_ReturnNonE
TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath)
{
m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
- m_localFileIO->ClearAlias("@devassets@");
+ m_localFileIO->ClearAlias("@projectroot@");
m_awsCoreConfiguration->ReloadConfiguration();
auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath();
diff --git a/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp b/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp
index 40ed5b53b5..e9453a4a0a 100644
--- a/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp
+++ b/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp
@@ -32,7 +32,7 @@ class AWSCoreEditorMenuTest
{
AWSCoreEditorUIFixture::SetUp();
AWSCoreFixture::SetUp();
- m_localFileIO->SetAlias("@devroot@", "dummy engine root");
+ m_localFileIO->SetAlias("@engroot@", "dummy engine root");
}
void TearDown() override
diff --git a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp
index 7e4ec05aba..bc8ff9a42e 100644
--- a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp
+++ b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp
@@ -22,7 +22,7 @@ namespace AWSMetrics
AZStd::string IdentityProvider::GetEngineVersion()
{
- static constexpr const char* EngineConfigFilePath = "@root@/engine.json";
+ static constexpr const char* EngineConfigFilePath = "@products@/engine.json";
static constexpr const char* EngineVersionJsonKey = "O3DEVersion";
AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetDirectInstance();
diff --git a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h
index 6b7c809601..b77f39c93c 100644
--- a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h
+++ b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h
@@ -16,8 +16,8 @@
#include
#include
#include
+#include
#include
-#include
namespace AWSMetrics
{
@@ -34,15 +34,22 @@ namespace AWSMetrics
// Set up the file IO and alias
m_localFileIO = aznew AZ::IO::LocalFileIO();
m_priorFileIO = AZ::IO::FileIOBase::GetInstance();
- // we need to set it to nullptr first because otherwise the
+ // we need to set it to nullptr first because otherwise the
// underneath code assumes that we might be leaking the previous instance
AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(m_localFileIO);
- const AZStd::string engineRoot = AZ::Test::GetEngineRootPath();
- m_localFileIO->SetAlias("@devroot@", engineRoot.c_str());
- m_localFileIO->SetAlias("@root@", engineRoot.c_str());
- m_localFileIO->SetAlias("@user@", GetTestFolderPath().c_str());
+ const AZ::IO::Path engineRoot = AZ::Test::GetEngineRootPath();
+ const auto productAssetPath = GetTestFolderPath() / "Cache";
+ const auto userPath = GetTestFolderPath() / "user";
+ m_localFileIO->CreatePath(productAssetPath.c_str());
+ m_localFileIO->CreatePath(userPath.c_str());
+ m_localFileIO->SetAlias("@engroot@", engineRoot.c_str());
+ m_localFileIO->SetAlias("@products@", productAssetPath.c_str());
+ m_localFileIO->SetAlias("@user@", userPath.c_str());
+ // Copy engine.json to the cache
+ EXPECT_TRUE(m_localFileIO->Copy((engineRoot / "engine.json").c_str(), "engine.json"));
+
m_serializeContext = AZStd::make_unique();
m_registrationContext = AZStd::make_unique();
@@ -69,6 +76,13 @@ namespace AWSMetrics
m_serializeContext.reset();
m_registrationContext.reset();
+ const auto productAssetPath = GetTestFolderPath() / "Cache";
+ const auto userPath = GetTestFolderPath() / "user";
+ // Clear the product asset cache alias to prevent cache write errors
+ m_localFileIO->ClearAlias("@products@");
+ m_localFileIO->DestroyPath(userPath.c_str());
+ m_localFileIO->DestroyPath(productAssetPath.c_str());
+
AZ::IO::FileIOBase::SetInstance(nullptr);
delete m_localFileIO;
AZ::IO::FileIOBase::SetInstance(m_priorFileIO);
@@ -97,22 +111,22 @@ namespace AWSMetrics
bool CreateFile(const AZStd::string& filePath, const AZStd::string& content)
{
AZ::IO::HandleType fileHandle;
+ // Suppress errors about writing to product asset cache
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (!m_localFileIO->Open(filePath.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText, fileHandle))
{
return false;
}
m_localFileIO->Write(fileHandle, content.c_str(), content.size());
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT;
m_localFileIO->Close(fileHandle);
return true;
}
AZStd::string GetDefaultTestFilePath()
{
- AZStd::string testFilePath = GetTestFolderPath();
- AzFramework::StringFunc::Path::Join(testFilePath.c_str(), "Test.json", testFilePath);
-
- return testFilePath;
+ return (GetTestFolderPath() / "Test.json").Native();
}
bool RemoveFile(const AZStd::string& filePath)
@@ -133,14 +147,16 @@ namespace AWSMetrics
AZ::IO::FileIOBase* m_priorFileIO = nullptr;
AZ::IO::FileIOBase* m_localFileIO = nullptr;
+ AZ::Test::ScopedAutoTempDirectory m_testDirectory;
AZStd::unique_ptr m_serializeContext;
AZStd::unique_ptr m_registrationContext;
AZStd::unique_ptr m_settingsRegistry;
private:
- AZStd::string GetTestFolderPath()
+ AZ::IO::Path GetTestFolderPath()
{
- return AZ_TRAIT_TEST_ROOT_FOLDER;
+ AZ::IO::Path testPathString{ m_testDirectory.GetDirectory() };
+ return testPathString;
}
};
}
diff --git a/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp b/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp
index b4bf68bac1..56f28856af 100644
--- a/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp
+++ b/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp
@@ -142,14 +142,14 @@ namespace AssetValidation
system.GetIConsole()->AddCommand("addseedlist", ConsoleCommandAddSeedList);
system.GetIConsole()->AddCommand("removeseedlist", ConsoleCommandRemoveSeedList);
system.GetIConsole()->AddCommand("printexcluded", ConsoleCommandTogglePrintExcluded);
- }
+ }
bool AssetValidationSystemComponent::IsKnownAsset(const char* assetPath)
{
AZStd::string lowerAsset{ assetPath };
AZStd::replace(lowerAsset.begin(), lowerAsset.end(), AZ_WRONG_DATABASE_SEPARATOR, AZ_CORRECT_DATABASE_SEPARATOR);
- const AZStd::vector prefixes = { "./", "@assets@/" };
+ const AZStd::vector prefixes = { "./", "@products@/" };
for (const AZStd::string& prefix : prefixes)
{
if (lowerAsset.starts_with(prefix))
@@ -392,7 +392,7 @@ namespace AssetValidation
AssetValidationRequestBus::Broadcast(&AssetValidationRequestBus::Events::AddSeedList, seedfilepath);
}
- bool AssetValidationSystemComponent::AddSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId)
+ bool AssetValidationSystemComponent::AddSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId)
{
for (const AzFramework::SeedInfo& thisSeed : seedList)
{
@@ -401,7 +401,7 @@ namespace AssetValidation
return true;
}
- bool AssetValidationSystemComponent::RemoveSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId)
+ bool AssetValidationSystemComponent::RemoveSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId)
{
AssetValidationRequests::AssetSourceList removeList;
for (const AzFramework::SeedInfo& thisSeed : seedList)
diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp
index 3493099d4c..924c01b916 100644
--- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp
+++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp
@@ -244,7 +244,7 @@ namespace ImageProcessingAtom
}
AZ::IO::FixedMaxPath projectConfigFolder;
- if (auto sourceGameRoot = fileIoBase->ResolvePath("@devassets@"); sourceGameRoot.has_value())
+ if (auto sourceGameRoot = fileIoBase->ResolvePath("@projectroot@"); sourceGameRoot.has_value())
{
projectConfigFolder = *sourceGameRoot;
projectConfigFolder /= s_projectConfigRelativeFolder;
diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp
index 7c5be89508..27ae90dcdc 100644
--- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp
+++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp
@@ -139,16 +139,16 @@ namespace AZ
//! Validates if a given .shadervariantlist file is located at the correct path for a given .shader full path.
//! There are two valid paths:
//! 1- Lower Precedence: The same folder where the .shader file is located.
- //! 2- Higher Precedence: //ShaderVariants/.
+ //! 2- Higher Precedence: /ShaderVariants/.
//! The "Higher Precedence" path gives the option to game projects to override what variants to generate. If this
//! file exists then the "Lower Precedence" path is disregarded.
//! A .shader full path is located under an AP scan folder.
- //! Example: "/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shader"
- //! - In this example the Scan Folder is "/Gems/Atom/Feature/Common/Assets", while the subfolder is "Materials/Types".
+ //! Example: "/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shader"
+ //! - In this example the Scan Folder is "/Gems/Atom/Feature/Common/Assets", while the subfolder is "Materials/Types".
//! The "Higher Precedence" expected valid location for the .shadervariantlist would be:
- //! - //ShaderVariants/Materials/Types/StandardPBR_ForwardPass.shadervariantlist.
+ //! - //ShaderVariants/Materials/Types/StandardPBR_ForwardPass.shadervariantlist.
//! The "Lower Precedence" valid location would be:
- //! - /Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shadervariantlist.
+ //! - /Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shadervariantlist.
//! @shouldExitEarlyFromProcessJob [out] Set to true if ProcessJob should do no work but return successfully.
//! Set to false if ProcessJob should do work and create assets.
//! When @shaderVariantListFileFullPath is provided by a Gem/Feature instead of the Game Project
@@ -169,17 +169,13 @@ namespace AZ
AZStd::string shaderVariantListFileRelativePath = shaderProductFileRelativePath;
AzFramework::StringFunc::Path::ReplaceExtension(shaderVariantListFileRelativePath, RPI::ShaderVariantListSourceData::Extension);
- const char * gameProjectPath = nullptr;
- AzToolsFramework::AssetSystemRequestBus::BroadcastResult(gameProjectPath, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath);
+ AZ::IO::FixedMaxPath gameProjectPath = AZ::Utils::GetProjectPath();
- AZStd::string expectedHigherPrecedenceFileFullPath;
- AzFramework::StringFunc::Path::Join(gameProjectPath, RPI::ShaderVariantTreeAsset::CommonSubFolder, expectedHigherPrecedenceFileFullPath, false /* handle directory overlap? */, false /* be case insensitive? */);
- AzFramework::StringFunc::Path::Join(expectedHigherPrecedenceFileFullPath.c_str(), shaderProductFileRelativePath.c_str(), expectedHigherPrecedenceFileFullPath, false /* handle directory overlap? */, false /* be case insensitive? */);
- AzFramework::StringFunc::Path::ReplaceExtension(expectedHigherPrecedenceFileFullPath, AZ::RPI::ShaderVariantListSourceData::Extension);
- AzFramework::StringFunc::Path::Normalize(expectedHigherPrecedenceFileFullPath);
+ auto expectedHigherPrecedenceFileFullPath = (gameProjectPath
+ / RPI::ShaderVariantTreeAsset::CommonSubFolder / shaderProductFileRelativePath).LexicallyNormal();
+ expectedHigherPrecedenceFileFullPath.ReplaceExtension(AZ::RPI::ShaderVariantListSourceData::Extension);
- AZStd::string normalizedShaderVariantListFileFullPath = shaderVariantListFileFullPath;
- AzFramework::StringFunc::Path::Normalize(normalizedShaderVariantListFileFullPath);
+ auto normalizedShaderVariantListFileFullPath = AZ::IO::FixedMaxPath(shaderVariantListFileFullPath).LexicallyNormal();
if (expectedHigherPrecedenceFileFullPath == normalizedShaderVariantListFileFullPath)
{
@@ -203,23 +199,15 @@ namespace AZ
}
// Check the "Lower Precedence" case, .shader path == .shadervariantlist path.
- AZStd::string normalizedShaderFileFullPath = shaderFileFullPath;
- AzFramework::StringFunc::Path::Normalize(normalizedShaderFileFullPath);
-
- AZStd::string normalizedShaderFileFullPathWithoutExtension = normalizedShaderFileFullPath;
- AzFramework::StringFunc::Path::StripExtension(normalizedShaderFileFullPathWithoutExtension);
-
- AZStd::string normalizedShaderVariantListFileFullPathWithoutExtension = normalizedShaderVariantListFileFullPath;
- AzFramework::StringFunc::Path::StripExtension(normalizedShaderVariantListFileFullPathWithoutExtension);
-
-#if AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS
- //In certain circumstances, the capitalization of the drive letter may not match
- const bool caseSensitive = false;
-#else
- //On the other platforms there's no drive letter, so it should be a non-issue.
- const bool caseSensitive = true;
-#endif
- if (!StringFunc::Equal(normalizedShaderFileFullPathWithoutExtension.c_str(), normalizedShaderVariantListFileFullPathWithoutExtension.c_str(), caseSensitive))
+ AZ::IO::Path normalizedShaderFileFullPath = AZ::IO::Path(shaderFileFullPath).LexicallyNormal();
+
+ auto normalizedShaderFileFullPathWithoutExtension = normalizedShaderFileFullPath;
+ normalizedShaderFileFullPathWithoutExtension.ReplaceExtension("");
+
+ auto normalizedShaderVariantListFileFullPathWithoutExtension = normalizedShaderVariantListFileFullPath;
+ normalizedShaderVariantListFileFullPathWithoutExtension.ReplaceExtension("");
+
+ if (normalizedShaderFileFullPathWithoutExtension != normalizedShaderVariantListFileFullPathWithoutExtension)
{
AZ_Error(ShaderVariantAssetBuilderName, false, "For shader file at path [%s], the shader variant list [%s] is expected to be located at [%s.%s] or [%s]"
, normalizedShaderFileFullPath.c_str(), normalizedShaderVariantListFileFullPath.c_str(),
diff --git a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp
index 8495e9b119..27336c8280 100644
--- a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp
+++ b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp
@@ -28,7 +28,7 @@ namespace UnitTest
m_application.reset();
}
- static constexpr const char TestDataFolder[] = "@devroot@/Gems/Atom/RHI/Code/Tests/UtilsTestsData/";
+ static constexpr const char TestDataFolder[] = "@engroot@/Gems/Atom/RHI/Code/Tests/UtilsTestsData/";
AZStd::unique_ptr m_application;
};
diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h
index 341824a84d..bd11965ffa 100644
--- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h
+++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h
@@ -44,14 +44,14 @@ namespace AZ
AZStd::string GetSourcePathByAssetId(const AZ::Data::AssetId& assetId);
//! Tries to resolve a relative file reference, given the path of a referencing file.
- //! @param originatingSourceFilePath Path to the parent file that references referencedSourceFilePath. May be absolute or relative to asset-root.
+ //! @param originatingSourceFilePath Path to the parent file that references referencedSourceFilePath. May be absolute or relative to asset-root.
//! @param referencedSourceFilePath Path that the parent file references. May be relative to the parent file location or relative to asset-root.
//! @return A full path for referencedSourceFilePath, if a full path was found. If a full path could not be constructed, returns referencedSourceFilePath unmodified.
AZStd::string ResolvePathReference(const AZStd::string& originatingSourceFilePath, const AZStd::string& referencedSourceFilePath);
- //! Returns the list of paths where a source asset file could possibly appear.
+ //! Returns the list of paths where a source asset file could possibly appear.
//! This is intended for use by AssetBuilders when reporting dependencies, to support relative paths between source files.
- //! When a source data file references another file using a relative path, the path might be relative to the originating
+ //! When a source data file references another file using a relative path, the path might be relative to the originating
//! file or it might be a standard source asset path (i.e. relative to the logical asset-root). This function will help reporting
//! dependencies on all possible locations where that file may appear at some point in the future.
//! For example a file MyGem/Assets/Foo/a.json might reference another file as "Bar/b.json". In this case, calling
@@ -94,9 +94,9 @@ namespace AZ
template
Outcome> LoadAsset(const AZ::Data::AssetId& assetId, [[maybe_unused]] const char* sourcePathForDebug)
{
- if (nullptr == AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"))
+ if (nullptr == AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"))
{
- // The absence of "@assets@" is not necessarily the reason LoadAsset() can't be used in CreateJobs(), but it
+ // The absence of "@products@" is not necessarily the reason LoadAsset() can't be used in CreateJobs(), but it
// is a symptom of calling LoadAsset() from CreateJobs() which is not supported.
AZ_Assert(false, "It appears AssetUtils::LoadAsset() is being called in CreateJobs(). It can only be used in ProcessJob().");
return AZ::Failure();
diff --git a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp
index 63a1524929..a5511edea1 100644
--- a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp
+++ b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp
@@ -53,16 +53,6 @@ namespace UnitTest
return false;
}
- const char* AssetSystemStub::GetAbsoluteDevGameFolderPath()
- {
- return nullptr;
- }
-
- const char* AssetSystemStub::GetAbsoluteDevRootFolderPath()
- {
- return nullptr;
- }
-
bool AssetSystemStub::GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath)
{
return false;
diff --git a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h
index a73570e3c9..2dd810b1e6 100644
--- a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h
+++ b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h
@@ -56,8 +56,6 @@ namespace UnitTest
AZStd::unordered_map m_sourceInfoMap;
bool GetSourceInfoBySourcePath(const char* sourcePath, AZ::Data::AssetInfo& assetInfo, AZStd::string& watchFolder) override;
- const char* GetAbsoluteDevGameFolderPath() override;
- const char* GetAbsoluteDevRootFolderPath() override;
bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& relativeProductPath) override;
bool GenerateRelativeSourcePath(
const AZStd::string& sourcePath, AZStd::string& relativePath, AZStd::string& watchFolder) override;
diff --git a/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp b/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp
index aaa574a14a..5343c295d8 100644
--- a/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp
+++ b/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp
@@ -67,7 +67,7 @@ namespace UnitTest
AZ::IO::Path assetPath = AZStd::string_view{ AZ::Utils::GetProjectPath() };
assetPath /= "Cache";
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetPath.c_str());
+ AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetPath.c_str());
m_jsonRegistrationContext = AZStd::make_unique();
m_jsonSystemComponent = AZStd::make_unique();
@@ -90,7 +90,7 @@ namespace UnitTest
JobManagerThreadDesc threadDesc;
#if AZ_TRAIT_SET_JOB_PROCESSOR_ID
threadDesc.m_cpuId = 0; // Don't set processors IDs on windows
-#endif
+#endif
uint32_t numWorkerThreads = AZStd::thread::hardware_concurrency();
@@ -99,7 +99,7 @@ namespace UnitTest
desc.m_workerThreads.push_back(threadDesc);
#if AZ_TRAIT_SET_JOB_PROCESSOR_ID
threadDesc.m_cpuId++;
-#endif
+#endif
}
m_jobManager = AZStd::make_unique(desc);
diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp
index 13b9a2ba27..3fae2ee7a3 100644
--- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp
+++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp
@@ -173,7 +173,7 @@ namespace AtomToolsFramework
AzToolsFramework::AssetBrowser::AssetDatabaseLocationNotificationBus::Broadcast(
&AzToolsFramework::AssetBrowser::AssetDatabaseLocationNotifications::OnDatabaseInitialized);
- AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@assets@/assetcatalog.xml");
+ AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@products@/assetcatalog.xml");
if (!AZ::RPI::RPISystemInterface::Get()->IsInitialized())
{
@@ -289,7 +289,7 @@ namespace AtomToolsFramework
ExitMainLoop();
}
}
-
+
void AtomToolsApplication::SaveSettings()
{
if (m_activatedLocalUserSettings)
@@ -378,7 +378,7 @@ namespace AtomToolsFramework
ExitMainLoop();
}
}
-
+
bool AtomToolsApplication::LaunchLocalServer()
{
// Determine if this is the first launch of the tool by attempting to connect to a running server
diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp
index f27a08b08d..fd20716570 100644
--- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp
+++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp
@@ -24,7 +24,7 @@
namespace MaterialEditor
{
CreateMaterialDialog::CreateMaterialDialog(QWidget* parent)
- : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent)
+ : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent)
{
}
diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp
index e6ffd2842f..d73737a2dc 100644
--- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp
+++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp
@@ -106,7 +106,7 @@ namespace MaterialEditor
menu->addAction("Create Material...", [entry]()
{
const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo(
- QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) +
+ QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." +
AZ::RPI::MaterialSourceData::Extension).absoluteFilePath();
@@ -182,7 +182,7 @@ namespace MaterialEditor
menu->addAction("Create Child Material...", [entry]()
{
const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo(
- QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) +
+ QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." +
AZ::RPI::MaterialSourceData::Extension).absoluteFilePath();
diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp
index a00d3eec05..5721dfcc72 100644
--- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp
+++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp
@@ -346,7 +346,7 @@ namespace MaterialEditor
AZStd::string ViewportSettingsInspector::GetDefaultUniqueSaveFilePath(const AZStd::string& baseName) const
{
- AZStd::string savePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
+ AZStd::string savePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
savePath += AZ_CORRECT_FILESYSTEM_SEPARATOR;
savePath += "Materials";
savePath += AZ_CORRECT_FILESYSTEM_SEPARATOR;
diff --git a/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py b/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py
index 6708553e20..041e1a80c5 100755
--- a/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py
+++ b/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py
@@ -16,10 +16,10 @@ import sys
import os.path
import filecmp
-g_devroot = azlmbr.paths.devroot
-sys.path.append(os.path.join(g_devroot, 'Tests', 'Atom', 'Automated'))
+g_engroot = azlmbr.paths.engroot
+sys.path.append(os.path.join(g_engroot, 'Tests', 'Atom', 'Automated'))
-g_materialTestFolder = os.path.join(g_devroot,'Gems','Atom','TestData','TestData','Materials','StandardPbrTestCases')
+g_materialTestFolder = os.path.join(g_engroot,'Gems','Atom','TestData','TestData','Materials','StandardPbrTestCases')
# Change this to True to replace the expected screenshot images
g_replaceExpectedScreenshots = False
diff --git a/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py b/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py
index 7bd65568ed..c31047d347 100755
--- a/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py
+++ b/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py
@@ -135,7 +135,7 @@ def main():
# clean previously generated shader variant list file so they don't clash.
pre, ext = os.path.splitext(shaderAssetInfo.relativePath)
- projectShaderVariantListFilePath = os.path.join(azlmbr.paths.devassets, PROJECT_SHADER_VARIANTS_FOLDER, f'{pre}.shadervariantlist')
+ projectShaderVariantListFilePath = os.path.join(azlmbr.paths.projectroot, PROJECT_SHADER_VARIANTS_FOLDER, f'{pre}.shadervariantlist')
pre, ext = os.path.splitext(filename)
defaultShaderVariantListFilePath = f'{pre}.shadervariantlist'
diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp
index 5711e3ff6e..cdb941546d 100644
--- a/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp
+++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp
@@ -46,7 +46,7 @@ static void DumfontTexture(IConsoleCmdArgs* cmdArgs)
if (fontName && *fontName && *fontName != '0')
{
- AZStd::string fontFilePath("@devroot@/");
+ AZStd::string fontFilePath("@engroot@/");
fontFilePath += fontName;
fontFilePath += ".bmp";
diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp
index 7f676e4c10..4363ac1a62 100644
--- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp
+++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp
@@ -389,7 +389,7 @@ namespace AZ
// create the full paths
char projectPath[AZ_MAX_PATH_LEN];
- AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN);
+ AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN);
AZStd::string irradianceTextureFullPath;
AzFramework::StringFunc::Path::Join(projectPath, irradianceTextureRelativePath.c_str(), irradianceTextureFullPath, true, true);
@@ -481,7 +481,7 @@ namespace AZ
AZStd::string fullPath;
char projectPath[AZ_MAX_PATH_LEN];
- AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN);
+ AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN);
if (!relativePath.empty())
{
diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp
index 095c670e15..665adcd568 100644
--- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp
+++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp
@@ -529,7 +529,7 @@ namespace AZ
bool MaterialPropertyInspector::SaveMaterial() const
{
const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo(
- QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) +
+ QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." +
AZ::RPI::MaterialSourceData::Extension).absoluteFilePath();
diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp
index d7fcd124d0..f325a20ac1 100644
--- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp
+++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp
@@ -321,7 +321,7 @@ namespace AZ
}
char projectPath[AZ_MAX_PATH_LEN];
- AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN);
+ AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN);
// retrieve the source cubemap path from the configuration
// we need to make sure to use the same source cubemap for each bake
diff --git a/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp b/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp
index a31885cc69..2fe5d749cf 100644
--- a/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp
+++ b/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp
@@ -105,7 +105,7 @@ namespace AudioControlBuilder
Audio::ATLXmlTags::ATLPreloadRequestTag, "preload request"));
}
- // For each preload request in the control file, determine which config group is used for this platform and register each
+ // For each preload request in the control file, determine which config group is used for this platform and register each
// bank listed in that preload request as a dependency.
while (preloadRequestNode)
{
@@ -163,7 +163,7 @@ namespace AudioControlBuilder
const AZ::rapidxml::xml_node* configGroupNode = configGroupMap[configGroupName];
if (!configGroupNode)
{
- // The config group this platform uses isn't defined in the control file. This might be intentional, so just
+ // The config group this platform uses isn't defined in the control file. This might be intentional, so just
// generate a warning and keep going to the next preload node.
AZ_TracePrintf("Audio Control Builder", "%s node for config group %s is not defined, so no banks are referenced.",
Audio::ATLXmlTags::ATLConfigGroupTag, configGroupName.c_str());
@@ -188,7 +188,7 @@ namespace AudioControlBuilder
}
// Prepend the bank name with the relative path to the wwise sounds folder to get relative path to the bank from
- // the @assets@ alias and push that into the list of banks referenced.
+ // the @products@ alias and push that into the list of banks referenced.
AZStd::string soundsPrefix = Audio::Wwise::DefaultBanksPath;
banksReferenced.emplace_back(soundsPrefix + bankNameAttribute->value());
@@ -496,7 +496,7 @@ namespace AudioControlBuilder
pathDependencies.emplace(relativeBankPath, AssetBuilderSDK::ProductPathDependencyType::ProductFile);
}
- // For each bank figure out what events are included in the bank, then run through every event referenced in the file and
+ // For each bank figure out what events are included in the bank, then run through every event referenced in the file and
// make sure it is in the list gathered from the banks.
const auto triggersNode = node->first_node(Audio::ATLXmlTags::TriggersNodeTag);
if (!triggersNode)
@@ -520,7 +520,7 @@ namespace AudioControlBuilder
AZStd::set wwiseEventsInReferencedBanks;
- // Load all bankdeps files for all banks referenced and aggregate the list of events in those files.
+ // Load all bankdeps files for all banks referenced and aggregate the list of events in those files.
for (const AZStd::string& relativeBankPath : banksReferenced)
{
// Create the full path to the bankdeps file from the bank file.
diff --git a/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp b/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp
index 3a1916edc3..22fa4cab7d 100644
--- a/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp
+++ b/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp
@@ -52,7 +52,7 @@ namespace WwiseBuilder
{
fileNames.push_back(dependenciesArray[dependencyIndex].GetString());
}
-
+
// The dependency array is empty, which likely means it was modified by hand. However, every bank is dependent
// on init.bnk (other than itself), so just force add it as a dependency here. and emit a warning.
if (fileNames.size() == 0)
@@ -93,7 +93,7 @@ namespace WwiseBuilder
void WwiseBuilderWorker::Initialize()
{
- AZ::IO::Path configFile("@devassets@");
+ AZ::IO::Path configFile("@projectroot@");
configFile /= Audio::Wwise::DefaultBanksPath;
configFile /= Audio::Wwise::ConfigFile;
@@ -180,7 +180,7 @@ namespace WwiseBuilder
{
AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "Starting Job.\n");
AZ::IO::PathView fullPath(request.m_fullPath);
-
+
if (m_isShuttingDown)
{
AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, "Cancelled job %s because shutdown was requested.\n", request.m_fullPath.c_str());
@@ -204,7 +204,7 @@ namespace WwiseBuilder
AZ::Outcome gatherProductDependenciesResponse = GatherProductDependencies(request.m_fullPath, request.m_sourceFile, dependencyPaths);
if (!gatherProductDependenciesResponse.IsSuccess())
{
- AZ_Error(WwiseBuilderWindowName, false, "Dependency gathering for %s failed. %s",
+ AZ_Error(WwiseBuilderWindowName, false, "Dependency gathering for %s failed. %s",
request.m_fullPath.c_str(), gatherProductDependenciesResponse.GetError().c_str());
}
else
diff --git a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp
index 2387588f31..e65dbcce9f 100644
--- a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp
+++ b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp
@@ -28,7 +28,7 @@ protected:
{
m_app.Start(AZ::ComponentApplication::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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
@@ -39,7 +39,7 @@ protected:
assetRoot /= "Cache";
AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str());
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetRoot.c_str());
+ AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str());
}
void TearDown() override
@@ -158,7 +158,7 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_InitBank_NoMetadata_NoDependencies)
TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoMetadata_NoDependencies)
{
- // Should generate a warning after trying to find metadata for the given bank, when the bank is not the init bank.
+ // Should generate a warning after trying to find metadata for the given bank, when the bank is not the init bank.
// Warning should be about not being able to generate full dependency information without the metadata file.
TestSuccessCaseNoDependencies("test_doesNotExist.bnk", true);
}
@@ -180,15 +180,15 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_MultipleDependencies)
TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_DependencyArrayNonexistent_NoDependencies)
{
- // Should generate a warning when trying to get dependency info from metadata file, but the dependency field does
- // not an empty array. Warning should be describing that a dependency on the init bank was added by default, but
+ // Should generate a warning when trying to get dependency info from metadata file, but the dependency field does
+ // not an empty array. Warning should be describing that a dependency on the init bank was added by default, but
// the full dependency list could not be generated.
TestSuccessCaseNoDependencies("test_bank7.bnk", true);
}
TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoElementsInDependencyArray_NoDependencies)
{
- // Should generate a warning when trying to get dependency info from metadata file, but the dependency field is
+ // Should generate a warning when trying to get dependency info from metadata file, but the dependency field is
// an empty array. Warning should be describing that a dependency on the init bank was added by default, but the
// full dependency list could not be generated.
TestSuccessCaseNoDependencies("test_bank8.bnk", true);
@@ -196,8 +196,8 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoElementsInDependencyArray_N
TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_MissingInitBankDependency_MultipleDependencies)
{
- // Should generate a warning when trying to get dependency info from metadata file, but the dependency info in the
- // metadata doesn't include the init bank. Warning should be describing that a dependency on the init bank was
+ // Should generate a warning when trying to get dependency info from metadata file, but the dependency info in the
+ // metadata doesn't include the init bank. Warning should be describing that a dependency on the init bank was
// added by default.
AZStd::vector expectedPaths = {
"Sounds/wwise/init.bnk",
diff --git a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp
index 3724069045..4ee816b048 100644
--- a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp
+++ b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp
@@ -231,7 +231,7 @@ namespace UnitTest
m_app.Start(AZ::ComponentApplication::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
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
@@ -253,10 +253,10 @@ namespace UnitTest
AZ_TEST_ASSERT(serializeContext != nullptr);
Audio::Wwise::ConfigurationSettings::Reflect(serializeContext);
- // Set the @assets@ alias to the path where *this* cpp file lives.
+ // Set the @products@ alias to the path where *this* cpp file lives.
AZStd::string rootFolder(AZ::Test::GetCurrentExecutablePath());
AZ::StringFunc::Path::Join(rootFolder.c_str(), "Test.Assets/Gems/AudioEngineWwise", rootFolder);
- m_fileIO->SetAlias("@assets@", rootFolder.c_str());
+ m_fileIO->SetAlias("@products@", rootFolder.c_str());
// So we don't have to compute it in each test...
AZStd::string defaultBanksPath(Audio::Wwise::DefaultBanksPath);
@@ -303,26 +303,12 @@ namespace UnitTest
m_mapEntry.m_bankSubPath = "soundbanks";
config.m_platformMappings.push_back(m_mapEntry);
- // Unfortunately we are writing to the config file that is simulated to be in the @assets@ subfolder
- // This will cause an issue during save. Since 'm_configFilePath' is an absolute path, we need to
- // reset the @assets@ alias to a meaningful assets path that does not contain any root of the m_configFilePath
- // in order to write to the config file and proceed
- //AZStd::string rootFolder(AZ::Test::GetCurrentExecutablePath());
- //AZ::IO::Path tempAssetPath(rootFolder);
- //tempAssetPath /= "Cache";
-
- //AZStd::string previousAlias = m_fileIO->GetAlias("@assets@");
- //m_fileIO->SetAlias("@assets@", tempAssetPath.c_str());
-
config.Save(m_configFilePath);
- //m_fileIO->SetAlias("@assets@", previousAlias.c_str());
m_wwiseImpl.SetBankPaths();
- //m_fileIO->SetAlias("@assets@", tempAssetPath.c_str());
m_fileIO->Remove(m_configFilePath.c_str());
- //m_fileIO->SetAlias("@assets@", previousAlias.c_str());
EXPECT_STREQ(m_wwiseImpl.m_soundbankFolder.c_str(), "sounds/wwise/soundbanks/");
}
diff --git a/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp b/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp
index 996a2a80b6..aa93a2bc12 100644
--- a/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp
+++ b/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp
@@ -977,7 +977,7 @@ namespace Audio
, m_rPreloadRequests(rPreloadRequests)
, m_nTriggerImplIDCounter(AUDIO_TRIGGER_IMPL_ID_NUM_RESERVED)
, m_rFileCacheMgr(rFileCacheMgr)
- , m_rootPath("@assets@")
+ , m_rootPath("@products@")
#if !defined(AUDIO_RELEASE)
, m_pDebugNameStore(nullptr)
#endif // !AUDIO_RELEASE
diff --git a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp
index 0c697f12b6..21ec1a4603 100644
--- a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp
+++ b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp
@@ -292,7 +292,7 @@ namespace Blast
void BlastSystemComponent::SaveConfiguration()
{
- auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
+ auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
if (!assetRoot)
{
@@ -309,7 +309,7 @@ namespace Blast
void BlastSystemComponent::CheckoutConfiguration()
{
- const auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
+ const auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
AZStd::string fullPath;
AzFramework::StringFunc::Path::Join(assetRoot, DefaultConfigurationPath, fullPath);
diff --git a/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp b/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp
index 21b0b28c47..85c9c696a2 100644
--- a/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp
+++ b/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp
@@ -16,7 +16,7 @@ namespace CertificateManager
{
static bool ReadFileIntoString(const char* filename, AZStd::vector& outBuffer)
{
- AZStd::string certificatePath = "@assets@/certificates/";
+ AZStd::string certificatePath = "@products@/certificates/";
certificatePath.append(filename);
AZ::IO::FileIOBase* fileBase = AZ::IO::FileIOBase::GetInstance();
@@ -58,7 +58,7 @@ namespace CertificateManager
return true;
}
- FileDataSource::FileDataSource()
+ FileDataSource::FileDataSource()
: m_privateKeyPEM(nullptr)
, m_certificatePEM(nullptr)
, m_certificateAuthorityCertPEM(nullptr)
@@ -73,13 +73,13 @@ namespace CertificateManager
azfree(m_privateKeyPEM);
azfree(m_certificatePEM);
azfree(m_certificateAuthorityCertPEM);
- }
+ }
void FileDataSource::ConfigureDataSource(const char* keyPath, const char* certPath, const char* caPath)
{
ConfigurePrivateKey(keyPath);
ConfigureCertificate(certPath);
- ConfigureCertificateAuthority(caPath);
+ ConfigureCertificateAuthority(caPath);
}
void FileDataSource::ConfigurePrivateKey(const char* path)
@@ -107,7 +107,7 @@ namespace CertificateManager
if (path != nullptr)
{
LoadGenericFile(path,m_certificatePEM);
- }
+ }
}
void FileDataSource::ConfigureCertificateAuthority(const char* path)
@@ -133,7 +133,7 @@ namespace CertificateManager
{
return m_certificateAuthorityCertPEM;
}
-
+
bool FileDataSource::HasPublicKey() const
{
return m_certificatePEM != nullptr;
@@ -143,7 +143,7 @@ namespace CertificateManager
{
return m_certificatePEM;
}
-
+
bool FileDataSource::HasPrivateKey() const
{
return m_privateKeyPEM != nullptr;
diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp
index 300543c896..d5fa3867e0 100644
--- a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp
+++ b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp
@@ -50,7 +50,7 @@ namespace EMotionFX
// Create EMotion FX allocators
Allocators::Create();
-
+
// create the new object
gEMFX = AZ::Environment::CreateVariable(kEMotionFXInstanceVarName);
gEMFX.Set(EMotionFXManager::Create());
@@ -166,11 +166,11 @@ namespace EMotionFX
delete m_debugDraw;
m_debugDraw = nullptr;
-
+
m_eventManager->Destroy();
m_eventManager = nullptr;
-
+
// delete the thread datas
for (uint32 i = 0; i < m_threadDatas.size(); ++i)
{
@@ -341,7 +341,7 @@ namespace EMotionFX
void EMotionFXManager::InitAssetFolderPaths()
{
// Initialize the asset source folder path.
- const char* assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
+ const char* assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
if (assetSourcePath)
{
m_assetSourceFolder = assetSourcePath;
@@ -361,12 +361,12 @@ namespace EMotionFX
}
else
{
- AZ_Warning("EMotionFX", false, "Failed to set asset source path for alias '@devassets@'.");
+ AZ_Warning("EMotionFX", false, "Failed to set asset source path for alias '@projectroot@'.");
}
// Initialize the asset cache folder path.
- const char* assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@");
+ const char* assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@");
if (assetCachePath)
{
m_assetCacheFolder = assetCachePath;
@@ -386,7 +386,7 @@ namespace EMotionFX
}
else
{
- AZ_Warning("EMotionFX", false, "Failed to set asset cache path for alias '@assets@'.");
+ AZ_Warning("EMotionFX", false, "Failed to set asset cache path for alias '@products@'.");
}
}
diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp
index 129d005f80..2d65a228b7 100644
--- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp
+++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp
@@ -72,13 +72,13 @@ namespace EMStudio
{
AZStd::string filename;
- AZStd::string assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@");
+ AZStd::string assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@");
AzFramework::StringFunc::AssetDatabasePath::Normalize(assetCachePath);
AZStd::string relativePath;
EBUS_EVENT_RESULT(relativePath, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, assetId);
AzFramework::StringFunc::AssetDatabasePath::Join(assetCachePath.c_str(), relativePath.c_str(), filename);
-
+
return filename;
}
@@ -243,7 +243,7 @@ namespace EMStudio
void FileManager::SourceFileChanged(AZStd::string relativePath, AZStd::string scanFolder, [[maybe_unused]] AZ::TypeId sourceTypeId)
{
AZStd::string filename;
- AZStd::string assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
+ AZStd::string assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@");
AzFramework::StringFunc::AssetDatabasePath::Normalize(assetSourcePath);
AzFramework::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), relativePath.c_str(), filename);
@@ -373,7 +373,7 @@ namespace EMStudio
const ProductAssetBrowserEntry* product = azrtti_cast(assetBrowserEntry);
filename.clear();
- AZStd::string cachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@");
+ AZStd::string cachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@");
AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath);
AzFramework::StringFunc::AssetDatabasePath::Join(cachePath.c_str(), product->GetRelativePath().c_str(), filename);
@@ -395,7 +395,7 @@ namespace EMStudio
{
return AZStd::string();
}
-
+
return filenames[0];
}
@@ -435,12 +435,12 @@ namespace EMStudio
AZStd::string result;
if (EMStudio::GetCommandManager()->ExecuteCommand(command, result))
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
"Actor successfully saved");
}
else
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
AZStd::string::format("Actor failed to save
%s", result.c_str()).c_str());
}
}
@@ -574,12 +574,12 @@ namespace EMStudio
AZStd::string result;
if (GetCommandManager()->ExecuteCommand(command, result) == false)
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
AZStd::string::format("MotionSet failed to save
%s", result.c_str()).c_str());
}
else
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
"MotionSet successfully saved");
}
}
@@ -608,7 +608,7 @@ namespace EMStudio
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
+
AZStd::string FileManager::LoadAnimGraphFileDialog([[maybe_unused]] QWidget* parent)
{
GetManager()->SetAvoidRendering(true);
@@ -618,7 +618,7 @@ namespace EMStudio
{
return AZStd::string();
}
-
+
return filenames[0];
}
diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp
index 06088790d9..002634ea90 100644
--- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp
+++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp
@@ -378,7 +378,7 @@ namespace EMStudio
// reset action
m_resetAction = menu->addAction(tr("&Reset"), this, &MainWindow::OnReset, QKeySequence::New);
m_resetAction->setObjectName("EMFX.MainWindow.ResetAction");
-
+
// save all
m_saveAllAction = menu->addAction(tr("Save All..."), this, &MainWindow::OnSaveAll, QKeySequence::Save);
m_saveAllAction->setObjectName("EMFX.MainWindow.SaveAllAction");
@@ -467,7 +467,7 @@ namespace EMStudio
menu->addAction("Documentation", this, []
{
QDesktopServices::openUrl(QUrl("https://o3de.org/docs/"));
- });
+ });
menu->addAction("Forums", this, []
{
@@ -491,7 +491,7 @@ namespace EMStudio
// load preferences
PluginOptionsNotificationsBus::Router::BusRouterConnect();
- LoadPreferences();
+ LoadPreferences();
m_autosaveTimer->setInterval(m_options.GetAutoSaveInterval() * 60 * 1000);
// Create the dirty file manager and register the workspace callback.
@@ -1072,7 +1072,7 @@ namespace EMStudio
// get only the version number of EMotion FX
AZStd::string emfxVersionString = EMotionFX::GetEMotionFX().GetVersionString();
AzFramework::StringFunc::Replace(emfxVersionString, "EMotion FX ", "", true /* case sensitive */);
-
+
// set the window title
// only set the EMotion FX version if the filename is empty
AZStd::string windowTitle;
@@ -1359,7 +1359,7 @@ namespace EMStudio
void MainWindow::LoadCharacter(const AZ::Data::AssetId& actorAssetId, const AZ::Data::AssetId& animgraphId, const AZ::Data::AssetId& motionSetId)
{
m_characterFiles.clear();
- AZStd::string cachePath = gEnv->pFileIO->GetAlias("@assets@");
+ AZStd::string cachePath = gEnv->pFileIO->GetAlias("@products@");
AZStd::string filename;
AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath);
@@ -1543,12 +1543,12 @@ namespace EMStudio
AZStd::string result;
if (EMStudio::GetCommandManager()->ExecuteCommand(command, result))
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
"Workspace successfully saved");
}
else
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
AZStd::string::format("Workspace failed to save
%s", result.c_str()).c_str());
}
}
@@ -1575,12 +1575,12 @@ namespace EMStudio
AZStd::string result;
if (EMStudio::GetCommandManager()->ExecuteCommand(command, result))
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
"Workspace successfully saved");
}
else
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
AZStd::string::format("Workspace failed to save
%s", result.c_str()).c_str());
}
}
@@ -1644,7 +1644,7 @@ namespace EMStudio
Workspace* workspace = GetManager()->GetWorkspace();
workspace->SetDirtyFlag(true);
- }
+ }
void MainWindow::OnReset()
{
@@ -2312,7 +2312,7 @@ namespace EMStudio
void MainWindow::Activate(const AZ::Data::AssetId& actorAssetId, const EMotionFX::AnimGraph* animGraph, const EMotionFX::MotionSet* motionSet)
{
- AZStd::string cachePath = gEnv->pFileIO->GetAlias("@assets@");
+ AZStd::string cachePath = gEnv->pFileIO->GetAlias("@products@");
AZStd::string filename;
AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath);
@@ -2776,17 +2776,17 @@ namespace EMStudio
AZStd::string result;
if (GetCommandManager()->ExecuteCommandGroup(commandGroup, result, false))
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS,
"Autosave completed");
}
else
{
- GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
+ GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR,
AZStd::string::format("Autosave failed
%s", result.c_str()).c_str());
}
}
-
+
void MainWindow::moveEvent(QMoveEvent* event)
{
MCORE_UNUSED(event);
diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp
index 4cdf645b16..ea7c92b742 100644
--- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp
+++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp
@@ -428,7 +428,7 @@ namespace EMStudio
continue;
}
- AzFramework::StringFunc::Replace(commands[i], "@assets@/", assetCacheFolder.c_str(), true /* case sensitive */);
+ AzFramework::StringFunc::Replace(commands[i], "@products@/", assetCacheFolder.c_str(), true /* case sensitive */);
// add the command to the command group
commandGroup->AddCommandString(commands[i]);
diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp
index 3e459d31d6..3593f58ff2 100644
--- a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp
+++ b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp
@@ -6,6 +6,8 @@
*
*/
+#include
+
#include
#include
#include
@@ -66,14 +68,10 @@ namespace EMotionFX
// through this method. Once EMotionFX is integrated to the asset system this can go away.
AZStd::string assetFilename;
EBUS_EVENT_RESULT(assetFilename, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, asset.GetId());
- const char* devAssetsPath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
- if (devAssetsPath)
+ AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath();
+ if (!projectPath.empty())
{
- AZStd::string assetSourcePath = devAssetsPath;
-
- AzFramework::StringFunc::AssetDatabasePath::Normalize(assetSourcePath);
- AZStd::string filename;
- AzFramework::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), assetFilename.c_str(), filename);
+ AZ::IO::FixedMaxPathString filename{ (projectPath / assetFilename).LexicallyNormal().FixedMaxPathStringAsPosix() };
assetData->m_emfxAnimGraph->SetFileName(filename.c_str());
}
@@ -81,7 +79,7 @@ namespace EMotionFX
{
if (GetEMotionFX().GetIsInEditorMode())
{
- AZ_Warning("EMotionFX", false, "Failed to retrieve asset source path with alias '@devassets@'. Cannot set absolute filename for '%s'", assetFilename.c_str());
+ AZ_Warning("EMotionFX", false, "Failed to retrieve project root path . Cannot set absolute filename for '%s'", assetFilename.c_str());
}
assetData->m_emfxAnimGraph->SetFileName(assetFilename.c_str());
}
diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp
index 5ca9a34e72..280cedd06a 100644
--- a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp
+++ b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
#include
@@ -46,7 +47,7 @@ namespace EMotionFX
const char* motionFile = entry->GetFilename();
AZ::Data::AssetId motionAssetId;
EBUS_EVENT_RESULT(motionAssetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, motionFile, azrtti_typeid(), false);
-
+
// if it failed to find it, it might be still compiling - try forcing an immediate compile:
if (!motionAssetId.IsValid())
{
@@ -149,14 +150,11 @@ namespace EMotionFX
// through this method. Once EMotionFX is integrated to the asset system this can go away.
AZStd::string assetFilename;
EBUS_EVENT_RESULT(assetFilename, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, asset.GetId());
- const char* devAssetsPath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@");
- if (devAssetsPath)
- {
- AZStd::string assetSourcePath = devAssetsPath;
- AZ::StringFunc::AssetDatabasePath::Normalize(assetSourcePath);
- AZStd::string filename;
- AZ::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), assetFilename.c_str(), filename);
+ AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath();
+ if (!projectPath.empty())
+ {
+ AZ::IO::FixedMaxPathString filename{ (projectPath / assetFilename).LexicallyNormal().FixedMaxPathStringAsPosix() };
assetData->m_emfxMotionSet->SetFilename(filename.c_str());
}
@@ -164,11 +162,11 @@ namespace EMotionFX
{
if (GetEMotionFX().GetIsInEditorMode())
{
- AZ_Warning("EMotionFX", false, "Failed to retrieve asset source path with alias '@devassets@'. Cannot set absolute filename for '%s'", assetFilename.c_str());
+ AZ_Warning("EMotionFX", false, "Failed to retrieve project root path . Cannot set absolute filename for '%s'", assetFilename.c_str());
}
assetData->m_emfxMotionSet->SetFilename(assetFilename.c_str());
}
-
+
// now load them in:
const EMotionFX::MotionSet::MotionEntries& motionEntries = assetData->m_emfxMotionSet->GetMotionEntries();
// Get the motions in the motion set. Escalate them to the top of the build queue first so that they can be done in parallel.
@@ -179,7 +177,7 @@ namespace EMotionFX
const char* motionFilename = motionEntry->GetFilename();
AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, motionFilename);
}
-
+
// now that they're all escalated, the asset processor will be processing them across all threads, and we can request them one by one:
for (const auto& item : motionEntries)
{
diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp
index 0f87c488b9..08e99f97d0 100644
--- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp
+++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp
@@ -487,9 +487,9 @@ namespace EMotionFX
return;
}
- SetMediaRoot("@assets@");
- // \todo Right now we're pointing at the @devassets@ location (source) and working from there, because .actor and .motion (motion) aren't yet processed through
- // the scene pipeline. Once they are, we'll need to update various segments of the Tool to always read from the @assets@ cache, but write to the @devassets@ data/metadata.
+ SetMediaRoot("@products@");
+ // \todo Right now we're pointing at the @projectroot@ location (source) and working from there, because .actor and .motion (motion) aren't yet processed through
+ // the scene pipeline. Once they are, we'll need to update various segments of the Tool to always read from the @products@ cache, but write to the @projectroot@ data/metadata.
EMotionFX::GetEMotionFX().InitAssetFolderPaths();
// Register EMotionFX event handler
diff --git a/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp b/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp
index 25cd840cda..44453ed70f 100644
--- a/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp
+++ b/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp
@@ -25,11 +25,11 @@ namespace EMotionFX
ExecuteCommands({
R"str(CreateMotionSet -name MotionSet0)str",
R"str(CreateMotionSet -name MotionSet1)str",
- R"str(MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str",
- R"str(MotionSetAddMotion -motionSetID 1 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str",
+ R"str(MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str",
+ R"str(MotionSetAddMotion -motionSetID 1 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str",
R"str(MotionSetRemoveMotion -motionSetID 0 -motionIds rin_idle)str",
R"str(RemoveMotionSet -motionSetID 0)str",
- R"str(RemoveMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion)str",
+ R"str(RemoveMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion)str",
});
EMStudio::MotionSetsWindowPlugin* motionSetsWindowPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::MotionSetsWindowPlugin::CLASS_ID));
diff --git a/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp b/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp
index ce0b586bfe..e4e58fa01d 100644
--- a/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp
+++ b/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp
@@ -33,7 +33,7 @@ namespace EMotionFX
ASSERT_TRUE(motionSet) << "Motion set with id 0 does not exist";
motionSetsWindowPlugin->SetSelectedSet(motionSet);
- const std::string filename = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion";
+ const std::string filename = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion";
ExecuteCommands({
"ImportMotion -filename " + filename,
"MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds " + filename + ";rin_idle",
diff --git a/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp b/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp
index 0155b38da2..7b9f23f094 100644
--- a/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp
+++ b/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp
@@ -55,7 +55,7 @@ namespace EMotionFX
// By using this mock catalog, we can pretend to load the specific referenced assets without actually loading anything.
UnitTest::MockLoadAssetCatalogAndHandler testAssetCatalog({ referencedAnimGraph, referencedMotionSet });
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExample.animgraph";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExample.animgraph";
AZStd::vector productDependencies;
EMotionFXBuilder::AnimGraphBuilderWorker builderWorker;
@@ -68,7 +68,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_NoDependency_OutputNoProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExampleNoDependency.animgraph";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExampleNoDependency.animgraph";
AZStd::vector productDependencies;
EMotionFXBuilder::AnimGraphBuilderWorker builderWorker;
@@ -78,7 +78,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_InvalidFilePath_OutputNoProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.animgraph";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.animgraph";
AZStd::vector productDependencies;
EMotionFXBuilder::AnimGraphBuilderWorker builderWorker;
@@ -88,7 +88,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_EmptyFile_OutputNoProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyAnimGraphExample.animgraph";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyAnimGraphExample.animgraph";
AZStd::vector productDependencies;
EMotionFXBuilder::AnimGraphBuilderWorker builderWorker;
@@ -100,7 +100,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_HasReferenceNode_OutputProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset";
ProductPathDependencySet productDependencies;
EMotionFXBuilder::MotionSetBuilderWorker builderWorker;
@@ -112,7 +112,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_NoDependency_OutputNoProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExampleNoDependency.motionset";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExampleNoDependency.motionset";
ProductPathDependencySet productDependencies;
EMotionFXBuilder::MotionSetBuilderWorker builderWorker;
@@ -122,7 +122,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_InvalidFilePath_OutputNoProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.motionset";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.motionset";
ProductPathDependencySet productDependencies;
EMotionFXBuilder::MotionSetBuilderWorker builderWorker;
@@ -132,7 +132,7 @@ namespace EMotionFX
TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_EmptyFile_OutputNoProductDependencies)
{
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyMotionSetExample.motionset";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyMotionSetExample.motionset";
ProductPathDependencySet productDependencies;
EMotionFXBuilder::MotionSetBuilderWorker builderWorker;
diff --git a/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp b/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp
index b1650ce0c6..905c4a825b 100644
--- a/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp
+++ b/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp
@@ -124,7 +124,7 @@ namespace EMotionFX
{
using testing::_;
- const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset";
+ const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset";
MockAssetSystemRequests assetSystem;
EXPECT_CALL(assetSystem, CompileAssetSync(_))
diff --git a/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp b/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp
index ff7ead3800..36abf2b1d2 100644
--- a/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp
+++ b/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp
@@ -302,7 +302,7 @@ namespace EMotionFX
GetEMotionFX().SetMediaRootFolder(assetFolder.c_str());
GetEMotionFX().InitAssetFolderPaths();
- const char* actorFilename = "@assets@\\animationsamples\\advanced_rinlocomotion\\actor\\rinactor.actor";
+ const char* actorFilename = "@products@\\animationsamples\\advanced_rinlocomotion\\actor\\rinactor.actor";
Importer* importer = GetEMotionFX().GetImporter();
importer->SetLoggingEnabled(false);
@@ -402,9 +402,9 @@ namespace EMotionFX
// This path points to assets in the advance rin demo.
// To test different assets, change the path here.
- const char* actorFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor";
- const char* motionSetFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset";
- const char* animGraphFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph";
+ const char* actorFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor";
+ const char* motionSetFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset";
+ const char* animGraphFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph";
Importer* importer = GetEMotionFX().GetImporter();
importer->SetLoggingEnabled(false);
@@ -714,9 +714,9 @@ namespace EMotionFX
// This path points to assets in the advance rin demo.
// To test different assets, change the path here.
- const char* actorFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor";
- const char* motionSetFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset";
- const char* animGraphFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph";
+ const char* actorFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor";
+ const char* motionSetFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset";
+ const char* animGraphFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph";
Importer* importer = GetEMotionFX().GetImporter();
importer->SetLoggingEnabled(false);
@@ -772,13 +772,13 @@ namespace EMotionFX
TEST_F(PerformanceTestFixture, DISABLED_MotionSamplingPerformanceNonUniform)
{
// Make sure that the motion is set to use NonUniform sampling! Change this in the scene settings! Otherwise you get wrong results.
- TestMotionSamplingPerformance("@assets@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_idle.motion");
+ TestMotionSamplingPerformance("@products@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_idle.motion");
}
TEST_F(PerformanceTestFixture, DISABLED_MotionSamplingPerformanceUniform)
{
// Make sure that the motion is set to use Uniform sampling! Change this in the scene settings! Otherwise you get wrong results.
- TestMotionSamplingPerformance("@assets@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_walk_kick_01.motion");
+ TestMotionSamplingPerformance("@products@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_walk_kick_01.motion");
}
} // namespace EMotionFX
diff --git a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp
index 9b18ca5862..31e1f75d29 100644
--- a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp
+++ b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp
@@ -33,7 +33,7 @@ namespace EMotionFX
ASSERT_EQ(GetActorManager().GetNumActors(), 0);
// Load an Actor
- const char* actorCmd{ "ImportActor -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" };
+ const char* actorCmd{ "ImportActor -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" };
{
AZStd::string result;
EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand(actorCmd, result)) << result.c_str();
diff --git a/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp b/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp
index cccf744cfc..27692a90ff 100644
--- a/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp
+++ b/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp
@@ -297,16 +297,16 @@ namespace EMotionFX
INSTANTIATE_TEST_CASE_P(Integ_TestPoses, INTEG_PoseComparisonFixture,
::testing::Values(
PoseComparisonFixtureParams (
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording"
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording"
),
PoseComparisonFixtureParams (
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.actor",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.animgraph",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.motionset",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.emfxrecording"
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.actor",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.animgraph",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.motionset",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.emfxrecording"
)
)
);
@@ -314,10 +314,10 @@ namespace EMotionFX
INSTANTIATE_TEST_CASE_P(Integ_TestPoseComparison, INTEG_TestPoseComparisonFixture,
::testing::Values(
PoseComparisonFixtureParams (
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset",
- "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording"
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset",
+ "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording"
)
)
);
diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp
index 287c34723f..16b223914e 100644
--- a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp
+++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp
@@ -30,12 +30,12 @@ namespace EMotionFX
motionSetsWindowPlugin->SetSelectedSet(motionSet);
ExecuteCommands({
- "ImportMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion",
- "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle"
+ "ImportMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion",
+ "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle"
});
char resolvedPath[AZ::IO::MaxPathLength];
- EXPECT_TRUE(AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", resolvedPath, AZ_ARRAY_SIZE(resolvedPath)));
+ EXPECT_TRUE(AZ::IO::FileIOBase::GetInstance()->ResolvePath("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", resolvedPath, AZ_ARRAY_SIZE(resolvedPath)));
m_motionFileName = resolvedPath;
AzFramework::ApplicationRequests::Bus::Broadcast([](AzFramework::ApplicationRequests* requests, AZStd::string& path) { requests->NormalizePathKeepCase(path); }, m_motionFileName);
m_motionName = "rin_idle";
diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp
index 1f9a78a413..d53ddcc924 100644
--- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp
+++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp
@@ -44,7 +44,7 @@ namespace EMotionFX
RecordProperty("test_case_id", "C16302179");
- const AZStd::string motionAsset("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion");
+ const AZStd::string motionAsset("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion");
const AZStd::string createAnimGraphCmd("CreateAnimGraph");
const AZStd::string motionSetName("TestMotionSet");
const AZStd::string createMotionSetCmd("CreateMotionSet -motionSetID 42 -name " + motionSetName);
diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp
index 82bfeba557..bb8368b17e 100644
--- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp
+++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp
@@ -36,7 +36,7 @@ namespace EMotionFX
RecordProperty("test_case_id", "C1559124");
const QString assetName = "rin_idle"; // Asset name to appear in table
- const AZStd::string motionCmd = AZStd::string::format("ImportMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion");
+ const AZStd::string motionCmd = AZStd::string::format("ImportMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion");
auto motionWindowPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::MotionWindowPlugin::CLASS_ID));
ASSERT_TRUE(motionWindowPlugin) << "Could not find the Motion Window Plugin";
diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp
index 6804d351cf..14d27ed60f 100644
--- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp
+++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp
@@ -38,7 +38,7 @@ namespace EMotionFX
EXPECT_EQ(table->rowCount(), 1) << "Expected the table to have no rows yet";
// Create actor and actor instance.
- const char* actorFilename = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor";
+ const char* actorFilename = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor";
AZStd::unique_ptr m_actor = EMotionFX::GetImporter().LoadActor(actorFilename);
EXPECT_TRUE(m_actor.get() != nullptr) << "Actor not loaded.";
EMotionFX::ActorInstance* m_actorInstance = ActorInstance::Create(m_actor.get());
diff --git a/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp b/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp
index 4eb44a54ab..bdbc50fe9c 100644
--- a/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp
+++ b/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp
@@ -26,7 +26,7 @@ namespace EMotionFX
EMStudio::GetMainWindow()->ApplicationModeChanged("AnimGraph");
// Load Rin anim graph.
- const char* rinGraph = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph";
+ const char* rinGraph = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph";
const AZStd::string rinGraphPath = ResolvePath(rinGraph);
AZStd::string command = AZStd::string::format("LoadAnimGraph -filename \"%s\"", rinGraphPath.c_str());
AZStd::string result;
diff --git a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp
index b24971bfde..73a0f1c865 100644
--- a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp
+++ b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp
@@ -551,7 +551,7 @@ namespace EMotionFX
QString GetTestMotionFileName() const
{
- AZStd::string resolvedAssetPath = this->ResolvePath("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion");
+ AZStd::string resolvedAssetPath = this->ResolvePath("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion");
return QString::fromUtf8(resolvedAssetPath.data(), aznumeric_cast(resolvedAssetPath.size()));
}
diff --git a/Gems/EditorPythonBindings/Assets/release_notes.md b/Gems/EditorPythonBindings/Assets/release_notes.md
index 4a4b5bc71f..59192e1fdc 100644
--- a/Gems/EditorPythonBindings/Assets/release_notes.md
+++ b/Gems/EditorPythonBindings/Assets/release_notes.md
@@ -59,7 +59,7 @@ The API:
- ExecuteByString(string) – runs a string buffer in the Python VM; it returns no value
- ExecuteByFilename(string) – loads a file off of the disk to execute in the
Python VM; the call returns no value. The filename can contain an alias such as
- ‘\@devroot\@’ to execute a project relative file inside the Editor
+ ‘\@projectroot\@’ to execute a project relative file inside the Editor
#### New Console Commands
diff --git a/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp
index 4ca40a5bab..81476bdd7f 100644
--- a/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp
+++ b/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp
@@ -38,7 +38,7 @@ namespace EditorPythonBindings
static constexpr const char* s_default = "default";
static constexpr const char* s_globals = "globals";
- // a structure for pybind11 to bind to hold constants, properties, and enums from the Behavior Context
+ // a structure for pybind11 to bind to hold constants, properties, and enums from the Behavior Context
struct StaticPropertyHolder final
{
AZ_CLASS_ALLOCATOR(StaticPropertyHolder, AZ::SystemAllocator, 0);
@@ -54,7 +54,7 @@ namespace EditorPythonBindings
if (m_behaviorContext == nullptr)
{
return false;
- }
+ }
m_fullName = PyModule_GetName(scope.ptr());
@@ -199,12 +199,10 @@ namespace EditorPythonBindings
}
});
- RegisterAliasIfExists(pathsModule, "@devroot@", "devroot");
RegisterAliasIfExists(pathsModule, "@engroot@", "engroot");
- RegisterAliasIfExists(pathsModule, "@assets@", "assets");
- RegisterAliasIfExists(pathsModule, "@devassets@", "devassets");
+ RegisterAliasIfExists(pathsModule, "@products@", "products");
+ RegisterAliasIfExists(pathsModule, "@projectroot@", "projectroot");
RegisterAliasIfExists(pathsModule, "@log@", "log");
- RegisterAliasIfExists(pathsModule, "@root@", "root");
const char* executableFolder = nullptr;
AZ::ComponentApplicationBus::BroadcastResult(executableFolder, &AZ::ComponentApplicationBus::Events::GetExecutableFolder);
@@ -363,7 +361,7 @@ namespace EditorPythonBindings
m_staticPropertyHolderMap.reset();
EditorPythonBindings::EditorPythonBindingsNotificationBus::Handler::BusDisconnect();
}
-
+
void PythonReflectionComponent::OnImportModule(PyObject* module)
{
pybind11::module parentModule = pybind11::cast(module);
diff --git a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp
index cecbf15c5a..876ef19803 100644
--- a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp
+++ b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp
@@ -524,7 +524,7 @@ namespace EditorPythonBindings
{
AZ::IO::Path newSourcePath = jsonSourcePathPointer;
// Resolve any file aliases first - Do not use ResolvePath() as that assumes
- // any relative path is underneath the @assets@ alias
+ // any relative path is underneath the @products@ alias
if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr)
{
AZ::IO::FixedMaxPath replacedAliasPath;
@@ -803,7 +803,7 @@ namespace EditorPythonBindings
return Result::Error_InvalidFilename;
}
- // support the alias version of a script such as @devroot@/Editor/Scripts/select_story_anim_objects.py
+ // support the alias version of a script such as @engroot@/Editor/Scripts/select_story_anim_objects.py
AZStd::string theFilename(filename);
{
char resolvedPath[AZ_MAX_PATH_LEN] = { 0 };
diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp
index 12d7d696d3..5aa4921287 100644
--- a/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp
+++ b/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp
@@ -268,7 +268,7 @@ print ('entityId invalid is ' + str(entityId.id))
{
Skip = 0,
ImportModule,
- TestCallHit,
+ TestCallHit,
TestTypeDoCall1
};
@@ -302,7 +302,7 @@ print ('entityId invalid is ' + str(entityId.id))
pybind11::exec(R"(
import sys, os
import azlmbr.paths
- sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests'))
+ sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests'))
from test_package import import_test as itest
print('ImportModule')
itest.test_call()
@@ -401,8 +401,8 @@ print ('entityId invalid is ' + str(entityId.id))
pybind11::exec(R"(
import sys, os
import azlmbr.paths
- sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests'))
- sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests','test_package'))
+ sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests'))
+ sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests','test_package'))
from test_package import import_many
import_many.test_many_entity_id()
diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp
index f68bef1c93..96619997bc 100644
--- a/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp
+++ b/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp
@@ -161,7 +161,7 @@ namespace UnitTest
->Method("accept_vector_of_floats", &PythonReflectionContainerSimpleTypes::AcceptVectorOfFloats, nullptr, "")
->Method("return_vector_of_doubles", &PythonReflectionContainerSimpleTypes::ReturnVectorOfDoubles, nullptr, "")
->Method("accept_vector_of_doubles", &PythonReflectionContainerSimpleTypes::AcceptVectorOfDoubles, nullptr, "")
- ->Property("vector_of_s8",
+ ->Property("vector_of_s8",
[](PythonReflectionContainerSimpleTypes* self) { return self->m_s8ValueValues.ReturnValues(); },
[](PythonReflectionContainerSimpleTypes* self, const AZStd::vector& values) { return self->m_s8ValueValues.AcceptValues(values); })
->Property("vector_of_u8",
@@ -792,7 +792,7 @@ namespace UnitTest
theAsset = reflectAny.access_any_ref()
if( reflectAny.compare_asset_ids(theAsset,testObject.theAsset) ):
print ('MutateAssetId')
-
+
)");
}
catch ([[maybe_unused]] const std::exception& e)
@@ -1429,7 +1429,6 @@ namespace UnitTest
{
Skip = 0,
EngrootIs,
- DevrootIs,
pathResolvedTo,
};
@@ -1442,10 +1441,6 @@ namespace UnitTest
{
return static_cast