diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
index 2e40c0b557..8e8fccd725 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
@@ -127,7 +127,7 @@ def Collider_SameCollisionGroupSameCustomLayerCollide():
# Main Script
# 1) Load the level
helper.init_idle()
- helper.open_level("physics", "Collider_SameCollisionGroupSameCustomLayerCollide")
+ helper.open_level("Physics", "Collider_SameCollisionGroupSameCustomLayerCollide")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
index 7307f3a2fb..e5f6e236cf 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
@@ -162,7 +162,7 @@ def ForceRegion_MultipleForcesInSameComponentCombineForces():
helper.init_idle()
# 1) Load Level
- helper.open_level("physics", "ForceRegion_MultipleForcesInSameComponentCombineForces")
+ helper.open_level("Physics", "ForceRegion_MultipleForcesInSameComponentCombineForces")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
index 1f8cfae498..41ccc8f2dd 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
@@ -229,8 +229,8 @@ def Material_DefaultLibraryUpdatedAcrossLevels_after():
for test in test_list:
# 1) Open the correct level is open
helper.open_level(
- "physics",
- f"Material_DefaultLibraryUpdatedAcrossLevels\\{test.level}"
+ "Physics",
+ os.path.join("Material_DefaultLibraryUpdatedAcrossLevels", str(test.level))
)
# 2) Enter Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
index 15db5808e2..d86a016be1 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
@@ -189,7 +189,7 @@ def Material_DefaultLibraryUpdatedAcrossLevels_before():
# 1) Open the correct level is open
helper.open_level(
"Physics",
- f"Material_DefaultLibraryUpdatedAcrossLevels\\{test.level}"
+ os.path.join("Material_DefaultLibraryUpdatedAcrossLevels", str(test.level))
)
# 2) Enter Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
index 0b647361f6..6eebfe60bc 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
@@ -252,10 +252,8 @@ def Material_LibraryUpdatedAcrossLevels():
for test in test_list:
# 1) Open the correct level for the test
helper.open_level(
- "physics",
- "Material_LibraryUpdatedAcrossLevels\\Material_LibraryUpdatedAcrossLevels_{}".format(
- test.level_index
- ),
+ "Physics",
+ os.path.join("Material_LibraryUpdatedAcrossLevels", str(test.level_index))
)
# 2) Open Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
index 5862b7586b..e6e29063d6 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
@@ -106,7 +106,7 @@ def ScriptCanvas_SpawnEntityWithPhysComponents():
# Main Script
helper.init_idle()
# 1) Open Level
- helper.open_level("physics", "ScriptCanvas_SpawnEntityWithPhysComponents")
+ helper.open_level("Physics", "ScriptCanvas_SpawnEntityWithPhysComponents")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
index 9babf84ba4..18b503bab5 100644
--- a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
+++ b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:60276c07b45a734e4f71d695278167ea61e884f8b513906168c9642078ad5954
-size 6045
+oid sha256:0d004c329a7c5044a8fe05b6dbbf9b19de29c60acec75f13fdbc344a55aab8c7
+size 6404
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly
new file mode 100644
index 0000000000..b908d29eab
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e89946c224d2e765931e8ba8e33133ac24651af321a404016d9a9ea8c323db6c
+size 8563
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml
new file mode 100644
index 0000000000..bb94b733b3
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak
new file mode 100644
index 0000000000..614e41c4b2
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a46437ba86135567d87d43af0c4d499bf3cfe321721dbaf6e3cda8e49427ee1
+size 40212
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/tags.txt b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/tags.txt
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terraintexture.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/terraintexture.pak
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terraintexture.pak
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/terraintexture.pak
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly
new file mode 100644
index 0000000000..216426fc2a
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95996da3902d885060e700c573d13144bab246b930dfeedaed6066c13c879b11
+size 8737
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml
new file mode 100644
index 0000000000..5f5b4928fc
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak
new file mode 100644
index 0000000000..d920770374
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:894dfd4ab92aa4d1d6003aebf82cf7ff854a8b3684e010234e073879f88b64e5
+size 40210
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/tags.txt b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/tags.txt
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terraintexture.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/terraintexture.pak
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terraintexture.pak
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/terraintexture.pak
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly
deleted file mode 100644
index a5953fc44b..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:969b77ee335d2a04524a27c765dd2f2bdee048661f3ff7be0766ba69d18d5842
-size 10409
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml
deleted file mode 100644
index 9a78b1bfd5..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak
deleted file mode 100644
index 8e6b3b29cb..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:547d7fdfcd959569b69d78eb6f63c7c19fc90840d69ca2d46eca8a3e82b8db75
-size 39337
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml
deleted file mode 100644
index 668a4583bd..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml
deleted file mode 100644
index 456d609b8a..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield
deleted file mode 100644
index 011356e521..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19096597087688692a225c1955f73d22c46354995fca1df8dff107a90c2f17a2
-size 4202594
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly
deleted file mode 100644
index 9f48f08a1b..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:29f752c141514cb4b50aea07e6b63de5c8f43149ddac37722e9ddb8b5f4a667d
-size 9495
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml
deleted file mode 100644
index 9a78b1bfd5..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak
deleted file mode 100644
index 8e6b3b29cb..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:547d7fdfcd959569b69d78eb6f63c7c19fc90840d69ca2d46eca8a3e82b8db75
-size 39337
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml
deleted file mode 100644
index 668a4583bd..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml
deleted file mode 100644
index 456d609b8a..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield
deleted file mode 100644
index 011356e521..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19096597087688692a225c1955f73d22c46354995fca1df8dff107a90c2f17a2
-size 4202594
diff --git a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
index d6052ffa7c..a4b28a9e96 100644
--- a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
+++ b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cb97ada674d123c67d7a32eb65e81fa66472cf51f748054c4a4297649f2a0f40
-size 5568
+oid sha256:0f645243fb623258ed4b063c5a18ea414560496f97d7234782ca97884e0ed8f0
+size 5961
diff --git a/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp b/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp
index 17f9bfea54..3baf78b63d 100644
--- a/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp
+++ b/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp
@@ -361,7 +361,7 @@ namespace AZ::Dom::Json
bool RapidJsonReadHandler::String(const char* str, rapidjson::SizeType length, bool copy)
{
- const Lifetime lifetime = copy ? m_stringLifetime : Lifetime::Temporary;
+ const Lifetime lifetime = !copy ? m_stringLifetime : Lifetime::Temporary;
return CheckResult(m_visitor->String(AZStd::string_view(str, length), lifetime));
}
@@ -373,11 +373,7 @@ namespace AZ::Dom::Json
bool RapidJsonReadHandler::Key(const char* str, rapidjson::SizeType length, [[maybe_unused]] bool copy)
{
AZStd::string_view key = AZStd::string_view(str, length);
- if (!m_visitor->SupportsRawKeys())
- {
- m_visitor->Key(AZ::Name(key));
- }
- const Lifetime lifetime = copy ? m_stringLifetime : Lifetime::Temporary;
+ const Lifetime lifetime = !copy ? m_stringLifetime : Lifetime::Temporary;
return CheckResult(m_visitor->RawKey(key, lifetime));
}
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp b/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp
index 9751b9cecc..c604373296 100644
--- a/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp
+++ b/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp
@@ -21,4 +21,164 @@ namespace AZ::Dom::Utils
{
return backend.ReadFromBufferInPlace(string.data(), string.size(), visitor);
}
-}
+
+ AZ::Outcome WriteToValue(const Backend::WriteCallback& writeCallback)
+ {
+ Value value;
+ AZStd::unique_ptr writer = value.GetWriteHandler();
+ Visitor::Result result = writeCallback(*writer);
+ if (!result.IsSuccess())
+ {
+ return AZ::Failure(result.GetError().FormatVisitorErrorMessage());
+ }
+ return AZ::Success(AZStd::move(value));
+ }
+
+ bool DeepCompareIsEqual(const Value& lhs, const Value& rhs)
+ {
+ const Value::ValueType& lhsValue = lhs.GetInternalValue();
+ const Value::ValueType& rhsValue = rhs.GetInternalValue();
+
+ if (lhs.IsString() && rhs.IsString())
+ {
+ // If we both hold the same ref counted string we don't need to do a full comparison
+ if (AZStd::holds_alternative(lhsValue) && lhsValue == rhsValue)
+ {
+ return true;
+ }
+ return lhs.GetString() == rhs.GetString();
+ }
+
+ return AZStd::visit(
+ [&](auto&& ourValue) -> bool
+ {
+ using Alternative = AZStd::decay_t;
+
+ if constexpr (AZStd::is_same_v)
+ {
+ if (!rhs.IsObject())
+ {
+ return false;
+ }
+ auto&& theirValue = AZStd::get>(rhsValue);
+ if (ourValue == theirValue)
+ {
+ return true;
+ }
+
+ const Object::ContainerType& ourValues = ourValue->GetValues();
+ const Object::ContainerType& theirValues = theirValue->GetValues();
+
+ if (ourValues.size() != theirValues.size())
+ {
+ return false;
+ }
+
+ for (size_t i = 0; i < ourValues.size(); ++i)
+ {
+ const Object::EntryType& lhsChild = ourValues[i];
+ const Object::EntryType& rhsChild = theirValues[i];
+ if (lhsChild.first != rhsChild.first || !DeepCompareIsEqual(lhsChild.second, rhsChild.second))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ if (!rhs.IsArray())
+ {
+ return false;
+ }
+ auto&& theirValue = AZStd::get>(rhsValue);
+ if (ourValue == theirValue)
+ {
+ return true;
+ }
+
+ const Array::ContainerType& ourValues = ourValue->GetValues();
+ const Array::ContainerType& theirValues = theirValue->GetValues();
+
+ if (ourValues.size() != theirValues.size())
+ {
+ return false;
+ }
+
+ for (size_t i = 0; i < ourValues.size(); ++i)
+ {
+ const Value& lhsChild = ourValues[i];
+ const Value& rhsChild = theirValues[i];
+ if (!DeepCompareIsEqual(lhsChild, rhsChild))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ if (!rhs.IsNode())
+ {
+ return false;
+ }
+ auto&& theirValue = AZStd::get>(rhsValue);
+ if (ourValue == theirValue)
+ {
+ return true;
+ }
+
+ const Node& ourNode = *ourValue;
+ const Node& theirNode = *theirValue;
+
+ const Object::ContainerType& ourProperties = ourNode.GetProperties();
+ const Object::ContainerType& theirProperties = theirNode.GetProperties();
+
+ if (ourProperties.size() != theirProperties.size())
+ {
+ return false;
+ }
+
+ for (size_t i = 0; i < ourProperties.size(); ++i)
+ {
+ const Object::EntryType& lhsChild = ourProperties[i];
+ const Object::EntryType& rhsChild = theirProperties[i];
+ if (lhsChild.first != rhsChild.first || !DeepCompareIsEqual(lhsChild.second, rhsChild.second))
+ {
+ return false;
+ }
+ }
+
+ const Array::ContainerType& ourChildren = ourNode.GetChildren();
+ const Array::ContainerType& theirChildren = theirNode.GetChildren();
+
+ for (size_t i = 0; i < ourChildren.size(); ++i)
+ {
+ const Value& lhsChild = ourChildren[i];
+ const Value& rhsChild = theirChildren[i];
+ if (!DeepCompareIsEqual(lhsChild, rhsChild))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else
+ {
+ return lhs == rhs;
+ }
+ },
+ lhsValue);
+ }
+
+ Value DeepCopy(const Value& value, bool copyStrings)
+ {
+ Value copiedValue;
+ AZStd::unique_ptr writer = copiedValue.GetWriteHandler();
+ value.Accept(*writer, copyStrings);
+ return copiedValue;
+ }
+} // namespace AZ::Dom::Utils
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomUtils.h b/Code/Framework/AzCore/AzCore/DOM/DomUtils.h
index 84a6eb5687..5403b93714 100644
--- a/Code/Framework/AzCore/AzCore/DOM/DomUtils.h
+++ b/Code/Framework/AzCore/AzCore/DOM/DomUtils.h
@@ -9,9 +9,15 @@
#pragma once
#include
+#include
namespace AZ::Dom::Utils
{
Visitor::Result ReadFromString(Backend& backend, AZStd::string_view string, AZ::Dom::Lifetime lifetime, Visitor& visitor);
Visitor::Result ReadFromStringInPlace(Backend& backend, AZStd::string& string, Visitor& visitor);
+
+ AZ::Outcome WriteToValue(const Backend::WriteCallback& writeCallback);
+
+ bool DeepCompareIsEqual(const Value& lhs, const Value& rhs);
+ Value DeepCopy(const Value& value, bool copyStrings = true);
} // namespace AZ::Dom::Utils
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomValue.cpp b/Code/Framework/AzCore/AzCore/DOM/DomValue.cpp
new file mode 100644
index 0000000000..6d944c9f45
--- /dev/null
+++ b/Code/Framework/AzCore/AzCore/DOM/DomValue.cpp
@@ -0,0 +1,1207 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project.
+ * For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#include
+#include
+#include
+
+namespace AZ::Dom
+{
+ namespace Internal
+ {
+ template
+ AZStd::shared_ptr& CheckCopyOnWrite(AZStd::shared_ptr& refCountedPointer)
+ {
+ if (refCountedPointer.use_count() == 1)
+ {
+ return refCountedPointer;
+ }
+ else
+ {
+ refCountedPointer = AZStd::allocate_shared(StdValueAllocator(), *refCountedPointer);
+ return refCountedPointer;
+ }
+ }
+
+ template
+ constexpr size_t GetTypeIndexInternal(size_t index = 0);
+
+ template
+ constexpr size_t GetTypeIndexInternal(size_t index = 0)
+ {
+ if constexpr (AZStd::is_same_v)
+ {
+ return index;
+ }
+ else
+ {
+ return GetTypeIndexInternal(index + 1);
+ }
+ }
+
+ template
+ struct ExtractTypeArgs
+ {
+ };
+
+ template class TypeToExtract, typename... Args>
+ struct ExtractTypeArgs>
+ {
+ template
+ static constexpr size_t GetTypeIndex()
+ {
+ return GetTypeIndexInternal();
+ }
+ };
+ } // namespace Internal
+
+ // Helper function, looks up the index of a type within Value::m_value's storage
+ template
+ constexpr size_t GetTypeIndex()
+ {
+ return Internal::ExtractTypeArgs::GetTypeIndex();
+ }
+
+ const Array::ContainerType& Array::GetValues() const
+ {
+ return m_values;
+ }
+
+ const Object::ContainerType& Object::GetValues() const
+ {
+ return m_values;
+ }
+
+ Node::Node(AZ::Name name)
+ : m_name(AZStd::move(name))
+ {
+ }
+
+ AZ::Name Node::GetName() const
+ {
+ return m_name;
+ }
+
+ void Node::SetName(AZ::Name name)
+ {
+ m_name = AZStd::move(name);
+ }
+
+ Object::ContainerType& Node::GetProperties()
+ {
+ return m_properties;
+ }
+
+ const Object::ContainerType& Node::GetProperties() const
+ {
+ return m_properties;
+ }
+
+ Array::ContainerType& Node::GetChildren()
+ {
+ return m_children;
+ }
+
+ const Array::ContainerType& Node::GetChildren() const
+ {
+ return m_children;
+ }
+
+ Value::Value(SharedStringType sharedString)
+ : m_value(AZStd::move(sharedString))
+ {
+ }
+
+ Value::Value(const Value& value)
+ : m_value(value.m_value)
+ {
+ }
+
+ Value::Value(Value&& value) noexcept
+ {
+ memcpy(this, &value, sizeof(Value));
+ memset(&value, 0, sizeof(Value));
+ }
+
+ Value::Value(AZStd::string_view stringView, bool copy)
+ {
+ if (copy)
+ {
+ CopyFromString(stringView);
+ }
+ else
+ {
+ SetString(stringView);
+ }
+ }
+
+ Value::Value(AZStd::any opaqueValue)
+ : m_value(AZStd::allocate_shared(StdValueAllocator(), AZStd::move(opaqueValue)))
+ {
+ }
+
+ Value Value::FromOpaqueValue(const AZStd::any& value)
+ {
+ return Value(value);
+ }
+
+ Value::Value(int8_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(uint8_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(int16_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(uint16_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(int32_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(uint32_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(int64_t value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(uint64_t value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(float value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(double value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(bool value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(Type type)
+ {
+ switch (type)
+ {
+ case Type::Null:
+ // Null is the default initialized value
+ break;
+ case Type::Bool:
+ m_value = false;
+ break;
+ case Type::Object:
+ SetObject();
+ break;
+ case Type::Array:
+ SetArray();
+ break;
+ case Type::String:
+ SetString("");
+ break;
+ case Type::Int64:
+ m_value = int64_t{};
+ break;
+ case Type::Uint64:
+ m_value = uint64_t{};
+ break;
+ case Type::Double:
+ m_value = double{};
+ break;
+ case Type::Node:
+ SetNode("");
+ break;
+ case Type::Opaque:
+ AZ_Assert(false, "AZ::Dom::Value may not be constructed with an empty opaque type");
+ break;
+ }
+ }
+
+ Value& Value::operator=(const Value& other)
+ {
+ m_value = other.m_value;
+ return *this;
+ }
+
+ Value& Value::operator=(Value&& other) noexcept
+ {
+ SetNull();
+ memcpy(this, &other, sizeof(Value));
+ memset(&other, 0, sizeof(Value));
+ return *this;
+ }
+
+ bool Value::operator==(const Value& rhs) const
+ {
+ if (IsString() && rhs.IsString())
+ {
+ return GetString() == rhs.GetString();
+ }
+ else
+ {
+ return m_value == rhs.m_value;
+ }
+ }
+
+ bool Value::operator!=(const Value& rhs) const
+ {
+ return !operator==(rhs);
+ }
+
+ void Value::Swap(Value& other) noexcept
+ {
+ AZStd::aligned_storage_for_t temp;
+ memcpy(&temp, this, sizeof(Value));
+ memcpy(this, &other, sizeof(Value));
+ memcpy(&other, &temp, sizeof(Value));
+ }
+
+ Type Dom::Value::GetType() const
+ {
+ return AZStd::visit(
+ [](auto&& value) -> Type
+ {
+ using CurrentType = AZStd::decay_t;
+ if constexpr (AZStd::is_same_v)
+ {
+ return Type::Null;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Int64;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Uint64;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Double;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Bool;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::String;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::String;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::String;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Object;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Array;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Node;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return Type::Opaque;
+ }
+ else
+ {
+ AZ_Assert(false, "AZ::Dom::Value::GetType: m_value has an unexpected type");
+ }
+ },
+ m_value);
+ }
+
+ bool Value::IsNull() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsFalse() const
+ {
+ const bool* value = AZStd::get_if(&m_value);
+ return value != nullptr ? !(*value) : false;
+ }
+
+ bool Value::IsTrue() const
+ {
+ const bool* value = AZStd::get_if(&m_value);
+ return value != nullptr ? *value : false;
+ }
+
+ bool Value::IsBool() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsNode() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsObject() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsArray() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsOpaqueValue() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsNumber() const
+ {
+ return AZStd::visit(
+ [](auto&& value) -> bool
+ {
+ using CurrentType = AZStd::decay_t;
+ if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ },
+ m_value);
+ }
+
+ bool Value::IsInt() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsUint() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsDouble() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsString() const
+ {
+ return AZStd::visit(
+ [](auto&& value) -> bool
+ {
+ using CurrentType = AZStd::decay_t;
+ if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ },
+ m_value);
+ }
+
+ Value& Value::SetObject()
+ {
+ m_value = AZStd::allocate_shared