diff --git a/AutomatedTesting/Animations/Motions/Jack_Death_Fall_Back_ZUp.fbx.assetinfo b/AutomatedTesting/Animations/Motions/Jack_Death_Fall_Back_ZUp.fbx.assetinfo
deleted file mode 100644
index e7fd23585b..0000000000
--- a/AutomatedTesting/Animations/Motions/Jack_Death_Fall_Back_ZUp.fbx.assetinfo
+++ /dev/null
@@ -1,300 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Animations/Motions/Jack_Idle_Aim_ZUp.fbx.assetinfo b/AutomatedTesting/Animations/Motions/Jack_Idle_Aim_ZUp.fbx.assetinfo
deleted file mode 100644
index b7b8ef2dba..0000000000
--- a/AutomatedTesting/Animations/Motions/Jack_Idle_Aim_ZUp.fbx.assetinfo
+++ /dev/null
@@ -1,300 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Animations/Motions/rin_Idle.fbx.assetinfo b/AutomatedTesting/Animations/Motions/rin_Idle.fbx.assetinfo
deleted file mode 100644
index 8c8374e8de..0000000000
--- a/AutomatedTesting/Animations/Motions/rin_Idle.fbx.assetinfo
+++ /dev/null
@@ -1,638 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Animations/Motions/rin_Jump.fbx.assetinfo b/AutomatedTesting/Animations/Motions/rin_Jump.fbx.assetinfo
index b3d20a25f5..c190a949b1 100644
--- a/AutomatedTesting/Animations/Motions/rin_Jump.fbx.assetinfo
+++ b/AutomatedTesting/Animations/Motions/rin_Jump.fbx.assetinfo
@@ -1,652 +1,142 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+{
+ "values": [
+ {
+ "$type": "MotionGroup",
+ "name": "rin_jump",
+ "selectedRootBone": "RootNode.root",
+ "id": "{A816A306-96C4-523C-87D9-0784EE509817}",
+ "rules": {
+ "rules": [
+ {
+ "$type": "CoordinateSystemRule",
+ "targetCoordinateSystem": 1
+ },
+ {
+ "$type": "EMotionFX::Pipeline::Rule::MotionMetaDataRule",
+ "data": {
+ "motionEventTable": {
+ "tracks": [
+ {
+ "name": "Sync",
+ "deletable": false
+ },
+ {
+ "name": "sound",
+ "events": [
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Mvt_Walk"
+ }
+ ]
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Ftsp_Walk"
+ }
+ ],
+ "startTime": 0.30516499280929568,
+ "endTime": 0.30516499280929568
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Mvt_Run"
+ }
+ ],
+ "startTime": 0.3315509855747223,
+ "endTime": 0.3315509855747223
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Ftsp_Run"
+ }
+ ],
+ "startTime": 0.3579379916191101,
+ "endTime": 0.3579379916191101
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Ftsp_Walk"
+ }
+ ],
+ "startTime": 0.9625319838523865,
+ "endTime": 0.9625319838523865
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Ftsp_Run"
+ }
+ ],
+ "startTime": 1.0061269998550416,
+ "endTime": 1.0061269998550416
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "Mvt_Walk"
+ }
+ ],
+ "startTime": 1.1346169710159302,
+ "endTime": 1.1346169710159302
+ }
+ ]
+ },
+ {
+ "name": "Event Track 3",
+ "events": [
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "RightFoot"
+ }
+ ],
+ "startTime": 0.0005639999872073531,
+ "endTime": 0.0005639999872073531
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "JumpStart"
+ }
+ ],
+ "startTime": 0.36318498849868777,
+ "endTime": 0.36318498849868777
+ },
+ {
+ "eventDatas": [
+ {
+ "$type": "TwoStringEventData",
+ "subject": "DoneJump"
+ }
+ ],
+ "startTime": 1.059928059577942,
+ "endTime": 1.059928059577942
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "$type": "MotionSamplingRule"
+ }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py
index 2583109573..382a6f27f7 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py
@@ -6,13 +6,13 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import logging
import os
-import tempfile
+import psutil
import ly_test_tools.log.log_monitor
import ly_test_tools.environment.process_utils as process_utils
import ly_test_tools.environment.waiter as waiter
-from ly_remote_console.remote_console_commands import RemoteConsole as RemoteConsole
from ly_remote_console.remote_console_commands import send_command_and_expect_response as send_command_and_expect_response
+
logger = logging.getLogger(__name__)
@@ -95,7 +95,7 @@ def launch_and_validate_results_launcher(launcher, level, remote_console_instanc
return port_listening
if null_renderer:
- launcher.args.extend(["-NullRenderer"])
+ launcher.args.extend(["-rhi=Null"])
# Start the Launcher
with launcher.start():
@@ -110,8 +110,8 @@ def launch_and_validate_results_launcher(launcher, level, remote_console_instanc
# Load the specified level in the launcher
send_command_and_expect_response(remote_console_instance,
- f"map {level}",
- "LEVEL_LOAD_COMPLETE", timeout=30)
+ f"LoadLevel {level}",
+ "LEVEL_LOAD_END", timeout=30)
# Monitor the console for expected lines
for line in expected_lines:
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_FilterStageToggle.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_FilterStageToggle.py
index bbdb925585..2fac361ced 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_FilterStageToggle.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_FilterStageToggle.py
@@ -36,8 +36,8 @@ class TestAltitudeFilterFilterStageToggle(EditorTestHelper):
:return: None
"""
- PREPROCESS_INSTANCE_COUNT = 24
- POSTPROCESS_INSTANCE_COUNT = 18
+ PREPROCESS_INSTANCE_COUNT = 44
+ POSTPROCESS_INSTANCE_COUNT = 34
# Create empty level
self.test_success = self.create_level(
@@ -62,25 +62,7 @@ class TestAltitudeFilterFilterStageToggle(EditorTestHelper):
dynveg.create_surface_entity("Surface_Entity_Parent", position, 16.0, 16.0, 1.0)
# Add entity with Mesh to replicate creation of hills
- hill_entity = dynveg.create_mesh_surface_entity_with_slopes("hill", position, 40.0, 40.0, 40.0)
-
- # Disable/Re-enable Mesh component due to ATOM-14299
- general.idle_wait(1.0)
- editor.EditorComponentAPIBus(bus.Broadcast, 'DisableComponents', [hill_entity.components[0]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', hill_entity.components[0])
- if is_enabled:
- print("Mesh component is still enabled")
- else:
- print("Mesh component was disabled")
- editor.EditorComponentAPIBus(bus.Broadcast, 'EnableComponents', [hill_entity.components[0]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', hill_entity.components[0])
- if is_enabled:
- print("Mesh component is now enabled")
- else:
- print("Mesh component is still disabled")
-
- # Increase Box Shape size to encompass the hills
- vegetation.get_set_test(1, "Box Shape|Box Configuration|Dimensions", math.Vector3(100.0, 100.0, 100.0))
+ hill_entity = dynveg.create_mesh_surface_entity_with_slopes("hill", position, 10.0)
# Set a Min Altitude of 38 and Max of 40 in Vegetation Altitude Filter
vegetation.get_set_test(3, "Configuration|Altitude Min", 38.0)
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 4b0951acaf..6a99979a1f 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
@@ -9,9 +9,10 @@ import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import azlmbr.asset as asset
+import azlmbr.components as components
import azlmbr.legacy.general as general
import azlmbr.bus as bus
-import azlmbr.entity as EntityId
+import azlmbr.entity as entity
import azlmbr.editor as editor
import azlmbr.math as math
import azlmbr.paths
@@ -83,18 +84,12 @@ class TestDynamicSliceInstanceSpawnerEmbeddedEditor(EditorTestHelper):
self.log(f"Expected {num_expected_instances} instances - Found {num_found} instances")
self.test_success = self.test_success and num_found == num_expected_instances
- # 5) Create a new entity with a Camera component for testing in the launcher
+ # 5) Move the default Camera entity for testing in the launcher
cam_position = math.Vector3(512.0, 500.0, 35.0)
- camera_component = ["Camera"]
- new_entity_id2 = editor.ToolsApplicationRequestBus(
- bus.Broadcast, "CreateNewEntityAtPosition", cam_position, EntityId.EntityId()
- )
- if new_entity_id2.IsValid():
- self.log("Camera entity created")
- camera_entity = hydra.Entity("Camera Entity", new_entity_id2)
- camera_entity.components = []
- for component in camera_component:
- camera_entity.components.append(hydra.add_component(component, new_entity_id2))
+ search_filter = entity.SearchFilter()
+ search_filter.names = ["Camera"]
+ search_entity_ids = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)
+ components.TransformBus(bus.Event, "MoveEntity", search_entity_ids[0], cam_position)
# 6) Save and export to engine
general.save_level()
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 892549d414..70030ff359 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
@@ -11,7 +11,8 @@ sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import azlmbr.legacy.general as general
import azlmbr.asset as asset
import azlmbr.bus as bus
-import azlmbr.entity as EntityId
+import azlmbr.components as components
+import azlmbr.entity as entity
import azlmbr.editor as editor
import azlmbr.math as math
import azlmbr.paths
@@ -68,7 +69,7 @@ class TestDynamicSliceInstanceSpawnerExternalEditor(EditorTestHelper):
veg_area_required_components = ["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List",
"Script Canvas"]
new_entity_id = editor.ToolsApplicationRequestBus(
- bus.Broadcast, "CreateNewEntityAtPosition", entity_position, EntityId.EntityId()
+ bus.Broadcast, "CreateNewEntityAtPosition", entity_position, entity.EntityId()
)
if new_entity_id.IsValid():
self.log("Spawner entity created")
@@ -106,18 +107,12 @@ class TestDynamicSliceInstanceSpawnerExternalEditor(EditorTestHelper):
self.log(f"Expected {num_expected_instances} instances - Found {num_found} instances")
self.test_success = self.test_success and num_found == num_expected_instances
- # 5) Create a new entity with a Camera component for testing in the launcher
- entity_position = math.Vector3(512.0, 500.0, 35.0)
- camera_component = ["Camera"]
- new_entity_id2 = editor.ToolsApplicationRequestBus(
- bus.Broadcast, "CreateNewEntityAtPosition", entity_position, EntityId.EntityId()
- )
- if new_entity_id2.IsValid():
- self.log("Camera entity created")
- camera_entity = hydra.Entity("Camera Entity", new_entity_id2)
- camera_entity.components = []
- for component in camera_component:
- camera_entity.components.append(hydra.add_component(component, new_entity_id2))
+ # 5) Move the default Camera entity for testing in the launcher
+ cam_position = math.Vector3(512.0, 500.0, 35.0)
+ search_filter = entity.SearchFilter()
+ search_filter.names = ["Camera"]
+ search_entity_ids = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)
+ components.TransformBus(bus.Event, "MoveEntity", search_entity_ids[0], cam_position)
# 6) Save and export to engine
general.save_level()
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 c4dfbbf4fe..3543b4c23c 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
@@ -18,9 +18,9 @@ import azlmbr.areasystem as areasystem
import azlmbr.legacy.general as general
import azlmbr
import azlmbr.bus as bus
-import azlmbr.editor as editor
+import azlmbr.components as components
import azlmbr.math as math
-import azlmbr.entity as EntityId
+import azlmbr.entity as entity
import azlmbr.paths
sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests'))
@@ -134,20 +134,14 @@ class TestVegLayerBlenderCreated(EditorTestHelper):
purple_count += 1
self.test_success = pink_count == purple_count and (pink_count + purple_count == num_expected) and self.test_success
- # 5) Create a new entity with a Camera component for testing in the launcher
- entity_position = math.Vector3(500.0, 500.0, 47.0)
- rot_degrees_vector = math.Vector3(radians(-55.0), radians(28.5), radians(-17.0))
- camera_component = ["Camera"]
- camera_id = editor.ToolsApplicationRequestBus(
- bus.Broadcast, "CreateNewEntityAtPosition", entity_position, EntityId.EntityId()
- )
- if camera_id.IsValid():
- self.log("Camera entity created")
- camera_entity = hydra.Entity("Camera Entity", camera_id)
- camera_entity.components = []
- for component in camera_component:
- camera_entity.components.append(hydra.add_component(component, camera_id))
- azlmbr.components.TransformBus(bus.Event, "SetLocalRotation", camera_id, rot_degrees_vector)
+ # 5) Move the default Camera entity for testing in the launcher
+ cam_position = math.Vector3(500.0, 500.0, 47.0)
+ cam_rot_degrees_vector = math.Vector3(radians(-55.0), radians(28.5), radians(-17.0))
+ search_filter = entity.SearchFilter()
+ search_filter.names = ["Camera"]
+ search_entity_ids = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)
+ components.TransformBus(bus.Event, "MoveEntity", search_entity_ids[0], cam_position)
+ azlmbr.components.TransformBus(bus.Event, "SetLocalRotation", search_entity_ids[0], cam_rot_degrees_vector)
# 6) Save and export level
general.save_level()
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_FilterStageToggle.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_FilterStageToggle.py
index 0224f6bc0a..fb1ac5a5ce 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_FilterStageToggle.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_FilterStageToggle.py
@@ -34,8 +34,8 @@ class TestLayerSpawnerFilterStageToggle(EditorTestHelper):
:return: None
"""
- PREPROCESS_INSTANCE_COUNT = 425
- POSTPROCESS_INSTANCE_COUNT = 430
+ PREPROCESS_INSTANCE_COUNT = 21
+ POSTPROCESS_INSTANCE_COUNT = 19
# Create empty level
self.test_success = self.create_level(
@@ -56,7 +56,6 @@ class TestLayerSpawnerFilterStageToggle(EditorTestHelper):
vegetation_entity.add_component("Vegetation Altitude Filter")
vegetation_entity.add_component("Vegetation Position Modifier")
-
# Create a child entity under vegetation area
child_entity = hydra.Entity("child_entity")
components_to_add = ["Random Noise Gradient", "Gradient Transform Modifier", "Box Shape"]
@@ -66,29 +65,13 @@ class TestLayerSpawnerFilterStageToggle(EditorTestHelper):
vegetation_entity.get_set_test(4, "Configuration|Position X|Gradient|Gradient Entity Id", child_entity.id)
vegetation_entity.get_set_test(4, "Configuration|Position Y|Gradient|Gradient Entity Id", child_entity.id)
-
# Set the min and max values for Altitude Filter
- vegetation_entity.get_set_test(3, "Configuration|Altitude Min", 32.0)
- vegetation_entity.get_set_test(3, "Configuration|Altitude Max", 35.0)
+ vegetation_entity.get_set_test(3, "Configuration|Altitude Min", 34.0)
+ vegetation_entity.get_set_test(3, "Configuration|Altitude Max", 38.0)
# Add entity with Mesh to replicate creation of hills and a flat surface to plant on
dynveg.create_surface_entity("Flat Surface", position, 32.0, 32.0, 1.0)
- hill_entity = dynveg.create_mesh_surface_entity_with_slopes("hill", position, 4.0, 4.0, 4.0)
-
- # Disable/Re-enable Mesh component due to ATOM-14299
- general.idle_wait(1.0)
- editor.EditorComponentAPIBus(bus.Broadcast, 'DisableComponents', [hill_entity.components[0]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', hill_entity.components[0])
- if is_enabled:
- print("Mesh component is still enabled")
- else:
- print("Mesh component was disabled")
- editor.EditorComponentAPIBus(bus.Broadcast, 'EnableComponents', [hill_entity.components[0]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', hill_entity.components[0])
- if is_enabled:
- print("Mesh component is now enabled")
- else:
- print("Mesh component is still disabled")
+ hill_entity = dynveg.create_mesh_surface_entity_with_slopes("hill", position, 4.0)
# Set the filter stage to preprocess and postprocess respectively and verify instance count
vegetation_entity.get_set_test(0, "Configuration|Filter Stage", 1)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py
index c99d180253..4752aeddbc 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py
@@ -13,7 +13,7 @@ import azlmbr.legacy.general as general
import azlmbr.math as math
sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests'))
-from automatedtesting_shared.editor_test_helper import EditorTestHelper
+from editor_python_test_tools.editor_test_helper import EditorTestHelper
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMesh.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMesh.py
index d23f811f58..89367ca475 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMesh.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMesh.py
@@ -82,22 +82,7 @@ class test_MeshBlocker_InstancesBlockedByMesh(EditorTestHelper):
bus.Broadcast, "GetAssetIdByPath", os.path.join("objects", "_primitives", "_box_1x1.azmodel"), math.Uuid(),
False)
blocker_entity.get_set_test(1, "Controller|Configuration|Mesh Asset", cubeId)
- components.TransformBus(bus.Event, "SetLocalScale", blocker_entity.id, math.Vector3(2.0, 2.0, 2.0))
-
- # Disable/Re-enable Mesh component due to ATOM-14299
- general.idle_wait(1.0)
- editor.EditorComponentAPIBus(bus.Broadcast, 'DisableComponents', [blocker_entity.components[1]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', blocker_entity.components[1])
- if is_enabled:
- print("Mesh component is still enabled")
- else:
- print("Mesh component was disabled")
- editor.EditorComponentAPIBus(bus.Broadcast, 'EnableComponents', [blocker_entity.components[1]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', blocker_entity.components[1])
- if is_enabled:
- print("Mesh component is now enabled")
- else:
- print("Mesh component is still disabled")
+ components.TransformBus(bus.Event, "SetLocalUniformScale", blocker_entity.id, 2.0)
# Verify spawned instance counts are accurate after addition of Blocker Entity
num_expected = 160 # Number of "PurpleFlower"s that plant on a 10 x 10 surface minus 2m blocker cube
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMeshHeightTuning.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMeshHeightTuning.py
index ad57f80776..4a3edcd0e9 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMeshHeightTuning.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMeshHeightTuning.py
@@ -88,24 +88,9 @@ class test_MeshBlocker_InstancesBlockedByMeshHeightTuning(EditorTestHelper):
bus.Broadcast, "GetAssetIdByPath", os.path.join("objects", "_primitives", "_box_1x1.azmodel"), math.Uuid(),
False)
blocker_entity.get_set_test(1, "Controller|Configuration|Mesh Asset", sphere_id)
- components.TransformBus(bus.Event, "SetLocalScale", blocker_entity.id, math.Vector3(5.0, 5.0, 5.0))
+ components.TransformBus(bus.Event, "SetLocalUniformScale", blocker_entity.id, 5.0)
components.TransformBus(bus.Event, "SetLocalRotation", blocker_entity.id, math.Vector3(0.0, y_rotation, 0.0))
- # Disable/Re-enable Mesh component due to ATOM-14299
- general.idle_wait(1.0)
- editor.EditorComponentAPIBus(bus.Broadcast, 'DisableComponents', [blocker_entity.components[1]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', blocker_entity.components[1])
- if is_enabled:
- print("Mesh component is still enabled")
- else:
- print("Mesh component was disabled")
- editor.EditorComponentAPIBus(bus.Broadcast, 'EnableComponents', [blocker_entity.components[1]])
- is_enabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', blocker_entity.components[1])
- if is_enabled:
- print("Mesh component is now enabled")
- else:
- print("Mesh component is still disabled")
-
# 5) Adjust the height Max percentage values of blocker
blocker_entity.get_set_test(0, "Configuration|Mesh Height Percent Max", 0.8)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_DynamicSliceInstanceSpawner.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_DynamicSliceInstanceSpawner.py
index 053c4ccbfd..eb74a5a144 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_DynamicSliceInstanceSpawner.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_DynamicSliceInstanceSpawner.py
@@ -90,7 +90,6 @@ class TestDynamicSliceInstanceSpawner(object):
@pytest.mark.SUITE_periodic
@pytest.mark.dynveg_area
@pytest.mark.parametrize("launcher_platform", ['windows'])
- @pytest.mark.skip # ATOM-14703
def test_DynamicSliceInstanceSpawner_Embedded_E2E_Launcher(self, workspace, launcher, level,
remote_console_instance, project, launcher_platform):
@@ -126,7 +125,6 @@ class TestDynamicSliceInstanceSpawner(object):
@pytest.mark.SUITE_periodic
@pytest.mark.dynveg_area
@pytest.mark.parametrize("launcher_platform", ['windows'])
- @pytest.mark.skip # ATOM-14703
def test_DynamicSliceInstanceSpawner_External_E2E_Launcher(self, workspace, launcher, level,
remote_console_instance, project, launcher_platform):
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerBlender.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerBlender.py
index 3c16420a30..2620a7d50a 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerBlender.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerBlender.py
@@ -68,7 +68,6 @@ class TestLayerBlender(object):
"Entity has a Box Shape component",
"Blender Configuration|Vegetation Areas: SUCCESS",
"Blender Box Shape|Box Configuration|Dimensions: SUCCESS",
- "Camera entity created",
"LayerBlender_E2E_Editor: result=SUCCESS"
]
@@ -85,12 +84,11 @@ class TestLayerBlender(object):
@pytest.mark.BAT
@pytest.mark.SUITE_periodic
@pytest.mark.dynveg_area
- @pytest.mark.xfail
@pytest.mark.parametrize("launcher_platform", ['windows'])
def test_LayerBlender_E2E_Launcher(self, workspace, project, launcher, level, remote_console_instance,
launcher_platform):
- launcher.args.extend(["-NullRenderer"])
+ launcher.args.extend(["-rhi=Null"])
launcher.start()
assert launcher.is_alive(), "Launcher failed to start"
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerSpawner.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerSpawner.py
index 410bdbafed..2af848ffb1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerSpawner.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/test_LayerSpawner.py
@@ -121,7 +121,7 @@ class TestLayerSpawner(object):
@pytest.mark.test_case_id("C30000751")
@pytest.mark.SUITE_sandbox
@pytest.mark.dynveg_misc
- @pytest.mark.skip # ATOM-14828
+ @pytest.mark.skip # https://github.com/o3de/o3de/issues/2038
def test_LayerSpawner_InstancesRefreshUsingCorrectViewportCamera(self, request, editor, level, launcher_platform):
expected_lines = [
@@ -136,5 +136,6 @@ class TestLayerSpawner(object):
editor,
"LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py",
expected_lines,
- cfg_args=[level]
+ cfg_args=[level],
+ null_renderer=False
)
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 515009cb3a..09d4746fa6 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
@@ -34,7 +34,7 @@ def create_surface_entity(name, center_point, box_size_x, box_size_y, box_size_z
return surface_entity
-def create_mesh_surface_entity_with_slopes(name, center_point, scale_x, scale_y, scale_z):
+def create_mesh_surface_entity_with_slopes(name, center_point, uniform_scale):
# Creates an entity with the assigned mesh_asset as the specified scale and sets up as a planting surface
mesh_asset_path = os.path.join("models", "sphere.azmodel")
mesh_asset = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", mesh_asset_path, math.Uuid(),
@@ -47,7 +47,7 @@ def create_mesh_surface_entity_with_slopes(name, center_point, scale_x, scale_y,
if surface_entity.id.IsValid():
print(f"'{surface_entity.name}' created")
hydra.get_set_test(surface_entity, 0, "Controller|Configuration|Mesh Asset", mesh_asset)
- components.TransformBus(bus.Event, "SetLocalScale", surface_entity.id, math.Vector3(scale_x, scale_y, scale_z))
+ components.TransformBus(bus.Event, "SetLocalUniformScale", surface_entity.id, uniform_scale)
return surface_entity
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
index 73af69b93a..17202acc29 100644
--- a/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
@@ -5,6 +5,13 @@
#
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
+
+ include(${LY_ROOT_FOLDER}/Code/Tools/SerializeContextTools/Platform/${PAL_PLATFORM_NAME}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
+ if (PAL_TRAIT_BUILD_SERIALIZECONTEXTTOOLS)
+ list(APPEND additional_dependencies AZ::SerializeContextTools) # test_CLITool_SerializeContextTools depends on it
+ endif()
+ list(APPEND additional_dependencies AZ::AssetBundlerBatch) # test_CLITool_AssetBundlerBatch_Works depends on it
+
ly_add_pytest(
NAME AutomatedTesting::SmokeTest
TEST_SUITE smoke
@@ -18,6 +25,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
Legacy::Editor
AutomatedTesting.GameLauncher
AutomatedTesting.Assets
+ ${aditional_dependencies}
COMPONENT
Smoke
)
diff --git a/AutomatedTesting/Levels/Physics/C14902098_ScriptCanvas_PostPhysicsUpdate/onpostphysicsupdate.scriptcanvas b/AutomatedTesting/Levels/Physics/C14902098_ScriptCanvas_PostPhysicsUpdate/onpostphysicsupdate.scriptcanvas
index f4ca23b882..10c40fbb9f 100644
--- a/AutomatedTesting/Levels/Physics/C14902098_ScriptCanvas_PostPhysicsUpdate/onpostphysicsupdate.scriptcanvas
+++ b/AutomatedTesting/Levels/Physics/C14902098_ScriptCanvas_PostPhysicsUpdate/onpostphysicsupdate.scriptcanvas
@@ -742,14 +742,14 @@
-
+
-
+
diff --git a/AutomatedTesting/Objects/Characters/Jack/Jack.fbx.assetinfo b/AutomatedTesting/Objects/Characters/Jack/Jack.fbx.assetinfo
deleted file mode 100644
index 14b860fcd4..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/Jack.fbx.assetinfo
+++ /dev/null
@@ -1,691 +0,0 @@
-{
- "values": [
- {
- "$type": "ActorGroup",
- "name": "jack",
- "selectedRootBone": "RootNode.LOD_Group_1.LOD_0",
- "id": "{B7194F91-D8A1-5D5D-AC6D-DDEBC087D80D}",
- "rules": {
- "rules": [
- {
- "$type": "{3CB103B3-CEAF-49D7-A9DC-5A31E2DF15E4} LodRule",
- "nodeSelectionList": [
- {
- "selectedNodes": [
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3.transform",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh"
- ],
- "unselectedNodes": [
- "RootNode",
- "RootNode.LOD_Group_1",
- "RootNode.LOD_Group_1.LOD_0",
- "RootNode.LOD_Group_1.LOD_1",
- "RootNode.LOD_Group_1.LOD_2",
- "RootNode.LOD_Group_1.LOD_3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.Jack:jack"
- ],
- "lodLevel": 1
- },
- {
- "selectedNodes": [
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3.transform",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh"
- ],
- "unselectedNodes": [
- "RootNode",
- "RootNode.LOD_Group_1",
- "RootNode.LOD_Group_1.LOD_0",
- "RootNode.LOD_Group_1.LOD_1",
- "RootNode.LOD_Group_1.LOD_2",
- "RootNode.LOD_Group_1.LOD_3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.Jack:jack"
- ],
- "lodLevel": 2
- },
- {
- "selectedNodes": [
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3.transform",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3.transform",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh"
- ],
- "unselectedNodes": [
- "RootNode",
- "RootNode.LOD_Group_1",
- "RootNode.LOD_Group_1.LOD_0",
- "RootNode.LOD_Group_1.LOD_1",
- "RootNode.LOD_Group_1.LOD_2",
- "RootNode.LOD_Group_1.LOD_3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh.Jack:jack",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.SkinWeight_0",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.map1",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh.Jack:jack"
- ],
- "lodLevel": 3
- }
- ]
- },
- {
- "$type": "TangentsRule"
- },
- {
- "$type": "SkinRule"
- },
- {
- "$type": "MaterialRule"
- },
- {
- "$type": "MetaDataRule",
- "metaData": "AdjustActor -actorID $(ACTORID) -name \"Jack\"\r\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\r\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\r\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\r\nAdjustActor -actorID $(ACTORID) -motionExtractionNodeName \"Jack:jack_root\"\r\n"
- },
- {
- "$type": "CoordinateSystemRule"
- }
- ]
- }
- },
- {
- "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
- "name": "Jack",
- "nodeSelectionList": {
- "selectedNodes": [
- {},
- "RootNode",
- "RootNode.LOD_Group_1",
- "RootNode.LOD_Group_1.LOD_0",
- "RootNode.LOD_Group_1.LOD_1",
- "RootNode.LOD_Group_1.LOD_2",
- "RootNode.LOD_Group_1.LOD_3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root",
- "RootNode.LOD_Group_1.LOD_1.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_2.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_3.Jack:jack_mesh",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_upLegRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__RHand2Aim_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:l_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__L_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeTargetLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:l_upLeg.Jack:l_loLeg.Jack:l_ankle.Jack:Bip01__planeWeightLeft",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:r_ball",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__R_Heel",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeTargetRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:r_upLeg.Jack:r_loLeg.Jack:r_ankle.Jack:Bip01__planeWeightRight",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:Bip01__CustomStart",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:Bip01__CustomAim.Jack:Bip01__RHand2Aim_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:neck.Jack:head",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_upArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_loArmRoll",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_handProp.Jack:Bip01__RHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKBlend",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_handProp.Jack:Bip01__LHand2Weapon_IKTarget",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_thumb1.Jack:l_thumb2.Jack:l_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_index1.Jack:l_index2.Jack:l_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_mid1.Jack:l_mid2.Jack:l_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_thumb1.Jack:r_thumb2.Jack:r_thumb3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_index1.Jack:r_index2.Jack:r_index3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_mid1.Jack:r_mid2.Jack:r_mid3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_ring1.Jack:l_ring2.Jack:l_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:l_shldr.Jack:l_upArm.Jack:l_loArm.Jack:l_hand.Jack:l_metacarpal.Jack:l_pinky1.Jack:l_pinky2.Jack:l_pinky3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_ring1.Jack:r_ring2.Jack:r_ring3",
- "RootNode.LOD_Group_1.LOD_0.Jack:jack_root.Jack:Bip01__pelvis.Jack:spine1.Jack:spine2.Jack:spine3.Jack:r_shldr.Jack:r_upArm.Jack:r_loArm.Jack:r_hand.Jack:r_metacarpal.Jack:r_pinky1.Jack:r_pinky2.Jack:r_pinky3"
- ]
- },
- "rules": {
- "rules": [
- {
- "$type": "SkinRule"
- },
- {
- "$type": "MaterialRule"
- }
- ]
- },
- "id": "{8D605093-F5E6-476C-ABD6-42304F53F1F0}"
- }
- ]
-}
\ No newline at end of file
diff --git a/AutomatedTesting/Objects/Characters/Jack/enemy.cdf b/AutomatedTesting/Objects/Characters/Jack/enemy.cdf
deleted file mode 100644
index c3225e07b3..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/enemy.cdf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:da2f0e0a3100ff1b46534d4ca314e4ceabc14a8cc894070dd18a51feb7eba390
-size 290
diff --git a/AutomatedTesting/Objects/Characters/Jack/enemy_runner.cdf b/AutomatedTesting/Objects/Characters/Jack/enemy_runner.cdf
deleted file mode 100644
index 00c03ea1b8..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/enemy_runner.cdf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a3eac079f5ee483917a2cab9f8726a0e66ee6ed8cb9f966d872fe3dc0bf287c6
-size 304
diff --git a/AutomatedTesting/Objects/Characters/Jack/enemy_tank.cdf b/AutomatedTesting/Objects/Characters/Jack/enemy_tank.cdf
deleted file mode 100644
index 1055e64b28..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/enemy_tank.cdf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1b610ceb7b8b42d4890d2f9ca6e0dec79d8361bfa8e1d02517ac3c336259e065
-size 300
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack.cdf b/AutomatedTesting/Objects/Characters/Jack/jack.cdf
deleted file mode 100644
index ba2d13ef84..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack.cdf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:58b71612088d2eca7465680c8914d9e42ecf343fc37c835ebc61cd9a23de7b4e
-size 288
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack.skin b/AutomatedTesting/Objects/Characters/Jack/jack.skin
deleted file mode 100644
index 68d1d95361..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack.skin
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5d144788bbd3229481b4e874a88de31030377ac8396bb2c00bd05180083498bd
-size 3558736
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack_LOD1.skin b/AutomatedTesting/Objects/Characters/Jack/jack_LOD1.skin
deleted file mode 100644
index 79650c60dc..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack_LOD1.skin
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6a198f9b888af5e4cc240319bfe5ee99b35919081e6ef37e14fc43dcad74c9d5
-size 2416608
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack_LOD2.skin b/AutomatedTesting/Objects/Characters/Jack/jack_LOD2.skin
deleted file mode 100644
index da1f74af86..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack_LOD2.skin
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:870b14ba99d6006d936cc84503549450709db541f2a365aa55e3e05709d0822a
-size 1355768
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack_LOD3.skin b/AutomatedTesting/Objects/Characters/Jack/jack_LOD3.skin
deleted file mode 100644
index a82716f115..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack_LOD3.skin
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4aa1cf59f3b59afa75caa487630ef9769c5f3bd8ec466b031fa0ce3d7fbc0d31
-size 856508
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack_root.chr b/AutomatedTesting/Objects/Characters/Jack/jack_root.chr
deleted file mode 100644
index f2e346a11a..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack_root.chr
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:43a74e2e7c0d90593f0c3e568b1a9fbfb781fb283c0619921ca1ad67cc2cde2a
-size 59540
diff --git a/AutomatedTesting/Objects/Characters/Jack/jack_root.chrparams b/AutomatedTesting/Objects/Characters/Jack/jack_root.chrparams
deleted file mode 100644
index 30c8c5f179..0000000000
--- a/AutomatedTesting/Objects/Characters/Jack/jack_root.chrparams
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ca664e801edb91b7fe60b0c93a41f4553e5a85cab2729b00cdbf3adeade71a5
-size 5831
diff --git a/AutomatedTesting/ScriptCanvas/C14195074_ScriptCanvas_PostUpdateEvent.scriptcanvas b/AutomatedTesting/ScriptCanvas/C14195074_ScriptCanvas_PostUpdateEvent.scriptcanvas
index b9f438a4f3..ffdac5dd8c 100644
--- a/AutomatedTesting/ScriptCanvas/C14195074_ScriptCanvas_PostUpdateEvent.scriptcanvas
+++ b/AutomatedTesting/ScriptCanvas/C14195074_ScriptCanvas_PostUpdateEvent.scriptcanvas
@@ -1045,14 +1045,14 @@
-
+
-
+
diff --git a/AutomatedTesting/ScriptCanvas/C14902097_ScriptCanvas_PreUpdateEvent.scriptcanvas b/AutomatedTesting/ScriptCanvas/C14902097_ScriptCanvas_PreUpdateEvent.scriptcanvas
index 7db4f3a35c..4954eb4684 100644
--- a/AutomatedTesting/ScriptCanvas/C14902097_ScriptCanvas_PreUpdateEvent.scriptcanvas
+++ b/AutomatedTesting/ScriptCanvas/C14902097_ScriptCanvas_PreUpdateEvent.scriptcanvas
@@ -1085,14 +1085,14 @@
-
+
-
+
diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp
index 3f86260f8d..c2f16a84b1 100644
--- a/Code/Editor/EditorViewportWidget.cpp
+++ b/Code/Editor/EditorViewportWidget.cpp
@@ -1896,7 +1896,7 @@ void EditorViewportWidget::SetViewTM(const Matrix34& viewTM, bool bMoveOnly)
if (m_pressedKeyState != KeyPressedState::PressedInPreviousFrame)
{
- CUndo undo("Move Camera");
+ AzToolsFramework::ScopedUndoBatch undo("Move Camera");
if (bMoveOnly)
{
// specify eObjectUpdateFlags_UserInput so that an undo command gets logged
@@ -1932,7 +1932,7 @@ void EditorViewportWidget::SetViewTM(const Matrix34& viewTM, bool bMoveOnly)
if (m_pressedKeyState != KeyPressedState::PressedInPreviousFrame)
{
- CUndo undo("Move Camera");
+ AzToolsFramework::ScopedUndoBatch undo("Move Camera");
if (bMoveOnly)
{
AZ::TransformBus::Event(
@@ -1945,6 +1945,8 @@ void EditorViewportWidget::SetViewTM(const Matrix34& viewTM, bool bMoveOnly)
m_viewEntityId, &AZ::TransformInterface::SetWorldTM,
LYTransformToAZTransform(camMatrix));
}
+
+ AzToolsFramework::ToolsApplicationRequestBus::Broadcast(&AzToolsFramework::ToolsApplicationRequests::AddDirtyEntity, m_viewEntityId);
}
else
{
diff --git a/Code/Editor/Platform/Mac/gui_info.plist b/Code/Editor/Platform/Mac/gui_info.plist
index 0ec7b59e98..5b5f94e977 100644
--- a/Code/Editor/Platform/Mac/gui_info.plist
+++ b/Code/Editor/Platform/Mac/gui_info.plist
@@ -5,7 +5,7 @@
CFBundleExecutable
Editor
CFBundleIdentifier
- com.Amazon.Lumberyard.Editor
+ org.O3DE.Editor
CFBundlePackageType
APPL
CFBundleSignature
diff --git a/Code/Editor/Plugins/EditorCommon/CMakeLists.txt b/Code/Editor/Plugins/EditorCommon/CMakeLists.txt
index 96d9cce5b7..048f77cd0c 100644
--- a/Code/Editor/Plugins/EditorCommon/CMakeLists.txt
+++ b/Code/Editor/Plugins/EditorCommon/CMakeLists.txt
@@ -46,4 +46,8 @@ ly_add_target(
AZ::AzCore
AZ::AzToolsFramework
AZ::AzQtComponents
+ RUNTIME_DEPENDENCIES
+ AZ::AzCore
+ AZ::AzToolsFramework
+ AZ::AzQtComponents
)
diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp
index f4e4fed973..63ce446e97 100644
--- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp
+++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp
@@ -20,12 +20,12 @@
#include "ValidationHandler.h"
#include
+#include
-#include "AzToolsFramework/UI/PropertyEditor/InstanceDataHierarchy.h"
+#include
#include
#include
#include
-#include
#include
#include
@@ -52,7 +52,7 @@ namespace ProjectSettingsTool
PlatformEnabled(PlatformId::Ios) ?
ProjectSettingsContainer::PlistInitVector({
ProjectSettingsContainer::PlatformAndPath
- { PlatformId::Ios, m_projectRoot + PlatformResourcesFolder(PlatformId::Ios) }
+ { PlatformId::Ios, GetPlatformResource(PlatformId::Ios) }
})
:
ProjectSettingsContainer::PlistInitVector())
@@ -647,33 +647,38 @@ namespace ProjectSettingsTool
// iOS can be disabled if the plist file is missing
if (platformId == PlatformId::Ios)
{
- const AZStd::string filename = m_projectRoot + PlatformResourcesFolder(platformId);
- return CFileUtil::FileExists(filename.c_str());
+ AZStd::string plistPath = GetPlatformResource(platformId);
+ return !plistPath.empty();
}
return true;
}
- const char* ProjectSettingsToolWindow::PlatformResourcesFolder(PlatformId platformId)
+ AZStd::string ProjectSettingsToolWindow::GetPlatformResource(PlatformId platformId)
{
if (platformId == PlatformId::Ios)
{
- const AZStd::string firstfilename = m_projectRoot + "/Gem/Resources/Platform/iOS/Info.plist";
- if (CFileUtil::FileExists(firstfilename.c_str()))
- {
- return "/Gem/Resources/Platform/iOS/Info.plist";
- }
- else
+ const char* searchPaths[] = {
+ "Resources/Platform/iOS/Info.plist",
+
+ // legacy paths
+ "Gem/Resources/Platform/iOS/Info.plist",
+ "Gem/Resources/IOSLauncher/Info.plist",
+ };
+
+ for (auto relPath : searchPaths)
{
- const AZStd::string filename = m_projectRoot + "/Gem/Resources/IOSLauncher/Info.plist";
- if (CFileUtil::FileExists(filename.c_str()))
+ AZ::IO::FixedMaxPath projectPlist{ m_projectRoot };
+ projectPlist /= relPath;
+
+ if (AZ::IO::SystemFile::Exists(projectPlist.c_str()))
{
- return "/Gem/Resources/IOSLauncher/Info.plist";
+ return projectPlist.LexicallyNormal().String();
}
}
}
- return nullptr;
+ return AZStd::string();
}
#include
diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h
index 8979672f99..64a6646e7f 100644
--- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h
+++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h
@@ -137,8 +137,8 @@ namespace ProjectSettingsTool
// returns true if the platform is enabled
bool PlatformEnabled(PlatformId platformId);
- // returns the resource folder
- const char* PlatformResourcesFolder(PlatformId platformId);
+ // returns the main platform specific resource file e.g. for iOS it would be the Info.plist
+ AZStd::string GetPlatformResource(PlatformId platformId);
// The ui for the window
QScopedPointer m_ui;
diff --git a/Code/Editor/ViewportTitleDlg.cpp b/Code/Editor/ViewportTitleDlg.cpp
index 3090cf8e63..cb544ce5c0 100644
--- a/Code/Editor/ViewportTitleDlg.cpp
+++ b/Code/Editor/ViewportTitleDlg.cpp
@@ -868,7 +868,16 @@ void CViewportTitleDlg::OnBnClickedMuteAudio()
void CViewportTitleDlg::UpdateMuteActionText()
{
- m_audioMuteAction->setText(gSettings.bMuteAudio ? tr("Un-mute Audio") : tr("Mute Audio"));
+ if (!Audio::AudioSystemRequestBus::HasHandlers())
+ {
+ m_audioMuteAction->setEnabled(false);
+ m_audioMuteAction->setText(tr("Mute Audio: Enable Audio Gem"));
+ }
+ else
+ {
+ m_audioMuteAction->setEnabled(true);
+ m_audioMuteAction->setText(gSettings.bMuteAudio ? tr("Un-mute Audio") : tr("Mute Audio"));
+ }
}
void CViewportTitleDlg::OnHMDInitialized()
diff --git a/Code/Framework/AzCore/AzCore/Debug/Trace.h b/Code/Framework/AzCore/AzCore/Debug/Trace.h
index 594322f1f3..ecf951ae6c 100644
--- a/Code/Framework/AzCore/AzCore/Debug/Trace.h
+++ b/Code/Framework/AzCore/AzCore/Debug/Trace.h
@@ -127,7 +127,7 @@ namespace AZ
#define AZ_TraceFmtCompileTimeCheck(expression, isVaArgs, baseMsg, msg, msgVargs) \
{ \
using namespace AZ::TraceInternal; \
- const auto& rTraceFmtCompileTimeCheckExpressionHelper = (expression); /* This is needed for edge cases for expressions containing lambdas, that were unsupported before C++20 */ \
+ [[maybe_unused]] const auto& rTraceFmtCompileTimeCheckExpressionHelper = (expression); /* This is needed for edge cases for expressions containing lambdas, that were unsupported before C++20 */ \
constexpr ExpressionValidResult isValidTraceFmtResult = ExpressionIsValid::value; \
/* Assert different message depending whether it's const char array or if we have extra arguments */ \
static_assert(!(isVaArgs) ? isValidTraceFmtResult != ExpressionValidResult::Invalid_ConstCharArray : true, baseMsg " " msg); \
diff --git a/Code/Framework/AzCore/AzCore/Math/MathReflection.cpp b/Code/Framework/AzCore/AzCore/Math/MathReflection.cpp
index 46717440d5..82e230d54a 100644
--- a/Code/Framework/AzCore/AzCore/Math/MathReflection.cpp
+++ b/Code/Framework/AzCore/AzCore/Math/MathReflection.cpp
@@ -116,7 +116,7 @@ namespace AZ
{
const char* uuidString = nullptr;
unsigned int uuidStringLength = 0;
- if (dc.ReadArg(0, uuidString) && dc.ReadValue(1, uuidStringLength))
+ if (dc.ReadArg(0, uuidString) && dc.ReadArg(1, uuidStringLength))
{
dc.PushResult(Uuid(uuidString, uuidStringLength));
}
diff --git a/Code/Framework/AzCore/AzCore/Script/ScriptContextDebug.cpp b/Code/Framework/AzCore/AzCore/Script/ScriptContextDebug.cpp
index b68b19ddda..0444c4ce2a 100644
--- a/Code/Framework/AzCore/AzCore/Script/ScriptContextDebug.cpp
+++ b/Code/Framework/AzCore/AzCore/Script/ScriptContextDebug.cpp
@@ -157,8 +157,11 @@ ScriptContextDebug::EnumRegisteredClasses(EnumClass enumClass, EnumMethod enumMe
lua_pop(l, 2); // pop the Class name and behaviorClass
lua_pushnil(l);
+
+ // iterate over the key/value pairs
while (lua_next(l, -2) != 0)
{
+ // if key: string value: function
if (lua_isstring(l, -2) && lua_isfunction(l, -1))
{
const char* name = lua_tostring(l, -2);
@@ -167,6 +170,7 @@ ScriptContextDebug::EnumRegisteredClasses(EnumClass enumClass, EnumMethod enumMe
bool isRead = true;
bool isWrite = true;
+ // check if there is a getter provided
lua_getupvalue(l, -1, 1);
if (lua_isnil(l, -1))
{
@@ -174,6 +178,7 @@ ScriptContextDebug::EnumRegisteredClasses(EnumClass enumClass, EnumMethod enumMe
}
lua_pop(l, 1);
+ // check if there is a setter provided
lua_getupvalue(l, -1, 2);
if (lua_isnil(l, -1))
{
@@ -181,6 +186,7 @@ ScriptContextDebug::EnumRegisteredClasses(EnumClass enumClass, EnumMethod enumMe
}
lua_pop(l, 1);
+ // enumerate the remaining property
if (!enumProperty(&behaviorClass->m_typeId, name, isRead, isWrite, userData))
{
lua_pop(l, 5);
@@ -189,21 +195,30 @@ ScriptContextDebug::EnumRegisteredClasses(EnumClass enumClass, EnumMethod enumMe
}
else
{
+ // for any non-built in methods
if (strncmp(name, "__", 2) != 0)
{
const char* dbgParamInfo = NULL;
- lua_getupvalue(l, -1, 2);
+
+ // attempt to get the name
+ bool popDebugName = lua_getupvalue(l, -1, 2) != nullptr;
if (lua_isstring(l, -1))
{
dbgParamInfo = lua_tostring(l, -1);
}
+ // enumerate the method's parameters
if (!enumMethod(&behaviorClass->m_typeId, name, dbgParamInfo, userData))
{
lua_pop(l, 6);
return;
}
- lua_pop(l, 1); // pop the DBG name
+
+ // if we were able to get the name, pop it from the stack
+ if (popDebugName)
+ {
+ lua_pop(l, 1);
+ }
}
}
}
diff --git a/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp b/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp
index a654302da6..d61323f33e 100644
--- a/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp
+++ b/Code/Framework/AzCore/Tests/AZTestShared/Utils/Utils.cpp
@@ -7,9 +7,9 @@
*/
#include
-#include "AzCore/Component/Entity.h"
-#include "AzCore/Asset/AssetManager.h"
-#include "AzCore/Slice/SliceComponent.h"
+#include
+#include
+#include
namespace UnitTest
{
diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp
index 69bf6bb394..96810c20ec 100644
--- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp
+++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp
@@ -279,14 +279,11 @@ namespace AZ
return SystemFile::Exists(resolvedPath);
}
- void LocalFileIO::CheckInvalidWrite(const char* path)
+ void LocalFileIO::CheckInvalidWrite([[maybe_unused]] const char* path)
{
- (void)path;
-
#if defined(AZ_ENABLE_TRACING)
const char* assetsAlias = GetAlias("@assets@");
-
- if (((path) && (assetsAlias) && (azstrnicmp(path, assetsAlias, strlen(assetsAlias)) == 0)))
+ if (path && assetsAlias && AZ::IO::PathView(path).IsRelativeTo(assetsAlias))
{
AZ_Error("FileIO", false, "You may not alter data inside the asset cache. Please check the call stack and consider writing into the source asset folder instead.\n"
"Attempted write location: %s", path);
diff --git a/Code/Framework/AzFramework/AzFramework/Input/Buses/Requests/InputDeviceRequestBus.h b/Code/Framework/AzFramework/AzFramework/Input/Buses/Requests/InputDeviceRequestBus.h
index a1ec4a05f0..a122fe3133 100644
--- a/Code/Framework/AzFramework/AzFramework/Input/Buses/Requests/InputDeviceRequestBus.h
+++ b/Code/Framework/AzFramework/AzFramework/Input/Buses/Requests/InputDeviceRequestBus.h
@@ -205,6 +205,25 @@ namespace AzFramework
class InputDeviceImplementationRequest : public AZ::EBusTraits
{
public:
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ //! EBus Trait: requests can be addressed to a specific InputDeviceId so that they are only
+ //! handled by one input device that has connected to the bus using that unique id, or they
+ //! can be broadcast to all input devices that have connected to the bus, regardless of id.
+ //! Connected input devices are ordered by their local player index from lowest to highest.
+ static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ByIdAndOrdered;
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ //! EBus Trait: requests should be handled by only one input device connected to each id
+ static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ //! EBus Trait: requests can be addressed to a specific InputDeviceId
+ using BusIdType = InputDeviceId;
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ //! EBus Trait: requests are handled by connected devices in the order of local player index
+ using BusIdOrderCompare = AZStd::less;
+
////////////////////////////////////////////////////////////////////////////////////////////
//! Alias for the EBus implementation of this interface
using Bus = AZ::EBus>;
@@ -214,11 +233,12 @@ namespace AzFramework
using CreateFunctionType = typename InputDeviceType::Implementation*(*)(InputDeviceType&);
////////////////////////////////////////////////////////////////////////////////////////////
- //! Create a custom implementation for all the existing instances of this input device type.
+ //! Set a custom implementation for this input device type, either for a specific instance
+ //! by addressing the call to an InputDeviceId, or for all existing instances by broadcast.
//! Passing InputDeviceType::Implementation::Create as the argument will create the default
//! device implementation, while passing nullptr will delete any existing implementation.
//! \param[in] createFunction Pointer to the function that will create the implementation.
- virtual void CreateCustomImplementation(CreateFunctionType createFunction) = 0;
+ virtual void SetCustomImplementation(CreateFunctionType createFunction) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -238,7 +258,7 @@ namespace AzFramework
AZ_INLINE InputDeviceImplementationRequestHandler(InputDeviceType& inputDevice)
: m_inputDevice(inputDevice)
{
- InputDeviceImplementationRequest::Bus::Handler::BusConnect();
+ InputDeviceImplementationRequest::Bus::Handler::BusConnect(m_inputDevice.GetInputDeviceId());
}
////////////////////////////////////////////////////////////////////////////////////////////
@@ -251,8 +271,8 @@ namespace AzFramework
using CreateFunctionType = typename InputDeviceType::Implementation*(*)(InputDeviceType&);
////////////////////////////////////////////////////////////////////////////////////////////
- //! \ref InputDeviceImplementationRequest::CreateCustomImplementation
- AZ_INLINE void CreateCustomImplementation(CreateFunctionType createFunction) override
+ //! \ref InputDeviceImplementationRequest::SetCustomImplementation
+ AZ_INLINE void SetCustomImplementation(CreateFunctionType createFunction) override
{
AZStd::unique_ptr newImplementation;
if (createFunction)
diff --git a/Code/Framework/AzFramework/CMakeLists.txt b/Code/Framework/AzFramework/CMakeLists.txt
index 1f53472ff8..2cfc5e4b89 100644
--- a/Code/Framework/AzFramework/CMakeLists.txt
+++ b/Code/Framework/AzFramework/CMakeLists.txt
@@ -52,3 +52,63 @@ ly_add_source_properties(
PROPERTY COMPILE_DEFINITIONS
VALUES TOUCHBENDING_LAYER_BIT=${LY_TOUCHBENDING_LAYER_BIT}
)
+
+if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
+
+ ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Tests/Platform/${PAL_PLATFORM_NAME})
+
+ ly_add_target(
+ NAME AzFrameworkTestShared STATIC
+ NAMESPACE AZ
+ FILES_CMAKE
+ Tests/framework_shared_tests_files.cmake
+ INCLUDE_DIRECTORIES
+ PUBLIC
+ Tests
+ BUILD_DEPENDENCIES
+ PRIVATE
+ AZ::AzCore
+ AZ::AzFramework
+ )
+
+ if(PAL_TRAIT_BUILD_HOST_TOOLS)
+
+ ly_add_target(
+ NAME ProcessLaunchTest EXECUTABLE
+ NAMESPACE AZ
+ FILES_CMAKE
+ Tests/process_launch_test_files.cmake
+ INCLUDE_DIRECTORIES
+ PRIVATE
+ Tests
+ BUILD_DEPENDENCIES
+ PRIVATE
+ AZ::AzCore
+ AZ::AzFramework
+ )
+
+ ly_add_target(
+ NAME AzFramework.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+ NAMESPACE AZ
+ FILES_CMAKE
+ Tests/frameworktests_files.cmake
+ INCLUDE_DIRECTORIES
+ PRIVATE
+ Tests
+ ${pal_dir}
+ BUILD_DEPENDENCIES
+ PRIVATE
+ AZ::AzFramework
+ AZ::AzTest
+ AZ::AzTestShared
+ AZ::AzFrameworkTestShared
+ RUNTIME_DEPENDENCIES
+ AZ::ProcessLaunchTest
+ )
+ ly_add_googletest(
+ NAME AZ::AzFramework.Tests
+ )
+
+ endif()
+
+endif()
\ No newline at end of file
diff --git a/Code/Framework/Tests/Application.cpp b/Code/Framework/AzFramework/Tests/Application.cpp
similarity index 100%
rename from Code/Framework/Tests/Application.cpp
rename to Code/Framework/AzFramework/Tests/Application.cpp
diff --git a/Code/Framework/Tests/ArchiveCompressionTests.cpp b/Code/Framework/AzFramework/Tests/ArchiveCompressionTests.cpp
similarity index 100%
rename from Code/Framework/Tests/ArchiveCompressionTests.cpp
rename to Code/Framework/AzFramework/Tests/ArchiveCompressionTests.cpp
diff --git a/Code/Framework/Tests/ArchiveTests.cpp b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp
similarity index 100%
rename from Code/Framework/Tests/ArchiveTests.cpp
rename to Code/Framework/AzFramework/Tests/ArchiveTests.cpp
diff --git a/Code/Framework/Tests/AssetCatalog.cpp b/Code/Framework/AzFramework/Tests/AssetCatalog.cpp
similarity index 100%
rename from Code/Framework/Tests/AssetCatalog.cpp
rename to Code/Framework/AzFramework/Tests/AssetCatalog.cpp
diff --git a/Code/Framework/Tests/AssetProcessorConnection.cpp b/Code/Framework/AzFramework/Tests/AssetProcessorConnection.cpp
similarity index 100%
rename from Code/Framework/Tests/AssetProcessorConnection.cpp
rename to Code/Framework/AzFramework/Tests/AssetProcessorConnection.cpp
diff --git a/Code/Framework/Tests/BehaviorEntityTests.cpp b/Code/Framework/AzFramework/Tests/BehaviorEntityTests.cpp
similarity index 100%
rename from Code/Framework/Tests/BehaviorEntityTests.cpp
rename to Code/Framework/AzFramework/Tests/BehaviorEntityTests.cpp
diff --git a/Code/Framework/Tests/BinToTextEncode.cpp b/Code/Framework/AzFramework/Tests/BinToTextEncode.cpp
similarity index 100%
rename from Code/Framework/Tests/BinToTextEncode.cpp
rename to Code/Framework/AzFramework/Tests/BinToTextEncode.cpp
diff --git a/Code/Framework/Tests/CameraInputTests.cpp b/Code/Framework/AzFramework/Tests/CameraInputTests.cpp
similarity index 100%
rename from Code/Framework/Tests/CameraInputTests.cpp
rename to Code/Framework/AzFramework/Tests/CameraInputTests.cpp
diff --git a/Code/Framework/Tests/CameraState.cpp b/Code/Framework/AzFramework/Tests/CameraState.cpp
similarity index 100%
rename from Code/Framework/Tests/CameraState.cpp
rename to Code/Framework/AzFramework/Tests/CameraState.cpp
diff --git a/Code/Framework/Tests/ClickDetectorTests.cpp b/Code/Framework/AzFramework/Tests/ClickDetectorTests.cpp
similarity index 100%
rename from Code/Framework/Tests/ClickDetectorTests.cpp
rename to Code/Framework/AzFramework/Tests/ClickDetectorTests.cpp
diff --git a/Code/Framework/Tests/CursorStateTests.cpp b/Code/Framework/AzFramework/Tests/CursorStateTests.cpp
similarity index 100%
rename from Code/Framework/Tests/CursorStateTests.cpp
rename to Code/Framework/AzFramework/Tests/CursorStateTests.cpp
diff --git a/Code/Framework/Tests/EntityContext.cpp b/Code/Framework/AzFramework/Tests/EntityContext.cpp
similarity index 100%
rename from Code/Framework/Tests/EntityContext.cpp
rename to Code/Framework/AzFramework/Tests/EntityContext.cpp
diff --git a/Code/Framework/Tests/FileIO.cpp b/Code/Framework/AzFramework/Tests/FileIO.cpp
similarity index 100%
rename from Code/Framework/Tests/FileIO.cpp
rename to Code/Framework/AzFramework/Tests/FileIO.cpp
diff --git a/Code/Framework/Tests/FileTagTests.cpp b/Code/Framework/AzFramework/Tests/FileTagTests.cpp
similarity index 100%
rename from Code/Framework/Tests/FileTagTests.cpp
rename to Code/Framework/AzFramework/Tests/FileTagTests.cpp
diff --git a/Code/Framework/Tests/FrameworkApplicationFixture.h b/Code/Framework/AzFramework/Tests/FrameworkApplicationFixture.h
similarity index 100%
rename from Code/Framework/Tests/FrameworkApplicationFixture.h
rename to Code/Framework/AzFramework/Tests/FrameworkApplicationFixture.h
diff --git a/Code/Framework/Tests/GenAppDescriptors.cpp b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp
similarity index 94%
rename from Code/Framework/Tests/GenAppDescriptors.cpp
rename to Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp
index dde3800895..069d3b35f2 100644
--- a/Code/Framework/Tests/GenAppDescriptors.cpp
+++ b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp
@@ -15,16 +15,16 @@ namespace UnitTest
{
using namespace AZ;
- class SetRestoreFileIOBaseRAII
+ class FileIOBaseRAII
{
public:
- SetRestoreFileIOBaseRAII(AZ::IO::FileIOBase& fileIO)
+ FileIOBaseRAII(AZ::IO::FileIOBase& fileIO)
: m_prevFileIO(AZ::IO::FileIOBase::GetInstance())
{
AZ::IO::FileIOBase::SetInstance(&fileIO);
}
- ~SetRestoreFileIOBaseRAII()
+ ~FileIOBaseRAII()
{
AZ::IO::FileIOBase::SetInstance(m_prevFileIO);
}
@@ -102,7 +102,7 @@ namespace UnitTest
TEST_F(GenAppDescriptors, Test)
{
AZ::IO::LocalFileIO fileIO;
- SetRestoreFileIOBaseRAII restoreFileIOScope(fileIO);
+ FileIOBaseRAII restoreFileIOScope(fileIO);
run();
}
}
diff --git a/Code/Framework/Tests/InputTests.cpp b/Code/Framework/AzFramework/Tests/InputTests.cpp
similarity index 100%
rename from Code/Framework/Tests/InputTests.cpp
rename to Code/Framework/AzFramework/Tests/InputTests.cpp
diff --git a/Code/Framework/Tests/Mocks/MockSpawnableEntitiesInterface.h b/Code/Framework/AzFramework/Tests/Mocks/MockSpawnableEntitiesInterface.h
similarity index 100%
rename from Code/Framework/Tests/Mocks/MockSpawnableEntitiesInterface.h
rename to Code/Framework/AzFramework/Tests/Mocks/MockSpawnableEntitiesInterface.h
diff --git a/Code/Framework/Tests/NativeWindow.cpp b/Code/Framework/AzFramework/Tests/NativeWindow.cpp
similarity index 100%
rename from Code/Framework/Tests/NativeWindow.cpp
rename to Code/Framework/AzFramework/Tests/NativeWindow.cpp
diff --git a/Code/Framework/Tests/OctreePerformanceTests.cpp b/Code/Framework/AzFramework/Tests/OctreePerformanceTests.cpp
similarity index 100%
rename from Code/Framework/Tests/OctreePerformanceTests.cpp
rename to Code/Framework/AzFramework/Tests/OctreePerformanceTests.cpp
diff --git a/Code/Framework/Tests/OctreeTests.cpp b/Code/Framework/AzFramework/Tests/OctreeTests.cpp
similarity index 100%
rename from Code/Framework/Tests/OctreeTests.cpp
rename to Code/Framework/AzFramework/Tests/OctreeTests.cpp
diff --git a/Code/Framework/Tests/Platform/Android/AzFrameworkTests_Traits_Android.h b/Code/Framework/AzFramework/Tests/Platform/Android/AzFrameworkTests_Traits_Android.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Android/AzFrameworkTests_Traits_Android.h
rename to Code/Framework/AzFramework/Tests/Platform/Android/AzFrameworkTests_Traits_Android.h
diff --git a/Code/Framework/Tests/Platform/Android/AzFrameworkTests_Traits_Platform.h b/Code/Framework/AzFramework/Tests/Platform/Android/AzFrameworkTests_Traits_Platform.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Android/AzFrameworkTests_Traits_Platform.h
rename to Code/Framework/AzFramework/Tests/Platform/Android/AzFrameworkTests_Traits_Platform.h
diff --git a/Code/Framework/Tests/Platform/Android/platform_android_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Android/platform_android_files.cmake
similarity index 100%
rename from Code/Framework/Tests/Platform/Android/platform_android_files.cmake
rename to Code/Framework/AzFramework/Tests/Platform/Android/platform_android_files.cmake
diff --git a/Code/Framework/Tests/Platform/Linux/AzFrameworkTests_Traits_Linux.h b/Code/Framework/AzFramework/Tests/Platform/Linux/AzFrameworkTests_Traits_Linux.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Linux/AzFrameworkTests_Traits_Linux.h
rename to Code/Framework/AzFramework/Tests/Platform/Linux/AzFrameworkTests_Traits_Linux.h
diff --git a/Code/Framework/Tests/Platform/Linux/AzFrameworkTests_Traits_Platform.h b/Code/Framework/AzFramework/Tests/Platform/Linux/AzFrameworkTests_Traits_Platform.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Linux/AzFrameworkTests_Traits_Platform.h
rename to Code/Framework/AzFramework/Tests/Platform/Linux/AzFrameworkTests_Traits_Platform.h
diff --git a/Code/Framework/Tests/Platform/Linux/platform_linux_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Linux/platform_linux_files.cmake
similarity index 100%
rename from Code/Framework/Tests/Platform/Linux/platform_linux_files.cmake
rename to Code/Framework/AzFramework/Tests/Platform/Linux/platform_linux_files.cmake
diff --git a/Code/Framework/Tests/Platform/Mac/AzFrameworkTests_Traits_Mac.h b/Code/Framework/AzFramework/Tests/Platform/Mac/AzFrameworkTests_Traits_Mac.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Mac/AzFrameworkTests_Traits_Mac.h
rename to Code/Framework/AzFramework/Tests/Platform/Mac/AzFrameworkTests_Traits_Mac.h
diff --git a/Code/Framework/Tests/Platform/Mac/AzFrameworkTests_Traits_Platform.h b/Code/Framework/AzFramework/Tests/Platform/Mac/AzFrameworkTests_Traits_Platform.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Mac/AzFrameworkTests_Traits_Platform.h
rename to Code/Framework/AzFramework/Tests/Platform/Mac/AzFrameworkTests_Traits_Platform.h
diff --git a/Code/Framework/Tests/Platform/Mac/platform_mac_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Mac/platform_mac_files.cmake
similarity index 100%
rename from Code/Framework/Tests/Platform/Mac/platform_mac_files.cmake
rename to Code/Framework/AzFramework/Tests/Platform/Mac/platform_mac_files.cmake
diff --git a/Code/Framework/Tests/Platform/Windows/AzFrameworkTests_Traits_Platform.h b/Code/Framework/AzFramework/Tests/Platform/Windows/AzFrameworkTests_Traits_Platform.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Windows/AzFrameworkTests_Traits_Platform.h
rename to Code/Framework/AzFramework/Tests/Platform/Windows/AzFrameworkTests_Traits_Platform.h
diff --git a/Code/Framework/Tests/Platform/Windows/AzFrameworkTests_Traits_Windows.h b/Code/Framework/AzFramework/Tests/Platform/Windows/AzFrameworkTests_Traits_Windows.h
similarity index 100%
rename from Code/Framework/Tests/Platform/Windows/AzFrameworkTests_Traits_Windows.h
rename to Code/Framework/AzFramework/Tests/Platform/Windows/AzFrameworkTests_Traits_Windows.h
diff --git a/Code/Framework/Tests/Platform/Windows/platform_windows_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Windows/platform_windows_files.cmake
similarity index 100%
rename from Code/Framework/Tests/Platform/Windows/platform_windows_files.cmake
rename to Code/Framework/AzFramework/Tests/Platform/Windows/platform_windows_files.cmake
diff --git a/Code/Framework/Tests/Platform/iOS/AzFrameworkTests_Traits_Platform.h b/Code/Framework/AzFramework/Tests/Platform/iOS/AzFrameworkTests_Traits_Platform.h
similarity index 100%
rename from Code/Framework/Tests/Platform/iOS/AzFrameworkTests_Traits_Platform.h
rename to Code/Framework/AzFramework/Tests/Platform/iOS/AzFrameworkTests_Traits_Platform.h
diff --git a/Code/Framework/Tests/Platform/iOS/AzFrameworkTests_Traits_iOS.h b/Code/Framework/AzFramework/Tests/Platform/iOS/AzFrameworkTests_Traits_iOS.h
similarity index 100%
rename from Code/Framework/Tests/Platform/iOS/AzFrameworkTests_Traits_iOS.h
rename to Code/Framework/AzFramework/Tests/Platform/iOS/AzFrameworkTests_Traits_iOS.h
diff --git a/Code/Framework/Tests/Platform/iOS/platform_ios_files.cmake b/Code/Framework/AzFramework/Tests/Platform/iOS/platform_ios_files.cmake
similarity index 100%
rename from Code/Framework/Tests/Platform/iOS/platform_ios_files.cmake
rename to Code/Framework/AzFramework/Tests/Platform/iOS/platform_ios_files.cmake
diff --git a/Code/Framework/Tests/PlatformHelper.cpp b/Code/Framework/AzFramework/Tests/PlatformHelper.cpp
similarity index 100%
rename from Code/Framework/Tests/PlatformHelper.cpp
rename to Code/Framework/AzFramework/Tests/PlatformHelper.cpp
diff --git a/Code/Framework/Tests/ProcessLaunchMain.cpp b/Code/Framework/AzFramework/Tests/ProcessLaunchMain.cpp
similarity index 100%
rename from Code/Framework/Tests/ProcessLaunchMain.cpp
rename to Code/Framework/AzFramework/Tests/ProcessLaunchMain.cpp
diff --git a/Code/Framework/Tests/ProcessLaunchParseTests.cpp b/Code/Framework/AzFramework/Tests/ProcessLaunchParseTests.cpp
similarity index 100%
rename from Code/Framework/Tests/ProcessLaunchParseTests.cpp
rename to Code/Framework/AzFramework/Tests/ProcessLaunchParseTests.cpp
diff --git a/Code/Framework/Tests/Scene.cpp b/Code/Framework/AzFramework/Tests/Scene.cpp
similarity index 99%
rename from Code/Framework/Tests/Scene.cpp
rename to Code/Framework/AzFramework/Tests/Scene.cpp
index 32a0958692..57293c9d77 100644
--- a/Code/Framework/Tests/Scene.cpp
+++ b/Code/Framework/AzFramework/Tests/Scene.cpp
@@ -9,7 +9,6 @@
AZ_PUSH_DISABLE_WARNING(, "-Wdelete-non-virtual-dtor")
-#include
#include
#include
#include
diff --git a/Code/Framework/Tests/Spawnable/SpawnableEntitiesManagerTests.cpp b/Code/Framework/AzFramework/Tests/Spawnable/SpawnableEntitiesManagerTests.cpp
similarity index 100%
rename from Code/Framework/Tests/Spawnable/SpawnableEntitiesManagerTests.cpp
rename to Code/Framework/AzFramework/Tests/Spawnable/SpawnableEntitiesManagerTests.cpp
diff --git a/Code/Framework/Tests/Utils/Utils.cpp b/Code/Framework/AzFramework/Tests/Utils/Utils.cpp
similarity index 100%
rename from Code/Framework/Tests/Utils/Utils.cpp
rename to Code/Framework/AzFramework/Tests/Utils/Utils.cpp
diff --git a/Code/Framework/Tests/Utils/Utils.h b/Code/Framework/AzFramework/Tests/Utils/Utils.h
similarity index 100%
rename from Code/Framework/Tests/Utils/Utils.h
rename to Code/Framework/AzFramework/Tests/Utils/Utils.h
diff --git a/Code/Framework/Tests/framework_shared_tests_files.cmake b/Code/Framework/AzFramework/Tests/framework_shared_tests_files.cmake
similarity index 90%
rename from Code/Framework/Tests/framework_shared_tests_files.cmake
rename to Code/Framework/AzFramework/Tests/framework_shared_tests_files.cmake
index 72ffdf0043..5ee7ff644b 100644
--- a/Code/Framework/Tests/framework_shared_tests_files.cmake
+++ b/Code/Framework/AzFramework/Tests/framework_shared_tests_files.cmake
@@ -9,4 +9,5 @@ set(FILES
Mocks/MockSpawnableEntitiesInterface.h
Utils/Utils.h
Utils/Utils.cpp
+ FrameworkApplicationFixture.h
)
diff --git a/Code/Framework/Tests/frameworktests_files.cmake b/Code/Framework/AzFramework/Tests/frameworktests_files.cmake
similarity index 56%
rename from Code/Framework/Tests/frameworktests_files.cmake
rename to Code/Framework/AzFramework/Tests/frameworktests_files.cmake
index 398bb8f45b..25c56f5a71 100644
--- a/Code/Framework/Tests/frameworktests_files.cmake
+++ b/Code/Framework/AzFramework/Tests/frameworktests_files.cmake
@@ -6,44 +6,28 @@
#
set(FILES
- ../AzCore/Tests/Main.cpp
+ ../../AzCore/Tests/Main.cpp
Spawnable/SpawnableEntitiesManagerTests.cpp
ArchiveCompressionTests.cpp
ArchiveTests.cpp
BehaviorEntityTests.cpp
BinToTextEncode.cpp
- ComponentAddRemove.cpp
- ComponentAdapterTests.cpp
CameraInputTests.cpp
ClickDetectorTests.cpp
CursorStateTests.cpp
EntityContext.cpp
- EntityTestbed.h
- FileFunc.cpp
FileIO.cpp
FileTagTests.cpp
- FrameworkApplicationFixture.h
GenAppDescriptors.cpp
- GenericComponentWrapperTest.cpp
- InstanceDataHierarchy.cpp
OctreePerformanceTests.cpp
OctreeTests.cpp
- Slices.cpp
- Script/ScriptComponentTests.cpp
- Script/ScriptEntityTests.cpp
AssetCatalog.cpp
AssetProcessorConnection.cpp
NativeWindow.cpp
- TransformComponent.cpp
- SQLiteConnectionTests.cpp
ProcessLaunchParseTests.cpp
Application.cpp
PlatformHelper.cpp
Scene.cpp
- EntityOwnershipService/EntityOwnershipServiceTestFixture.h
- EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp
- EntityOwnershipService/SliceEditorEntityOwnershipTests.cpp
- EntityOwnershipService/SliceEntityOwnershipTests.cpp
CameraState.cpp
InputTests.cpp
)
diff --git a/Code/Framework/Tests/process_launch_test_files.cmake b/Code/Framework/AzFramework/Tests/process_launch_test_files.cmake
similarity index 100%
rename from Code/Framework/Tests/process_launch_test_files.cmake
rename to Code/Framework/AzFramework/Tests/process_launch_test_files.cmake
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorPythonConsoleBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorPythonConsoleBus.h
index 51aecbd8e7..6dd6b0b448 100644
--- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorPythonConsoleBus.h
+++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorPythonConsoleBus.h
@@ -63,6 +63,9 @@ namespace AzToolsFramework
//! Signal the Python handler to stop
virtual bool StopPython(bool silenceWarnings = false) = 0;
+ //! Query to determine if the Python VM has been initialized indicating an active state
+ virtual bool IsPythonActive() = 0;
+
//! Determines if the caller needs to wait for the Python VM to initialize (non-main thread only)
virtual void WaitForInitialization() {}
diff --git a/Code/Framework/AzToolsFramework/CMakeLists.txt b/Code/Framework/AzToolsFramework/CMakeLists.txt
index b2a9690948..9a54ee5226 100644
--- a/Code/Framework/AzToolsFramework/CMakeLists.txt
+++ b/Code/Framework/AzToolsFramework/CMakeLists.txt
@@ -76,6 +76,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
PRIVATE
AZ::AzTestShared
3rdParty::Qt::Test
+ AZ::AzFrameworkTestShared
AZ::AzToolsFramework
AZ::AzToolsFrameworkTestCommon
AZ::AzManipulatorTestFramework.Static
diff --git a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp
index 4335e42d62..71b86f6ef4 100644
--- a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -23,6 +24,7 @@
#include
#include
#include
+#include
namespace UnitTest
{
@@ -72,7 +74,7 @@ namespace UnitTest
void CreateArchiveFolder( QString archiveFolderName, QStringList fileList )
{
- QDir tempPath = QDir(m_tempDir.path()).filePath(archiveFolderName);
+ QDir tempPath = QDir(m_tempDir.GetDirectory()).filePath(archiveFolderName);
for (const auto& thisFile : fileList)
{
@@ -88,12 +90,12 @@ namespace UnitTest
QString GetArchivePath()
{
- return QDir(m_tempDir.path()).filePath("TestArchive.pak");
+ return QDir(m_tempDir.GetDirectory()).filePath("TestArchive.pak");
}
QString GetArchiveFolder()
{
- return QDir(m_tempDir.path()).filePath(GetArchiveFolderName());
+ return QDir(m_tempDir.GetDirectory()).filePath(GetArchiveFolderName());
}
bool CreateArchive()
@@ -111,6 +113,11 @@ namespace UnitTest
// 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());
+ }
}
void TearDown() override
@@ -120,7 +127,7 @@ namespace UnitTest
}
AZStd::unique_ptr m_app;
- QTemporaryDir m_tempDir {QDir(QStandardPaths::writableLocation(QStandardPaths::TempLocation)).filePath("ArchiveTests-")};
+ UnitTest::ScopedTemporaryDirectory m_tempDir;
};
#if AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS
@@ -129,7 +136,7 @@ namespace UnitTest
TEST_F(ArchiveTest, CreateArchiveBlocking_FilesAtThreeDepths_ArchiveCreated)
#endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS
{
- EXPECT_TRUE(m_tempDir.isValid());
+ EXPECT_TRUE(m_tempDir.IsValid());
CreateArchiveFolder();
bool createResult = CreateArchive();
@@ -143,7 +150,7 @@ namespace UnitTest
TEST_F(ArchiveTest, ListFilesInArchiveBlocking_FilesAtThreeDepths_FilesFound)
#endif // AZ_TRAIT_DISABLE_FAILED_ARCHIVE_TESTS
{
- EXPECT_TRUE(m_tempDir.isValid());
+ EXPECT_TRUE(m_tempDir.IsValid());
CreateArchiveFolder();
EXPECT_EQ(CreateArchive(), true);
@@ -203,7 +210,9 @@ namespace UnitTest
}
bool catalogCreated{ false };
+ AZ_TEST_START_TRACE_SUPPRESSION;
AzToolsFramework::AssetBundleCommandsBus::BroadcastResult(catalogCreated, &AzToolsFramework::AssetBundleCommandsBus::Events::CreateDeltaCatalog, GetArchivePath().toStdString().c_str(), true);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // produces different counts in different platforms
EXPECT_EQ(catalogCreated, true);
}
}
diff --git a/Code/Framework/AzToolsFramework/Tests/AssetFileInfoListComparison.cpp b/Code/Framework/AzToolsFramework/Tests/AssetFileInfoListComparison.cpp
index f950f43abc..fea9fa6cc1 100644
--- a/Code/Framework/AzToolsFramework/Tests/AssetFileInfoListComparison.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/AssetFileInfoListComparison.cpp
@@ -21,6 +21,7 @@
#include
#include
#include
+#include
namespace // anonymous
{
@@ -54,9 +55,11 @@ namespace UnitTest
m_localFileIO = aznew AZ::IO::LocalFileIO();
m_priorFileIO = AZ::IO::FileIOBase::GetInstance();
+ AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(m_localFileIO);
- AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", GetTestFolderPath().c_str());
+ AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", m_tempDir.GetDirectory());
+
AZStd::string assetRoot = AzToolsFramework::PlatformAddressedAssetCatalog::GetAssetRootForPlatform(AzFramework::PlatformId::PC);
for (int idx = 0; idx < TotalAssets; idx++)
@@ -68,9 +71,11 @@ namespace UnitTest
assetRegistry.RegisterAsset(m_assets[idx], info);
AzFramework::StringFunc::Path::Join(assetRoot.c_str(), info.m_relativePath.c_str(), m_assetsPath[idx]);
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[idx].Open(m_assetsPath[idx].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
m_fileStreams[idx].Write(info.m_relativePath.size(), info.m_relativePath.data());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // writing to asset cache folder
}
else
{
@@ -114,10 +119,12 @@ namespace UnitTest
// Modify contents of asset2
int fileIndex = 2;
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[fileIndex].Open(m_assetsPath[fileIndex].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
AZStd::string fileContent = AZStd::string::format("new Asset%d.txt", fileIndex);// changing file content
m_fileStreams[fileIndex].Write(fileContent.size(), fileContent.c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // writing to asset cache folder
}
else
{
@@ -126,10 +133,12 @@ namespace UnitTest
// Modify contents of asset 4
fileIndex = 4;
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[fileIndex].Open(m_assetsPath[fileIndex].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
AZStd::string fileContent = AZStd::string::format("new Asset%d.txt", fileIndex);// changing file content
m_fileStreams[fileIndex].Write(fileContent.size(), fileContent.c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // writing to asset cache folder
}
else
{
@@ -151,7 +160,9 @@ namespace UnitTest
{
if (fileIO->Exists(TempFiles[idx]))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(TempFiles[idx]);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // deleting from asset cache folder
}
}
@@ -162,19 +173,24 @@ namespace UnitTest
m_fileStreams[idx].Close();
if (fileIO->Exists(m_assetsPath[idx].c_str()))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(m_assetsPath[idx].c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // deleting from asset cache folder
}
}
auto pcCatalogFile = AzToolsFramework::PlatformAddressedAssetCatalog::GetCatalogRegistryPathForPlatform(AzFramework::PlatformId::PC);
if (fileIO->Exists(pcCatalogFile.c_str()))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(pcCatalogFile.c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // deleting from asset cache folder
}
delete m_pcCatalog;
delete m_localFileIO;
m_localFileIO = nullptr;
+ AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(m_priorFileIO);
m_application->Stop();
delete m_application;
@@ -726,6 +742,7 @@ namespace UnitTest
}
ToolsTestApplication* m_application;
+ UnitTest::ScopedTemporaryDirectory m_tempDir;
AzToolsFramework::PlatformAddressedAssetCatalog* m_pcCatalog;
AZ::IO::FileIOBase* m_priorFileIO = nullptr;
AZ::IO::FileIOBase* m_localFileIO = nullptr;
diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
index 71e4184eb6..dafd2faa4a 100644
--- a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp
@@ -87,10 +87,12 @@ namespace UnitTest
for (int idx = 0; idx < s_totalAssets; idx++)
{
AzFramework::StringFunc::Path::Join(assetRoot.c_str(), m_assetsPath[idx].c_str(), m_assetsPathFull[platformCount][idx]);
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[platformCount][idx].Open(m_assetsPathFull[platformCount][idx].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
m_fileStreams[platformCount][idx].Write(m_assetsPath[idx].size(), m_assetsPath[idx].data());
m_fileStreams[platformCount][idx].Close();
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, only invalid for PC, not invalid in Jenkins
}
else
{
@@ -112,7 +114,9 @@ namespace UnitTest
m_testDynamicSliceAssetId = testDynamicSliceAsset;
m_assetRegistry->RegisterAsset(testDynamicSliceAsset, dynamicSliceAssetInfo);
+ AZ_TEST_START_TRACE_SUPPRESSION;
AZ::IO::FileIOStream dynamicSliceFileIOStream(TestDynamicSliceAssetPath, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
AZ::Data::AssetInfo sliceAssetInfo;
sliceAssetInfo.m_relativePath = TestSliceAssetPath;
@@ -124,7 +128,9 @@ namespace UnitTest
secondSliceAssetInfo.m_assetId = secondTestSliceAsset;
m_assetRegistry->RegisterAsset(secondTestSliceAsset, secondSliceAssetInfo);
+ AZ_TEST_START_TRACE_SUPPRESSION;
AZ::IO::FileIOStream sliceFileIOStream(TestSliceAssetPath, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
// asset0 -> asset1 -> asset2 -> asset4
// --> asset3
@@ -186,7 +192,6 @@ namespace UnitTest
AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath());
assetRoot /= "Cache";
AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str());
-
}
void TearDown() override
@@ -195,7 +200,9 @@ namespace UnitTest
if (fileIO->Exists(s_catalogFile))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(s_catalogFile);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // deleting from asset cache folder, not invalid in Jenkins
}
for (size_t platformCount = 0; platformCount < s_totalTestPlatforms; ++platformCount)
@@ -206,26 +213,34 @@ namespace UnitTest
// we need to close the handle before we try to remove the file
if (fileIO->Exists(m_assetsPathFull[platformCount][idx].c_str()))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(m_assetsPathFull[platformCount][idx].c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // deleting from asset cache folder, not invalid in Jenkins
}
}
}
if (fileIO->Exists(TestSliceAssetPath))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(TestSliceAssetPath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // deleting from asset cache folder, not invalid in Jenkins
}
if (fileIO->Exists(TestDynamicSliceAssetPath))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(TestDynamicSliceAssetPath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // deleting from asset cache folder, not invalid in Jenkins
}
auto pcCatalogFile = AzToolsFramework::PlatformAddressedAssetCatalog::GetCatalogRegistryPathForPlatform(AzFramework::PlatformId::PC);
auto androidCatalogFile = AzToolsFramework::PlatformAddressedAssetCatalog::GetCatalogRegistryPathForPlatform(AzFramework::PlatformId::ANDROID_ID);
if (fileIO->Exists(pcCatalogFile.c_str()))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(pcCatalogFile.c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // deleting from asset cache folder, not invalid in Jenkins
}
if (fileIO->Exists(androidCatalogFile.c_str()))
@@ -266,7 +281,9 @@ namespace UnitTest
AZ::IO::SystemFile::SetWritable(filePath.c_str(), false);
// Attempt to save to the same file. Should not be allowed.
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_FALSE(m_assetSeedManager->Save(filePath));
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
// Clean up the test environment
AZ::IO::SystemFile::SetWritable(filePath.c_str(), true);
@@ -290,7 +307,9 @@ namespace UnitTest
AZ::IO::SystemFile::SetWritable(filePath.c_str(), false);
// Attempt to save to the same file. Should not be allowed.
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_FALSE(m_assetSeedManager->SaveAssetFileInfo(filePath, AzFramework::PlatformFlags::Platform_PC, {}));
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
// Clean up the test environment
AZ::IO::SystemFile::SetWritable(filePath.c_str(), true);
@@ -357,7 +376,9 @@ namespace UnitTest
m_assetSeedManager->AddSeedAsset(assets[2], AzFramework::PlatformFlags::Platform_PC);
// Step we are testing
+ AZ_TEST_START_TRACE_SUPPRESSION;
m_assetSeedManager->AddPlatformToAllSeeds(AzFramework::PlatformId::ANDROID_ID);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
// Verification
AzFramework::PlatformFlags expectedPlatformFlags = AzFramework::PlatformFlags::Platform_PC | AzFramework::PlatformFlags::Platform_ANDROID;
@@ -623,11 +644,13 @@ namespace UnitTest
EXPECT_EQ(assetList1.m_fileInfoList.size(), 1);
EXPECT_TRUE(Search(assetList1, assets[fileIndex]));
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[0][fileIndex].Open(m_assetsPathFull[0][fileIndex].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
AZStd::string fileContent = AZStd::string::format("asset%d.txt", fileIndex);
m_fileStreams[0][fileIndex].Write(fileContent.size(), fileContent.c_str());
m_fileStreams[0][fileIndex].Close();
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
}
AzToolsFramework::AssetFileInfoList assetList2 = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::PC);
@@ -654,11 +677,13 @@ namespace UnitTest
EXPECT_EQ(assetList1.m_fileInfoList.size(), 1);
EXPECT_TRUE(Search(assetList1, assets[fileIndex]));
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[0][fileIndex].Open(m_assetsPathFull[0][fileIndex].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
AZStd::string fileContent = AZStd::string::format("asset%d.txt", fileIndex + 1);// changing file content
m_fileStreams[0][fileIndex].Write(fileContent.size(), fileContent.c_str());
m_fileStreams[0][fileIndex].Close();
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // writing to asset cache folder, not invalid in Jenkins
}
AzToolsFramework::AssetFileInfoList assetList2 = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::PC);
diff --git a/Code/Framework/Tests/ComponentAdapterTests.cpp b/Code/Framework/AzToolsFramework/Tests/ComponentAdapterTests.cpp
similarity index 100%
rename from Code/Framework/Tests/ComponentAdapterTests.cpp
rename to Code/Framework/AzToolsFramework/Tests/ComponentAdapterTests.cpp
diff --git a/Code/Framework/Tests/ComponentAddRemove.cpp b/Code/Framework/AzToolsFramework/Tests/ComponentAddRemove.cpp
similarity index 100%
rename from Code/Framework/Tests/ComponentAddRemove.cpp
rename to Code/Framework/AzToolsFramework/Tests/ComponentAddRemove.cpp
diff --git a/Code/Framework/AzToolsFramework/Tests/ComponentModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/ComponentModeTests.cpp
index 775c771a8a..9ee75408e6 100644
--- a/Code/Framework/AzToolsFramework/Tests/ComponentModeTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/ComponentModeTests.cpp
@@ -493,7 +493,10 @@ namespace UnitTest
// Add placeholder component which implements component mode.
entity->CreateComponent();
+ AZ_TEST_START_TRACE_SUPPRESSION;
entity->Activate();
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/Code/Framework/AzToolsFramework/Tests/EntityInspectorTests.cpp b/Code/Framework/AzToolsFramework/Tests/EntityInspectorTests.cpp
index 3bc4c092dc..c15034ee33 100644
--- a/Code/Framework/AzToolsFramework/Tests/EntityInspectorTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/EntityInspectorTests.cpp
@@ -348,7 +348,6 @@ namespace UnitTest
EXPECT_FALSE(AzToolsFramework::ComponentPaletteUtil::ContainsEditableComponents(context, &Filter_IsTestComponent2, AZ::ComponentDescriptor::DependencyArrayType()));
// Reflect Test Component 2 for subsequent tests
- Inspector_TestComponent2::Reflect(context);
m_application->RegisterComponentDescriptor(Inspector_TestComponent2Descriptor);
// Verify that there is now a component that satisfies the AppearsInGameComponentMenu filter without service dependency conditions
diff --git a/Code/Framework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp b/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp
similarity index 100%
rename from Code/Framework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp
rename to Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp
diff --git a/Code/Framework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.h b/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.h
similarity index 100%
rename from Code/Framework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.h
rename to Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.h
diff --git a/Code/Framework/Tests/EntityOwnershipService/SliceEditorEntityOwnershipTests.cpp b/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/SliceEditorEntityOwnershipTests.cpp
similarity index 100%
rename from Code/Framework/Tests/EntityOwnershipService/SliceEditorEntityOwnershipTests.cpp
rename to Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/SliceEditorEntityOwnershipTests.cpp
diff --git a/Code/Framework/Tests/EntityOwnershipService/SliceEntityOwnershipTests.cpp b/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/SliceEntityOwnershipTests.cpp
similarity index 100%
rename from Code/Framework/Tests/EntityOwnershipService/SliceEntityOwnershipTests.cpp
rename to Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/SliceEntityOwnershipTests.cpp
diff --git a/Code/Framework/Tests/EntityTestbed.h b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h
similarity index 100%
rename from Code/Framework/Tests/EntityTestbed.h
rename to Code/Framework/AzToolsFramework/Tests/EntityTestbed.h
diff --git a/Code/Framework/Tests/FileFunc.cpp b/Code/Framework/AzToolsFramework/Tests/FileFunc.cpp
similarity index 99%
rename from Code/Framework/Tests/FileFunc.cpp
rename to Code/Framework/AzToolsFramework/Tests/FileFunc.cpp
index 4edb91164c..124e9af0f2 100644
--- a/Code/Framework/Tests/FileFunc.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/FileFunc.cpp
@@ -5,8 +5,8 @@
*
*/
-#include "FrameworkApplicationFixture.h"
-#include "Utils/Utils.h"
+#include
+#include
#include
#include
#include
@@ -47,11 +47,13 @@ namespace UnitTest
void SetUp()
{
m_prevFileIO = AZ::IO::FileIOBase::GetInstance();
+ AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(&m_fileIO);
}
void TearDown() override
{
+ AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(m_prevFileIO);
}
diff --git a/Code/Framework/Tests/GenericComponentWrapperTest.cpp b/Code/Framework/AzToolsFramework/Tests/GenericComponentWrapperTest.cpp
similarity index 100%
rename from Code/Framework/Tests/GenericComponentWrapperTest.cpp
rename to Code/Framework/AzToolsFramework/Tests/GenericComponentWrapperTest.cpp
diff --git a/Code/Framework/Tests/InstanceDataHierarchy.cpp b/Code/Framework/AzToolsFramework/Tests/InstanceDataHierarchy.cpp
similarity index 100%
rename from Code/Framework/Tests/InstanceDataHierarchy.cpp
rename to Code/Framework/AzToolsFramework/Tests/InstanceDataHierarchy.cpp
diff --git a/Code/Framework/AzToolsFramework/Tests/Main.cpp b/Code/Framework/AzToolsFramework/Tests/Main.cpp
index ff94f9af5c..21aac978b3 100644
--- a/Code/Framework/AzToolsFramework/Tests/Main.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/Main.cpp
@@ -46,7 +46,7 @@ AZTEST_EXPORT int AZ_UNIT_TEST_HOOK_NAME(int argc, char** argv)
}
styleManager->initialize(&app, engineRootPath);
AZ::Test::printUnusedParametersWarning(argc, argv);
- AZ::Test::addTestEnvironments({ new ToolsFrameworkHook });
+ AZ::Test::addTestEnvironments({ DEFAULT_UNIT_TEST_ENV, new ToolsFrameworkHook });
int result = RUN_ALL_TESTS();
styleManager.release();
return result;
diff --git a/Code/Framework/AzToolsFramework/Tests/PerforceComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/PerforceComponentTests.cpp
index db7430085b..46f9a9fa3a 100644
--- a/Code/Framework/AzToolsFramework/Tests/PerforceComponentTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/PerforceComponentTests.cpp
@@ -23,8 +23,7 @@ namespace UnitTest
};
struct PerforceComponentFixture
- : ::testing::Test
- , TraceBusRedirector
+ : ScopedAllocatorSetupFixture
, SourceControlTest
{
@@ -40,7 +39,6 @@ namespace UnitTest
m_jobContext = aznew AZ::JobContext(*m_jobManager);
AZ::JobContext::SetGlobalContext(m_jobContext);
- AZ::Debug::TraceMessageBus::Handler::BusConnect();
AZ::TickBus::AllowFunctionQueuing(true);
m_perforceComponent = AZStd::make_unique();
@@ -52,8 +50,6 @@ namespace UnitTest
void TearDown() override
{
- AZ::Debug::TraceMessageBus::Handler::BusDisconnect();
-
AZ::TickBus::AllowFunctionQueuing(false);
AZ::TickBus::ClearQueuedEvents();
diff --git a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
index e581f4fac7..3446f854b6 100644
--- a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp
@@ -83,9 +83,11 @@ namespace UnitTest
info.m_assetId = m_assets[platformNum][idx];
assetRegistry->RegisterAsset(m_assets[platformNum][idx], info);
m_assetsPath[platformNum][idx] = info.m_relativePath;
+ AZ_TEST_START_TRACE_SUPPRESSION;
if (m_fileStreams[platformNum][idx].Open(m_assetsPath[platformNum][idx].c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary | AZ::IO::OpenMode::ModeCreatePath))
{
m_fileStreams[platformNum][idx].Write(info.m_relativePath.size(), info.m_relativePath.data());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // writing to asset cache folder
}
else
{
@@ -131,7 +133,9 @@ namespace UnitTest
m_fileStreams[platformNum][idx].Close();
if (fileIO->Exists(m_assetsPath[platformNum][idx].c_str()))
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
fileIO->Remove(m_assetsPath[platformNum][idx].c_str());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1); // removing from asset cache folder
}
}
}
@@ -246,7 +250,9 @@ namespace UnitTest
AzFramework::AssetSystem::NetworkAssetUpdateInterface* notificationInterface = AZ::Interface::Get();
EXPECT_NE(notificationInterface, nullptr);
+ AZ_TEST_START_TRACE_SUPPRESSION;
auto* mockCatalog = new ::testing::NiceMock(AzFramework::PlatformId::ANDROID_ID);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
AZStd::unique_ptr< ::testing::NiceMock> catalogHolder;
catalogHolder.reset(mockCatalog);
diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp
index a08de99d3e..b0fd167cc0 100644
--- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabInstantiateTests.cpp
@@ -13,7 +13,9 @@ namespace UnitTest
TEST_F(PrefabInstantiateTest, PrefabInstantiate_InstantiateInvalidTemplate_InstantiateFails)
{
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_FALSE(m_prefabSystemComponent->InstantiatePrefab(AzToolsFramework::Prefab::InvalidTemplateId));
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
}
TEST_F(PrefabInstantiateTest, PrefabInstantiate_NoNestingTemplate_InstantiateSucceeds)
diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabLoadTemplateTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabLoadTemplateTests.cpp
index 9cf1194834..a3d6cafd2a 100644
--- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabLoadTemplateTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabLoadTemplateTests.cpp
@@ -68,8 +68,10 @@ namespace UnitTest
MockPrefabFileIOActionValidator mockIOActionValidator;
mockIOActionValidator.ReadPrefabDom(templateData.m_filePath, templatePrefabDom);
-
+
+ AZ_TEST_START_TRACE_SUPPRESSION;
templateData.m_id = m_prefabLoaderInterface->LoadTemplateFromFile(templateData.m_filePath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(3);
templateData.m_isLoadedWithErrors = true;
PrefabTestDataUtils::ValidateTemplateLoad(templateData);
@@ -115,7 +117,9 @@ namespace UnitTest
targetTemplateData.m_filePath, targetTemplatePrefabDom);
// Load target and source Templates and get their Ids.
+ AZ_TEST_START_TRACE_SUPPRESSION;
targetTemplateData.m_id = m_prefabLoaderInterface->LoadTemplateFromFile(targetTemplateData.m_filePath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(4);
sourceTemplateData.m_id = m_prefabSystemComponent->GetTemplateIdFromFilePath(sourceTemplateData.m_filePath);
// Because of cyclical dependency, the two Templates should be loaded with errors.
@@ -144,7 +148,9 @@ namespace UnitTest
MockPrefabFileIOActionValidator mockIOActionValidator;
mockIOActionValidator.ReadPrefabDom(templateData.m_filePath, templatePrefabDom);
+ AZ_TEST_START_TRACE_SUPPRESSION;
templateData.m_id = m_prefabLoaderInterface->LoadTemplateFromFile(templateData.m_filePath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(2);
PrefabTestDataUtils::ValidateTemplateLoad(templateData);
}
@@ -161,7 +167,9 @@ namespace UnitTest
MockPrefabFileIOActionValidator mockIOActionValidator;
mockIOActionValidator.ReadPrefabDom(templateData.m_filePath, templatePrefabDom);
+ AZ_TEST_START_TRACE_SUPPRESSION;
templateData.m_id = m_prefabLoaderInterface->LoadTemplateFromFile(templateData.m_filePath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(2);
PrefabTestDataUtils::ValidateTemplateLoad(templateData);
}
@@ -183,7 +191,9 @@ namespace UnitTest
templateInstanceData.m_source, PrefabTestDomUtils::CreatePrefabDom(),
AZ::IO::ResultCode::Success, AZ::IO::ResultCode::Error);
+ AZ_TEST_START_TRACE_SUPPRESSION;
templateData.m_id = m_prefabLoaderInterface->LoadTemplateFromFile(templateData.m_filePath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(3);
PrefabTestDataUtils::ValidateTemplateLoad(templateData);
}
@@ -279,8 +289,10 @@ namespace UnitTest
MockPrefabFileIOActionValidator mockIOActionValidator;
mockIOActionValidator.ReadPrefabDom(pathToCorruptedPrefab, corruptedPrefabContent);
-
+
+ AZ_TEST_START_TRACE_SUPPRESSION;
TemplateId templateId = m_prefabLoaderInterface->LoadTemplateFromFile(pathToCorruptedPrefab);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
EXPECT_EQ(templateId, AzToolsFramework::Prefab::InvalidTemplateId);
}
@@ -289,8 +301,10 @@ namespace UnitTest
{
PrefabDom emptyPrefabDom = PrefabTestDomUtils::CreatePrefabDom();
AZStd::string emptyPrefabDomStr = PrefabTestDomUtils::DomToString(emptyPrefabDom);
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_EQ(m_prefabLoaderInterface->LoadTemplateFromString(emptyPrefabDomStr, "|?<>"), AzToolsFramework::Prefab::InvalidTemplateId);
EXPECT_EQ(m_prefabLoaderInterface->LoadTemplateFromString(emptyPrefabDomStr, "notAFile/"), AzToolsFramework::Prefab::InvalidTemplateId);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(2);
}
TEST_F(PrefabLoadTemplateTest, LoadTemplate_LoadFromString_LoadsEmptyPrefab)
@@ -318,9 +332,11 @@ namespace UnitTest
);
AZStd::string selfDependentPrefabStr = PrefabTestDomUtils::DomToString(selfDependentPrefab);
+ AZ_TEST_START_TRACE_SUPPRESSION;
templateData.m_id = m_prefabLoaderInterface->LoadTemplateFromString(
selfDependentPrefabStr,
templateData.m_filePath);
+ AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; // produces different counts in Jenkins vs local
templateData.m_isLoadedWithErrors = true;
@@ -330,7 +346,9 @@ namespace UnitTest
TEST_F(PrefabLoadTemplateTest, LoadTemplate_LoadFromString_CorruptedReturnsInvalidTemplateId)
{
AZStd::string corruptPrefab = "{ Corrupted PrefabDom";
+ AZ_TEST_START_TRACE_SUPPRESSION;
TemplateId templateId = m_prefabLoaderInterface->LoadTemplateFromString(corruptPrefab);
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
EXPECT_EQ(templateId, AzToolsFramework::Prefab::InvalidTemplateId);
}
}
diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp
index 34cff98a73..6e836e4d44 100644
--- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDomUtils.cpp
@@ -166,13 +166,25 @@ namespace UnitTest
if (expectedNestedInstanceDomInstances.has_value())
{
ASSERT_TRUE(actualNestedInstanceDomInstances.has_value());
- for (auto instanceIterator = expectedNestedInstanceDomInstances->get().MemberBegin();
- instanceIterator != expectedNestedInstanceDomInstances->get().MemberEnd(); ++instanceIterator)
+ if (expectedNestedInstanceDomInstances->get().IsArray())
{
- ComparePrefabDoms(
- instanceIterator->value,
- PrefabDomUtils::FindPrefabDomValue(actualNestedInstanceDomInstances->get(), instanceIterator->name.GetString()),
- shouldCompareLinkIds, shouldCompareContainerEntities);
+ ASSERT_TRUE(actualNestedInstanceDomInstances->get().IsArray());
+ const size_t expectedArraySize = expectedNestedInstanceDomInstances->get().GetArray().Size();
+ EXPECT_EQ(0, expectedArraySize);
+ const size_t actualArraySize = actualNestedInstanceDomInstances->get().GetArray().Size();
+ EXPECT_EQ(0, actualArraySize);
+ }
+ if (expectedNestedInstanceDomInstances->get().IsObject())
+ {
+ ASSERT_TRUE(actualNestedInstanceDomInstances->get().IsObject());
+ for (auto instanceIterator = expectedNestedInstanceDomInstances->get().MemberBegin();
+ instanceIterator != expectedNestedInstanceDomInstances->get().MemberEnd(); ++instanceIterator)
+ {
+ ComparePrefabDoms(
+ instanceIterator->value,
+ PrefabDomUtils::FindPrefabDomValue(actualNestedInstanceDomInstances->get(), instanceIterator->name.GetString()),
+ shouldCompareLinkIds, shouldCompareContainerEntities);
+ }
}
}
}
diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestFixture.h b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestFixture.h
index 763d3bec1f..b438f9f28d 100644
--- a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestFixture.h
+++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestFixture.h
@@ -37,8 +37,7 @@ namespace UnitTest
};
class PrefabTestFixture
- : public ToolsApplicationFixture,
- public UnitTest::TraceBusRedirector
+ : public ToolsApplicationFixture
{
protected:
diff --git a/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp b/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp
index 99cf334dc9..006dd5a656 100644
--- a/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/PropertyTreeEditorTests.cpp
@@ -426,7 +426,9 @@ namespace UnitTest
AZStd::any keyString = AZStd::make_any("0");
EXPECT_FALSE(propertyTree.GetContainerItem("My New Int", key).IsSuccess());
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_FALSE(propertyTree.GetContainerItem("My New List", keyString).IsSuccess());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
PropertyTreeEditor::PropertyAccessOutcome outcome = propertyTree.GetContainerItem("My New List", key);
EXPECT_TRUE(outcome.IsSuccess());
@@ -446,7 +448,9 @@ namespace UnitTest
AZStd::any value = AZStd::make_any(testUpdate);
EXPECT_FALSE(propertyTree.UpdateContainerItem("My New Int", key, value).IsSuccess());
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_FALSE(propertyTree.UpdateContainerItem("My New List", keyString, value).IsSuccess());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
EXPECT_TRUE(propertyTree.UpdateContainerItem("My New List", key, value).IsSuccess());
PropertyTreeEditor::PropertyAccessOutcome outcome = propertyTree.GetContainerItem("My New List", key);
@@ -464,7 +468,9 @@ namespace UnitTest
AZStd::any keyString = AZStd::make_any("0");
EXPECT_FALSE(propertyTree.RemoveContainerItem("My New Int", key).IsSuccess());
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_FALSE(propertyTree.RemoveContainerItem("My New List", keyString).IsSuccess());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
PropertyTreeEditor::PropertyAccessOutcome outcomeAdd1 = propertyTree.RemoveContainerItem("My New List", key);
EXPECT_TRUE(outcomeAdd1.IsSuccess());
@@ -755,7 +761,9 @@ namespace UnitTest
EXPECT_TRUE(propertyTree.SetProperty("My Int", anEmpty).IsSuccess());
EXPECT_TRUE(propertyTree.SetProperty("My Negative Short", anEmpty).IsSuccess());
EXPECT_TRUE(propertyTree.SetProperty("My New List", anEmpty).IsSuccess());
+ AZ_TEST_START_TRACE_SUPPRESSION;
EXPECT_TRUE(propertyTree.SetProperty("My Asset Data", anEmpty).IsSuccess());
+ AZ_TEST_STOP_TRACE_SUPPRESSION(1);
EXPECT_TRUE(propertyTree.SetProperty("My Test Simple Asset", anEmpty).IsSuccess());
}
diff --git a/Code/Framework/Tests/SQLiteConnectionTests.cpp b/Code/Framework/AzToolsFramework/Tests/SQLiteConnectionTests.cpp
similarity index 100%
rename from Code/Framework/Tests/SQLiteConnectionTests.cpp
rename to Code/Framework/AzToolsFramework/Tests/SQLiteConnectionTests.cpp
diff --git a/Code/Framework/Tests/Script/ScriptComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/Script/ScriptComponentTests.cpp
similarity index 100%
rename from Code/Framework/Tests/Script/ScriptComponentTests.cpp
rename to Code/Framework/AzToolsFramework/Tests/Script/ScriptComponentTests.cpp
diff --git a/Code/Framework/Tests/Script/ScriptEntityTests.cpp b/Code/Framework/AzToolsFramework/Tests/Script/ScriptEntityTests.cpp
similarity index 100%
rename from Code/Framework/Tests/Script/ScriptEntityTests.cpp
rename to Code/Framework/AzToolsFramework/Tests/Script/ScriptEntityTests.cpp
diff --git a/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp b/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp
index 98b004feba..f8acf7d224 100644
--- a/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp
@@ -275,6 +275,7 @@ namespace UnitTest
TEST_F(SliceUpgradeTest, IntermmediateDataTypeChange)
{
TestDataA::Reflect(m_serializeContext.get());
+ AzToolsFramework::Components::EditorComponentBase::Reflect(m_serializeContext.get());
TestComponentA_V0::Reflect(m_serializeContext.get());
AZ::Entity* entityA = aznew AZ::Entity();
TestComponentA_V0* component = entityA->CreateComponent();
@@ -320,6 +321,7 @@ namespace UnitTest
TEST_F(SliceUpgradeTest, TypeChangeInUnorderedMap)
{
TestDataB_V0::Reflect(m_serializeContext.get());
+ AzToolsFramework::Components::EditorComponentBase::Reflect(m_serializeContext.get());
TestComponentB_V0::Reflect(m_serializeContext.get());
AZ::Entity* entityA = aznew AZ::Entity();
TestComponentB_V0* componentB = entityA->CreateComponent();
@@ -395,6 +397,7 @@ namespace UnitTest
TEST_F(SliceUpgradeTest, TypeChangeInVector)
{
TestDataB_V0::Reflect(m_serializeContext.get());
+ AzToolsFramework::Components::EditorComponentBase::Reflect(m_serializeContext.get());
TestComponentC_V0::Reflect(m_serializeContext.get());
AZ::Entity* entityA = aznew AZ::Entity();
TestComponentC_V0* componentC = entityA->CreateComponent();
@@ -452,6 +455,7 @@ namespace UnitTest
TEST_F(SliceUpgradeTest, UpgradeSkipVersion_TypeChange_FloatToDouble)
{
// 1. Create an entity with a TestComponentE_V4 with the default value for m_data
+ AzToolsFramework::Components::EditorComponentBase::Reflect(m_serializeContext.get());
TestComponentE_V4::Reflect(m_serializeContext.get());
AZ::Entity* testEntity = aznew AZ::Entity();
TestComponentE_V4* componentEV4 = testEntity->CreateComponent();
@@ -563,6 +567,7 @@ namespace UnitTest
SliceUpgradeTestAsset::Reflect(m_serializeContext.get());
AzFramework::SimpleAssetReference::Register(*m_serializeContext.get());
+ AzToolsFramework::Components::EditorComponentBase::Reflect(m_serializeContext.get());
TestComponentD_V1::Reflect(m_serializeContext.get());
AZ::Entity* entity = aznew AZ::Entity();
entity->CreateComponent();
diff --git a/Code/Framework/Tests/Slices.cpp b/Code/Framework/AzToolsFramework/Tests/Slices.cpp
similarity index 96%
rename from Code/Framework/Tests/Slices.cpp
rename to Code/Framework/AzToolsFramework/Tests/Slices.cpp
index ba413eb727..a8c98d2a85 100644
--- a/Code/Framework/Tests/Slices.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/Slices.cpp
@@ -972,11 +972,11 @@ namespace UnitTest
};
- class TestExportEditorComponent
+ class SliceTestExportEditorComponent
: public AzToolsFramework::Components::EditorComponentBase
{
public:
- AZ_COMPONENT(TestExportEditorComponent, "{8FA877A2-38E6-49AD-B31E-71B86DC8BB03}", AzToolsFramework::Components::EditorComponentBase);
+ AZ_COMPONENT(SliceTestExportEditorComponent, "{8FA877A2-38E6-49AD-B31E-71B86DC8BB03}", AzToolsFramework::Components::EditorComponentBase);
enum ExportComponentType
{
@@ -986,9 +986,9 @@ namespace UnitTest
EXPORT_NULL_COMPONENT
};
- TestExportEditorComponent() {}
+ SliceTestExportEditorComponent() {}
- TestExportEditorComponent(ExportComponentType exportType, bool exportHandled) :
+ SliceTestExportEditorComponent(ExportComponentType exportType, bool exportHandled) :
m_exportType(exportType),
m_exportHandled(exportHandled)
{}
@@ -1000,15 +1000,15 @@ namespace UnitTest
{
if (AZ::SerializeContext* serializeContext = azrtti_cast(context))
{
- serializeContext->Class()
+ serializeContext->Class()
;
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
{
- editContext->Class(
+ editContext->Class(
"Test Export Editor Component", "Validate different options for exporting editor components")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
- ->Attribute(AZ::Edit::Attributes::RuntimeExportCallback, &TestExportEditorComponent::ExportComponent)
+ ->Attribute(AZ::Edit::Attributes::RuntimeExportCallback, &SliceTestExportEditorComponent::ExportComponent)
;
}
}
@@ -1070,7 +1070,7 @@ namespace UnitTest
m_app.RegisterComponentDescriptor(TestExportRuntimeComponent::CreateDescriptor());
m_app.RegisterComponentDescriptor(TestExportOtherRuntimeComponent::CreateDescriptor());
- m_app.RegisterComponentDescriptor(TestExportEditorComponent::CreateDescriptor());
+ m_app.RegisterComponentDescriptor(SliceTestExportEditorComponent::CreateDescriptor());
m_editorSliceAsset = Data::AssetManager::Instance().CreateAsset(Data::AssetId(Uuid::CreateRandom()));
@@ -1125,11 +1125,11 @@ namespace UnitTest
}
// create entity containing the EditorOnly component in the editor slice
- void CreateTestExportEditorEntity(const char* name, TestExportEditorComponent::ExportComponentType exportType, bool exportHandled)
+ void CreateTestExportEditorEntity(const char* name, SliceTestExportEditorComponent::ExportComponentType exportType, bool exportHandled)
{
AZ::Entity* entity = aznew AZ::Entity(name);
entity->CreateComponent();
- entity->CreateComponent(exportType, exportHandled);
+ entity->CreateComponent(exportType, exportHandled);
m_editorSliceComponent->AddEntity(entity);
}
@@ -1314,7 +1314,7 @@ namespace UnitTest
TEST_F(SliceCompilerTest, RuntimeExportCallback_EditorComponentExportedSuccessfully)
{
// Create an editor component that has a RuntimeExportCallback and successfully exports itself
- CreateTestExportEditorEntity("EntityWithEditorComponent", TestExportEditorComponent::ExportComponentType::EXPORT_OTHER_RUNTIME_COMPONENT, true);
+ CreateTestExportEditorEntity("EntityWithEditorComponent", SliceTestExportEditorComponent::ExportComponentType::EXPORT_OTHER_RUNTIME_COMPONENT, true);
if (!CompileSlice())
{
@@ -1325,7 +1325,7 @@ namespace UnitTest
// (A result of Runtime component means BuildGameEntity() ran instead)
AZ::Entity* entity = GetCompiledEntity("EntityWithEditorComponent");
EXPECT_TRUE(entity);
- EXPECT_FALSE(entity->FindComponent());
+ EXPECT_FALSE(entity->FindComponent());
EXPECT_FALSE(entity->FindComponent());
EXPECT_TRUE(entity->FindComponent());
}
@@ -1333,7 +1333,7 @@ namespace UnitTest
TEST_F(SliceCompilerTest, RuntimeExportCallback_EditorComponentExportSuppressed)
{
// Create an editor component that has a RuntimeExportCallback and successfully suppresses itself from exporting
- CreateTestExportEditorEntity("EntityWithEditorComponent", TestExportEditorComponent::ExportComponentType::EXPORT_NULL_COMPONENT, true);
+ CreateTestExportEditorEntity("EntityWithEditorComponent", SliceTestExportEditorComponent::ExportComponentType::EXPORT_NULL_COMPONENT, true);
if (!CompileSlice())
{
@@ -1343,7 +1343,7 @@ namespace UnitTest
// Expected result: exported slice does NOT contain either component.
AZ::Entity* entity = GetCompiledEntity("EntityWithEditorComponent");
EXPECT_TRUE(entity);
- EXPECT_FALSE(entity->FindComponent());
+ EXPECT_FALSE(entity->FindComponent());
EXPECT_FALSE(entity->FindComponent());
EXPECT_FALSE(entity->FindComponent());
}
@@ -1351,7 +1351,7 @@ namespace UnitTest
TEST_F(SliceCompilerTest, RuntimeExportCallback_EditorComponentExportUnhandledFallbackToBuildGameEntity)
{
// Create an editor component that has a RuntimeExportCallback, returns a pointer to itself, but says it wasn't handled.
- CreateTestExportEditorEntity("EntityWithEditorComponent", TestExportEditorComponent::ExportComponentType::EXPORT_EDITOR_COMPONENT, false);
+ CreateTestExportEditorEntity("EntityWithEditorComponent", SliceTestExportEditorComponent::ExportComponentType::EXPORT_EDITOR_COMPONENT, false);
if (!CompileSlice())
{
@@ -1362,7 +1362,7 @@ namespace UnitTest
// produced a runtime component.
AZ::Entity* entity = GetCompiledEntity("EntityWithEditorComponent");
EXPECT_TRUE(entity);
- EXPECT_FALSE(entity->FindComponent());
+ EXPECT_FALSE(entity->FindComponent());
EXPECT_TRUE(entity->FindComponent());
EXPECT_FALSE(entity->FindComponent());
}
@@ -1370,7 +1370,7 @@ namespace UnitTest
TEST_F(SliceCompilerTest, RuntimeExportCallback_EditorComponentExportSuppressedAndUnhandledFallbackToBuildGameEntity)
{
// Create an editor component that has a RuntimeExportCallback and suppresses itself from exporting, but says it wasn't handled
- CreateTestExportEditorEntity("EntityWithEditorComponent", TestExportEditorComponent::ExportComponentType::EXPORT_NULL_COMPONENT, false);
+ CreateTestExportEditorEntity("EntityWithEditorComponent", SliceTestExportEditorComponent::ExportComponentType::EXPORT_NULL_COMPONENT, false);
if (!CompileSlice())
{
@@ -1381,7 +1381,7 @@ namespace UnitTest
// produced a runtime component.
AZ::Entity* entity = GetCompiledEntity("EntityWithEditorComponent");
EXPECT_TRUE(entity);
- EXPECT_FALSE(entity->FindComponent());
+ EXPECT_FALSE(entity->FindComponent());
EXPECT_TRUE(entity->FindComponent());
EXPECT_FALSE(entity->FindComponent());
}
@@ -1389,7 +1389,7 @@ namespace UnitTest
TEST_F(SliceCompilerTest, RuntimeExportCallback_EditorComponentFailsToExportItself)
{
// Create an editor component that has a RuntimeExportCallback and suppresses itself from exporting, but says it wasn't handled
- CreateTestExportEditorEntity("EntityWithEditorComponent", TestExportEditorComponent::ExportComponentType::EXPORT_EDITOR_COMPONENT, true);
+ CreateTestExportEditorEntity("EntityWithEditorComponent", SliceTestExportEditorComponent::ExportComponentType::EXPORT_EDITOR_COMPONENT, true);
// We expect the slice compilation to fail, since an editor component is being exported as a game component
CompileSlice(false);
diff --git a/Code/Framework/AzToolsFramework/Tests/ThumbnailerTests.cpp b/Code/Framework/AzToolsFramework/Tests/ThumbnailerTests.cpp
index 05ffc6055f..8c8ebc47e9 100644
--- a/Code/Framework/AzToolsFramework/Tests/ThumbnailerTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/ThumbnailerTests.cpp
@@ -20,7 +20,6 @@ namespace UnitTest
class ThumbnailerTests
: public ::testing::Test
- , public TraceBusRedirector
{
protected:
void SetUp() override
@@ -31,8 +30,6 @@ namespace UnitTest
// was running, because the environment wasn't setup for it to save these settings.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
- TraceBusRedirector::BusConnect();
-
AZStd::string entityName("test");
AZ::EntityId testEntityId;
AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult(
@@ -61,8 +58,6 @@ namespace UnitTest
void TearDown() override
{
- TraceBusRedirector::BusDisconnect();
-
AzToolsFramework::EditorEntityContextRequestBus::Broadcast(
&AzToolsFramework::EditorEntityContextRequestBus::Events::DestroyEditorEntity,
m_testEntity->GetId());
diff --git a/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp
index 3007f12192..0c50ca2e00 100644
--- a/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/ToolsComponents/EditorLayerComponentTests.cpp
@@ -248,8 +248,6 @@ namespace AzToolsFramework
m_app.Stop();
AZ::Debug::TraceMessageBus::Handler::BusDisconnect();
-
-
}
// A few tests save a layer and want to check the state after saving.
diff --git a/Code/Framework/Tests/TransformComponent.cpp b/Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp
similarity index 99%
rename from Code/Framework/Tests/TransformComponent.cpp
rename to Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp
index 57edbf7f74..21631571f5 100644
--- a/Code/Framework/Tests/TransformComponent.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp
@@ -975,7 +975,7 @@ namespace UnitTest
// AzToolsFramework::Components::TransformComponent
// Fixture base class for AzToolsFramework::Components::TransformComponent tests
- class EditorTransformComponentTest
+ class OldEditorTransformComponentTest
: public ::testing::Test
{
protected:
@@ -1000,7 +1000,7 @@ namespace UnitTest
// Old TransformComponents used to store "Slice Root" entity Id, which could be its own Id.
// The version-converter could end up making an entity into its own transform parent.
// The EditorEntityFixupComponent should fix this up during slice instantiation.
- TEST_F(EditorTransformComponentTest, OldSliceRoots_ShouldHaveNoParent)
+ TEST_F(OldEditorTransformComponentTest, OldSliceRoots_ShouldHaveNoParent)
{
const char kSliceData[] =
R"DELIMITER(
diff --git a/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp b/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp
index cf9f95ef31..384edf76ad 100644
--- a/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp
@@ -127,7 +127,6 @@ namespace UnitTest
void SetUpEditorFixtureImpl() override
{
m_editor = new EntityPropertyEditor();
- m_editorActions.Connect();
m_entity1 = CreateDefaultEditorEntity("Entity1");
m_entity2 = CreateDefaultEditorEntity("Entity2");
@@ -137,13 +136,11 @@ namespace UnitTest
void TearDownEditorFixtureImpl() override
{
- m_editorActions.Disconnect();
delete m_editor;
}
public:
EntityPropertyEditor* m_editor;
- TestEditorActions m_editorActions;
EntityIdList m_entityIds;
AZ::EntityId m_entity1;
AZ::EntityId m_entity2;
@@ -234,8 +231,6 @@ namespace UnitTest
entities.insert(m_levelEntity);
m_levelEditor->SetOverrideEntityIds(entities);
- m_editorActions.Connect();
-
// Connect to the EditorRequestBus so that we can intercept calls checking whether or not a level is currently open.
AzToolsFramework::EditorRequestBus::Handler::BusConnect();
}
@@ -244,7 +239,6 @@ namespace UnitTest
{
AzToolsFramework::EditorRequestBus::Handler::BusDisconnect();
- m_editorActions.Disconnect();
delete m_levelEditor;
}
@@ -258,7 +252,6 @@ namespace UnitTest
public:
EntityPropertyEditor* m_levelEditor;
- TestEditorActions m_editorActions;
AZ::EntityId m_levelEntity;
bool m_levelOpen = false;
};
diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiWidgetManagerTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiWidgetManagerTests.cpp
index f1d282e869..7480c937f4 100644
--- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiWidgetManagerTests.cpp
+++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportUiWidgetManagerTests.cpp
@@ -85,19 +85,8 @@ namespace UnitTest
}
class ViewportUiWidgetAssertFixture
- : public ::testing::Test
- , UnitTest::TraceBusRedirector
- {
- public:
- void SetUp() override
- {
- AZ::Debug::TraceMessageBus::Handler::BusConnect();
- }
- void TearDown() override
- {
- AZ::Debug::TraceMessageBus::Handler::BusDisconnect();
- }
- };
+ : public ScopedAllocatorSetupFixture
+ {};
TEST_F(ViewportUiWidgetAssertFixture, RegisterUpdateCallbackDoesNotRegisterFunctionForNotAddedObject)
{
diff --git a/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake b/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake
index 2e2be6f921..9d1ec3e346 100644
--- a/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake
+++ b/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake
@@ -11,35 +11,37 @@ set(FILES
AssetFileInfoListComparison.cpp
AssetSeedManager.cpp
AssetSystemMocks.h
- ComponentModeTests.cpp
- ComponentModeTestDoubles.h
+ ComponentAdapterTests.cpp
+ ComponentAddRemove.cpp
ComponentModeTestDoubles.cpp
- ComponentModeTestFixture.h
+ ComponentModeTestDoubles.h
ComponentModeTestFixture.cpp
+ ComponentModeTestFixture.h
+ ComponentModeTests.cpp
EditorTransformComponentSelectionTests.cpp
EditorVertexSelectionTests.cpp
+ Entity/EditorEntityContextComponentTests.cpp
+ Entity/EditorEntityHelpersTests.cpp
+ Entity/EditorEntitySearchComponentTests.cpp
+ Entity/EditorEntitySelectionTests.cpp
EntityIdQLabelTests.cpp
EntityInspectorTests.cpp
+ EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp
+ EntityOwnershipService/EntityOwnershipServiceTestFixture.h
+ EntityOwnershipService/SliceEditorEntityOwnershipTests.cpp
+ EntityOwnershipService/SliceEntityOwnershipTests.cpp
+ EntityTestbed.h
+ FileFunc.cpp
FingerprintingTests.cpp
+ GenericComponentWrapperTest.cpp
+ InstanceDataHierarchy.cpp
+ IntegerPrimtitiveTestConfig.h
LogLines.cpp
ManipulatorBoundsTests.cpp
ManipulatorCoreTests.cpp
ManipulatorViewTests.cpp
- PlatformAddressedAssetCatalogTests.cpp
- PropertyIntCtrlCommonTests.h
- IntegerPrimtitiveTestConfig.h
- QtWidgetLimitsTests.cpp
- PropertyIntSliderCtrlTests.cpp
- PropertyIntSpinCtrlTests.cpp
- PropertyTreeEditorTests.cpp
- PythonBindingTests.cpp
- Slice.cpp
- SliceUpgradeTestsData.h
- SliceUpgradeTests.cpp
- SpinBoxTests.cpp
- ThumbnailerTests.cpp
- UndoStack.cpp
PerforceComponentTests.cpp
+ PlatformAddressedAssetCatalogTests.cpp
Prefab/Benchmark/PrefabBenchmarkFixture.cpp
Prefab/Benchmark/PrefabBenchmarkFixture.h
Prefab/Benchmark/PrefabCreateBenchmarks.cpp
@@ -47,13 +49,13 @@ set(FILES
Prefab/Benchmark/PrefabLoadBenchmarks.cpp
Prefab/Benchmark/PrefabUpdateInstancesBenchmarks.cpp
Prefab/Benchmark/SpawnableCreateBenchmarks.cpp
- Prefab/Spawnable/SpawnableMetaDataTests.cpp
Prefab/MockPrefabFileIOActionValidator.cpp
Prefab/MockPrefabFileIOActionValidator.h
Prefab/PrefabDuplicateTests.cpp
Prefab/PrefabEntityAliasTests.cpp
Prefab/PrefabInstanceToTemplatePropagatorTests.cpp
Prefab/PrefabInstantiateTests.cpp
+ Prefab/PrefabInstantiateTests.cpp
Prefab/PrefabLoadTemplateTests.cpp
Prefab/PrefabTestComponent.cpp
Prefab/PrefabTestComponent.h
@@ -67,37 +69,50 @@ set(FILES
Prefab/PrefabTestFixture.h
Prefab/PrefabTestUndoFixture.cpp
Prefab/PrefabTestUndoFixture.h
+ Prefab/PrefabTestUtils.h
Prefab/PrefabUndoLinkTests.cpp
Prefab/PrefabUndoTests.cpp
- Prefab/PrefabTestUtils.h
Prefab/PrefabUpdateInstancesTests.cpp
Prefab/PrefabUpdateTemplateTests.cpp
Prefab/PrefabUpdateWithPatchesTests.cpp
- Prefab/PrefabInstantiateTests.cpp
+ Prefab/Spawnable/SpawnableMetaDataTests.cpp
Prefab/SpawnableCreateTests.cpp
- Prefab/SpawnableRemoveEditorInfoTests.cpp
Prefab/SpawnableRemoveEditorInfoTestFixture.cpp
Prefab/SpawnableRemoveEditorInfoTestFixture.h
- Prefab/SpawnableSortEntitiesTests.cpp
+ Prefab/SpawnableRemoveEditorInfoTests.cpp
Prefab/SpawnableSortEntitiesTestFixture.cpp
Prefab/SpawnableSortEntitiesTestFixture.h
- Entity/EditorEntityContextComponentTests.cpp
- Entity/EditorEntityHelpersTests.cpp
- Entity/EditorEntitySearchComponentTests.cpp
- Entity/EditorEntitySelectionTests.cpp
- SliceStabilityTests/SliceStabilityTestFramework.h
- SliceStabilityTests/SliceStabilityTestFramework.cpp
+ Prefab/SpawnableSortEntitiesTests.cpp
+ PropertyIntCtrlCommonTests.h
+ PropertyIntSliderCtrlTests.cpp
+ PropertyIntSpinCtrlTests.cpp
+ PropertyTreeEditorTests.cpp
+ PythonBindingTests.cpp
+ QtWidgetLimitsTests.cpp
+ Script/ScriptComponentTests.cpp
+ Script/ScriptEntityTests.cpp
+ Slice.cpp
+ Slices.cpp
SliceStabilityTests/SliceStabilityCreateTests.cpp
SliceStabilityTests/SliceStabilityPushTests.cpp
SliceStabilityTests/SliceStabilityReParentTests.cpp
+ SliceStabilityTests/SliceStabilityTestFramework.cpp
+ SliceStabilityTests/SliceStabilityTestFramework.h
+ SliceUpgradeTests.cpp
+ SliceUpgradeTestsData.h
+ SpinBoxTests.cpp
+ SQLiteConnectionTests.cpp
+ ThumbnailerTests.cpp
ToolsComponents/EditorLayerComponentTests.cpp
ToolsComponents/EditorTransformComponentTests.cpp
+ TransformComponent.cpp
UI/EntityPropertyEditorTests.cpp
+ UndoStack.cpp
+ Viewport/ClusterTests.cpp
Viewport/ViewportScreenTests.cpp
Viewport/ViewportUiClusterTests.cpp
Viewport/ViewportUiDisplayTests.cpp
Viewport/ViewportUiManagerTests.cpp
- Viewport/ClusterTests.cpp
Viewport/ViewportUiWidgetManagerTests.cpp
Visibility/EditorVisibilityTests.cpp
)
diff --git a/Code/Framework/CMakeLists.txt b/Code/Framework/CMakeLists.txt
index e12a8f4cab..880751632c 100644
--- a/Code/Framework/CMakeLists.txt
+++ b/Code/Framework/CMakeLists.txt
@@ -18,4 +18,3 @@ add_subdirectory(AzNetworking)
add_subdirectory(Crcfix)
add_subdirectory(GFxFramework)
add_subdirectory(GridMate)
-add_subdirectory(Tests)
diff --git a/Code/Framework/Tests/CMakeLists.txt b/Code/Framework/Tests/CMakeLists.txt
deleted file mode 100644
index 6781466413..0000000000
--- a/Code/Framework/Tests/CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# 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
-#
-#
-
-if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
-
- ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
-
- ly_add_target(
- NAME AzFrameworkTestShared STATIC
- NAMESPACE AZ
- FILES_CMAKE
- framework_shared_tests_files.cmake
- INCLUDE_DIRECTORIES
- PUBLIC
- .
- BUILD_DEPENDENCIES
- PRIVATE
- AZ::AzCore
- AZ::AzFramework
- )
-
- if(PAL_TRAIT_BUILD_HOST_TOOLS)
- ly_add_target(
- NAME ProcessLaunchTest EXECUTABLE
- NAMESPACE AZ
- FILES_CMAKE
- process_launch_test_files.cmake
- INCLUDE_DIRECTORIES
- PRIVATE
- .
- BUILD_DEPENDENCIES
- PRIVATE
- AZ::AzCore
- AZ::AzFramework
- )
-
- ly_add_target(
- NAME Framework.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
- NAMESPACE AZ
- FILES_CMAKE
- frameworktests_files.cmake
- INCLUDE_DIRECTORIES
- PRIVATE
- .
- ${pal_dir}
- BUILD_DEPENDENCIES
- PRIVATE
- AZ::AzTest
- AZ::AzToolsFramework
- AZ::AzTestShared
- AZ::AzFrameworkTestShared
- RUNTIME_DEPENDENCIES
- AZ::ProcessLaunchTest
- )
- ly_add_googletest(
- NAME AZ::Framework.Tests
- )
- endif()
-
-endif()
diff --git a/Code/Tools/GridHub/GridHub/main.cpp b/Code/Tools/GridHub/GridHub/main.cpp
index 5b35abff6c..0b1cfced93 100644
--- a/Code/Tools/GridHub/GridHub/main.cpp
+++ b/Code/Tools/GridHub/GridHub/main.cpp
@@ -187,7 +187,6 @@ protected:
{
ComponentApplication::SetSettingsRegistrySpecializations(specializations);
specializations.Append("tools");
- specializations.Append("editor");
specializations.Append("gridhub");
}
diff --git a/Code/Tools/SceneAPI/SceneCore/Components/ExportingComponent.cpp b/Code/Tools/SceneAPI/SceneCore/Components/ExportingComponent.cpp
index 62daba1197..911f469b2f 100644
--- a/Code/Tools/SceneAPI/SceneCore/Components/ExportingComponent.cpp
+++ b/Code/Tools/SceneAPI/SceneCore/Components/ExportingComponent.cpp
@@ -7,6 +7,8 @@
#include
#include
+#include
+#include
namespace AZ
{
@@ -31,6 +33,12 @@ namespace AZ
{
serializeContext->Class()->Version(2);
}
+
+ AZ::BehaviorContext* behaviorContext = azrtti_cast(context);
+ if (behaviorContext)
+ {
+ Events::ExportProductList::Reflect(behaviorContext);
+ }
}
} // namespace SceneCore
} // namespace SceneAPI
diff --git a/Code/Tools/SceneAPI/SceneCore/DllMain.cpp b/Code/Tools/SceneAPI/SceneCore/DllMain.cpp
index 7874ada7be..ac3c307b6c 100644
--- a/Code/Tools/SceneAPI/SceneCore/DllMain.cpp
+++ b/Code/Tools/SceneAPI/SceneCore/DllMain.cpp
@@ -211,6 +211,7 @@ namespace AZ
AZ::SceneAPI::Containers::SceneGraph::Reflect(context);
AZ::SceneAPI::Containers::SceneManifest::Reflect(context);
AZ::SceneAPI::Containers::RuleContainer::Reflect(context);
+ AZ::SceneAPI::SceneCore::ExportingComponent::Reflect(context);
}
void Activate()
diff --git a/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.cpp b/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.cpp
index c3a9abcbd2..798978024e 100644
--- a/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.cpp
+++ b/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.cpp
@@ -6,6 +6,8 @@
*/
#include
+#include
+#include
namespace AZ
{
@@ -49,6 +51,45 @@ namespace AZ
return *this;
}
+ void ExportProductList::Reflect(ReflectContext* context)
+ {
+ if (auto* serializeContext = azrtti_cast(context))
+ {
+ serializeContext->Class()->Version(1);
+ serializeContext->Class()->Version(1);
+ }
+
+ if (auto* behaviorContext = azrtti_cast(context))
+ {
+ behaviorContext->Class("ExportProduct")
+ ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
+ ->Attribute(AZ::Script::Attributes::Module, "scene")
+ ->Property("filename", BehaviorValueProperty(&ExportProduct::m_filename))
+ ->Property("sourceId", BehaviorValueProperty(&ExportProduct::m_id))
+ ->Property("assetType", BehaviorValueProperty(&ExportProduct::m_assetType))
+ ->Property("productDependencies", BehaviorValueProperty(&ExportProduct::m_productDependencies))
+ ->Property("subId",
+ [](ExportProduct* self) { return self->m_subId.has_value() ? self->m_subId.value() : 0; },
+ [](ExportProduct* self, u32 subId) { self->m_subId = AZStd::optional(subId); });
+
+ behaviorContext->Class("ExportProductList")
+ ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
+ ->Attribute(AZ::Script::Attributes::Module, "scene")
+ ->Method("AddProduct", [](ExportProductList& self, ExportProduct& product)
+ {
+ self.AddProduct(
+ product.m_filename,
+ product.m_id,
+ product.m_assetType,
+ product.m_lod,
+ product.m_subId,
+ product.m_dependencyFlags);
+ })
+ ->Method("GetProducts", &ExportProductList::GetProducts)
+ ->Method("AddDependencyToProduct", &ExportProductList::AddDependencyToProduct);
+ }
+ }
+
ExportProduct& ExportProductList::AddProduct(const AZStd::string& filename, Uuid id, Data::AssetType assetType, AZStd::optional lod, AZStd::optional subId,
Data::ProductDependencyInfo::ProductDependencyFlags dependencyFlags)
{
diff --git a/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.h b/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.h
index 38deea3f9f..a99303e08b 100644
--- a/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.h
+++ b/Code/Tools/SceneAPI/SceneCore/Events/ExportProductList.h
@@ -14,6 +14,8 @@
namespace AZ
{
+ class ReflectContext;
+
namespace SceneAPI
{
namespace Events
@@ -24,6 +26,7 @@ namespace AZ
Data::ProductDependencyInfo::ProductDependencyFlags dependencyFlags = Data::ProductDependencyInfo::CreateFlags(Data::AssetLoadBehavior::NoLoad));
SCENE_CORE_API ExportProduct(AZStd::string&& filename, Uuid id, Data::AssetType assetType, AZStd::optional lod, AZStd::optional subId,
Data::ProductDependencyInfo::ProductDependencyFlags dependencyFlags = Data::ProductDependencyInfo::CreateFlags(Data::AssetLoadBehavior::NoLoad));
+ ExportProduct() = default;
ExportProduct(const ExportProduct& rhs) = default;
SCENE_CORE_API ExportProduct(ExportProduct&& rhs);
@@ -54,6 +57,8 @@ namespace AZ
class ExportProductList
{
public:
+ static void Reflect(ReflectContext* context);
+
SCENE_CORE_API ExportProduct& AddProduct(const AZStd::string& filename, Uuid id, Data::AssetType assetType, AZStd::optional lod, AZStd::optional subId,
Data::ProductDependencyInfo::ProductDependencyFlags dependencyFlags = Data::ProductDependencyInfo::CreateFlags(Data::AssetLoadBehavior::NoLoad));
SCENE_CORE_API ExportProduct& AddProduct(AZStd::string&& filename, Uuid id, Data::AssetType assetType, AZStd::optional lod, AZStd::optional subId,
@@ -69,3 +74,9 @@ namespace AZ
} // namespace Events
} // namespace SceneAPI
} // namespace AZ
+
+namespace AZ
+{
+ AZ_TYPE_INFO_SPECIALIZE(SceneAPI::Events::ExportProduct, "{6054EDCB-4C04-4D96-BF26-704999FFB725}");
+ AZ_TYPE_INFO_SPECIALIZE(SceneAPI::Events::ExportProductList, "{1C76A51F-431B-4987-B653-CFCC940D0D0F}");
+}
diff --git a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp
index a4b002db7d..073f357ee6 100644
--- a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp
+++ b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -75,15 +76,16 @@ namespace AZ
filename += s_extension;
filename += s_generated;
- AZStd::string altManifestPath = path;
+ AZStd::string altManifestFolder = path;
AzFramework::ApplicationRequests::Bus::Broadcast(
- &AzFramework::ApplicationRequests::Bus::Events::MakePathRootRelative,
- altManifestPath);
+ &AzFramework::ApplicationRequests::Bus::Events::MakePathRelative,
+ altManifestFolder,
+ AZ::Utils::GetProjectPath().c_str());
- AZ::StringFunc::Path::GetFolderPath(altManifestPath.c_str(), altManifestPath);
+ AZ::StringFunc::Path::GetFolderPath(altManifestFolder.c_str(), altManifestFolder);
AZStd::string generatedAssetInfoPath;
- AZ::StringFunc::Path::Join(assetCacheRoot.c_str(), altManifestPath.c_str(), generatedAssetInfoPath);
+ AZ::StringFunc::Path::Join(assetCacheRoot.c_str(), altManifestFolder.c_str(), generatedAssetInfoPath);
AZ::StringFunc::Path::ConstructFull(generatedAssetInfoPath.c_str(), filename.c_str(), generatedAssetInfoPath);
if (!AZ::IO::FileIOBase::GetInstance()->Exists(generatedAssetInfoPath.c_str()))
diff --git a/Code/Tools/SceneAPI/SceneCore/Tests/Containers/SceneBehaviorTests.cpp b/Code/Tools/SceneAPI/SceneCore/Tests/Containers/SceneBehaviorTests.cpp
index e1c72bc8b4..4e08181b83 100644
--- a/Code/Tools/SceneAPI/SceneCore/Tests/Containers/SceneBehaviorTests.cpp
+++ b/Code/Tools/SceneAPI/SceneCore/Tests/Containers/SceneBehaviorTests.cpp
@@ -28,710 +28,731 @@ extern "C" AZ_DLL_EXPORT void ReflectBehavior(AZ::BehaviorContext* context);
// the DLL entry point for SceneCore to reflect its serialize context
extern "C" AZ_DLL_EXPORT void ReflectTypes(AZ::SerializeContext* context);
-namespace AZ
+namespace AZ::SceneAPI::Containers
{
- namespace SceneAPI
+ class MockManifestRule : public DataTypes::IManifestObject
{
- namespace Containers
+ public:
+ AZ_RTTI(MockManifestRule, "{D6F96B48-4E6F-4EE8-A5A3-959B76F90DA8}", IManifestObject);
+ AZ_CLASS_ALLOCATOR(MockManifestRule, AZ::SystemAllocator, 0);
+
+ MockManifestRule() = default;
+
+ MockManifestRule(double value)
+ : m_value(value)
+ {
+ }
+
+ double GetValue() const
+ {
+ return m_value;
+ }
+
+ void SetValue(double value)
{
- class MockManifestRule : public DataTypes::IManifestObject
+ m_value = value;
+ }
+
+ static void Reflect(AZ::ReflectContext* context)
+ {
+ AZ::SerializeContext* serializeContext = azrtti_cast(context);
+ if (serializeContext)
{
- public:
- AZ_RTTI(MockManifestRule, "{D6F96B48-4E6F-4EE8-A5A3-959B76F90DA8}", IManifestObject);
- AZ_CLASS_ALLOCATOR(MockManifestRule, AZ::SystemAllocator, 0);
+ serializeContext->Class()
+ ->Version(1)
+ ->Field("value", &MockManifestRule::m_value);
+ }
+ }
- MockManifestRule() = default;
+ private:
+ double m_value = 0.0;
+ };
- MockManifestRule(double value)
- : m_value(value)
- {
- }
+ struct MockBuilder final
+ {
+ AZ_TYPE_INFO(MockBuilder, "{ECF0FB2C-E5C0-4B89-993C-8511A7EF6894}");
- double GetValue() const
- {
- return m_value;
- }
+ AZStd::unique_ptr m_scene;
- void SetValue(double value)
- {
- m_value = value;
- }
+ MockBuilder()
+ {
+ m_scene = AZStd::make_unique("unit_scene");
+ }
- static void Reflect(AZ::ReflectContext* context)
- {
- AZ::SerializeContext* serializeContext = azrtti_cast(context);
- if (serializeContext)
- {
- serializeContext->Class()
- ->Version(1)
- ->Field("value", &MockManifestRule::m_value);
- }
- }
+ ~MockBuilder()
+ {
+ m_scene.reset();
+ }
- private:
- double m_value = 0.0;
- };
+ void BuildSceneGraph()
+ {
+ m_scene->SetManifestFilename("manifest_filename");
+ m_scene->SetSource("unit_source_filename", azrtti_typeid());
+
+ auto& graph = m_scene->GetGraph();
+
+ /*----------------------------\
+ | Root |
+ | / \ |
+ | | | |
+ | A B |
+ | | /|\ |
+ | C I J K |
+ | / | \ \ |
+ | D E F L |
+ | / \ |
+ | G H |
+ \----------------------------*/
+
+ //Build up the graph
+ const auto indexA = graph.AddChild(graph.GetRoot(), "A", AZStd::make_shared(1));
+ const auto indexC = graph.AddChild(indexA, "C", AZStd::make_shared(3));
+ const auto indexE = graph.AddChild(indexC, "E", AZStd::make_shared(4));
+ graph.AddChild(indexC, "D", AZStd::make_shared(5));
+ graph.AddChild(indexC, "F", AZStd::make_shared(6));
+ graph.AddChild(indexE, "G", AZStd::make_shared(7));
+ graph.AddChild(indexE, "H", AZStd::make_shared(8));
+ const auto indexB = graph.AddChild(graph.GetRoot(), "B", AZStd::make_shared(2));
+ const auto indexK = graph.AddChild(indexB, "K", AZStd::make_shared(2));
+ graph.AddChild(indexB, "I", AZStd::make_shared(9));
+ graph.AddChild(indexB, "J", AZStd::make_shared(10));
+ graph.AddChild(indexK, "L", AZStd::make_shared(12));
+
+ m_scene->GetManifest().AddEntry(AZStd::make_shared(0.1));
+ m_scene->GetManifest().AddEntry(AZStd::make_shared(2.3));
+ m_scene->GetManifest().AddEntry(AZStd::make_shared(4.5));
+ }
- struct MockBuilder final
+ static void Reflect(ReflectContext* context)
+ {
+ BehaviorContext* behaviorContext = azrtti_cast(context);
+ if (behaviorContext)
{
- AZ_TYPE_INFO(MockBuilder, "{ECF0FB2C-E5C0-4B89-993C-8511A7EF6894}");
+ behaviorContext->Class()
+ ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
+ ->Attribute(AZ::Script::Attributes::Module, "scene")
+ ->Method("BuildSceneGraph", [](MockBuilder& self)
+ {
+ return self.BuildSceneGraph();
+ })
+ ->Method("GetScene", [](MockBuilder& self)
+ {
+ return self.m_scene.get();
+ });
+ }
+ }
+ };
- AZStd::unique_ptr m_scene;
+ class SceneGraphBehaviorTest
+ : public ::testing::Test
+ {
+ public:
+ void SetUp() override
+ {
+ m_behaviorContext = AZStd::make_unique();
+ ReflectBehavior(m_behaviorContext.get());
+ }
- MockBuilder()
- {
- m_scene = AZStd::make_unique("unit_scene");
- }
+ void TearDown() override
+ {
+ m_behaviorContext.reset();
+ }
- ~MockBuilder()
- {
- m_scene.reset();
- }
+ AZ::BehaviorClass* GetBehaviorClass(const AZ::TypeId& behaviorClassType)
+ {
+ auto entry = m_behaviorContext->m_typeToClassMap.find(behaviorClassType);
+ return (entry != m_behaviorContext->m_typeToClassMap.end()) ? entry->second : nullptr;
+ }
- void BuildSceneGraph()
- {
- m_scene->SetManifestFilename("manifest_filename");
- m_scene->SetSource("unit_source_filename", azrtti_typeid());
-
- auto& graph = m_scene->GetGraph();
-
- /*----------------------------\
- | Root |
- | / \ |
- | | | |
- | A B |
- | | /|\ |
- | C I J K |
- | / | \ \ |
- | D E F L |
- | / \ |
- | G H |
- \----------------------------*/
-
- //Build up the graph
- const auto indexA = graph.AddChild(graph.GetRoot(), "A", AZStd::make_shared(1));
- const auto indexC = graph.AddChild(indexA, "C", AZStd::make_shared(3));
- const auto indexE = graph.AddChild(indexC, "E", AZStd::make_shared(4));
- graph.AddChild(indexC, "D", AZStd::make_shared(5));
- graph.AddChild(indexC, "F", AZStd::make_shared(6));
- graph.AddChild(indexE, "G", AZStd::make_shared(7));
- graph.AddChild(indexE, "H", AZStd::make_shared(8));
- const auto indexB = graph.AddChild(graph.GetRoot(), "B", AZStd::make_shared(2));
- const auto indexK = graph.AddChild(indexB, "K", AZStd::make_shared(2));
- graph.AddChild(indexB, "I", AZStd::make_shared(9));
- graph.AddChild(indexB, "J", AZStd::make_shared(10));
- graph.AddChild(indexK, "L", AZStd::make_shared(12));
-
- m_scene->GetManifest().AddEntry(AZStd::make_shared(0.1));
- m_scene->GetManifest().AddEntry(AZStd::make_shared(2.3));
- m_scene->GetManifest().AddEntry(AZStd::make_shared(4.5));
- }
+ AZ::BehaviorProperty* GetBehaviorProperty(AZ::BehaviorClass& behaviorClass, AZStd::string_view propertyName)
+ {
+ auto entry = behaviorClass.m_properties.find(propertyName);
+ return (entry != behaviorClass.m_properties.end()) ? entry->second : nullptr;
+ }
- static void Reflect(ReflectContext* context)
- {
- BehaviorContext* behaviorContext = azrtti_cast(context);
- if (behaviorContext)
- {
- behaviorContext->Class()
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
- ->Attribute(AZ::Script::Attributes::Module, "scene")
- ->Method("BuildSceneGraph", [](MockBuilder& self)
- {
- return self.BuildSceneGraph();
- })
- ->Method("GetScene", [](MockBuilder& self)
- {
- return self.m_scene.get();
- });
- }
- }
- };
+ bool HasBehaviorClass(const AZ::TypeId& behaviorClassType)
+ {
+ return GetBehaviorClass(behaviorClassType) != nullptr;
+ }
- class SceneGraphBehaviorTest
- : public ::testing::Test
+ bool HasProperty(AZ::BehaviorClass& behaviorClass, AZStd::string_view propertyName, const AZ::TypeId& propertyClassType)
+ {
+ AZ::BehaviorProperty* behaviorProperty = GetBehaviorProperty(behaviorClass, propertyName);
+ if (behaviorProperty)
{
- public:
- void SetUp() override
- {
- m_behaviorContext = AZStd::make_unique();
- ReflectBehavior(m_behaviorContext.get());
- }
+ return behaviorProperty->m_getter->GetResult()->m_typeId == propertyClassType;
+ }
+ return false;
+ }
- void TearDown() override
- {
- m_behaviorContext.reset();
- }
+ using ArgList = AZStd::vector;
- AZ::BehaviorClass* GetBehaviorClass(const AZ::TypeId& behaviorClassType)
- {
- auto entry = m_behaviorContext->m_typeToClassMap.find(behaviorClassType);
- return (entry != m_behaviorContext->m_typeToClassMap.end()) ? entry->second : nullptr;
- }
+ bool HasMethodWithInput(AZ::BehaviorClass& behaviorClass, AZStd::string_view methodName, const ArgList& input)
+ {
+ auto entry = behaviorClass.m_methods.find(methodName);
+ if (entry == behaviorClass.m_methods.end())
+ {
+ return false;
+ }
+ AZ::BehaviorMethod* method = entry->second;
- AZ::BehaviorProperty* GetBehaviorProperty(AZ::BehaviorClass& behaviorClass, AZStd::string_view propertyName)
- {
- auto entry = behaviorClass.m_properties.find(propertyName);
- return (entry != behaviorClass.m_properties.end()) ? entry->second : nullptr;
- }
+ const size_t methodArgsCount = method->IsMember() ? method->GetNumArguments() - 1 : method->GetNumArguments();
+ if (input.size() != methodArgsCount)
+ {
+ return false;
+ }
- bool HasBehaviorClass(const AZ::TypeId& behaviorClassType)
+ for (size_t argIndex = 0; argIndex < input.size(); ++argIndex)
+ {
+ const size_t thisPointerOffset = method->IsMember() ? 1 : 0;
+ const auto argType = method->GetArgument(argIndex + thisPointerOffset)->m_typeId;
+ const auto inputType = input[argIndex];
+ if (inputType != argType)
{
- return GetBehaviorClass(behaviorClassType) != nullptr;
+ return false;
}
+ }
+ return true;
+ }
- bool HasProperty(AZ::BehaviorClass& behaviorClass, AZStd::string_view propertyName, const AZ::TypeId& propertyClassType)
+ bool HasMethodWithOutput(AZ::BehaviorClass& behaviorClass, AZStd::string_view methodName, const AZ::TypeId& output, const ArgList& input)
+ {
+ auto entry = behaviorClass.m_methods.find(methodName);
+ if (entry == behaviorClass.m_methods.end())
+ {
+ return false;
+ }
+ AZ::BehaviorMethod* method = entry->second;
+ if (method->HasResult())
+ {
+ if (method->GetResult()->m_typeId != output)
{
- AZ::BehaviorProperty* behaviorProperty = GetBehaviorProperty(behaviorClass, propertyName);
- if (behaviorProperty)
- {
- return behaviorProperty->m_getter->GetResult()->m_typeId == propertyClassType;
- }
return false;
}
+ }
+ else
+ {
+ return false;
+ }
+ return HasMethodWithInput(behaviorClass, methodName, input);
+ }
- using ArgList = AZStd::vector;
+ AZStd::unique_ptr m_behaviorContext;
+ };
- bool HasMethodWithInput(AZ::BehaviorClass& behaviorClass, AZStd::string_view methodName, const ArgList& input)
- {
- auto entry = behaviorClass.m_methods.find(methodName);
- if (entry == behaviorClass.m_methods.end())
- {
- return false;
- }
- AZ::BehaviorMethod* method = entry->second;
+ TEST_F(SceneGraphBehaviorTest, SceneClass_BehaviorContext_Exists)
+ {
+ EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
+ }
- const size_t methodArgsCount = method->IsMember() ? method->GetNumArguments() - 1 : method->GetNumArguments();
- if (input.size() != methodArgsCount)
- {
- return false;
- }
+ TEST_F(SceneGraphBehaviorTest, SceneClass_BehaviorContext_HasExpectedProperties)
+ {
+ AZ::BehaviorClass* behaviorClass = GetBehaviorClass(azrtti_typeid());
+ ASSERT_NE(nullptr, behaviorClass);
+ EXPECT_TRUE(HasProperty(*behaviorClass, "name", azrtti_typeid()));
+ EXPECT_TRUE(HasProperty(*behaviorClass, "manifestFilename", azrtti_typeid()));
+ EXPECT_TRUE(HasProperty(*behaviorClass, "sourceFilename", azrtti_typeid()));
+ EXPECT_TRUE(HasProperty(*behaviorClass, "sourceGuid", azrtti_typeid()));
+ EXPECT_TRUE(HasProperty(*behaviorClass, "graph", azrtti_typeid()));
+ EXPECT_TRUE(HasProperty(*behaviorClass, "manifest", azrtti_typeid()));
+ }
- for (size_t argIndex = 0; argIndex < input.size(); ++argIndex)
- {
- const size_t thisPointerOffset = method->IsMember() ? 1 : 0;
- const auto argType = method->GetArgument(argIndex + thisPointerOffset)->m_typeId;
- const auto inputType = input[argIndex];
- if (inputType != argType)
- {
- return false;
- }
- }
- return true;
- }
+ TEST_F(SceneGraphBehaviorTest, SceneGraphClass_BehaviorContext_Exists)
+ {
+ EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
+ EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
+ EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
+ }
- bool HasMethodWithOutput(AZ::BehaviorClass& behaviorClass, AZStd::string_view methodName, const AZ::TypeId& output, const ArgList& input)
- {
- auto entry = behaviorClass.m_methods.find(methodName);
- if (entry == behaviorClass.m_methods.end())
- {
- return false;
- }
- AZ::BehaviorMethod* method = entry->second;
- if (method->HasResult())
- {
- if (method->GetResult()->m_typeId != output)
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- return HasMethodWithInput(behaviorClass, methodName, input);
- }
+ TEST_F(SceneGraphBehaviorTest, SceneGraphClass_BehaviorContext_HasExpectedProperties)
+ {
+ using namespace AZ::SceneAPI::Containers;
+
+ AZ::BehaviorClass* behaviorClass = GetBehaviorClass(azrtti_typeid());
+ ASSERT_NE(nullptr, behaviorClass);
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetNodeName", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetRoot", azrtti_typeid(), {}));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeContent", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeSibling", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeChild", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeParent", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "IsNodeEndPoint", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetNodeCount", azrtti_typeid(), {}));
+ EXPECT_TRUE(HasMethodWithOutput(
+ *behaviorClass,
+ "GetNodeParent",
+ azrtti_typeid(),
+ { azrtti_typeid(), azrtti_typeid() }
+ ));
+ EXPECT_TRUE(HasMethodWithOutput(
+ *behaviorClass,
+ "GetNodeSibling",
+ azrtti_typeid(),
+ { azrtti_typeid(), azrtti_typeid() }
+ ));
+ EXPECT_TRUE(HasMethodWithOutput(
+ *behaviorClass,
+ "GetNodeChild",
+ azrtti_typeid(),
+ { azrtti_typeid(), azrtti_typeid() }
+ ));
+ EXPECT_TRUE(HasMethodWithOutput(
+ *behaviorClass,
+ "FindWithPath",
+ azrtti_typeid(),
+ { azrtti_typeid(), azrtti_typeid() }
+ ));
+ EXPECT_TRUE(HasMethodWithOutput(
+ *behaviorClass,
+ "FindWithRootAndPath",
+ azrtti_typeid(),
+ { azrtti_typeid(), azrtti_typeid(), azrtti_typeid() }
+ ));
+ }
- AZStd::unique_ptr m_behaviorContext;
- };
+ TEST_F(SceneGraphBehaviorTest, SceneGraphNodeIndexClass_BehaviorContext_HasExpectedProperties)
+ {
+ using namespace AZ::SceneAPI::Containers;
+
+ AZ::BehaviorClass* behaviorClass = GetBehaviorClass(azrtti_typeid());
+ ASSERT_NE(nullptr, behaviorClass);
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "AsNumber", azrtti_typeid(), {}));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "Distance", azrtti_typeid(), { azrtti_typeid() }));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "IsValid", azrtti_typeid(), {}));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "Equal", azrtti_typeid(), { azrtti_typeid() }));
+ }
- TEST_F(SceneGraphBehaviorTest, SceneClass_BehaviorContext_Exists)
- {
- EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
- }
+ TEST_F(SceneGraphBehaviorTest, SceneGraphNameClass_BehaviorContext_HasExpectedProperties)
+ {
+ using namespace AZ::SceneAPI::Containers;
- TEST_F(SceneGraphBehaviorTest, SceneClass_BehaviorContext_HasExpectedProperties)
- {
- AZ::BehaviorClass* behaviorClass = GetBehaviorClass(azrtti_typeid());
- ASSERT_NE(nullptr, behaviorClass);
- EXPECT_TRUE(HasProperty(*behaviorClass, "name", azrtti_typeid()));
- EXPECT_TRUE(HasProperty(*behaviorClass, "manifestFilename", azrtti_typeid()));
- EXPECT_TRUE(HasProperty(*behaviorClass, "sourceFilename", azrtti_typeid()));
- EXPECT_TRUE(HasProperty(*behaviorClass, "sourceGuid", azrtti_typeid()));
- EXPECT_TRUE(HasProperty(*behaviorClass, "graph", azrtti_typeid()));
- EXPECT_TRUE(HasProperty(*behaviorClass, "manifest", azrtti_typeid()));
- }
+ AZ::BehaviorClass* behaviorClass = GetBehaviorClass(azrtti_typeid());
+ ASSERT_NE(nullptr, behaviorClass);
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetPath", azrtti_typeid(), {}));
+ EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetName", azrtti_typeid(), {}));
+ }
- TEST_F(SceneGraphBehaviorTest, SceneGraphClass_BehaviorContext_Exists)
- {
- EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
- EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
- EXPECT_TRUE(HasBehaviorClass(azrtti_typeid()));
- }
+ class MockSceneComponentApplication
+ : public AZ::ComponentApplicationBus::Handler
+ {
+ public:
+ MockSceneComponentApplication()
+ {
+ AZ::ComponentApplicationBus::Handler::BusConnect();
+ AZ::Interface::Register(this);
+ }
- TEST_F(SceneGraphBehaviorTest, SceneGraphClass_BehaviorContext_HasExpectedProperties)
- {
- using namespace AZ::SceneAPI::Containers;
-
- AZ::BehaviorClass* behaviorClass = GetBehaviorClass(azrtti_typeid());
- ASSERT_NE(nullptr, behaviorClass);
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetNodeName", azrtti_typeid(), { azrtti_typeid() }));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetRoot", azrtti_typeid(), {}));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeContent", azrtti_typeid(), { azrtti_typeid() }));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeSibling", azrtti_typeid(), { azrtti_typeid() }));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeChild", azrtti_typeid(), { azrtti_typeid() }));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "HasNodeParent", azrtti_typeid(), { azrtti_typeid() }));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "IsNodeEndPoint", azrtti_typeid(), { azrtti_typeid() }));
- EXPECT_TRUE(HasMethodWithOutput(*behaviorClass, "GetNodeCount", azrtti_typeid(), {}));
- EXPECT_TRUE(HasMethodWithOutput(
- *behaviorClass,
- "GetNodeParent",
- azrtti_typeid(),
- { azrtti_typeid(), azrtti_typeid() }
- ));
- EXPECT_TRUE(HasMethodWithOutput(
- *behaviorClass,
- "GetNodeSibling",
- azrtti_typeid(),
- { azrtti_typeid(), azrtti_typeid() }
- ));
- EXPECT_TRUE(HasMethodWithOutput(
- *behaviorClass,
- "GetNodeChild",
- azrtti_typeid