diff --git a/.gitignore b/.gitignore
index 9012ec7576..2820d1e1c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,18 +2,14 @@
.vs/
.vscode/
__pycache__
-AssetProcessorTemp/**
[Bb]uild/
[Oo]ut/**
CMakeUserPresets.json
[Cc]ache/
/[Ii]nstall/
-Editor/EditorEventLog.xml
-Editor/EditorLayout.xml
**/*egg-info/**
**/*egg-link
**/[Rr]estricted
-UserSettings.xml
[Uu]ser/
FrameCapture/**
.DS_Store
@@ -22,9 +18,6 @@ client*.cfg
server*.cfg
.mayaSwatches/
_savebackup/
-#Output folder for test results when running Automated Tests
-TestResults/**
*.swatches
/imgui.ini
-/scripts/project_manager/logs/
-/AutomatedTesting/Gem/PythonTests/scripting/TestResults
+
diff --git a/Assets/Editor/Icons/AssetBrowser/Collapse_All.svg b/Assets/Editor/Icons/AssetBrowser/Collapse_All.svg
new file mode 100644
index 0000000000..7c7a7b85bd
--- /dev/null
+++ b/Assets/Editor/Icons/AssetBrowser/Collapse_All.svg
@@ -0,0 +1,14 @@
+
+
diff --git a/Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png b/Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png
deleted file mode 100644
index 12b5be2ccc..0000000000
--- a/Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bfc2ef8c6dbf2fba078e27e4e94384099e090468e679327dd826a5cbf22b04ed
-size 1019
diff --git a/Assets/Editor/Icons/Components/HttpClientComponent.png b/Assets/Editor/Icons/Components/HttpClientComponent.png
deleted file mode 100644
index 7a619a5a59..0000000000
--- a/Assets/Editor/Icons/Components/HttpClientComponent.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:708b12d41229afab78e0f7d59097ae3de855fea8525a920c5c214fc0ce79f1bd
-size 1209
diff --git a/Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png b/Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png
deleted file mode 100644
index 16e4917180..0000000000
--- a/Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fab63af9b50790dca25330058e70517987ea8bf11c00f9353dd951ebdbd1dbe5
-size 5008
diff --git a/Assets/Editor/Translation/scriptcanvas_en_us.ts b/Assets/Editor/Translation/scriptcanvas_en_us.ts
index 6d436b7caf..5af338426c 100644
--- a/Assets/Editor/Translation/scriptcanvas_en_us.ts
+++ b/Assets/Editor/Translation/scriptcanvas_en_us.ts
@@ -49513,106 +49513,6 @@ An Entity can be selected by using the pick button, or by dragging an Entity fro
-
- Handler: HttpClientComponentNotificationBus
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_NAME
- HttpClientComponentNotificationBus
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_CATEGORY
- Networking
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_NAME
- Class/Bus: HttpClientComponentNotificationBus Event/Method: OnHttpRequestSuccess
- OnHttpRequestSuccess
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_CATEGORY
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUT_NAME
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUT_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_IN_NAME
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_IN_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT0_NAME
- Simple Type: Number C++ Type: int
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT0_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT1_NAME
- Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator>
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT1_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_NAME
- Class/Bus: HttpClientComponentNotificationBus Event/Method: OnHttpRequestFailure
- OnHttpRequestFailure
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_CATEGORY
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUT_NAME
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUT_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_IN_NAME
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_IN_TOOLTIP
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUTPUT0_NAME
- Simple Type: Number C++ Type: int
-
-
-
- HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUTPUT0_TOOLTIP
-
-
-
Handler: InputEventNotificationBus
@@ -69850,477 +69750,6 @@ The element is removed from its current parent and added as a child of the new p
The name of the action triggered when the interactive element is released
-
- EBus: ForceVolumeRequestBus
-
- FORCEVOLUMEREQUESTBUS_NAME
- ForceVolumeRequestBus
-
-
- FORCEVOLUMEREQUESTBUS_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_CATEGORY
- Physics
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: SetAirDensity
- SetAirDensity
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: GetAirResistance
- GetAirResistance
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: GetForceMassDependent
- GetForceMassDependent
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUTPUT0_NAME
- C++ Type: bool
- Boolean
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUTPUT0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: SetAirResistance
- SetAirResistance
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: GetAirDensity
- GetAirDensity
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: GetForceMode
- GetForceMode
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUTPUT0_NAME
- C++ Type: int
- Number
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUTPUT0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: GetForceMagnitude
- GetForceMagnitude
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUTPUT0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: SetForceMode
- SetForceMode
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_PARAM0_NAME
- Simple Type: Number C++ Type: int
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMODE_PARAM0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: SetForceMagnitude
- SetForceMagnitude
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_PARAM0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: SetForceMassDependent
- SetForceMassDependent
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_PARAM0_NAME
- Simple Type: Boolean C++ Type: bool
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_PARAM0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: SetForceDirection
- SetForceDirection
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_PARAM0_NAME
- Simple Type: Vector3 C++ Type: const Vector3&
-
-
-
- FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_PARAM0_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_NAME
- Class/Bus: ForceVolumeRequestBus Event/Method: GetForceDirection
- GetForceDirection
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_CATEGORY
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUT_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUT_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_IN_NAME
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_IN_TOOLTIP
-
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUTPUT0_NAME
- C++ Type: const Vector3&
- Vector3
-
-
- FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUTPUT0_TOOLTIP
-
-
-
Handler: UiDraggableNotificationBus
@@ -73360,553 +72789,6 @@ The element is removed from its current parent and added as a child of the new p
The absolute position where the entity should spawn
-
- EBus: WindVolumeRequestBus
-
- WINDVOLUMEREQUESTBUS_NAME
- Wind Volume
-
-
- WINDVOLUMEREQUESTBUS_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_CATEGORY
- Physics (Legacy)
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetVolumeSize
- Get Volume Size
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUTPUT0_NAME
- C++ Type: const Vector3&
- Vector3
-
-
- WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetAirResistance
- Get Air Resistance
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetAirResistance
- Set Air Resistance
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetAirDensity
- Get Air Density
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetSpeed
- Get Speed
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- WINDVOLUMEREQUESTBUS_GETSPEED_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetWindDirection
- Set Wind Direction
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_PARAM0_NAME
- Simple Type: Vector3 C++ Type: const Vector3&
-
-
-
- WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_PARAM0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetWindDirection
- Get Wind Direction
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUTPUT0_NAME
- C++ Type: const Vector3&
- Vector3
-
-
- WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetSpeed
- Set Speed
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- WINDVOLUMEREQUESTBUS_SETSPEED_PARAM0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetVolumeSize
- Set Volume Size
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_PARAM0_NAME
- Simple Type: Vector3 C++ Type: const Vector3&
-
-
-
- WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_PARAM0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetEllipsoidal
- Get Ellipsoidal
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUTPUT0_NAME
- C++ Type: bool
- Boolean
-
-
- WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: GetFalloffInner
- Get Falloff Inner
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUTPUT0_NAME
- C++ Type: float
- Number
-
-
- WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUTPUT0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetEllipsoidal
- Set Ellipsoidal
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_PARAM0_NAME
- Simple Type: Boolean C++ Type: bool
-
-
-
- WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_PARAM0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetFalloffInner
- Set Falloff Inner
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_PARAM0_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_NAME
- Class/Bus: WindVolumeRequestBus Event/Method: SetAirDensity
- Set Air Density
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_CATEGORY
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_IN_NAME
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_IN_TOOLTIP
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_NAME
- Simple Type: Number C++ Type: float
-
-
-
- WINDVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_TOOLTIP
-
-
-
EBus: ActorComponentNotificationBus
@@ -79046,77 +77928,6 @@ The element is removed from its current parent and added as a child of the new p
-
- EBus: HttpClientComponentRequestBus
-
- HTTPCLIENTCOMPONENTREQUESTBUS_NAME
- HttpClientComponentRequestBus
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_TOOLTIP
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_CATEGORY
- Networking
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_NAME
- Class/Bus: HttpClientComponentRequestBus Event/Method: MakeHttpRequest
- MakeHttpRequest
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_TOOLTIP
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_CATEGORY
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_OUT_NAME
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_OUT_TOOLTIP
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_IN_NAME
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_IN_TOOLTIP
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM0_NAME
- Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator>
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM0_TOOLTIP
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM1_NAME
- Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator>
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM1_TOOLTIP
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM2_NAME
- Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator>
-
-
-
- HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM2_TOOLTIP
-
-
-
Handler: AWSBehaviorURLNotificationsBus
diff --git a/AutomatedTesting/Assets/Destruction/cinder_wall_complex.blast b/AutomatedTesting/Assets/Destruction/cinder_wall_complex.blast
new file mode 100644
index 0000000000..fcf67594c7
Binary files /dev/null and b/AutomatedTesting/Assets/Destruction/cinder_wall_complex.blast differ
diff --git a/AutomatedTesting/Assets/Destruction/cinder_wall_complex.fbx b/AutomatedTesting/Assets/Destruction/cinder_wall_complex.fbx
new file mode 100644
index 0000000000..62c305c35e
--- /dev/null
+++ b/AutomatedTesting/Assets/Destruction/cinder_wall_complex.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f94f2634eacb4d7bee20dacc45edef96e4d268f1adb7960b8aa8f3b6e2906ed
+size 6867609
diff --git a/AutomatedTesting/Assets/Prefabs/Bush.prefab b/AutomatedTesting/Assets/Prefabs/Bush.prefab
new file mode 100644
index 0000000000..ef497bdcd0
--- /dev/null
+++ b/AutomatedTesting/Assets/Prefabs/Bush.prefab
@@ -0,0 +1,129 @@
+{
+ "ContainerEntity": {
+ "Id": "ContainerEntity",
+ "Name": "Bush",
+ "Components": {
+ "Component_[1140272189295067758]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 1140272189295067758
+ },
+ "Component_[13437832196484687256]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 13437832196484687256
+ },
+ "Component_[1553903646452669645]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1553903646452669645
+ },
+ "Component_[15914009348632444632]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15914009348632444632,
+ "Child Entity Order": [
+ "Entity_[7511491868318]"
+ ]
+ },
+ "Component_[18046340308818780248]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 18046340308818780248
+ },
+ "Component_[1948833233489872938]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 1948833233489872938,
+ "Parent Entity": ""
+ },
+ "Component_[2903632350157981339]": {
+ "$type": "SelectionComponent",
+ "Id": 2903632350157981339
+ },
+ "Component_[48827510535192710]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 48827510535192710
+ },
+ "Component_[5609536793322429681]": {
+ "$type": "EditorLockComponent",
+ "Id": 5609536793322429681
+ },
+ "Component_[5859168386298620990]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5859168386298620990
+ },
+ "Component_[6604616929271524505]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 6604616929271524505
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[7511491868318]": {
+ "Id": "Entity_[7511491868318]",
+ "Name": "Bush",
+ "Components": {
+ "Component_[10227459330338484901]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10227459330338484901,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 4998941225335869157
+ },
+ {
+ "ComponentId": 9922994635792843826,
+ "SortIndex": 1
+ }
+ ]
+ },
+ "Component_[10972351222359420947]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10972351222359420947
+ },
+ "Component_[12101122374155214392]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12101122374155214392
+ },
+ "Component_[1535264614652988260]": {
+ "$type": "SelectionComponent",
+ "Id": 1535264614652988260
+ },
+ "Component_[16367811417907891218]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16367811417907891218
+ },
+ "Component_[17044216787716682880]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17044216787716682880
+ },
+ "Component_[2129822594969629430]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2129822594969629430
+ },
+ "Component_[2838015156782745450]": {
+ "$type": "EditorLockComponent",
+ "Id": 2838015156782745450
+ },
+ "Component_[4998941225335869157]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 4998941225335869157,
+ "Parent Entity": "ContainerEntity"
+ },
+ "Component_[8773358049076362578]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 8773358049076362578
+ },
+ "Component_[9922994635792843826]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 9922994635792843826,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{1201406D-FB20-5B5F-B9B5-6A6E8DE00A14}",
+ "subId": 276506120
+ },
+ "assetHint": "assets/objects/foliage/bush_privet_01.azmodel"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Assets/Prefabs/BushFlowerBlender.prefab b/AutomatedTesting/Assets/Prefabs/BushFlowerBlender.prefab
new file mode 100644
index 0000000000..b938701b6a
--- /dev/null
+++ b/AutomatedTesting/Assets/Prefabs/BushFlowerBlender.prefab
@@ -0,0 +1,2249 @@
+{
+ "ContainerEntity": {
+ "Id": "ContainerEntity",
+ "Name": "BushFlowerBlender",
+ "Components": {
+ "Component_[10351434005293588180]": {
+ "$type": "EditorLockComponent",
+ "Id": 10351434005293588180
+ },
+ "Component_[10967554916960846519]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10967554916960846519
+ },
+ "Component_[14400678265986305456]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 14400678265986305456
+ },
+ "Component_[15365520792759708998]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 15365520792759708998
+ },
+ "Component_[16281192066639198814]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 16281192066639198814,
+ "Child Entity Order": [
+ "Entity_[263598916892318]"
+ ]
+ },
+ "Component_[16356049875968660722]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16356049875968660722,
+ "Parent Entity": ""
+ },
+ "Component_[16391695178646515457]": {
+ "$type": "SelectionComponent",
+ "Id": 16391695178646515457
+ },
+ "Component_[16407238476365087382]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16407238476365087382
+ },
+ "Component_[3542701736829700396]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 3542701736829700396
+ },
+ "Component_[5160094530340900971]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 5160094530340900971
+ },
+ "Component_[6432428663776737136]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 6432428663776737136
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[263573147088542]": {
+ "Id": "Entity_[263573147088542]",
+ "Name": "BushSpawner",
+ "Components": {
+ "Component_[11886309121583108836]": {
+ "$type": "EditorPositionModifierComponent",
+ "Id": 11886309121583108836,
+ "Configuration": {
+ "GradientX": {
+ "GradientId": "Entity_[263590326957726]"
+ },
+ "GradientY": {
+ "GradientId": "Entity_[263590326957726]"
+ },
+ "GradientZ": {
+ "GradientId": ""
+ }
+ }
+ },
+ "Component_[1240444912193942742]": {
+ "$type": "{DD96FD51-A86B-48BC-A6AB-89183B538269} EditorSpawnerComponent",
+ "Id": 1240444912193942742,
+ "PreviewEntity": "Entity_[263573147088542]"
+ },
+ "Component_[12813702285187817973]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 12813702285187817973,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 18133156195370267728
+ },
+ {
+ "ComponentId": 13450250419263773680,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 8841963751527151666,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 1240444912193942742,
+ "SortIndex": 3
+ },
+ {
+ "ComponentId": 17991239182321715249,
+ "SortIndex": 4
+ },
+ {
+ "ComponentId": 14175761523159824993,
+ "SortIndex": 5
+ },
+ {
+ "ComponentId": 2884829698060689565,
+ "SortIndex": 6
+ },
+ {
+ "ComponentId": 11886309121583108836,
+ "SortIndex": 7
+ }
+ ]
+ },
+ "Component_[13179606361687972691]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 13179606361687972691
+ },
+ "Component_[13450250419263773680]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 13450250419263773680,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263607506826910]"
+ }
+ },
+ "Component_[13688014277574607552]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 13688014277574607552
+ },
+ "Component_[14175761523159824993]": {
+ "$type": "EditorDistributionFilterComponent",
+ "Id": 14175761523159824993,
+ "Configuration": {
+ "ThresholdMin": 0.289000004529953,
+ "ThresholdMax": 0.5690000057220459,
+ "Gradient": {
+ "GradientId": "Entity_[263603211859614]"
+ }
+ }
+ },
+ "Component_[14232774271081092639]": {
+ "$type": "EditorLockComponent",
+ "Id": 14232774271081092639
+ },
+ "Component_[14811533745267383811]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14811533745267383811
+ },
+ "Component_[17540078415915694273]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 17540078415915694273
+ },
+ "Component_[17991239182321715249]": {
+ "$type": "EditorRotationModifierComponent",
+ "Id": 17991239182321715249,
+ "Configuration": {
+ "GradientX": {
+ "GradientId": ""
+ },
+ "GradientY": {
+ "GradientId": ""
+ },
+ "GradientZ": {
+ "GradientId": "Entity_[263590326957726]"
+ }
+ }
+ },
+ "Component_[18133156195370267728]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18133156195370267728,
+ "Parent Entity": "Entity_[263607506826910]"
+ },
+ "Component_[2884829698060689565]": {
+ "$type": "EditorScaleModifierComponent",
+ "Id": 2884829698060689565,
+ "Configuration": {
+ "RangeMin": 0.75,
+ "RangeMax": 1.25,
+ "Gradient": {
+ "GradientId": "Entity_[263590326957726]"
+ }
+ }
+ },
+ "Component_[50628676751372416]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 50628676751372416,
+ "Child Entity Order": [
+ "Entity_[263603211859614]",
+ "Entity_[263590326957726]"
+ ]
+ },
+ "Component_[5689270312836823309]": {
+ "$type": "SelectionComponent",
+ "Id": 5689270312836823309
+ },
+ "Component_[7105803915999711758]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7105803915999711758
+ },
+ "Component_[8841963751527151666]": {
+ "$type": "EditorDescriptorListComponent",
+ "Id": 8841963751527151666,
+ "Configuration": {
+ "Descriptors": [
+ {
+ "SpawnerType": "{74BEEDB5-81CF-409F-B375-0D93D81EF2E3}",
+ "InstanceSpawner": {
+ "$type": "PrefabInstanceSpawner",
+ "SpawnableAsset": {
+ "assetId": {
+ "guid": "{EE51E73C-D753-54AC-A1C0-4F29844FB6C3}",
+ "subId": 2740536329
+ },
+ "assetHint": "assets/prefabs/bush.spawnable"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "Entity_[263577442055838]": {
+ "Id": "Entity_[263577442055838]",
+ "Name": "RandomNoise",
+ "Components": {
+ "Component_[13412023990029767074]": {
+ "$type": "EditorRandomGradientComponent",
+ "Id": 13412023990029767074,
+ "PreviewEntity": "Entity_[263577442055838]"
+ },
+ "Component_[14048059127502350032]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 14048059127502350032,
+ "Parent Entity": "Entity_[263581737023134]"
+ },
+ "Component_[15585968636846328006]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15585968636846328006
+ },
+ "Component_[17356242264256499333]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 17356242264256499333
+ },
+ "Component_[2157320692130316849]": {
+ "$type": "EditorLockComponent",
+ "Id": 2157320692130316849
+ },
+ "Component_[2167582872687341084]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 2167582872687341084,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263607506826910]"
+ }
+ },
+ "Component_[2794166072748175035]": {
+ "$type": "SelectionComponent",
+ "Id": 2794166072748175035
+ },
+ "Component_[4784966656524567789]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 4784966656524567789
+ },
+ "Component_[6185400249317227261]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 6185400249317227261
+ },
+ "Component_[639949486729001685]": {
+ "$type": "EditorGradientTransformComponent",
+ "Id": 639949486729001685,
+ "Configuration": {
+ "ShapeReference": "",
+ "Bounds": [
+ 50.0,
+ 50.0,
+ 1.0
+ ]
+ }
+ },
+ "Component_[7347819195697153472]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 7347819195697153472
+ },
+ "Component_[9225409585951117678]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 9225409585951117678,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 14048059127502350032
+ },
+ {
+ "ComponentId": 2167582872687341084,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 639949486729001685,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 13412023990029767074,
+ "SortIndex": 3
+ }
+ ]
+ },
+ "Component_[9667056664436803603]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 9667056664436803603
+ }
+ }
+ },
+ "Entity_[263581737023134]": {
+ "Id": "Entity_[263581737023134]",
+ "Name": "FlowerSpawner",
+ "Components": {
+ "Component_[10064436441176637741]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 10064436441176637741
+ },
+ "Component_[10418076448308581948]": {
+ "$type": "EditorRotationModifierComponent",
+ "Id": 10418076448308581948,
+ "Configuration": {
+ "GradientX": {
+ "GradientId": ""
+ },
+ "GradientY": {
+ "GradientId": ""
+ },
+ "GradientZ": {
+ "GradientId": "Entity_[263577442055838]"
+ }
+ }
+ },
+ "Component_[12484622175138429315]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12484622175138429315
+ },
+ "Component_[12590590072231203407]": {
+ "$type": "EditorLockComponent",
+ "Id": 12590590072231203407
+ },
+ "Component_[13079591667184987458]": {
+ "$type": "EditorScaleModifierComponent",
+ "Id": 13079591667184987458,
+ "Configuration": {
+ "RangeMin": 0.75,
+ "RangeMax": 1.25,
+ "Gradient": {
+ "GradientId": "Entity_[263577442055838]"
+ }
+ }
+ },
+ "Component_[13174773394274524631]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 13174773394274524631,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 1915862229814997128
+ },
+ {
+ "ComponentId": 582800388831726963,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 18006385801184712266,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 6902499453501456890,
+ "SortIndex": 3
+ },
+ {
+ "ComponentId": 10418076448308581948,
+ "SortIndex": 4
+ },
+ {
+ "ComponentId": 13983302912005698250,
+ "SortIndex": 5
+ },
+ {
+ "ComponentId": 13079591667184987458,
+ "SortIndex": 6
+ },
+ {
+ "ComponentId": 7912787520673119502,
+ "SortIndex": 7
+ }
+ ]
+ },
+ "Component_[13200009872392504010]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 13200009872392504010,
+ "Child Entity Order": [
+ "Entity_[263594621925022]",
+ "Entity_[263577442055838]"
+ ]
+ },
+ "Component_[13983302912005698250]": {
+ "$type": "EditorDistributionFilterComponent",
+ "Id": 13983302912005698250,
+ "Configuration": {
+ "ThresholdMin": 0.2879999876022339,
+ "ThresholdMax": 0.5680000185966492,
+ "Gradient": {
+ "GradientId": "Entity_[263586031990430]"
+ }
+ }
+ },
+ "Component_[14726174657215669218]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 14726174657215669218
+ },
+ "Component_[18006385801184712266]": {
+ "$type": "EditorDescriptorListComponent",
+ "Id": 18006385801184712266,
+ "Configuration": {
+ "Descriptors": [
+ {
+ "SpawnerType": "{74BEEDB5-81CF-409F-B375-0D93D81EF2E3}",
+ "InstanceSpawner": {
+ "$type": "PrefabInstanceSpawner",
+ "SpawnableAsset": {
+ "assetId": {
+ "guid": "{80C0CF4E-9A5E-544B-B89E-BC980175A259}",
+ "subId": 3875079122
+ },
+ "assetHint": "assets/prefabs/pinkflower.spawnable"
+ }
+ }
+ },
+ {
+ "SpawnerType": "{74BEEDB5-81CF-409F-B375-0D93D81EF2E3}",
+ "InstanceSpawner": {
+ "$type": "PrefabInstanceSpawner",
+ "SpawnableAsset": {
+ "assetId": {
+ "guid": "{20DD1202-A434-5482-9FB9-AED4C78F6CBF}",
+ "subId": 2669863854
+ },
+ "assetHint": "assets/prefabs/purpleflower.spawnable"
+ }
+ }
+ },
+ {
+ "SpawnerType": "{23C40FD4-A55F-4BD3-BE5B-DC5423F217C2}",
+ "InstanceSpawner": {
+ "$type": "EmptyInstanceSpawner"
+ }
+ }
+ ]
+ }
+ },
+ "Component_[1915862229814997128]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 1915862229814997128,
+ "Parent Entity": "Entity_[263607506826910]"
+ },
+ "Component_[2123416208548010747]": {
+ "$type": "SelectionComponent",
+ "Id": 2123416208548010747
+ },
+ "Component_[4172073657954183661]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 4172073657954183661
+ },
+ "Component_[4297556504463195307]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 4297556504463195307
+ },
+ "Component_[582800388831726963]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 582800388831726963,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263607506826910]"
+ }
+ },
+ "Component_[6902499453501456890]": {
+ "$type": "{DD96FD51-A86B-48BC-A6AB-89183B538269} EditorSpawnerComponent",
+ "Id": 6902499453501456890,
+ "PreviewEntity": "Entity_[263581737023134]"
+ },
+ "Component_[7912787520673119502]": {
+ "$type": "EditorPositionModifierComponent",
+ "Id": 7912787520673119502,
+ "Configuration": {
+ "GradientX": {
+ "GradientId": "Entity_[263577442055838]"
+ },
+ "GradientY": {
+ "GradientId": "Entity_[263577442055838]"
+ },
+ "GradientZ": {
+ "GradientId": ""
+ }
+ }
+ }
+ }
+ },
+ "Entity_[263586031990430]": {
+ "Id": "Entity_[263586031990430]",
+ "Name": "Invert",
+ "Components": {
+ "Component_[11123278080744920525]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 11123278080744920525
+ },
+ "Component_[1199715693160400161]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 1199715693160400161,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 7438979211266329827
+ },
+ {
+ "ComponentId": 6027557066164356793,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 8903771095804438921,
+ "SortIndex": 2
+ }
+ ]
+ },
+ "Component_[12162816428693886169]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12162816428693886169
+ },
+ "Component_[14493180089799969074]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 14493180089799969074
+ },
+ "Component_[16206759293595766479]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 16206759293595766479
+ },
+ "Component_[17566144032052847628]": {
+ "$type": "SelectionComponent",
+ "Id": 17566144032052847628
+ },
+ "Component_[17784057508127919200]": {
+ "$type": "EditorLockComponent",
+ "Id": 17784057508127919200
+ },
+ "Component_[18377773171420051348]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18377773171420051348
+ },
+ "Component_[6027557066164356793]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 6027557066164356793,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263607506826910]"
+ }
+ },
+ "Component_[7438979211266329827]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7438979211266329827,
+ "Parent Entity": "Entity_[263594621925022]"
+ },
+ "Component_[8421650081106982664]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8421650081106982664
+ },
+ "Component_[8903771095804438921]": {
+ "$type": "EditorInvertGradientComponent",
+ "Id": 8903771095804438921,
+ "Configuration": {
+ "Gradient": {
+ "GradientId": "Entity_[263594621925022]"
+ }
+ },
+ "PreviewEntity": "Entity_[263586031990430]"
+ }
+ }
+ },
+ "Entity_[263590326957726]": {
+ "Id": "Entity_[263590326957726]",
+ "Name": "RandomNoise",
+ "Components": {
+ "Component_[10420548607186596407]": {
+ "$type": "SelectionComponent",
+ "Id": 10420548607186596407
+ },
+ "Component_[11351507264577024072]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 11351507264577024072,
+ "Parent Entity": "Entity_[263573147088542]"
+ },
+ "Component_[11576941520191560445]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11576941520191560445
+ },
+ "Component_[11787535428542045683]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 11787535428542045683
+ },
+ "Component_[11946132649485953311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 11946132649485953311
+ },
+ "Component_[11970417753234451570]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 11970417753234451570
+ },
+ "Component_[13743879269876214143]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 13743879269876214143
+ },
+ "Component_[15614946697365576378]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 15614946697365576378
+ },
+ "Component_[17045174842161759045]": {
+ "$type": "EditorLockComponent",
+ "Id": 17045174842161759045
+ },
+ "Component_[3107716031616536910]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 3107716031616536910,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 11351507264577024072
+ },
+ {
+ "ComponentId": 6316453818295975755,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 4846745402056100407,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 8967153379180885152,
+ "SortIndex": 3
+ }
+ ]
+ },
+ "Component_[4846745402056100407]": {
+ "$type": "EditorGradientTransformComponent",
+ "Id": 4846745402056100407,
+ "Configuration": {
+ "ShapeReference": "",
+ "Bounds": [
+ 50.0,
+ 50.0,
+ 1.0
+ ]
+ }
+ },
+ "Component_[6316453818295975755]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 6316453818295975755,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263573147088542]"
+ }
+ },
+ "Component_[8967153379180885152]": {
+ "$type": "EditorRandomGradientComponent",
+ "Id": 8967153379180885152,
+ "PreviewEntity": "Entity_[263590326957726]"
+ }
+ }
+ },
+ "Entity_[263594621925022]": {
+ "Id": "Entity_[263594621925022]",
+ "Name": "PerlinNoise",
+ "Components": {
+ "Component_[15798567753940523121]": {
+ "$type": "EditorPerlinGradientComponent",
+ "Id": 15798567753940523121,
+ "Configuration": {
+ "randomSeed": 33,
+ "frequency": 0.25
+ },
+ "PreviewEntity": "Entity_[263594621925022]"
+ },
+ "Component_[16035848776632936419]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 16035848776632936419
+ },
+ "Component_[16434108759160050253]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16434108759160050253
+ },
+ "Component_[16805003046507210760]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 16805003046507210760,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263607506826910]"
+ }
+ },
+ "Component_[17679463569742913027]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 17679463569742913027
+ },
+ "Component_[18285870860955961523]": {
+ "$type": "SelectionComponent",
+ "Id": 18285870860955961523
+ },
+ "Component_[2330427084045350198]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 2330427084045350198
+ },
+ "Component_[5921906930080711994]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5921906930080711994,
+ "Child Entity Order": [
+ "Entity_[263586031990430]"
+ ]
+ },
+ "Component_[764117453152842781]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 764117453152842781,
+ "Parent Entity": "Entity_[263581737023134]"
+ },
+ "Component_[7701931249281891300]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 7701931249281891300
+ },
+ "Component_[7967070680905543315]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 7967070680905543315,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 764117453152842781
+ },
+ {
+ "ComponentId": 16805003046507210760,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 8029154041194694200,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 15798567753940523121,
+ "SortIndex": 3
+ }
+ ]
+ },
+ "Component_[8029154041194694200]": {
+ "$type": "EditorGradientTransformComponent",
+ "Id": 8029154041194694200,
+ "Configuration": {
+ "ShapeReference": "",
+ "Bounds": [
+ 50.0,
+ 50.0,
+ 1.0
+ ]
+ }
+ },
+ "Component_[8660028910391135744]": {
+ "$type": "EditorLockComponent",
+ "Id": 8660028910391135744
+ }
+ }
+ },
+ "Entity_[263598916892318]": {
+ "Id": "Entity_[263598916892318]",
+ "Name": "LandscapeCanvas",
+ "Components": {
+ "Component_[12967746135199800648]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 12967746135199800648
+ },
+ "Component_[13081062505162225823]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13081062505162225823
+ },
+ "Component_[16021195931295059075]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 16021195931295059075
+ },
+ "Component_[16134261272053586014]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 16134261272053586014
+ },
+ "Component_[17500735767968801510]": {
+ "$type": "EditorLandscapeCanvasComponent",
+ "Id": 17500735767968801510,
+ "Graph": {
+ "m_nodes": [
+ {
+ "Key": 1,
+ "Value": {
+ "$type": "CylinderShapeNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "BushFlowerBlender"
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263607506826910]",
+ "m_componentId": 6683290476113150719
+ }
+ },
+ {
+ "Key": 2,
+ "Value": {
+ "$type": "RandomNoiseGradientNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "RandomNoise"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "PreviewBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263590326957726]",
+ "m_componentId": 8967153379180885152
+ }
+ },
+ {
+ "Key": 3,
+ "Value": {
+ "$type": "SpawnerAreaNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "BushSpawner"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "PlacementBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263573147088542]",
+ "m_componentId": 1240444912193942742
+ }
+ },
+ {
+ "Key": 4,
+ "Value": {
+ "$type": "PerlinNoiseGradientNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "PerlinNoise"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "PreviewBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263603211859614]",
+ "m_componentId": 10160640699095155981
+ }
+ },
+ {
+ "Key": 5,
+ "Value": {
+ "$type": "RandomNoiseGradientNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "RandomNoise"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "PreviewBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263577442055838]",
+ "m_componentId": 13412023990029767074
+ }
+ },
+ {
+ "Key": 6,
+ "Value": {
+ "$type": "SpawnerAreaNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "FlowerSpawner"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "PlacementBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263581737023134]",
+ "m_componentId": 6902499453501456890
+ }
+ },
+ {
+ "Key": 7,
+ "Value": {
+ "$type": "AreaBlenderNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "BushFlowerBlender"
+ }
+ }
+ }
+ ],
+ "m_extendableSlots": {
+ "InboundArea": [
+ {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ },
+ {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ },
+ "m_subId": 1
+ }
+ ]
+ },
+ "m_vegetationEntityId": "Entity_[263607506826910]",
+ "m_componentId": 7229206794941734410
+ }
+ },
+ {
+ "Key": 8,
+ "Value": {
+ "$type": "PerlinNoiseGradientNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "PerlinNoise"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "PreviewBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263594621925022]",
+ "m_componentId": 15798567753940523121
+ }
+ },
+ {
+ "Key": 9,
+ "Value": {
+ "$type": "InvertGradientModifierNode",
+ "m_propertySlots": [
+ {
+ "Key": {
+ "m_name": "EntityName"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+ "Value": "Invert"
+ }
+ }
+ }
+ ],
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradient"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "PreviewBounds"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263586031990430]",
+ "m_componentId": 8903771095804438921
+ }
+ },
+ {
+ "Key": 10,
+ "Value": {
+ "$type": "RotationModifierNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradientX"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientY"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientZ"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263573147088542]",
+ "m_componentId": 17991239182321715249
+ }
+ },
+ {
+ "Key": 11,
+ "Value": {
+ "$type": "DistributionFilterNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradient"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263573147088542]",
+ "m_componentId": 14175761523159824993
+ }
+ },
+ {
+ "Key": 12,
+ "Value": {
+ "$type": "ScaleModifierNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradient"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263573147088542]",
+ "m_componentId": 2884829698060689565
+ }
+ },
+ {
+ "Key": 13,
+ "Value": {
+ "$type": "PositionModifierNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradientX"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientY"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientZ"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263573147088542]",
+ "m_componentId": 11886309121583108836
+ }
+ },
+ {
+ "Key": 14,
+ "Value": {
+ "$type": "RotationModifierNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradientX"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientY"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientZ"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263581737023134]",
+ "m_componentId": 10418076448308581948
+ }
+ },
+ {
+ "Key": 15,
+ "Value": {
+ "$type": "DistributionFilterNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradient"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263581737023134]",
+ "m_componentId": 13983302912005698250
+ }
+ },
+ {
+ "Key": 16,
+ "Value": {
+ "$type": "ScaleModifierNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradient"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263581737023134]",
+ "m_componentId": 13079591667184987458
+ }
+ },
+ {
+ "Key": 17,
+ "Value": {
+ "$type": "PositionModifierNode",
+ "m_inputDataSlots": [
+ {
+ "Key": {
+ "m_name": "InboundGradientX"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientY"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ },
+ {
+ "Key": {
+ "m_name": "InboundGradientZ"
+ },
+ "Value": {
+ "m_value": {
+ "$type": "EntityId",
+ "Value": ""
+ }
+ }
+ }
+ ],
+ "m_vegetationEntityId": "Entity_[263581737023134]",
+ "m_componentId": 7912787520673119502
+ }
+ }
+ ],
+ "m_connections": [
+ {
+ "m_sourceEndpoint": [
+ 8,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 9,
+ {
+ "m_name": "InboundGradient"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 3,
+ {
+ "m_name": "OutboundArea"
+ }
+ ],
+ "m_targetEndpoint": [
+ 7,
+ {
+ "m_name": "InboundArea"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 6,
+ {
+ "m_name": "OutboundArea"
+ }
+ ],
+ "m_targetEndpoint": [
+ 7,
+ {
+ "m_name": "InboundArea",
+ "m_subId": 1
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 1,
+ {
+ "m_name": "Bounds"
+ }
+ ],
+ "m_targetEndpoint": [
+ 3,
+ {
+ "m_name": "PlacementBounds"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 1,
+ {
+ "m_name": "Bounds"
+ }
+ ],
+ "m_targetEndpoint": [
+ 6,
+ {
+ "m_name": "PlacementBounds"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 2,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 10,
+ {
+ "m_name": "InboundGradientZ"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 4,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 11,
+ {
+ "m_name": "InboundGradient"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 2,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 12,
+ {
+ "m_name": "InboundGradient"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 2,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 13,
+ {
+ "m_name": "InboundGradientX"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 2,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 13,
+ {
+ "m_name": "InboundGradientY"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 5,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 14,
+ {
+ "m_name": "InboundGradientZ"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 9,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 15,
+ {
+ "m_name": "InboundGradient"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 5,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 16,
+ {
+ "m_name": "InboundGradient"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 5,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 17,
+ {
+ "m_name": "InboundGradientX"
+ }
+ ]
+ },
+ {
+ "m_sourceEndpoint": [
+ 5,
+ {
+ "m_name": "OutboundGradient"
+ }
+ ],
+ "m_targetEndpoint": [
+ 17,
+ {
+ "m_name": "InboundGradientY"
+ }
+ ]
+ }
+ ],
+ "m_uiMetadata": {
+ "m_sceneMetadata": {
+ "ComponentData": {
+ "{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
+ "$type": "SceneComponentSaveData",
+ "ViewParams": {
+ "Scale": 0.3771495156249999,
+ "AnchorX": -498.4760437011719,
+ "AnchorY": 808.6978149414063
+ }
+ }
+ }
+ },
+ "m_nodeMetadata": [
+ {
+ "Key": 2,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "GradientNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 100.0,
+ 580.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{2D583FA2-5659-491F-8914-6302420E3F0B}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 3,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 480.0,
+ 600.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{A26480C4-A80B-4B36-ADE1-918E4541EA2B}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 5,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "GradientNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 100.0,
+ 1540.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{6CE9EA8B-85E7-4E17-B1D6-CA97D9D65276}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 6,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 480.0,
+ 1560.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{8FABE49F-1D73-46FE-8616-A982EEE46DDD}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 7,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 840.0,
+ 1580.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{C5EEBC1D-B91B-4852-A41D-425C6FED3FB9}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 9,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "GradientModifierNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 480.0,
+ 2060.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{5EB76670-0CBE-4F2A-9AE7-F65709D0BE92}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 10,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 147.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{5CB69A73-F7BA-4F76-AB86-F343052C3D7D}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 11,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 367.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{235DEBEC-E3F8-43C1-BA7E-41475B834D70}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 12,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 288.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{9E56E7B6-2ECE-42F9-9A23-FF7D192209D2}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 13,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 6.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{61759FE6-E6F7-4F4B-819B-FBFE125D7389}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 14,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 147.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{0AC1C6C8-7CC1-4068-A87D-F4B92AE8FCAF}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 15,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 367.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{5D698B90-830F-46FE-ADD8-6164EA098C3E}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 16,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 288.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{9DE6DE4A-2E6F-44BA-B292-3CD2215C1D5B}"
+ }
+ }
+ }
+ },
+ {
+ "Key": 17,
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "VegetationAreaNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 6.0,
+ 6.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{57FA822D-629F-4949-A8D7-D675544EBC0A}"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "m_nodeWrappings": [
+ {
+ "Key": 10,
+ "Value": [
+ 3,
+ 1
+ ]
+ },
+ {
+ "Key": 11,
+ "Value": [
+ 3,
+ 6
+ ]
+ },
+ {
+ "Key": 12,
+ "Value": [
+ 3,
+ 2
+ ]
+ },
+ {
+ "Key": 13,
+ "Value": [
+ 3,
+ {}
+ ]
+ },
+ {
+ "Key": 14,
+ "Value": [
+ 6,
+ 1
+ ]
+ },
+ {
+ "Key": 15,
+ "Value": [
+ 6,
+ 6
+ ]
+ },
+ {
+ "Key": 16,
+ "Value": [
+ 6,
+ 2
+ ]
+ },
+ {
+ "Key": 17,
+ "Value": [
+ 6,
+ {}
+ ]
+ }
+ ]
+ }
+ },
+ "Component_[17574651838531525263]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17574651838531525263,
+ "Child Entity Order": [
+ "Entity_[263607506826910]"
+ ]
+ },
+ "Component_[3086205760978540160]": {
+ "$type": "EditorLockComponent",
+ "Id": 3086205760978540160
+ },
+ "Component_[3102230753208284750]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 3102230753208284750,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 5796173638130327223
+ },
+ {
+ "ComponentId": 17500735767968801510,
+ "SortIndex": 1
+ }
+ ]
+ },
+ "Component_[4695341524212000585]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 4695341524212000585
+ },
+ "Component_[5796173638130327223]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 5796173638130327223,
+ "Parent Entity": "ContainerEntity"
+ },
+ "Component_[8278362871021770878]": {
+ "$type": "SelectionComponent",
+ "Id": 8278362871021770878
+ }
+ }
+ },
+ "Entity_[263603211859614]": {
+ "Id": "Entity_[263603211859614]",
+ "Name": "PerlinNoise",
+ "Components": {
+ "Component_[10006546776757889020]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 10006546776757889020
+ },
+ "Component_[10160640699095155981]": {
+ "$type": "EditorPerlinGradientComponent",
+ "Id": 10160640699095155981,
+ "Configuration": {
+ "randomSeed": 33,
+ "frequency": 0.25
+ },
+ "PreviewEntity": "Entity_[263603211859614]"
+ },
+ "Component_[11506183926478566822]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 11506183926478566822
+ },
+ "Component_[13160180411150366392]": {
+ "$type": "EditorLockComponent",
+ "Id": 13160180411150366392
+ },
+ "Component_[15083697380300161163]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 15083697380300161163
+ },
+ "Component_[15404456223257061245]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 15404456223257061245,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 6484803030406851652
+ },
+ {
+ "ComponentId": 4912800286535654244,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 2395166459126906105,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 10160640699095155981,
+ "SortIndex": 3
+ }
+ ]
+ },
+ "Component_[2395166459126906105]": {
+ "$type": "EditorGradientTransformComponent",
+ "Id": 2395166459126906105,
+ "Configuration": {
+ "ShapeReference": "",
+ "Bounds": [
+ 50.0,
+ 50.0,
+ 1.0
+ ]
+ }
+ },
+ "Component_[4417011400526470160]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 4417011400526470160
+ },
+ "Component_[4601061670472962302]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4601061670472962302
+ },
+ "Component_[4912800286535654244]": {
+ "$type": "EditorReferenceShapeComponent",
+ "Id": 4912800286535654244,
+ "Configuration": {
+ "ShapeEntityId": "Entity_[263607506826910]"
+ }
+ },
+ "Component_[6233982345083723563]": {
+ "$type": "SelectionComponent",
+ "Id": 6233982345083723563
+ },
+ "Component_[6484803030406851652]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6484803030406851652,
+ "Parent Entity": "Entity_[263573147088542]"
+ },
+ "Component_[6813813525871080299]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 6813813525871080299
+ }
+ }
+ },
+ "Entity_[263607506826910]": {
+ "Id": "Entity_[263607506826910]",
+ "Name": "BushFlowerBlender",
+ "Components": {
+ "Component_[13725600808872754587]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 13725600808872754587
+ },
+ "Component_[15959807606564505710]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15959807606564505710,
+ "Parent Entity": "Entity_[263598916892318]"
+ },
+ "Component_[1596826146661515925]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 1596826146661515925
+ },
+ "Component_[4525591661239956058]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 4525591661239956058
+ },
+ "Component_[6683290476113150719]": {
+ "$type": "EditorCylinderShapeComponent",
+ "Id": 6683290476113150719,
+ "CylinderShape": {
+ "Configuration": {
+ "Radius": 25.0
+ }
+ }
+ },
+ "Component_[6879394931668195375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 6879394931668195375,
+ "Child Entity Order": [
+ "Entity_[263573147088542]",
+ "Entity_[263581737023134]"
+ ]
+ },
+ "Component_[7229206794941734410]": {
+ "$type": "EditorAreaBlenderComponent",
+ "Id": 7229206794941734410,
+ "Configuration": {
+ "Operations": [
+ "Entity_[263573147088542]",
+ "Entity_[263581737023134]"
+ ]
+ },
+ "PreviewEntity": "Entity_[263607506826910]"
+ },
+ "Component_[8772711204845372843]": {
+ "$type": "EditorLockComponent",
+ "Id": 8772711204845372843
+ },
+ "Component_[8959345022109725835]": {
+ "$type": "SelectionComponent",
+ "Id": 8959345022109725835
+ },
+ "Component_[9094488642973843583]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 9094488642973843583
+ },
+ "Component_[9112960617967513749]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 9112960617967513749,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 15959807606564505710
+ },
+ {
+ "ComponentId": 7229206794941734410,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 6683290476113150719,
+ "SortIndex": 2
+ }
+ ]
+ },
+ "Component_[9541665258597207652]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9541665258597207652
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Assets/Prefabs/PurpleFlower.prefab b/AutomatedTesting/Assets/Prefabs/PurpleFlower.prefab
new file mode 100644
index 0000000000..a8716ec099
--- /dev/null
+++ b/AutomatedTesting/Assets/Prefabs/PurpleFlower.prefab
@@ -0,0 +1,129 @@
+{
+ "ContainerEntity": {
+ "Id": "ContainerEntity",
+ "Name": "PurpleFlower",
+ "Components": {
+ "Component_[10519928302743666073]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 10519928302743666073
+ },
+ "Component_[13894087802180240181]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 13894087802180240181,
+ "Parent Entity": ""
+ },
+ "Component_[15788541052719571801]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 15788541052719571801
+ },
+ "Component_[15842981265136092481]": {
+ "$type": "SelectionComponent",
+ "Id": 15842981265136092481
+ },
+ "Component_[16360384897559021149]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16360384897559021149
+ },
+ "Component_[16713545675046303279]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16713545675046303279
+ },
+ "Component_[1806734194268113785]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 1806734194268113785
+ },
+ "Component_[5392020700593853313]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5392020700593853313,
+ "Child Entity Order": [
+ "Entity_[14335611090324]"
+ ]
+ },
+ "Component_[5995854518752659458]": {
+ "$type": "EditorLockComponent",
+ "Id": 5995854518752659458
+ },
+ "Component_[6963022284400845376]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 6963022284400845376
+ },
+ "Component_[8055275578170091546]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8055275578170091546
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[14335611090324]": {
+ "Id": "Entity_[14335611090324]",
+ "Name": "PurpleFlower",
+ "Components": {
+ "Component_[10887353073528055802]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 10887353073528055802
+ },
+ "Component_[12641127425852859189]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 12641127425852859189,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{D493A670-6D82-5AE9-A2C8-A2EB02684F71}",
+ "subId": 284799939
+ },
+ "assetHint": "assets/objects/foliage/grass_flower_purple.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[14406733303466080015]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14406733303466080015,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 9231452352781000222
+ },
+ {
+ "ComponentId": 12641127425852859189,
+ "SortIndex": 1
+ }
+ ]
+ },
+ "Component_[1452384341905923012]": {
+ "$type": "EditorLockComponent",
+ "Id": 1452384341905923012
+ },
+ "Component_[2215454016415585892]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 2215454016415585892
+ },
+ "Component_[4104108067383423623]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 4104108067383423623
+ },
+ "Component_[4197335450471807917]": {
+ "$type": "SelectionComponent",
+ "Id": 4197335450471807917
+ },
+ "Component_[6877680739064997650]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 6877680739064997650
+ },
+ "Component_[7372550507186490390]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 7372550507186490390
+ },
+ "Component_[7673532337364366244]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7673532337364366244
+ },
+ "Component_[9231452352781000222]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 9231452352781000222,
+ "Parent Entity": "ContainerEntity"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Assets/TestAnim/parent_tops.fbx b/AutomatedTesting/Assets/TestAnim/parent_tops.fbx
new file mode 100644
index 0000000000..f13323ae8b
--- /dev/null
+++ b/AutomatedTesting/Assets/TestAnim/parent_tops.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3789abdf439a6d70438fd4bb1e06881ae6686a4699209c6bc371d22d161e5347
+size 26476
diff --git a/AutomatedTesting/Assets/TestAnim/parenting_test_default.fbx b/AutomatedTesting/Assets/TestAnim/parenting_test_default.fbx
new file mode 100644
index 0000000000..d3e189bdc5
--- /dev/null
+++ b/AutomatedTesting/Assets/TestAnim/parenting_test_default.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c987d7d79685fda83efcffb7e1afbcd356c37fc68ec5c663a89b02d4df10caea
+size 46412
diff --git a/AutomatedTesting/Assets/VegDescriptorLists/flower_pink.vegdescriptorlist b/AutomatedTesting/Assets/VegDescriptorLists/flower_pink.vegdescriptorlist
index 372cafbdce..9120d992c7 100644
--- a/AutomatedTesting/Assets/VegDescriptorLists/flower_pink.vegdescriptorlist
+++ b/AutomatedTesting/Assets/VegDescriptorLists/flower_pink.vegdescriptorlist
@@ -2,11 +2,11 @@
-
+
-
+
-
+
diff --git a/AutomatedTesting/CMakeLists.txt b/AutomatedTesting/CMakeLists.txt
index 1c5382ba4b..9621c0accb 100644
--- a/AutomatedTesting/CMakeLists.txt
+++ b/AutomatedTesting/CMakeLists.txt
@@ -27,5 +27,4 @@ else()
set_property(GLOBAL APPEND PROPERTY LY_PROJECTS_TARGET_NAME ${project_target_name})
- add_subdirectory(Gem)
endif()
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/CMakeLists.txt b/AutomatedTesting/Gem/CMakeLists.txt
index 7a411544ec..e3d8a4087a 100644
--- a/AutomatedTesting/Gem/CMakeLists.txt
+++ b/AutomatedTesting/Gem/CMakeLists.txt
@@ -6,6 +6,9 @@
#
#
+set(gem_path ${CMAKE_CURRENT_LIST_DIR})
+set(gem_json ${gem_path}/gem.json)
+o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+
add_subdirectory(Code)
-add_subdirectory(PythonTests)
-add_subdirectory(PythonCoverage)
+add_subdirectory(PythonTests)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/Code/CMakeLists.txt b/AutomatedTesting/Gem/Code/CMakeLists.txt
index 8808507765..1a88d6e69a 100644
--- a/AutomatedTesting/Gem/Code/CMakeLists.txt
+++ b/AutomatedTesting/Gem/Code/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
ly_add_target(
NAME AutomatedTesting ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
diff --git a/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestLevelEntityComponent.AutoComponent.xml b/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestLevelEntityComponent.AutoComponent.xml
new file mode 100644
index 0000000000..2fd196a2f6
--- /dev/null
+++ b/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestLevelEntityComponent.AutoComponent.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml b/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml
index 251d2b25af..b4dd35d741 100644
--- a/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml
+++ b/AutomatedTesting/Gem/Code/Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml
@@ -29,8 +29,6 @@
-
-
diff --git a/AutomatedTesting/Gem/Code/automatedtesting_files.cmake b/AutomatedTesting/Gem/Code/automatedtesting_files.cmake
index eb619104a4..1f6dbbd772 100644
--- a/AutomatedTesting/Gem/Code/automatedtesting_files.cmake
+++ b/AutomatedTesting/Gem/Code/automatedtesting_files.cmake
@@ -12,4 +12,5 @@ set(FILES
Source/AutomatedTestingSystemComponent.cpp
Source/AutomatedTestingSystemComponent.h
Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml
+ Source/AutoGen/NetworkTestLevelEntityComponent.AutoComponent.xml
)
diff --git a/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt b/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
index 2bb380fae3..50f9e78c74 100644
--- a/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
@@ -6,4 +6,8 @@
#
#
+set(gem_path ${CMAKE_CURRENT_LIST_DIR})
+set(gem_json ${gem_path}/gem.json)
+o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+
add_subdirectory(Code)
diff --git a/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt b/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
index a865ccc49f..ea6db88c1c 100644
--- a/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${o3de_gem_restricted_path} ${o3de_gem_path} ${o3de_gem_name})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
if(PAL_TRAIT_PYTHONCOVERAGE_SUPPORTED)
diff --git a/AutomatedTesting/Gem/PythonCoverage/gem.json b/AutomatedTesting/Gem/PythonCoverage/gem.json
index b99ce0daad..681696d78e 100644
--- a/AutomatedTesting/Gem/PythonCoverage/gem.json
+++ b/AutomatedTesting/Gem/PythonCoverage/gem.json
@@ -4,6 +4,7 @@
"license": "Apache-2.0 Or MIT",
"license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
"origin": "Open 3D Engine - o3de.org",
+ "origin_url": "https://github.com/o3de/o3de",
"type": "Tool",
"summary": "A tool for generating gem coverage for Python tests.",
"canonical_tags": [
@@ -13,5 +14,8 @@
"PythonCoverage"
],
"icon_path": "preview.png",
- "requirements": ""
+ "requirements": "",
+ "documentation_url": "",
+ "dependencies": [
+ ]
}
diff --git a/AutomatedTesting/Gem/PythonCoverage/preview.png b/AutomatedTesting/Gem/PythonCoverage/preview.png
index 2f1ed47754..2979dbb6a4 100644
--- a/AutomatedTesting/Gem/PythonCoverage/preview.png
+++ b/AutomatedTesting/Gem/PythonCoverage/preview.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6d6204c6730e5675791765ca194e9b1cbec282208e280507de830afc2805e5fa
-size 41127
+oid sha256:de0e6e480ece5b423222f4feacf56553d73713fe9afea8bbc9a2660a3cd54ec7
+size 1232
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt
index c8629bbe8b..10e90ecbfc 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/AWS/CMakeLists.txt
@@ -12,12 +12,6 @@
################################################################################
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
- # Only enable AWS automated tests on Windows
- set(SUPPORTED_PLATFORMS "Windows" "Linux")
- if (NOT "${PAL_PLATFORM_NAME}" IN_LIST SUPPORTED_PLATFORMS)
- return()
- endif()
-
ly_add_pytest(
NAME AutomatedTesting::AWSTests
TEST_SUITE awsi
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/README.md b/AutomatedTesting/Gem/PythonTests/AWS/README.md
index a25f39d9c2..73ef685261 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/README.md
+++ b/AutomatedTesting/Gem/PythonTests/AWS/README.md
@@ -3,7 +3,7 @@
## Prerequisites
1. Build the O3DE Editor and AutomatedTesting.GameLauncher in Profile.
2. Install the latest version of NodeJs.
-3. AWS CLI is installed and configured following [Configuration and Credential File Settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
+3. AWS CLI is installed and AWS crendentials are configured via [environment variables](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html) or [default profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
4. [AWS Cloud Development Kit (CDK)](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_install) is installed.
## Deploy CDK Applications
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/common/aws_credentials.py b/AutomatedTesting/Gem/PythonTests/AWS/common/aws_credentials.py
index c6401f2828..d0bbfe7c3e 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/common/aws_credentials.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/common/aws_credentials.py
@@ -68,6 +68,10 @@ class AwsCredentials:
if (len(self._credentials.sections()) == 0) and (not self._credentials_file_exists):
os.remove(self._credentials_path)
return
+
+ credentials_file_dir = os.path.dirname(self._credentials_path)
+ if not os.path.isdir(credentials_file_dir):
+ os.makedirs(credentials_file_dir)
with open(self._credentials_path, 'w+') as credential_file:
self._credentials.write(credential_file)
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/common/aws_utils.py b/AutomatedTesting/Gem/PythonTests/AWS/common/aws_utils.py
index 92f3762e71..2a5efbd03f 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/common/aws_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/common/aws_utils.py
@@ -16,7 +16,7 @@ logging.getLogger('nose').setLevel(logging.WARNING)
class AwsUtils:
def __init__(self, arn: str, session_name: str, region_name: str):
- local_session = boto3.Session(profile_name='default')
+ local_session = boto3.Session()
local_sts_client = local_session.client('sts')
self._local_account_id = local_sts_client.get_caller_identity()["Account"]
logger.info(f'Local Account Id: {self._local_account_id}')
diff --git a/AutomatedTesting/Gem/PythonTests/AWS/common/constants.py b/AutomatedTesting/Gem/PythonTests/AWS/common/constants.py
index b12aca5f29..a38974073a 100644
--- a/AutomatedTesting/Gem/PythonTests/AWS/common/constants.py
+++ b/AutomatedTesting/Gem/PythonTests/AWS/common/constants.py
@@ -6,11 +6,13 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
"""
import os
+import platform
# ARN of the IAM role to assume for retrieving temporary AWS credentials
ASSUME_ROLE_ARN = os.environ.get('ASSUME_ROLE_ARN', 'arn:aws:iam::645075835648:role/o3de-automation-tests')
# Name of the AWS project deployed by the CDK applications
-AWS_PROJECT_NAME = os.environ.get('O3DE_AWS_PROJECT_NAME', 'AWSAUTO')
+AWS_PROJECT_NAME = os.environ.get('O3DE_AWS_PROJECT_NAME').upper() if os.environ.get('O3DE_AWS_PROJECT_NAME') else \
+ (os.environ.get('BRANCH_NAME', '') + '-' + os.environ.get('PIPELINE_NAME', '') + '-' + platform.system()).upper()
# Region for the existing CloudFormation stacks used by the automation tests
AWS_REGION = os.environ.get('O3DE_AWS_DEPLOY_REGION', 'us-east-1')
# Name of the default resource mapping config file used by the automation tests
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py
index 905722d103..8fc9838b52 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py
@@ -4,16 +4,28 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
+import logging
+import os
import pytest
+import ly_test_tools.environment.file_system as file_system
+import editor_python_test_tools.hydra_test_utils as hydra
+
from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite
+logger = logging.getLogger(__name__)
+TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
+
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
class TestAutomation(EditorTestSuite):
- enable_prefab_system = False
+ enable_prefab_system = True
+
+ @pytest.mark.test_case_id("C36529679")
+ class AtomLevelLoadTest_Editor(EditorSharedTest):
+ from Atom.tests import hydra_Atom_LevelLoadTest as test_module
@pytest.mark.test_case_id("C36525657")
class AtomEditorComponents_BloomAdded(EditorSharedTest):
@@ -112,5 +124,85 @@ class TestAutomation(EditorTestSuite):
class AtomEditorComponents_SSAOAdded(EditorSharedTest):
from Atom.tests import hydra_AtomEditorComponents_SSAOAdded as test_module
+ @pytest.mark.test_case_id("C36529666")
+ class AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded(EditorSharedTest):
+ from Atom.tests import hydra_AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded as test_module
+
+ @pytest.mark.test_case_id("C36525660")
+ class AtomEditorComponentsLevel_DisplayMapperAdded(EditorSharedTest):
+ from Atom.tests import hydra_AtomEditorComponentsLevel_DisplayMapperAdded as test_module
+
class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest):
from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module
+
+
+@pytest.mark.parametrize("project", ["AutomatedTesting"])
+@pytest.mark.parametrize("launcher_platform", ['windows_generic'])
+class TestMaterialEditorBasicTests(object):
+ @pytest.fixture(autouse=True)
+ def setup_teardown(self, request, workspace, project):
+ def delete_files():
+ file_system.delete(
+ [
+ os.path.join(workspace.paths.project(), "Materials", "test_material.material"),
+ os.path.join(workspace.paths.project(), "Materials", "test_material_1.material"),
+ os.path.join(workspace.paths.project(), "Materials", "test_material_2.material"),
+ ],
+ True,
+ True,
+ )
+ # Cleanup our newly created materials
+ delete_files()
+
+ def teardown():
+ # Cleanup our newly created materials
+ delete_files()
+
+ request.addfinalizer(teardown)
+
+ @pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
+ @pytest.mark.test_case_id("C34448113") # Creating a New Asset.
+ @pytest.mark.test_case_id("C34448114") # Opening an Existing Asset.
+ @pytest.mark.test_case_id("C34448115") # Closing Selected Material.
+ @pytest.mark.test_case_id("C34448116") # Closing All Materials.
+ @pytest.mark.test_case_id("C34448117") # Closing all but Selected Material.
+ @pytest.mark.test_case_id("C34448118") # Saving Material.
+ @pytest.mark.test_case_id("C34448119") # Saving as a New Material.
+ @pytest.mark.test_case_id("C34448120") # Saving as a Child Material.
+ @pytest.mark.test_case_id("C34448121") # Saving all Open Materials.
+ def test_MaterialEditorBasicTests(
+ self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
+
+ expected_lines = [
+ "Material opened: True",
+ "Test asset doesn't exist initially: True",
+ "New asset created: True",
+ "New Material opened: True",
+ "Material closed: True",
+ "All documents closed: True",
+ "Close All Except Selected worked as expected: True",
+ "Actual Document saved with changes: True",
+ "Document saved as copy is saved with changes: True",
+ "Document saved as child is saved with changes: True",
+ "Save All worked as expected: True",
+ "P1: Asset Browser visibility working as expected: True",
+ "P1: Inspector visibility working as expected: True",
+ ]
+ unexpected_lines = [
+ # Including any lines in unexpected_lines will cause the test to run for the duration of the timeout
+ ]
+
+ hydra.launch_and_validate_results(
+ request,
+ TEST_DIRECTORY,
+ generic_launcher,
+ "hydra_AtomMaterialEditor_BasicTests.py",
+ run_python="--runpython",
+ timeout=43,
+ expected_lines=expected_lines,
+ unexpected_lines=unexpected_lines,
+ halt_on_unexpected=True,
+ null_renderer=True,
+ log_file_name="MaterialEditor.log",
+ enable_prefab_system=False,
+ )
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py
index 29f90e6807..5299e55a2b 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py
@@ -9,168 +9,20 @@ import os
import pytest
-import ly_test_tools.environment.file_system as file_system
-import editor_python_test_tools.hydra_test_utils as hydra
from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite
-from Atom.atom_utils.atom_constants import LIGHT_TYPES
logger = logging.getLogger(__name__)
TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("level", ["auto_test"])
-class TestAtomEditorComponentsMain(object):
- """Holds tests for Atom components."""
-
- @pytest.mark.test_case_id("C34525095")
- def test_AtomEditorComponents_LightComponent(
- self, request, editor, workspace, project, launcher_platform, level):
- """
- Please review the hydra script run by this test for more specific test info.
- Tests that the Light component has the expected property options available to it.
- """
- cfg_args = [level]
-
- expected_lines = [
- "light_entity Entity successfully created",
- "Entity has a Light component",
- "light_entity_test: Component added to the entity: True",
- f"light_entity_test: Property value is {LIGHT_TYPES['sphere']} which matches {LIGHT_TYPES['sphere']}",
- "Controller|Configuration|Shadows|Enable shadow set to True",
- "light_entity Controller|Configuration|Shadows|Shadowmap size: SUCCESS",
- "Controller|Configuration|Shadows|Shadow filter method set to 1", # PCF
- "Controller|Configuration|Shadows|Filtering sample count set to 4",
- "Controller|Configuration|Shadows|Filtering sample count set to 64",
- "Controller|Configuration|Shadows|Shadow filter method set to 2", # ESM
- "Controller|Configuration|Shadows|ESM exponent set to 50.0",
- "Controller|Configuration|Shadows|ESM exponent set to 5000.0",
- "Controller|Configuration|Shadows|Shadow filter method set to 3", # ESM+PCF
- f"light_entity_test: Property value is {LIGHT_TYPES['spot_disk']} which matches {LIGHT_TYPES['spot_disk']}",
- f"light_entity_test: Property value is {LIGHT_TYPES['capsule']} which matches {LIGHT_TYPES['capsule']}",
- f"light_entity_test: Property value is {LIGHT_TYPES['quad']} which matches {LIGHT_TYPES['quad']}",
- "light_entity Controller|Configuration|Fast approximation: SUCCESS",
- "light_entity Controller|Configuration|Both directions: SUCCESS",
- f"light_entity_test: Property value is {LIGHT_TYPES['polygon']} which matches {LIGHT_TYPES['polygon']}",
- f"light_entity_test: Property value is {LIGHT_TYPES['simple_point']} "
- f"which matches {LIGHT_TYPES['simple_point']}",
- "Controller|Configuration|Attenuation radius|Mode set to 0",
- "Controller|Configuration|Attenuation radius|Radius set to 100.0",
- f"light_entity_test: Property value is {LIGHT_TYPES['simple_spot']} "
- f"which matches {LIGHT_TYPES['simple_spot']}",
- "Controller|Configuration|Shutters|Outer angle set to 45.0",
- "Controller|Configuration|Shutters|Outer angle set to 90.0",
- "light_entity_test: Component added to the entity: True",
- "Light component test (non-GPU) completed.",
- ]
-
- unexpected_lines = ["Traceback (most recent call last):"]
-
- hydra.launch_and_validate_results(
- request,
- TEST_DIRECTORY,
- editor,
- "hydra_AtomEditorComponents_LightComponent.py",
- timeout=120,
- expected_lines=expected_lines,
- unexpected_lines=unexpected_lines,
- halt_on_unexpected=True,
- null_renderer=True,
- cfg_args=cfg_args,
- enable_prefab_system=False,
- )
-
-
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("launcher_platform", ['windows_generic'])
-@pytest.mark.system
-class TestMaterialEditorBasicTests(object):
- @pytest.fixture(autouse=True)
- def setup_teardown(self, request, workspace, project):
- def delete_files():
- file_system.delete(
- [
- os.path.join(workspace.paths.project(), "Materials", "test_material.material"),
- os.path.join(workspace.paths.project(), "Materials", "test_material_1.material"),
- os.path.join(workspace.paths.project(), "Materials", "test_material_2.material"),
- ],
- True,
- True,
- )
- # Cleanup our newly created materials
- delete_files()
-
- def teardown():
- # Cleanup our newly created materials
- delete_files()
-
- request.addfinalizer(teardown)
-
- @pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
- @pytest.mark.test_case_id("C34448113") # Creating a New Asset.
- @pytest.mark.test_case_id("C34448114") # Opening an Existing Asset.
- @pytest.mark.test_case_id("C34448115") # Closing Selected Material.
- @pytest.mark.test_case_id("C34448116") # Closing All Materials.
- @pytest.mark.test_case_id("C34448117") # Closing all but Selected Material.
- @pytest.mark.test_case_id("C34448118") # Saving Material.
- @pytest.mark.test_case_id("C34448119") # Saving as a New Material.
- @pytest.mark.test_case_id("C34448120") # Saving as a Child Material.
- @pytest.mark.test_case_id("C34448121") # Saving all Open Materials.
- def test_MaterialEditorBasicTests(
- self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
-
- expected_lines = [
- "Material opened: True",
- "Test asset doesn't exist initially: True",
- "New asset created: True",
- "New Material opened: True",
- "Material closed: True",
- "All documents closed: True",
- "Close All Except Selected worked as expected: True",
- "Actual Document saved with changes: True",
- "Document saved as copy is saved with changes: True",
- "Document saved as child is saved with changes: True",
- "Save All worked as expected: True",
- ]
- unexpected_lines = [
- "Traceback (most recent call last):"
- ]
-
- hydra.launch_and_validate_results(
- request,
- TEST_DIRECTORY,
- generic_launcher,
- "hydra_AtomMaterialEditor_BasicTests.py",
- run_python="--runpython",
- timeout=120,
- expected_lines=expected_lines,
- unexpected_lines=unexpected_lines,
- halt_on_unexpected=True,
- null_renderer=True,
- log_file_name="MaterialEditor.log",
- enable_prefab_system=False,
- )
-
-
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
class TestAutomation(EditorTestSuite):
enable_prefab_system = False
- #this test is intermittently timing out without ever having executed. sandboxing while we investigate cause.
+ # this test is intermittently timing out without ever having executed. sandboxing while we investigate cause.
@pytest.mark.test_case_id("C36525660")
class AtomEditorComponents_DisplayMapperAdded(EditorSharedTest):
from Atom.tests import hydra_AtomEditorComponents_DisplayMapperAdded as test_module
-
- # this test causes editor to crash when using slices. once automation transitions to prefabs it should pass
- @pytest.mark.test_case_id("C36529666")
- class AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded(EditorSharedTest):
- from Atom.tests import hydra_AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded as test_module
-
- # this test causes editor to crash when using slices. once automation transitions to prefabs it should pass
- @pytest.mark.test_case_id("C36525660")
- class AtomEditorComponentsLevel_DisplayMapperAdded(EditorSharedTest):
- from Atom.tests import hydra_AtomEditorComponentsLevel_DisplayMapperAdded as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_constants.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_constants.py
index e6d6ac7fb1..339108090f 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_constants.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_constants.py
@@ -32,6 +32,8 @@ GLOBAL_ILLUMINATION_QUALITY = {
'High': 2,
}
+# Level list used in Editor Level Load Test
+LEVEL_LIST = ["hermanubis", "hermanubis_high", "macbeth_shaderballs", "PbrMaterialChart", "ShadowTest", "Sponza"]
class AtomComponentProperties:
"""
@@ -195,11 +197,13 @@ class AtomComponentProperties:
def entity_reference(property: str = 'name') -> str:
"""
Entity Reference component properties.
+ - 'EntityIdReferences' component container of entityId references. Initially empty.
:param property: From the last element of the property tree path. Default 'name' for component name string.
:return: Full property path OR component name if no property specified.
"""
properties = {
'name': 'Entity Reference',
+ 'EntityIdReferences': 'Controller|Configuration|EntityIdReferences',
}
return properties[property]
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
index b21c74de19..96eeb4279e 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
@@ -125,11 +125,11 @@ def is_pane_visible(pane_name):
"""
:return: bool
"""
- return atomtools.AtomToolsWindowRequestBus(bus.Broadcast, "IsDockWidgetVisible", pane_name)
+ return atomtools.AtomToolsMainWindowRequestBus(bus.Broadcast, "IsDockWidgetVisible", pane_name)
def set_pane_visibility(pane_name, value):
- atomtools.AtomToolsWindowRequestBus(bus.Broadcast, "SetDockWidgetVisible", pane_name, value)
+ atomtools.AtomToolsMainWindowRequestBus(bus.Broadcast, "SetDockWidgetVisible", pane_name, value)
def select_lighting_config(config_name):
@@ -162,6 +162,13 @@ def select_model_config(configname):
azlmbr.materialeditor.MaterialViewportRequestBus(azlmbr.bus.Broadcast, "SelectModelPresetByName", configname)
+def destroy_main_window():
+ """
+ Closes the Material Editor window
+ """
+ azlmbr.atomtools.AtomToolsMainWindowFactoryRequestBus(azlmbr.bus.Broadcast, "DestroyMainWindow")
+
+
def wait_for_condition(function, timeout_in_seconds=1.0):
# type: (function, float) -> bool
"""
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded.py
index ddcd5c3c46..0c9b39e354 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DiffuseGlobalIlluminationAdded.py
@@ -60,7 +60,7 @@ def AtomEditorComponentsLevel_DiffuseGlobalIllumination_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Add Diffuse Global Illumination level component to the level entity.
@@ -86,10 +86,10 @@ def AtomEditorComponentsLevel_DiffuseGlobalIllumination_AddedToEntity():
# 4. Set Quality Level property to Low
diffuse_global_illumination_component.set_component_property_value(
- AtomComponentProperties.diffuse_global_illumination('Quality Level', GLOBAL_ILLUMINATION_QUALITY['Low']))
+ AtomComponentProperties.diffuse_global_illumination('Quality Level'), GLOBAL_ILLUMINATION_QUALITY['Low'])
quality = diffuse_global_illumination_component.get_component_property_value(
AtomComponentProperties.diffuse_global_illumination('Quality Level'))
- Report.result(diffuse_global_illumination_quality, quality == GLOBAL_ILLUMINATION_QUALITY['Low'])
+ Report.result(Tests.diffuse_global_illumination_quality, quality == GLOBAL_ILLUMINATION_QUALITY['Low'])
# 5. Enter/Exit game mode.
TestHelper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DisplayMapperAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DisplayMapperAdded.py
index c050dd76d4..f9660957bb 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DisplayMapperAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponentsLevel_DisplayMapperAdded.py
@@ -67,7 +67,7 @@ def AtomEditorComponentsLevel_DisplayMapper_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Add Display Mapper level component to the level entity.
@@ -102,7 +102,7 @@ def AtomEditorComponentsLevel_DisplayMapper_AddedToEntity():
display_mapper_component.set_component_property_value(
AtomComponentProperties.display_mapper('Enable LDR color grading LUT'), True)
Report.result(
- Test.enable_ldr_color_grading_lut,
+ Tests.enable_ldr_color_grading_lut,
display_mapper_component.get_component_property_value(
AtomComponentProperties.display_mapper('Enable LDR color grading LUT')) is True)
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_BloomAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_BloomAdded.py
index 56b22eb20d..ce29a1de88 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_BloomAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_BloomAdded.py
@@ -97,7 +97,7 @@ def AtomEditorComponents_Bloom_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create an Bloom entity with no components.
@@ -170,10 +170,12 @@ def AtomEditorComponents_Bloom_AddedToEntity():
# 13. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, bloom_entity.exists())
# 14. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not bloom_entity.exists())
# 15. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DecalAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DecalAdded.py
index e840cf3cf1..eb5e24e3a6 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DecalAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DecalAdded.py
@@ -95,7 +95,7 @@ def AtomEditorComponents_Decal_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Decal entity with no components.
@@ -162,6 +162,7 @@ def AtomEditorComponents_Decal_AddedToEntity():
# 11. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not decal_entity.exists())
# 12. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DeferredFogAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DeferredFogAdded.py
index 71163ece94..f1578cbf8d 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DeferredFogAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DeferredFogAdded.py
@@ -97,7 +97,7 @@ def AtomEditorComponents_DeferredFog_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create an Deferred Fog entity with no components.
@@ -174,10 +174,12 @@ def AtomEditorComponents_DeferredFog_AddedToEntity():
# 13. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, deferred_fog_entity.exists())
# 14. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not deferred_fog_entity.exists())
# 15. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DepthOfFieldAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DepthOfFieldAdded.py
index e2c5f9c77d..3913420981 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DepthOfFieldAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DepthOfFieldAdded.py
@@ -107,7 +107,7 @@ def AtomEditorComponents_DepthOfField_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a DepthOfField entity with no components.
@@ -189,10 +189,12 @@ def AtomEditorComponents_DepthOfField_AddedToEntity():
# 15. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, depth_of_field_entity.exists())
# 16. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not depth_of_field_entity.exists())
# 17. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DiffuseProbeGridAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DiffuseProbeGridAdded.py
index f42c091057..04b4f7876b 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DiffuseProbeGridAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DiffuseProbeGridAdded.py
@@ -90,7 +90,7 @@ def AtomEditorComponents_DiffuseProbeGrid_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Diffuse Probe Grid entity with no components.
@@ -168,10 +168,12 @@ def AtomEditorComponents_DiffuseProbeGrid_AddedToEntity():
# 12. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, diffuse_probe_grid_entity.exists())
# 13. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not diffuse_probe_grid_entity.exists())
# 14. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DirectionalLightAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DirectionalLightAdded.py
index f3ffc0f366..19cfbedcd5 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DirectionalLightAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DirectionalLightAdded.py
@@ -95,7 +95,7 @@ def AtomEditorComponents_DirectionalLight_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Directional Light entity with no components.
@@ -168,10 +168,12 @@ def AtomEditorComponents_DirectionalLight_AddedToEntity():
# 12. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, directional_light_entity.exists())
# 13. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not directional_light_entity.exists())
# 14. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DisplayMapperAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DisplayMapperAdded.py
index 558d69046e..d3ea669eab 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DisplayMapperAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_DisplayMapperAdded.py
@@ -91,7 +91,7 @@ def AtomEditorComponents_DisplayMapper_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Display Mapper entity with no components.
@@ -166,10 +166,12 @@ def AtomEditorComponents_DisplayMapper_AddedToEntity():
# 11. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, display_mapper_entity.exists())
# 12. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not display_mapper_entity.exists())
# 13. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_EntityReferenceAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_EntityReferenceAdded.py
index dddcca64fa..984774cd37 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_EntityReferenceAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_EntityReferenceAdded.py
@@ -9,37 +9,58 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
class Tests:
creation_undo = (
"UNDO Entity creation success",
- "UNDO Entity creation failed")
+ "P0: UNDO Entity creation failed")
creation_redo = (
"REDO Entity creation success",
- "REDO Entity creation failed")
+ "P0: REDO Entity creation failed")
entity_reference_creation = (
"Entity Reference Entity successfully created",
- "Entity Reference Entity failed to be created")
+ "P0: Entity Reference Entity failed to be created")
entity_reference_component = (
"Entity has an Entity Reference component",
- "Entity failed to find Entity Reference component")
+ "P0: Entity failed to find Entity Reference component")
enter_game_mode = (
"Entered game mode",
- "Failed to enter game mode")
+ "P0: Failed to enter game mode")
exit_game_mode = (
"Exited game mode",
- "Couldn't exit game mode")
+ "P0: Couldn't exit game mode")
is_visible = (
"Entity is visible",
- "Entity was not visible")
+ "P0: Entity was not visible")
is_hidden = (
"Entity is hidden",
- "Entity was not hidden")
+ "P0: Entity was not hidden")
entity_deleted = (
"Entity deleted",
- "Entity was not deleted")
+ "P0: Entity was not deleted")
deletion_undo = (
"UNDO deletion success",
- "UNDO deletion failed")
+ "P0: UNDO deletion failed")
deletion_redo = (
"REDO deletion success",
- "REDO deletion failed")
+ "P0: REDO deletion failed")
+ entity_id_references_is_container = (
+ "EntityIdReferences is a container property",
+ "P1: EntityIdReferences is NOT a container property")
+ container_append = (
+ "EntityIdReferences append succeeded",
+ "P1: EntityIdReferences append did not succeed")
+ container_add = (
+ "EntityIdReferences add succeeded",
+ "P1: EntityIdReferences add did not succeed")
+ container_update = (
+ "EntityIdReferences update succeeded",
+ "P1: EntityIdReferences update did not succeed")
+ container_remove = (
+ "EntityIdReferences remove succeeded",
+ "P1: EntityIdReferences remove did not succeed")
+ container_reset = (
+ "EntityIdReferences reset succeeded",
+ "P1: EntityIdReferences reset did not succeed")
+ entity_reference_component_removed = (
+ "Entity Reference component removed from entity",
+ "P1: Entity Reference component NOT removed from entity")
def AtomEditorComponents_EntityReference_AddedToEntity():
@@ -60,13 +81,21 @@ def AtomEditorComponents_EntityReference_AddedToEntity():
2) Add Entity Reference component to Entity Reference entity.
3) UNDO the entity creation and component addition.
4) REDO the entity creation and component addition.
- 5) Enter/Exit game mode.
- 6) Test IsHidden.
- 7) Test IsVisible.
- 8) Delete Entity Reference entity.
- 9) UNDO deletion.
- 10) REDO deletion.
- 11) Look for errors.
+ 5) 'EntityIdReferences' is a container property
+ 6) Append item to 'EntityIdReferences'
+ 7) Add item to 'EntityIdReferences'
+ 8) Update item in 'EntityIdReferences'
+ 9) Remove item from 'EntityIdReferences'
+ 10) Reset the container property then put one entity reference back for further tests
+ 11) Remove component
+ 12) UNDO component remove
+ 13) Enter/Exit game mode.
+ 14) Test IsHidden.
+ 15) Test IsVisible.
+ 16) Delete Entity Reference entity.
+ 17) UNDO deletion.
+ 18) REDO deletion.
+ 19) Look for errors.
:return: None
"""
@@ -81,7 +110,7 @@ def AtomEditorComponents_EntityReference_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create an Entity Reference entity with no components.
@@ -119,33 +148,107 @@ def AtomEditorComponents_EntityReference_AddedToEntity():
general.idle_wait_frames(1)
Report.result(Tests.creation_redo, entity_reference_entity.exists())
- # 5. Enter/Exit game mode.
+ # Entities for EntityIdReferences tests
+ test_1 = EditorEntity.create_editor_entity('test_1')
+ test_2 = EditorEntity.create_editor_entity('test_2')
+ test_3 = EditorEntity.create_editor_entity('test_3')
+
+ # 5. 'EntityIdReferences' is a container property
+ Report.result(
+ Tests.entity_id_references_is_container,
+ entity_reference_component.is_property_container(
+ AtomComponentProperties.entity_reference('EntityIdReferences')))
+
+ # 6. Append item to 'EntityIdReferences'
+ entity_reference_component.append_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), test_1.id)
+ Report.result(
+ Tests.container_append,
+ entity_reference_component.get_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), 0) == test_1.id)
+
+ # 7. Add item to 'EntityIdReferences'
+ entity_reference_component.add_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), 1, test_1.id)
+ Report.result(
+ Tests.container_add,
+ entity_reference_component.get_container_count(
+ AtomComponentProperties.entity_reference('EntityIdReferences')) == 2)
+
+ # 8. Update item in 'EntityIdReferences'
+ entity_reference_component.update_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), 1, test_2.id)
+ Report.result(
+ Tests.container_update,
+ entity_reference_component.get_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), 1) == test_2.id)
+
+ # 9. Remove item from 'EntityIdReferences'
+ entity_reference_component.append_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), test_3.id)
+ count_before = entity_reference_component.get_container_count(
+ AtomComponentProperties.entity_reference('EntityIdReferences'))
+ entity_reference_component.remove_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), 1)
+ count_after = entity_reference_component.get_container_count(
+ AtomComponentProperties.entity_reference('EntityIdReferences'))
+ Report.result(
+ Tests.container_remove,
+ ((count_before == 3) and (count_after == 2) and
+ (entity_reference_component.get_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), 1) == test_3.id)))
+
+ # 10. Reset the container property then put one entity reference back for further tests
+ entity_reference_component.reset_container(AtomComponentProperties.entity_reference('EntityIdReferences'))
+ general.idle_wait_frames(1)
+ Report.result(
+ Tests.container_reset,
+ entity_reference_component.get_container_count(
+ AtomComponentProperties.entity_reference('EntityIdReferences')) == 0)
+ entity_reference_component.append_container_item(
+ AtomComponentProperties.entity_reference('EntityIdReferences'), test_1.id)
+
+ # 11. Remove component
+ entity_reference_entity.remove_component(AtomComponentProperties.entity_reference())
+ general.idle_wait_frames(1)
+ Report.result(Tests.entity_reference_component_removed, not entity_reference_entity.has_component(
+ AtomComponentProperties.entity_reference()))
+
+ # 12. UNDO component remove
+ general.undo()
+ general.idle_wait_frames(1)
+ Report.result(Tests.entity_reference_component, entity_reference_entity.has_component(
+ AtomComponentProperties.entity_reference()))
+
+ # 13. Enter/Exit game mode.
TestHelper.enter_game_mode(Tests.enter_game_mode)
general.idle_wait_frames(1)
TestHelper.exit_game_mode(Tests.exit_game_mode)
- # 6. Test IsHidden.
+ # 14. Test IsHidden.
entity_reference_entity.set_visibility_state(False)
Report.result(Tests.is_hidden, entity_reference_entity.is_hidden() is True)
- # 7. Test IsVisible.
+ # 15. Test IsVisible.
entity_reference_entity.set_visibility_state(True)
general.idle_wait_frames(1)
Report.result(Tests.is_visible, entity_reference_entity.is_visible() is True)
- # 8. Delete Entity Reference entity.
+ # 16. Delete Entity Reference entity.
entity_reference_entity.delete()
Report.result(Tests.entity_deleted, not entity_reference_entity.exists())
- # 9. UNDO deletion.
+ # 17. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, entity_reference_entity.exists())
- # 10. REDO deletion.
+ # 18. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not entity_reference_entity.exists())
- # 11. Look for errors and asserts.
+ # 19. Look for errors and asserts.
TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
for error_info in error_tracer.errors:
Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ExposureControlAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ExposureControlAdded.py
index 6fa9660539..f60f0e18be 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ExposureControlAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ExposureControlAdded.py
@@ -101,7 +101,7 @@ def AtomEditorComponents_ExposureControl_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Creation of Exposure Control entity with no components.
@@ -169,10 +169,12 @@ def AtomEditorComponents_ExposureControl_AddedToEntity():
# 12. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, exposure_control_entity.exists())
# 13. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not exposure_control_entity.exists())
# 14. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GlobalSkylightIBLAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GlobalSkylightIBLAdded.py
index 7f0c38e289..0e8e6fa43e 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GlobalSkylightIBLAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GlobalSkylightIBLAdded.py
@@ -99,7 +99,7 @@ def AtomEditorComponents_GlobalSkylightIBL_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Global Skylight (IBL) entity with no components.
@@ -176,10 +176,12 @@ def AtomEditorComponents_GlobalSkylightIBL_AddedToEntity():
# 11. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, global_skylight_entity.exists())
# 12. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not global_skylight_entity.exists())
# 13. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GridAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GridAdded.py
index a77a1f50a4..3c6d261f22 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GridAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_GridAdded.py
@@ -82,7 +82,7 @@ def AtomEditorComponents_Grid_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Grid entity with no components.
@@ -139,10 +139,12 @@ def AtomEditorComponents_Grid_AddedToEntity():
# 9. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, grid_entity.exists())
# 10. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not grid_entity.exists())
# 11. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRColorGradingAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRColorGradingAdded.py
index 4972079fcd..5846206e50 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRColorGradingAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRColorGradingAdded.py
@@ -96,7 +96,7 @@ def AtomEditorComponents_HDRColorGrading_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create an HDR Color Grading entity with no components.
@@ -173,10 +173,12 @@ def AtomEditorComponents_HDRColorGrading_AddedToEntity():
# 13. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, hdr_color_grading_entity.exists())
# 14. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not hdr_color_grading_entity.exists())
# 15. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRiSkyboxAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRiSkyboxAdded.py
index 0f96bc5424..fc093b60db 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRiSkyboxAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_HDRiSkyboxAdded.py
@@ -87,7 +87,7 @@ def AtomEditorComponents_HDRiSkybox_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create an HDRi Skybox with no components.
@@ -158,10 +158,12 @@ def AtomEditorComponents_HDRiSkybox_AddedToEntity():
# 10. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, hdri_skybox_entity.exists())
# 11. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not hdri_skybox_entity.exists())
# 12. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightAdded.py
index 249671556d..75a04612a3 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightAdded.py
@@ -89,7 +89,7 @@ def AtomEditorComponents_Light_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Light entity with no components.
@@ -144,10 +144,12 @@ def AtomEditorComponents_Light_AddedToEntity():
# 9. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, light_entity.exists())
# 10. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not light_entity.exists())
# 11. Look for errors asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
deleted file mode 100644
index 7ecdc6859b..0000000000
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
+++ /dev/null
@@ -1,213 +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
-"""
-
-import os
-import sys
-
-import azlmbr.bus as bus
-import azlmbr.editor as editor
-import azlmbr.math as math
-import azlmbr.paths
-import azlmbr.legacy.general as general
-
-sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
-
-import editor_python_test_tools.hydra_editor_utils as hydra
-from Atom.atom_utils.atom_constants import LIGHT_TYPES
-
-LIGHT_TYPE_PROPERTY = 'Controller|Configuration|Light type'
-SPHERE_AND_SPOT_DISK_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Shadows|Enable shadow", True),
- ("Controller|Configuration|Shadows|Shadowmap size", 0), # 256
- ("Controller|Configuration|Shadows|Shadowmap size", 1), # 512
- ("Controller|Configuration|Shadows|Shadowmap size", 2), # 1024
- ("Controller|Configuration|Shadows|Shadowmap size", 3), # 2048
- ("Controller|Configuration|Shadows|Shadow filter method", 1), # PCF
- ("Controller|Configuration|Shadows|Filtering sample count", 4.0),
- ("Controller|Configuration|Shadows|Filtering sample count", 64.0),
- ("Controller|Configuration|Shadows|Shadow filter method", 2), # ECM
- ("Controller|Configuration|Shadows|ESM exponent", 50),
- ("Controller|Configuration|Shadows|ESM exponent", 5000),
- ("Controller|Configuration|Shadows|Shadow filter method", 3), # ESM+PCF
-]
-QUAD_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Both directions", True),
- ("Controller|Configuration|Fast approximation", True),
-]
-SIMPLE_POINT_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Attenuation radius|Mode", 0),
- ("Controller|Configuration|Attenuation radius|Radius", 100.0),
-]
-SIMPLE_SPOT_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Shutters|Inner angle", 45.0),
- ("Controller|Configuration|Shutters|Outer angle", 90.0),
-]
-
-
-def verify_required_component_property_value(entity_name, component, property_path, expected_property_value):
- """
- Compares the property value of component against the expected_property_value.
- :param entity_name: name of the entity to use (for test verification purposes).
- :param component: component to check on a given entity for its current property value.
- :param property_path: the path to the property inside the component.
- :param expected_property_value: The value expected from the value inside property_path.
- :return: None, but prints to general.log() which the test uses to verify against.
- """
- property_value = editor.EditorComponentAPIBus(
- bus.Broadcast, "GetComponentProperty", component, property_path).GetValue()
- general.log(f"{entity_name}_test: Property value is {property_value} "
- f"which matches {expected_property_value}")
-
-
-def run():
- """
- Test Case - Light Component
- 1. Creates a "light_entity" Entity and attaches a "Light" component to it.
- 2. Updates the Light component to each light type option from the LIGHT_TYPES constant.
- 3. The test will check the Editor log to ensure each light type was selected.
- 4. Prints the string "Light component test (non-GPU) completed" after completion.
-
- Tests will fail immediately if any of these log lines are found:
- 1. Trace::Assert
- 2. Trace::Error
- 3. Traceback (most recent call last):
-
- :return: None
- """
- # Create a "light_entity" entity with "Light" component.
- light_entity_name = "light_entity"
- light_component = "Light"
- light_entity = hydra.Entity(light_entity_name)
- light_entity.create_entity(math.Vector3(-1.0, -2.0, 3.0), [light_component])
- general.log(
- f"{light_entity_name}_test: Component added to the entity: "
- f"{hydra.has_components(light_entity.id, [light_component])}")
-
- # Populate the light_component_id_pair value so that it can be used to select all Light component options.
- light_component_id_pair = None
- component_type_id_list = azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast, 'FindComponentTypeIdsByEntityType', [light_component], 0)
- if len(component_type_id_list) < 1:
- general.log(f"ERROR: A component class with name {light_component} doesn't exist")
- light_component_id_pair = None
- elif len(component_type_id_list) > 1:
- general.log(f"ERROR: Found more than one component classes with same name: {light_component}")
- light_component_id_pair = None
- entity_component_id_pair = azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast, 'GetComponentOfType', light_entity.id, component_type_id_list[0])
- if entity_component_id_pair.IsSuccess():
- light_component_id_pair = entity_component_id_pair.GetValue()
-
- # Test each Light component option can be selected and it's properties updated.
- # Point (sphere) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['sphere'],
- light_properties=SPHERE_AND_SPOT_DISK_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Spot (disk) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['spot_disk'],
- light_properties=SPHERE_AND_SPOT_DISK_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Capsule light type checks.
- azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast,
- 'SetComponentProperty',
- light_component_id_pair,
- LIGHT_TYPE_PROPERTY,
- LIGHT_TYPES['capsule']
- )
- verify_required_component_property_value(
- entity_name=light_entity_name,
- component=light_entity.components[0],
- property_path=LIGHT_TYPE_PROPERTY,
- expected_property_value=LIGHT_TYPES['capsule']
- )
-
- # Quad light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['quad'],
- light_properties=QUAD_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Polygon light type checks.
- azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast,
- 'SetComponentProperty',
- light_component_id_pair,
- LIGHT_TYPE_PROPERTY,
- LIGHT_TYPES['polygon']
- )
- verify_required_component_property_value(
- entity_name=light_entity_name,
- component=light_entity.components[0],
- property_path=LIGHT_TYPE_PROPERTY,
- expected_property_value=LIGHT_TYPES['polygon']
- )
-
- # Point (simple punctual) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['simple_point'],
- light_properties=SIMPLE_POINT_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Spot (simple punctual) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['simple_spot'],
- light_properties=SIMPLE_SPOT_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- general.log("Light component test (non-GPU) completed.")
-
-
-def light_type_property_test(light_type, light_properties, light_component_id_pair, light_entity_name, light_entity):
- """
- Updates the current light type and modifies its properties, then verifies they are accurate to what was set.
- :param light_type: The type of light to update, must match a value in LIGHT_TYPES
- :param light_properties: List of tuples detailing properties to modify with update values.
- :param light_component_id_pair: Entity + component ID pair for updating the light component on a given entity.
- :param light_entity_name: the name of the Entity holding the light component.
- :param light_entity: the Entity object containing the light component.
- :return: None
- """
- azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast,
- 'SetComponentProperty',
- light_component_id_pair,
- LIGHT_TYPE_PROPERTY,
- light_type
- )
- verify_required_component_property_value(
- entity_name=light_entity_name,
- component=light_entity.components[0],
- property_path=LIGHT_TYPE_PROPERTY,
- expected_property_value=light_type
- )
-
- for light_property in light_properties:
- light_entity.get_set_test(0, light_property[0], light_property[1])
-
-
-if __name__ == "__main__":
- run()
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LookModificationAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LookModificationAdded.py
index afb8033426..149af73151 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LookModificationAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LookModificationAdded.py
@@ -104,7 +104,7 @@ def AtomEditorComponents_LookModification_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create an Look Modification entity with no components.
@@ -192,10 +192,12 @@ def AtomEditorComponents_LookModification_AddedToEntity():
# 14. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, look_modification_entity.exists())
# 15. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not look_modification_entity.exists())
# 16. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py
index c613bb23e7..919a6753f4 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py
@@ -102,7 +102,7 @@ def AtomEditorComponents_Material_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Material entity with no components.
@@ -184,10 +184,12 @@ def AtomEditorComponents_Material_AddedToEntity():
# 16. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, material_entity.exists())
# 17. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not material_entity.exists())
# 18. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py
index 9d56753961..a87ee75b53 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py
@@ -87,7 +87,7 @@ def AtomEditorComponents_Mesh_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Mesh entity with no components.
@@ -151,10 +151,12 @@ def AtomEditorComponents_Mesh_AddedToEntity():
# 10. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, mesh_entity.exists())
# 11. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not mesh_entity.exists())
# 12. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_OcclusionCullingPlaneAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_OcclusionCullingPlaneAdded.py
index 4226ae3dfe..56bb5eb68c 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_OcclusionCullingPlaneAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_OcclusionCullingPlaneAdded.py
@@ -80,7 +80,7 @@ def AtomEditorComponents_OcclusionCullingPlane_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a occlusion culling plane entity with no components.
@@ -140,10 +140,12 @@ def AtomEditorComponents_OcclusionCullingPlane_AddedToEntity():
# 9. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, occlusion_culling_plane_entity.exists())
# 10. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not occlusion_culling_plane_entity.exists())
# 11. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PhysicalSkyAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PhysicalSkyAdded.py
index fa8c626016..e0c558811e 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PhysicalSkyAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PhysicalSkyAdded.py
@@ -89,7 +89,7 @@ def AtomEditorComponents_PhysicalSky_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Physical Sky entity with no components.
@@ -146,10 +146,12 @@ def AtomEditorComponents_PhysicalSky_AddedToEntity():
# 9. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, physical_sky_entity.exists())
# 10. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not physical_sky_entity.exists())
# 11. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded.py
index 6e4ae2d9ac..b36267433f 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXGradientWeightModifierAdded.py
@@ -92,7 +92,7 @@ def AtomEditorComponents_PostFXGradientWeightModifier_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a PostFX Gradient Weight Modifier entity with no components.
@@ -162,10 +162,12 @@ def AtomEditorComponents_PostFXGradientWeightModifier_AddedToEntity():
# 12. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, postfx_gradient_weight_entity.exists())
# 13. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not postfx_gradient_weight_entity.exists())
# 14. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXLayerAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXLayerAdded.py
index efef4c0a43..07fffb9bde 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXLayerAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXLayerAdded.py
@@ -80,7 +80,7 @@ def AtomEditorComponents_postfx_layer_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a PostFX Layer entity with no components.
@@ -137,10 +137,12 @@ def AtomEditorComponents_postfx_layer_AddedToEntity():
# 9. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, postfx_layer_entity.exists())
# 10. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not postfx_layer_entity.exists())
# 11. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXRadiusWeightModifierAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXRadiusWeightModifierAdded.py
index 228ddfcdc5..616233d2d2 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXRadiusWeightModifierAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFXRadiusWeightModifierAdded.py
@@ -92,7 +92,7 @@ def AtomEditorComponents_PostFXRadiusWeightModifier_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Post FX Radius Weight Modifier entity with no components.
@@ -161,10 +161,12 @@ def AtomEditorComponents_PostFXRadiusWeightModifier_AddedToEntity():
# 12. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, postfx_radius_weight_entity.exists())
# 13. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not postfx_radius_weight_entity.exists())
# 14. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFxShapeWeightModifierAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFxShapeWeightModifierAdded.py
index 0a37ac6bf7..5f7d571a18 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFxShapeWeightModifierAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_PostFxShapeWeightModifierAdded.py
@@ -98,7 +98,7 @@ def AtomEditorComponents_postfx_shape_weight_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a PostFx Shape Weight Modifier entity with no components.
@@ -188,10 +188,12 @@ def AtomEditorComponents_postfx_shape_weight_AddedToEntity():
# 15. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, postfx_shape_weight_entity.exists())
# 16. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not postfx_shape_weight_entity.exists())
# 17. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py
index 70adf9143a..85156b4db6 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py
@@ -97,7 +97,7 @@ def AtomEditorComponents_ReflectionProbe_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a Reflection Probe entity with no components.
@@ -183,10 +183,12 @@ def AtomEditorComponents_ReflectionProbe_AddedToEntity():
# 13. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, reflection_probe_entity.exists())
# 14. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not reflection_probe_entity.exists())
# 15. Look for errors or asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_SSAOAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_SSAOAdded.py
index 15f40f8b70..09f77c4a9f 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_SSAOAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_SSAOAdded.py
@@ -94,7 +94,7 @@ def AtomEditorComponents_SSAO_AddedToEntity():
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
- TestHelper.open_level("", "Base")
+ TestHelper.open_level("Graphics", "base_empty")
# Test steps begin.
# 1. Create a SSAO entity with no components.
@@ -163,10 +163,12 @@ def AtomEditorComponents_SSAO_AddedToEntity():
# 12. UNDO deletion.
general.undo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_undo, ssao_entity.exists())
# 13. REDO deletion.
general.redo()
+ general.idle_wait_frames(1)
Report.result(Tests.deletion_redo, not ssao_entity.exists())
# 14. Look for errors and asserts.
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
index 9f8f6c44b2..bd00a84919 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
@@ -36,6 +36,19 @@ MATERIAL_TYPE_PATH = os.path.join(
CACHE_FILE_EXTENSION = ".azmaterial"
+def verify_pane_visibility(pane_name: str):
+ """
+ print log lines indicating Material Editor pane visibility function
+ :param pane_name: Name of the pane to be tested
+ """
+ initial_value = material_editor.is_pane_visible(pane_name)
+ material_editor.set_pane_visibility(pane_name, not initial_value)
+ result = (material_editor.is_pane_visible(pane_name) is not initial_value)
+ material_editor.set_pane_visibility(pane_name, initial_value)
+ result = result and (initial_value is material_editor.is_pane_visible(pane_name))
+ print(f"P1: {pane_name} visibility working as expected: {result}")
+
+
def run():
"""
Summary:
@@ -49,9 +62,12 @@ def run():
7. Saving as a New Material
8. Saving as a Child Material
9. Saving all Open Materials
+ 10. Verify Asset Browser pane visibility
+ 11. Verify Material Inspector pane visibility
Expected Result:
All the above functions work as expected in Material Editor.
+ Pane visibility functions as expected
:return: None
"""
@@ -187,6 +203,19 @@ def run():
material_editor.save_all()
material_editor.close_all_documents()
+ # 10) Verify Asset Browser pane visibility
+ verify_pane_visibility("Asset Browser")
+
+ # 11) Verify Material Inspector pane visibility
+ verify_pane_visibility("Inspector")
+
+ # Confirm documents closed and exit Material Editor
+ material_editor.wait_for_condition(lambda:
+ (not material_editor.is_open(document1_id)) and
+ (not material_editor.is_open(document2_id)) and
+ (not material_editor.is_open(document3_id)), 2.0)
+ material_editor.destroy_main_window()
+
if __name__ == "__main__":
run()
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_Atom_LevelLoadTest.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_Atom_LevelLoadTest.py
new file mode 100644
index 0000000000..1efcbe4d01
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_Atom_LevelLoadTest.py
@@ -0,0 +1,72 @@
+"""
+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
+"""
+
+
+def Atom_LevelLoadTest():
+ """
+ Summary:
+ Loads all graphics levels within the AutomatedTesting project in editor. For each level this script will verify that
+ the level loads, and can enter/exit gameplay without crashing the editor.
+
+ Test setup:
+ - Store all available levels in a list.
+ - Set up a for loop to run all checks for each level.
+
+ Expected Behavior:
+ Test verifies that each level loads, enters/exits game mode, and reports success for all test actions.
+
+ Test Steps for each level:
+ 1) Create tuple with level load success and failure messages
+ 2) Open the level using the python test tools command
+ 3) Verify level is loaded using a separate command, and report success/failure
+ 4) Enter gameplay and report result using a tuple
+ 5) Exit Gameplay and report result using a tuple
+ 6) Look for errors or asserts.
+
+ :return: None
+ """
+
+ import azlmbr.legacy.general as general
+
+ from editor_python_test_tools.utils import Report, Tracer, TestHelper
+ from Atom.atom_utils.atom_constants import LEVEL_LIST
+
+ with Tracer() as error_tracer:
+
+ for level in LEVEL_LIST:
+
+ # 1. Create tuple with level load success and failure messages
+ level_check_tuple = (f"loaded {level}", f"failed to load {level}")
+
+ # 2. Open the level using the python test tools command
+ TestHelper.init_idle()
+ TestHelper.open_level("Graphics", level)
+
+ # 3. Verify level is loaded using a separate command, and report success/failure
+ Report.result(level_check_tuple, level == general.get_current_level_name())
+
+ # 4. Enter gameplay and report result using a tuple
+ enter_game_mode_tuple = (f"{level} entered gameplay successfully ", f"{level} failed to enter gameplay")
+ TestHelper.enter_game_mode(enter_game_mode_tuple)
+ general.idle_wait_frames(1)
+
+ # 5. Exit gameplay and report result using a tuple
+ exit_game_mode_tuple = (f"{level} exited gameplay successfully ", f"{level} failed to exit gameplay")
+ TestHelper.exit_game_mode(exit_game_mode_tuple)
+
+
+ # 6. Look for errors or asserts.
+ TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
+ for error_info in error_tracer.errors:
+ Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
+ for assert_info in error_tracer.asserts:
+ Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
+
+
+if __name__ == "__main__":
+ from editor_python_test_tools.utils import Report
+ Report.start_test(Atom_LevelLoadTest)
diff --git a/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt
index aea2562e0b..64effb5b4c 100644
--- a/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_BLAST Traits
diff --git a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
index 800f347359..26c03e78c2 100644
--- a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
@@ -10,7 +10,7 @@
# Automated Tests
################################################################################
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_traits_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py
index 72530325e0..d8d4a77a65 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py
@@ -8,7 +8,8 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
# Built-in Imports
from __future__ import annotations
from typing import List, Tuple, Union
-
+from enum import Enum
+import warnings
# Open 3D Engine Imports
import azlmbr
@@ -21,14 +22,25 @@ import azlmbr.legacy.general as general
from editor_python_test_tools.utils import Report
+class EditorEntityType(Enum):
+ GAME = azlmbr.entity.EntityType().Game
+ LEVEL = azlmbr.entity.EntityType().Level
+
+
class EditorComponent:
"""
EditorComponent class used to set and get the component property value using path
EditorComponent object is returned from either of
EditorEntity.add_component() or Entity.add_components() or EditorEntity.get_components_of_type()
which also assigns self.id and self.type_id to the EditorComponent object.
+ self.type_id is the UUID for the component type as provided by an ebus call.
"""
+ def __init__(self, type_id: uuid):
+ self.type_id = type_id
+ self.id = None
+ self.property_tree_editor = None
+
def get_component_name(self) -> str:
"""
Used to get name of component
@@ -38,9 +50,9 @@ class EditorComponent:
assert len(type_names) != 0, "Component object does not have type id"
return type_names[0]
- def get_property_tree(self):
+ def get_property_tree(self, force_get: bool = False):
"""
- Used to get the property tree object of component that has following functions associated with it:
+ Used to get and cache the property tree editor of component that has following functions associated with it:
1. prop_tree.is_container(path)
2. prop_tree.get_container_count(path)
3. prop_tree.reset_container(path)
@@ -48,17 +60,161 @@ class EditorComponent:
5. prop_tree.remove_container_item(path, key)
6. prop_tree.update_container_item(path, key, value)
7. prop_tree.get_container_item(path, key)
- :return: Property tree object of a component
+ :param force_get: Force a fresh property tree editor rather than the cached self.property_tree_editor
+ :return: Property tree editor of the component
"""
+ if (not force_get) and (self.property_tree_editor is not None):
+ return self.property_tree_editor
+
build_prop_tree_outcome = editor.EditorComponentAPIBus(
bus.Broadcast, "BuildComponentPropertyTreeEditor", self.id
)
assert (
build_prop_tree_outcome.IsSuccess()
- ), f"Failure: Could not build property tree of component: '{self.get_component_name()}'"
+ ), f"Failure: Could not build property tree editor of component: '{self.get_component_name()}'"
prop_tree = build_prop_tree_outcome.GetValue()
Report.info(prop_tree.build_paths_list())
- return prop_tree
+ self.property_tree_editor = prop_tree
+ return self.property_tree_editor
+
+ def is_property_container(self, component_property_path: str) -> bool:
+ """
+ Used to determine if a component property is a container.
+ Containers are a collection of same typed values that can expand/shrink to contain more or less.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key and are something like a linked list
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :return: Boolean True if the property is a container False if it is not.
+ """
+ if self.property_tree_editor is None:
+ self.get_property_tree()
+ result = self.property_tree_editor.is_container(component_property_path)
+ if not result:
+ Report.info(f"{self.get_component_name()}: '{component_property_path}' is not a container")
+ return result
+
+ def get_container_count(self, component_property_path: str) -> int:
+ """
+ Used to get the count of items in the container.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :return: Count of items in the container as unsigned integer
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ container_count_outcome = self.property_tree_editor.get_container_count(component_property_path)
+ assert (
+ container_count_outcome.IsSuccess()
+ ), f"Failure: get_container_count did not return success for '{component_property_path}'"
+ return container_count_outcome.GetValue()
+
+ def reset_container(self, component_property_path: str):
+ """
+ Used to reset a container to empty
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ reset_outcome = self.property_tree_editor.reset_container(component_property_path)
+ assert (
+ reset_outcome.IsSuccess()
+ ), f"Failure: could not reset_container on '{component_property_path}'"
+
+ def append_container_item(self, component_property_path: str, value: any):
+ """
+ Used to append a value to an indexed container item without providing an index key.
+ Append will fail on an associative container
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param value: Value to be set
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ append_outcome = self.property_tree_editor.append_container_item(component_property_path, value)
+ assert (
+ append_outcome.IsSuccess()
+ ), f"Failure: could not append_container_item to '{component_property_path}'"
+
+ def add_container_item(self, component_property_path: str, key: any, value: any):
+ """
+ Used to add a container item at a specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :param value: Value to be set
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ add_outcome = self.property_tree_editor.add_container_item(component_property_path, key, value)
+ assert (
+ add_outcome.IsSuccess()
+ ), f"Failure: could not add_container_item '{key}' to '{component_property_path}'"
+
+ def get_container_item(self, component_property_path: str, key: any) -> any:
+ """
+ Used to retrieve a container item value at the specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :return: Value stored at the key specified
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ get_outcome = self.property_tree_editor.get_container_item(component_property_path, key)
+ assert (
+ get_outcome.IsSuccess()
+ ), (
+ f"Failure: could not get a value for {self.get_component_name()}: '{component_property_path}' [{key}]. "
+ f"Error returned by get_container_item: {get_outcome.GetError()}")
+ return get_outcome.GetValue()
+
+ def remove_container_item(self, component_property_path: str, key: any):
+ """
+ Used to remove a container item value at the specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ remove_outcome = self.property_tree_editor.remove_container_item(component_property_path, key)
+ assert (
+ remove_outcome.IsSuccess()
+ ), f"Failure: could not remove_container_item '{key}' from '{component_property_path}'"
+
+ def update_container_item(self, component_property_path: str, key: any, value: any):
+ """
+ Used to update a container item at a specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :param value: Value to be set
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ update_outcome = self.property_tree_editor.update_container_item(component_property_path, key, value)
+ assert (
+ update_outcome.IsSuccess()
+ ), f"Failure: could not update '{key}' in '{component_property_path}'"
def get_component_property_value(self, component_property_path: str):
"""
@@ -94,23 +250,36 @@ class EditorComponent:
"""
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", self.id)
+ def set_enabled(self, new_state: bool):
+ """
+ Used to set the component enabled state
+ :param new_state: Boolean enabled True, disabled False
+ :return: None
+ """
+ if new_state:
+ editor.EditorComponentAPIBus(bus.Broadcast, "EnableComponents", [self.id])
+ else:
+ editor.EditorComponentAPIBus(bus.Broadcast, "DisableComponents", [self.id])
+
def disable_component(self):
"""
Used to disable the component using its id value.
+ Deprecation warning! Use set_enabled(False) instead as this method is in deprecation
:return: None
"""
+ warnings.warn("disable_component is deprecated, use set_enabled(False) instead.", DeprecationWarning)
editor.EditorComponentAPIBus(bus.Broadcast, "DisableComponents", [self.id])
@staticmethod
- def get_type_ids(component_names: list) -> list:
+ def get_type_ids(component_names: list, entity_type: EditorEntityType = EditorEntityType.GAME) -> list:
"""
Used to get type ids of given components list
- :param: component_names: List of components to get type ids
- :return: List of type ids of given components.
+ :param component_names: List of components to get type ids
+ :param entity_type: Entity_Type enum value Entity_Type.GAME is the default
+ :return: List of type ids of given components. Type id is a UUID as provided by the ebus call
"""
type_ids = editor.EditorComponentAPIBus(
- bus.Broadcast, "FindComponentTypeIdsByEntityType", component_names, azlmbr.entity.EntityType().Game
- )
+ bus.Broadcast, "FindComponentTypeIdsByEntityType", component_names, entity_type.value)
return type_ids
@@ -131,7 +300,7 @@ class EditorEntity:
"""
Entity class is used to create and interact with Editor Entities.
Example: To create Editor Entity, Use the code:
- test_entity = Entity.create_editor_entity("TestEntity")
+ test_entity = EditorEntity.create_editor_entity("TestEntity")
# This creates a python object with 'test_entity' linked to entity name "TestEntity" in Editor.
# To add component, use:
test_entity.add_component()
@@ -276,10 +445,9 @@ class EditorEntity:
:return: List of newly added components to the entity
"""
components = []
- type_ids = EditorComponent.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.GAME)
for type_id in type_ids:
- new_comp = EditorComponent()
- new_comp.type_id = type_id
+ new_comp = EditorComponent(type_id)
add_component_outcome = editor.EditorComponentAPIBus(
bus.Broadcast, "AddComponentsOfType", self.id, [type_id]
)
@@ -291,6 +459,26 @@ class EditorEntity:
self.components.append(new_comp)
return components
+ def remove_component(self, component_name: str) -> None:
+ """
+ Used to remove a component from Entity
+ :param component_name: String of component name to remove
+ :return: None
+ """
+ self.remove_components([component_name])
+
+ def remove_components(self, component_names: list):
+ """
+ Used to remove a list of components from Entity
+ :param component_names: List of component names to remove
+ :return: None
+ """
+ component_ids = [component.id for component in self.get_components_of_type(component_names)]
+ remove_success = editor.EditorComponentAPIBus(bus.Broadcast, "RemoveComponents", component_ids)
+ assert (
+ remove_success
+ ), f"Failure: could not remove component from entity '{self.get_name()}'"
+
def get_components_of_type(self, component_names: list) -> List[EditorComponent]:
"""
Used to get components of type component_name that already exists on Entity
@@ -298,10 +486,9 @@ class EditorEntity:
:return: List of Entity Component objects of given component name
"""
component_list = []
- type_ids = EditorComponent.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.GAME)
for type_id in type_ids:
- component = EditorComponent()
- component.type_id = type_id
+ component = EditorComponent(type_id)
get_component_of_type_outcome = editor.EditorComponentAPIBus(
bus.Broadcast, "GetComponentOfType", self.id, type_id
)
@@ -319,7 +506,7 @@ class EditorEntity:
:param component_name: Name of component to check for
:return: True, if entity has specified component. Else, False
"""
- type_ids = EditorComponent.get_type_ids([component_name])
+ type_ids = EditorComponent.get_type_ids([component_name], EditorEntityType.GAME)
return editor.EditorComponentAPIBus(bus.Broadcast, "HasComponentOfType", self.id, type_ids[0])
def get_start_status(self) -> int:
@@ -359,6 +546,21 @@ class EditorEntity:
set_status = self.get_start_status()
assert set_status == status_to_set, f"Failed to set start status of {desired_start_status} to {self.get_name}"
+ def is_locked(self) -> bool:
+ """
+ Used to get the locked status of the entity
+ :return: Boolean True if locked False if not locked
+ """
+ return editor.EditorEntityInfoRequestBus(bus.Event, "IsLocked", self.id)
+
+ def set_lock_state(self, is_locked: bool) -> None:
+ """
+ Sets the lock state on the object to locked or not locked.
+ :param is_locked: True for locking, False to unlock.
+ :return: None
+ """
+ editor.EditorEntityAPIBus(bus.Event, "SetLockState", self.id, is_locked)
+
def delete(self) -> None:
"""
Used to delete the Entity.
@@ -488,18 +690,6 @@ class EditorLevelEntity:
EditorLevelComponentAPIBus requests.
"""
- @staticmethod
- def get_type_ids(component_names: list) -> list:
- """
- Used to get type ids of given components list for EntityType Level
- :param: component_names: List of components to get type ids
- :return: List of type ids of given components.
- """
- type_ids = editor.EditorComponentAPIBus(
- bus.Broadcast, "FindComponentTypeIdsByEntityType", component_names, azlmbr.entity.EntityType().Level
- )
- return type_ids
-
@staticmethod
def add_component(component_name: str) -> EditorComponent:
"""
@@ -518,10 +708,9 @@ class EditorLevelEntity:
:return: List of newly added components to the level
"""
components = []
- type_ids = EditorLevelEntity.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.LEVEL)
for type_id in type_ids:
- new_comp = EditorComponent()
- new_comp.type_id = type_id
+ new_comp = EditorComponent(type_id)
add_component_outcome = editor.EditorLevelComponentAPIBus(
bus.Broadcast, "AddComponentsOfType", [type_id]
)
@@ -540,10 +729,9 @@ class EditorLevelEntity:
:return: List of Level Component objects of given component name
"""
component_list = []
- type_ids = EditorLevelEntity.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.LEVEL)
for type_id in type_ids:
- component = EditorComponent()
- component.type_id = type_id
+ component = EditorComponent(type_id)
get_component_of_type_outcome = editor.EditorLevelComponentAPIBus(
bus.Broadcast, "GetComponentOfType", type_id
)
@@ -562,7 +750,7 @@ class EditorLevelEntity:
:param component_name: Name of component to check for
:return: True, if level has specified component. Else, False
"""
- type_ids = EditorLevelEntity.get_type_ids([component_name])
+ type_ids = EditorComponent.get_type_ids([component_name], EditorEntityType.LEVEL)
return editor.EditorLevelComponentAPIBus(bus.Broadcast, "HasComponentOfType", type_ids[0])
@staticmethod
@@ -572,5 +760,5 @@ class EditorLevelEntity:
:param component_name: Name of component to check for
:return: integer count of occurences of level component attached to level or zero if none are present
"""
- type_ids = EditorLevelEntity.get_type_ids([component_name])
+ type_ids = EditorComponent.get_type_ids([component_name], EditorEntityType.LEVEL)
return editor.EditorLevelComponentAPIBus(bus.Broadcast, "CountComponentsOfType", type_ids[0])
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py
index 5e3828ad02..ac74c611a2 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py
@@ -5,15 +5,22 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
+import collections.abc
+from typing import List
+from math import isclose
+
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
import azlmbr.legacy.general as general
import azlmbr.object
-from typing import List
-from math import isclose
-import collections.abc
+from editor_python_test_tools.utils import TestHelper as helper
+
+
+def open_base_level():
+ helper.init_idle()
+ helper.open_level("Prefab", "Base")
def find_entity_by_name(entity_name):
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/prefab_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/prefab_utils.py
index 016e01bc95..d0e51c4413 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/prefab_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/prefab_utils.py
@@ -48,8 +48,8 @@ def wait_for_propagation():
# This is a helper class which contains some of the useful information about a prefab instance.
class PrefabInstance:
- def __init__(self, prefab_file_name: str = None, container_entity: EditorEntity = None):
- self.prefab_file_name: str = prefab_file_name
+ def __init__(self, prefab_file_path: str = None, container_entity: EditorEntity = None):
+ self.prefab_file_path: str = prefab_file_path
self.container_entity: EditorEntity = container_entity
def __eq__(self, other):
@@ -66,7 +66,7 @@ class PrefabInstance:
See if this instance is valid to be used with other prefab operations.
:return: Whether the target instance is valid or not.
"""
- return self.container_entity.id.IsValid() and self.prefab_file_name in Prefab.existing_prefabs
+ return self.container_entity.id.IsValid() and self.prefab_file_path in Prefab.existing_prefabs
def has_editor_prefab_component(self) -> bool:
"""
@@ -131,7 +131,7 @@ class PrefabInstance:
has_correct_parent = reparented_container_entity_parent_id.ToString() == parent_entity_id.ToString()
assert has_correct_parent, "Prefab Instance reparented is *not* under the expected parent entity"
- current_instance_prefab = Prefab.get_prefab(self.prefab_file_name)
+ current_instance_prefab = Prefab.get_prefab(self.prefab_file_path)
current_instance_prefab.instances.remove(self)
self.container_entity = reparented_container_entity
@@ -161,46 +161,48 @@ class Prefab:
:param file_path: A unique file path of the target prefab.
:return: Whether the target prefab is loaded or not.
"""
- return file_path in Prefab.existing_prefabs
-
+ for entry in Prefab.existing_prefabs:
+ Report.info(f"PrefabPath: '{entry}'")
+
+ return get_prefab_file_path(file_path) in Prefab.existing_prefabs
@classmethod
def prefab_exists(cls, file_path: str) -> bool:
"""
Check if a prefab exists in the directory for files of prefab tests.
- :param file_name: A unique file name of the target prefab.
+ :param file_path: A unique file path of the target prefab.
:return: Whether the target prefab exists or not.
"""
return path.exists(get_prefab_file_path(file_path))
@classmethod
- def get_prefab(cls, file_name: str) -> Prefab:
+ def get_prefab(cls, file_path: str) -> Prefab:
"""
Return a prefab which can be used immediately.
- :param file_name: A unique file name of the target prefab.
+ :param file_path: A unique file path of the target prefab.
:return: The prefab with given file name.
"""
- assert file_name, "Received an empty file_name"
- if Prefab.is_prefab_loaded(file_name):
- return Prefab.existing_prefabs[file_name]
+ assert file_path, "Received an empty file_path"
+ if Prefab.is_prefab_loaded(file_path):
+ return Prefab.existing_prefabs[get_prefab_file_path(file_path)]
else:
- assert Prefab.prefab_exists(file_name), f"Attempted to get a prefab \"{file_name}\" that doesn't exist"
- new_prefab = Prefab(file_name)
- Prefab.existing_prefabs[file_name] = Prefab(file_name)
+ assert Prefab.prefab_exists(file_path), f"Attempted to get a prefab \"{file_path}\" that doesn't exist"
+ new_prefab = Prefab(file_path)
+ Prefab.existing_prefabs[new_prefab.file_path] = new_prefab
return new_prefab
@classmethod
- def create_prefab(cls, entities: list[EditorEntity], file_name: str, prefab_instance_name: str=None) -> tuple(Prefab, PrefabInstance):
+ def create_prefab(cls, entities: list[EditorEntity], file_path: str, prefab_instance_name: str=None) -> tuple(Prefab, PrefabInstance):
"""
Create a prefab in memory and return it. The very first instance of this prefab will also be created.
:param entities: The entities that should form the new prefab (along with their descendants).
- :param file_name: A unique file name of new prefab.
- :param prefab_instance_name: A name for the very first instance generated while prefab creation. The default instance name is the same as file_name.
+ :param file_path: A unique file path for new prefab.
+ :param prefab_instance_name: A name for the very first instance generated while prefab creation. The default instance name is the same as the file name in file_path.
:return: Created Prefab object and the very first PrefabInstance object owned by the prefab.
"""
- assert not Prefab.is_prefab_loaded(file_name), f"Can't create Prefab '{file_name}' since the prefab already exists"
+ assert not Prefab.is_prefab_loaded(file_path), f"Can't create Prefab '{file_path}' since the prefab already exists"
- new_prefab = Prefab(file_name)
+ new_prefab = Prefab(file_path)
entity_ids = [entity.id for entity in entities]
create_prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'CreatePrefabInMemory', entity_ids, new_prefab.file_path)
assert create_prefab_result.IsSuccess(), f"Prefab operation 'CreatePrefab' failed. Error: {create_prefab_result.GetError()}"
@@ -210,15 +212,14 @@ class Prefab:
children_entity_ids = container_entity.get_children_ids()
assert len(children_entity_ids) == len(entities), f"Entity count of created prefab instance does *not* match the count of given entities."
-
- if prefab_instance_name:
- container_entity.set_name(prefab_instance_name)
-
+
wait_for_propagation()
- new_prefab_instance = PrefabInstance(file_name, EditorEntity(container_entity_id))
+ new_prefab_instance = PrefabInstance(new_prefab.file_path, EditorEntity(container_entity_id))
+ if prefab_instance_name:
+ new_prefab_instance.container_entity.set_name(prefab_instance_name)
new_prefab.instances.add(new_prefab_instance)
- Prefab.existing_prefabs[file_name] = new_prefab
+ Prefab.existing_prefabs[new_prefab.file_path] = new_prefab
return new_prefab, new_prefab_instance
@classmethod
@@ -250,7 +251,7 @@ class Prefab:
assert False, "Not all entities and descendants in target prefabs are deleted."
for instance in prefab_instances:
- instance_deleted_prefab = Prefab.get_prefab(instance.prefab_file_name)
+ instance_deleted_prefab = Prefab.get_prefab(instance.prefab_file_path)
instance_deleted_prefab.instances.remove(instance)
instance = PrefabInstance()
@@ -290,8 +291,7 @@ class Prefab:
prefab_file_path = prefab.PrefabPublicRequestBus(bus.Broadcast, 'GetOwningInstancePrefabPath', duplicate_container_entity_id)
assert prefab_file_path, "Returned file path should *not* be empty."
- prefab_file_name = Path(prefab_file_path).stem
- duplicate_instance_prefab = Prefab.get_prefab(prefab_file_name)
+ duplicate_instance_prefab = Prefab.get_prefab(prefab_file_path)
duplicate_instance = PrefabInstance(prefab_file_path, EditorEntity(duplicate_container_entity_id))
duplicate_instance_prefab.instances.add(duplicate_instance)
duplicate_instances.append(duplicate_instance)
@@ -324,7 +324,7 @@ class Prefab:
wait_for_propagation()
- instance_owner_prefab = Prefab.get_prefab(prefab_instance.prefab_file_name)
+ instance_owner_prefab = Prefab.get_prefab(prefab_instance.prefab_file_path)
instance_owner_prefab.instances.remove(prefab_instance)
prefab_instance = PrefabInstance()
@@ -346,13 +346,13 @@ class Prefab:
container_entity_id = instantiate_prefab_result.GetValue()
container_entity = EditorEntity(container_entity_id)
- if name:
- container_entity.set_name(name)
-
wait_for_propagation()
new_prefab_instance = PrefabInstance(self.file_path, EditorEntity(container_entity_id))
- assert not new_prefab_instance in self.instances, "This prefab instance is already existed before this instantiation."
+ assert not new_prefab_instance in self.instances, "This prefab instance already existed before this instantiation."
+ if name:
+ new_prefab_instance.container_entity.set_name(name)
+
self.instances.add(new_prefab_instance)
assert new_prefab_instance.is_at_position(prefab_position), "This prefab instance is *not* at expected position."
diff --git a/AutomatedTesting/Gem/PythonTests/Multiplayer/TestSuite_Sandbox.py b/AutomatedTesting/Gem/PythonTests/Multiplayer/TestSuite_Sandbox.py
index 8c5f33993d..56c2608762 100644
--- a/AutomatedTesting/Gem/PythonTests/Multiplayer/TestSuite_Sandbox.py
+++ b/AutomatedTesting/Gem/PythonTests/Multiplayer/TestSuite_Sandbox.py
@@ -35,3 +35,7 @@ class TestAutomation(TestAutomationBase):
def test_Multiplayer_AutoComponent_RPC(self, request, workspace, editor, launcher_platform):
from .tests import Multiplayer_AutoComponent_RPC as test_module
self._run_prefab_test(request, workspace, editor, test_module)
+
+ def test_Multiplayer_SimpleNetworkLevelEntity(self, request, workspace, editor, launcher_platform):
+ from .tests import Multiplayer_SimpleNetworkLevelEntity as test_module
+ self._run_prefab_test(request, workspace, editor, test_module)
diff --git a/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_AutoComponent_RPC.py b/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_AutoComponent_RPC.py
index 827826cbcc..62ec410d3b 100644
--- a/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_AutoComponent_RPC.py
+++ b/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_AutoComponent_RPC.py
@@ -62,15 +62,16 @@ def Multiplayer_AutoComponent_RPC():
Report.critical_result(TestSuccessFailTuples.find_network_player, player_id.IsValid())
# 4) Check the editor logs for expected and unexpected log output
+ # Authority->Autonomous RPC
PLAYERID_RPC_WAIT_TIME_SECONDS = 1.0 # The player id is sent from the server as soon as the player script is spawned. 1 second should be more than enough time to send/receive that RPC.
helper.succeed_if_log_line_found('EditorServer', 'Script: AutoComponent_RPC: Sending client PlayerNumber 1', section_tracer.prints, PLAYERID_RPC_WAIT_TIME_SECONDS)
helper.succeed_if_log_line_found('Script', "AutoComponent_RPC: I'm Player #1", section_tracer.prints, PLAYERID_RPC_WAIT_TIME_SECONDS)
- # Uncomment once editor game-play mode supports level entities with net-binding
- #PLAYFX_RPC_WAIT_TIME_SECONDS = 1.1 # The server will send an RPC to play an fx on the client every second.
- #helper.succeed_if_log_line_found('EditorServer', "Script: AutoComponent_RPC_NetLevelEntity Activated on entity: NetLevelEntity", section_tracer.prints, PLAYFX_RPC_WAIT_TIME_SECONDS)
- #helper.succeed_if_log_line_found('EditorServer', "Script: AutoComponent_RPC_NetLevelEntity: Authority sending RPC to play some fx.", section_tracer.prints, PLAYFX_RPC_WAIT_TIME_SECONDS)
- #helper.succeed_if_log_line_found('Script', "AutoComponent_RPC_NetLevelEntity: I'm a client playing some superficial fx.", section_tracer.prints, PLAYFX_RPC_WAIT_TIME_SECONDS)
+ # Authority->Client RPC
+ PLAYFX_RPC_WAIT_TIME_SECONDS = 1.1 # The server will send an RPC to play an fx on the client every second.
+ helper.succeed_if_log_line_found('EditorServer', "Script: AutoComponent_RPC_NetLevelEntity Activated on entity: NetLevelEntity", section_tracer.prints, PLAYFX_RPC_WAIT_TIME_SECONDS)
+ helper.succeed_if_log_line_found('EditorServer', "Script: AutoComponent_RPC_NetLevelEntity: Authority sending RPC to play some fx.", section_tracer.prints, PLAYFX_RPC_WAIT_TIME_SECONDS)
+ helper.succeed_if_log_line_found('Script', "AutoComponent_RPC_NetLevelEntity: I'm a client playing some fx.", section_tracer.prints, PLAYFX_RPC_WAIT_TIME_SECONDS)
# Exit game mode
diff --git a/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_SimpleNetworkLevelEntity.py b/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_SimpleNetworkLevelEntity.py
new file mode 100644
index 0000000000..0d1067269c
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/Multiplayer/tests/Multiplayer_SimpleNetworkLevelEntity.py
@@ -0,0 +1,76 @@
+"""
+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
+"""
+
+
+# Test Case Title : Check that level entities with network bindings are properly replicated.
+# Note: This test should be ran on a fresh editor run; some bugs with spawnables occur only on the first editor play-mode.
+
+
+# fmt: off
+class TestSuccessFailTuples():
+ enter_game_mode = ("Entered game mode", "Failed to enter game mode")
+ exit_game_mode = ("Exited game mode", "Couldn't exit game mode")
+ find_network_player = ("Found network player", "Couldn't find network player")
+# fmt: on
+
+
+def Multiplayer_SimpleNetworkLevelEntity():
+ r"""
+ Summary:
+ Test to make sure that network entities in a level function and are replicated to clients as expected
+
+ Level Description:
+ - Static
+ 1. NetLevelEntity. This is a networked entity which has a script attached which prints logs to ensure it's replicated.
+
+
+ Expected Outcome:
+ We should see logs stating that the net-sync'd level entity exists on both server and client.
+
+ :return:
+ """
+ import azlmbr.legacy.general as general
+ from editor_python_test_tools.utils import Report
+ from editor_python_test_tools.utils import Tracer
+
+ from editor_python_test_tools.utils import TestHelper as helper
+ from ly_remote_console.remote_console_commands import RemoteConsole as RemoteConsole
+
+ level_name = "SimpleNetworkLevelEntity"
+ player_prefab_name = "Player"
+ player_prefab_path = f"levels/multiplayer/{level_name}/{player_prefab_name}.network.spawnable"
+
+ helper.init_idle()
+
+ # 1) Open Level
+ helper.open_level("Multiplayer", level_name)
+
+ with Tracer() as section_tracer:
+ # 2) Enter game mode
+ helper.multiplayer_enter_game_mode(TestSuccessFailTuples.enter_game_mode, player_prefab_path.lower())
+
+ # 3) Make sure the network player was spawned
+ player_id = general.find_game_entity(player_prefab_name)
+ Report.critical_result(TestSuccessFailTuples.find_network_player, player_id.IsValid())
+
+ # 4) Check the editor logs for network spawnable errors
+ ATTEMPTING_INVALID_NETSPAWN_WAIT_TIME_SECONDS = 0.0 # The editor will try to net-spawn its networked level entity before it's even a client. Make sure this didn't happen.
+ helper.fail_if_log_line_found('NetworkEntityManager', "RequestNetSpawnableInstantiation: Requested spawnable Root.network.spawnable doesn't exist in the NetworkSpawnableLibrary. Please make sure it is a network spawnable", section_tracer.errors, ATTEMPTING_INVALID_NETSPAWN_WAIT_TIME_SECONDS)
+
+ # 5) Ensure the script graph attached to the level entity is running on the server
+ SCRIPTGRAPH_ENABLED_WAIT_TIME_SECONDS = 0.25
+ helper.succeed_if_log_line_found('EditorServer', "Script: SimpleNetworkLevelEntity: On Graph Start", section_tracer.prints, SCRIPTGRAPH_ENABLED_WAIT_TIME_SECONDS)
+
+
+ # Exit game mode
+ helper.exit_game_mode(TestSuccessFailTuples.exit_game_mode)
+
+
+
+if __name__ == "__main__":
+ from editor_python_test_tools.utils import Report
+ Report.start_test(Multiplayer_SimpleNetworkLevelEntity)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
index 2e40c0b557..8e8fccd725 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
@@ -127,7 +127,7 @@ def Collider_SameCollisionGroupSameCustomLayerCollide():
# Main Script
# 1) Load the level
helper.init_idle()
- helper.open_level("physics", "Collider_SameCollisionGroupSameCustomLayerCollide")
+ helper.open_level("Physics", "Collider_SameCollisionGroupSameCustomLayerCollide")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
index 7307f3a2fb..e5f6e236cf 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
@@ -162,7 +162,7 @@ def ForceRegion_MultipleForcesInSameComponentCombineForces():
helper.init_idle()
# 1) Load Level
- helper.open_level("physics", "ForceRegion_MultipleForcesInSameComponentCombineForces")
+ helper.open_level("Physics", "ForceRegion_MultipleForcesInSameComponentCombineForces")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
index 1f8cfae498..41ccc8f2dd 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
@@ -229,8 +229,8 @@ def Material_DefaultLibraryUpdatedAcrossLevels_after():
for test in test_list:
# 1) Open the correct level is open
helper.open_level(
- "physics",
- f"Material_DefaultLibraryUpdatedAcrossLevels\\{test.level}"
+ "Physics",
+ os.path.join("Material_DefaultLibraryUpdatedAcrossLevels", str(test.level))
)
# 2) Enter Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
index 15db5808e2..d86a016be1 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
@@ -189,7 +189,7 @@ def Material_DefaultLibraryUpdatedAcrossLevels_before():
# 1) Open the correct level is open
helper.open_level(
"Physics",
- f"Material_DefaultLibraryUpdatedAcrossLevels\\{test.level}"
+ os.path.join("Material_DefaultLibraryUpdatedAcrossLevels", str(test.level))
)
# 2) Enter Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
index 0b647361f6..6eebfe60bc 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
@@ -252,10 +252,8 @@ def Material_LibraryUpdatedAcrossLevels():
for test in test_list:
# 1) Open the correct level for the test
helper.open_level(
- "physics",
- "Material_LibraryUpdatedAcrossLevels\\Material_LibraryUpdatedAcrossLevels_{}".format(
- test.level_index
- ),
+ "Physics",
+ os.path.join("Material_LibraryUpdatedAcrossLevels", str(test.level_index))
)
# 2) Open Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
index 5862b7586b..e6e29063d6 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
@@ -106,7 +106,7 @@ def ScriptCanvas_SpawnEntityWithPhysComponents():
# Main Script
helper.init_idle()
# 1) Open Level
- helper.open_level("physics", "ScriptCanvas_SpawnEntityWithPhysComponents")
+ helper.open_level("Physics", "ScriptCanvas_SpawnEntityWithPhysComponents")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main.py
index 6e1f94d358..1fd48ee3c9 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main.py
@@ -38,6 +38,10 @@ class TestAutomation(TestAutomationBase):
from Prefab.tests.instantiate_prefab import InstantiatePrefab_ContainingASingleEntity as test_module
self._run_prefab_test(request, workspace, editor, test_module)
+ def test_InstantiatePrefab_FromCreatedPrefabWithSingleEntity(self, request, workspace, editor, launcher_platform):
+ from Prefab.tests.instantiate_prefab import InstantiatePrefab_FromCreatedPrefabWithSingleEntity as test_module
+ self._run_prefab_test(request, workspace, editor, test_module)
+
def test_DeletePrefab_ContainingASingleEntity(self, request, workspace, editor, launcher_platform):
from Prefab.tests.delete_prefab import DeletePrefab_ContainingASingleEntity as test_module
self._run_prefab_test(request, workspace, editor, test_module)
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main_Optimized.py
index bf67b2c661..816b3b8e75 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main_Optimized.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/TestSuite_Main_Optimized.py
@@ -45,8 +45,12 @@ class TestAutomationNoAutoTestMode(EditorTestSuite):
class test_InstantiatePrefab_ContainingASingleEntity(EditorSharedTest):
from .tests.instantiate_prefab import InstantiatePrefab_ContainingASingleEntity as test_module
+ class test_InstantiatePrefab_FromCreatedPrefabWithSingleEntity(EditorSharedTest):
+ from .tests.instantiate_prefab import InstantiatePrefab_FromCreatedPrefabWithSingleEntity as test_module
+
class test_DeletePrefab_ContainingASingleEntity(EditorSharedTest):
from .tests.delete_prefab import DeletePrefab_ContainingASingleEntity as test_module
class test_DuplicatePrefab_ContainingASingleEntity(EditorSharedTest):
- from .tests.duplicate_prefab import DuplicatePrefab_ContainingASingleEntity as test_module
\ No newline at end of file
+ from .tests.duplicate_prefab import DuplicatePrefab_ContainingASingleEntity as test_module
+
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_UnderAnEntity.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_UnderAnEntity.py
index 5033c1da9c..4fdd5e4c4d 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_UnderAnEntity.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_UnderAnEntity.py
@@ -13,7 +13,8 @@ def CreatePrefab_UnderAnEntity():
Test is successful if the new instanced prefab of the child has the parent entity id
"""
- CAR_PREFAB_FILE_NAME = 'car_prefab'
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.prefab_utils import Prefab
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_WithSingleEntity.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_WithSingleEntity.py
index eb8a262a69..cd6d87a630 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_WithSingleEntity.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/create_prefab/CreatePrefab_WithSingleEntity.py
@@ -7,7 +7,8 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
def CreatePrefab_WithSingleEntity():
- CAR_PREFAB_FILE_NAME = 'car_prefab'
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/delete_prefab/DeletePrefab_ContainingASingleEntity.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/delete_prefab/DeletePrefab_ContainingASingleEntity.py
index 919168019e..e2c4ead034 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/tests/delete_prefab/DeletePrefab_ContainingASingleEntity.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/delete_prefab/DeletePrefab_ContainingASingleEntity.py
@@ -7,7 +7,8 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
def DeletePrefab_ContainingASingleEntity():
- CAR_PREFAB_FILE_NAME = 'car_prefab'
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.prefab_utils import Prefab
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/detach_prefab/DetachPrefab_UnderAnotherPrefab.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/detach_prefab/DetachPrefab_UnderAnotherPrefab.py
index 69dbcfc89c..326d58023f 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/tests/detach_prefab/DetachPrefab_UnderAnotherPrefab.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/detach_prefab/DetachPrefab_UnderAnotherPrefab.py
@@ -7,8 +7,9 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
def DetachPrefab_UnderAnotherPrefab():
- CAR_PREFAB_FILE_NAME = 'car_prefab2'
- WHEEL_PREFAB_FILE_NAME = 'wheel_prefab2'
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
+ WHEEL_PREFAB_FILE_NAME = Path(__file__).stem + 'wheel_prefab'
import editor_python_test_tools.pyside_utils as pyside_utils
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/duplicate_prefab/DuplicatePrefab_ContainingASingleEntity.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/duplicate_prefab/DuplicatePrefab_ContainingASingleEntity.py
index e611303fbb..6acd303e2b 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/tests/duplicate_prefab/DuplicatePrefab_ContainingASingleEntity.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/duplicate_prefab/DuplicatePrefab_ContainingASingleEntity.py
@@ -7,7 +7,8 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
def DuplicatePrefab_ContainingASingleEntity():
- CAR_PREFAB_FILE_NAME = 'car_prefab'
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.prefab_utils import Prefab
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/instantiate_prefab/InstantiatePrefab_FromCreatedPrefabWithSingleEntity.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/instantiate_prefab/InstantiatePrefab_FromCreatedPrefabWithSingleEntity.py
new file mode 100644
index 0000000000..ddd1528533
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/instantiate_prefab/InstantiatePrefab_FromCreatedPrefabWithSingleEntity.py
@@ -0,0 +1,34 @@
+"""
+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
+"""
+
+def InstantiatePrefab_FromCreatedPrefabWithSingleEntity():
+
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
+
+ from editor_python_test_tools.editor_entity_utils import EditorEntity
+ from editor_python_test_tools.utils import Report
+ from editor_python_test_tools.prefab_utils import Prefab
+
+ import Prefab.tests.PrefabTestUtils as prefab_test_utils
+
+ prefab_test_utils.open_base_tests_level()
+
+ # Creates a new entity at the root level
+ car_entity = EditorEntity.create_editor_entity()
+ car_prefab_entities = [car_entity]
+
+ # Creates a prefab from the new entity
+ car_prefab, car_prefab_instance = Prefab.create_prefab(car_prefab_entities, CAR_PREFAB_FILE_NAME)
+
+ # Instantiate another instance and verify
+ car_prefab_instance_2 = car_prefab.instantiate()
+ assert car_prefab_instance_2.is_valid(), "Failed to instantiate prefab"
+
+if __name__ == "__main__":
+ from editor_python_test_tools.utils import Report
+ Report.start_test(InstantiatePrefab_FromCreatedPrefabWithSingleEntity)
diff --git a/AutomatedTesting/Gem/PythonTests/Prefab/tests/reparent_prefab/ReparentPrefab_UnderAnotherPrefab.py b/AutomatedTesting/Gem/PythonTests/Prefab/tests/reparent_prefab/ReparentPrefab_UnderAnotherPrefab.py
index 2c460a3298..49aeb97f63 100644
--- a/AutomatedTesting/Gem/PythonTests/Prefab/tests/reparent_prefab/ReparentPrefab_UnderAnotherPrefab.py
+++ b/AutomatedTesting/Gem/PythonTests/Prefab/tests/reparent_prefab/ReparentPrefab_UnderAnotherPrefab.py
@@ -7,8 +7,9 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
def ReparentPrefab_UnderAnotherPrefab():
- CAR_PREFAB_FILE_NAME = 'car_prefab'
- WHEEL_PREFAB_FILE_NAME = 'wheel_prefab'
+ from pathlib import Path
+ CAR_PREFAB_FILE_NAME = Path(__file__).stem + 'car_prefab'
+ WHEEL_PREFAB_FILE_NAME = Path(__file__).stem + 'wheel_prefab'
import editor_python_test_tools.pyside_utils as pyside_utils
diff --git a/AutomatedTesting/Gem/PythonTests/Terrain/EditorScripts/Terrain_World_ConfigurationWorks.py b/AutomatedTesting/Gem/PythonTests/Terrain/EditorScripts/Terrain_World_ConfigurationWorks.py
index bb5dcb3bea..41dc6b92af 100644
--- a/AutomatedTesting/Gem/PythonTests/Terrain/EditorScripts/Terrain_World_ConfigurationWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/Terrain/EditorScripts/Terrain_World_ConfigurationWorks.py
@@ -93,7 +93,7 @@ def Terrain_World_ConfigurationWorks():
# 5) Set the base Terrain World values
world_bounds_max = azmath.Vector3(1100.0, 1100.0, 1100.0)
world_bounds_min = azmath.Vector3(10.0, 10.0, 10.0)
- height_query_resolution = azmath.Vector2(1.0, 1.0)
+ height_query_resolution = 1.0
hydra.set_component_property_value(terrain_world_component, "Configuration|World Bounds (Max)", world_bounds_max)
hydra.set_component_property_value(terrain_world_component, "Configuration|World Bounds (Min)", world_bounds_min)
hydra.set_component_property_value(terrain_world_component, "Configuration|Height Query Resolution (m)", height_query_resolution)
@@ -148,7 +148,7 @@ def Terrain_World_ConfigurationWorks():
# 13) Check height value is the expected one when query resolution is changed
testpoint = terrain.TerrainDataRequestBus(bus.Broadcast, 'GetHeightFromFloats', 10.5, 10.5, CLAMP)
- height_query_resolution = azmath.Vector2(0.5, 0.5)
+ height_query_resolution = 0.5
hydra.set_component_property_value(terrain_world_component, "Configuration|Height Query Resolution (m)", height_query_resolution)
general.idle_wait_frames(1)
testpoint2 = terrain.TerrainDataRequestBus(bus.Broadcast, 'GetHeightFromFloats', 10.5, 10.5, CLAMP)
@@ -165,4 +165,3 @@ if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Terrain_World_ConfigurationWorks)
-
diff --git a/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt
index 733e8edf29..d4554ee84b 100644
--- a/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_WHITEBOX Traits
diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt
index e37a5ed99b..5839093473 100644
--- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt
@@ -93,15 +93,19 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
)
ly_add_pytest(
- NAME AssetPipelineTests.AssetBundler
- PATH ${CMAKE_CURRENT_LIST_DIR}/asset_bundler_batch_tests.py
+ NAME AssetPipelineTests.AssetBuilder
+ PATH ${CMAKE_CURRENT_LIST_DIR}/asset_builder_tests.py
EXCLUDE_TEST_RUN_TARGET_FROM_IDE
TEST_SERIAL
TEST_SUITE periodic
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
- AZ::AssetBundlerBatch
)
+
+ set(SUPPORTED_PLATFORMS "Windows" "Mac")
+ if (NOT "${PAL_PLATFORM_NAME}" IN_LIST SUPPORTED_PLATFORMS)
+ return()
+ endif()
ly_add_pytest(
NAME AssetPipelineTests.BundleMode
@@ -117,16 +121,16 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
)
ly_add_pytest(
- NAME AssetPipelineTests.AssetBuilder
- PATH ${CMAKE_CURRENT_LIST_DIR}/asset_builder_tests.py
+ NAME AssetPipelineTests.AssetBundler
+ PATH ${CMAKE_CURRENT_LIST_DIR}/asset_bundler_batch_tests.py
EXCLUDE_TEST_RUN_TARGET_FROM_IDE
TEST_SERIAL
TEST_SUITE periodic
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
+ AZ::AssetBundlerBatch
)
-
ly_add_pytest(
NAME AssetPipelineTests.MissingDependency
PATH ${CMAKE_CURRENT_LIST_DIR}/missing_dependency_tests.py
@@ -136,5 +140,5 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
RUNTIME_DEPENDENCIES
AZ::AssetProcessorBatch
)
-
+
endif()
diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py
index f5e5642573..f64427f6df 100755
--- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py
+++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py
@@ -108,7 +108,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
"""
helper = bundler_batch_helper
seed_list = os.path.join(workspace.paths.engine_root(), "Assets", "Engine", "SeedAssetList.seed") # Engine seed list
- asset = r"levels\testdependencieslevel\level.pak"
+ asset = r"levels\testdependencieslevel\testdependencieslevel.spawnable"
# Create Asset list
helper.call_assetLists(
@@ -191,7 +191,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
"""
helper = bundler_batch_helper
seed_list = os.path.join(workspace.paths.engine_root(), "Assets", "Engine", "SeedAssetList.seed") # Engine seed list
- asset = r"levels\testdependencieslevel\level.pak"
+ asset = r"levels\testdependencieslevel\testdependencieslevel.spawnable"
# Useful bundle locations / names (2 for comparing contents)
# fmt:off
@@ -924,7 +924,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
# Create a seed file
helper.call_seeds(
seedListFile=helper["seed_list_file"],
- addSeed=r"levels\testdependencieslevel\level.pak",
+ addSeed=r"levels\testdependencieslevel\testdependencieslevel.spawnable",
platform="pc",
)
@@ -947,9 +947,9 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
# Specifying platform but not "add" or "remove" should fail
result, _ = helper.call_assetLists(
assetListFile=helper["asset_info_file_request"],
+ allowOverwrites="",
seedListFile=helper["seed_list_file"],
platform="pc",
- allowOverwrites="",
)
assert result, "Overwriting with override threw an error"
@@ -982,7 +982,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
request.addfinalizer(lambda: fs.delete([bundle_result_path], True, False))
bundles_folder = os.path.join(workspace.paths.project(), "Bundles")
- level_pak = r"levels\testdependencieslevel\level.pak"
+ level_pak = r"levels\testdependencieslevel\testdependencieslevel.spawnable"
bundle_request_path = os.path.join(bundles_folder, "bundle.pak")
bundle_result_path = os.path.join(bundles_folder,
helper.platform_file_name("bundle.pak", workspace.asset_processor_platform))
diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py
index af92bb1773..b2252567b6 100644
--- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py
+++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py
@@ -23,12 +23,11 @@ from ..ap_fixtures.timeout_option_fixture import timeout_option_fixture as timeo
@pytest.mark.SUITE_periodic
@pytest.mark.parametrize('launcher_platform', ['windows_editor'])
@pytest.mark.parametrize('project', ['AutomatedTesting'])
-@pytest.mark.parametrize('level', ['auto_test'])
+@pytest.mark.parametrize('level', ['TestDependenciesLevel'])
class TestBundleMode(object):
def test_bundle_mode_with_levels_mounts_bundles_correctly(self, request, editor, level, launcher_platform,
asset_processor, workspace, bundler_batch_helper):
- level_pak = os.path.join("levels", level, "level.pak")
-
+ level_pak = os.path.join("levels", level, "TestDependenciesLevel.spawnable")
bundles_folder = os.path.join(workspace.paths.project(), "Bundles")
bundle_request_path = os.path.join(bundles_folder, "bundle.pak")
bundle_result_path = os.path.join(bundles_folder,
diff --git a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
index 0441f8a1dc..4db959b23e 100755
--- a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
+++ b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
@@ -182,7 +182,7 @@ class TestAutomationBase:
@staticmethod
def _kill_ly_processes(include_asset_processor=True):
LY_PROCESSES = [
- 'Editor', 'Profiler', 'RemoteConsole', 'AutomatedTesting.ServerLauncher'
+ 'Editor', 'Profiler', 'RemoteConsole', 'AutomatedTesting.ServerLauncher', 'o3de'
]
AP_PROCESSES = [
'AssetProcessor', 'AssetProcessorBatch', 'AssetBuilder', 'CrySCompileServer',
diff --git a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/landscape_canvas_utils.py b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/landscape_canvas_utils.py
index d54e32089a..333422815f 100755
--- a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/landscape_canvas_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/landscape_canvas_utils.py
@@ -19,12 +19,16 @@ def find_nodes_matching_entity_component(component_name, entity_id):
:param entity_id: The entity ID to search for the given component node on
:return List of matching nodes
"""
+ component_type_id = hydra.get_component_type_id(component_name)
component = editor.EditorComponentAPIBus(bus.Broadcast, 'GetComponentOfType', entity_id,
- hydra.get_component_type_id(component_name))
+ component_type_id)
+
if component.IsSuccess():
component_id = component.GetValue()
component_node = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'GetAllNodesMatchingEntityComponent',
component_id)
if component_node:
print(f"{component_name} node found on entity {entity_id.ToString()}")
+ else:
+ print(f"Failed to find {component_name} node on entity {entity_id.ToString()}")
return component_node
diff --git a/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt
index 1fc71da972..b3f0d2da8e 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt
@@ -9,10 +9,10 @@
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_FOUNDATION_TEST_SUPPORTED)
ly_add_pytest(
- NAME AutomatedTesting::EditorTests_Main_Optimized
+ NAME AutomatedTesting::EditorTests_Main
TEST_SUITE main
TEST_SERIAL
- PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main.py
PYTEST_MARKS "not REQUIRES_gpu"
RUNTIME_DEPENDENCIES
Legacy::Editor
@@ -27,7 +27,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
TEST_SUITE main
TEST_SERIAL
TEST_REQUIRES gpu
- PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main.py
PYTEST_MARKS "REQUIRES_gpu"
RUNTIME_DEPENDENCIES
Legacy::Editor
@@ -37,17 +37,4 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
Editor
)
- ly_add_pytest(
- NAME AutomatedTesting::EditorTests_Sandbox_Optimized
- TEST_SUITE sandbox
- TEST_SERIAL
- PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Sandbox_Optimized.py
- RUNTIME_DEPENDENCIES
- Legacy::Editor
- AZ::AssetProcessor
- AutomatedTesting.Assets
- COMPONENT
- Editor
- )
-
endif()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py
index b18bf65312..4265dd6fc9 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py
@@ -59,8 +59,8 @@ def AssetBrowser_SearchFiltering():
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
def verify_files_appeared(model, allowed_asset_extensions, parent_index=QtCore.QModelIndex()):
indexes = [parent_index]
@@ -80,8 +80,7 @@ def AssetBrowser_SearchFiltering():
return True
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Open Asset Browser (if not opened already)
editor_window = pyside_utils.get_editor_main_window()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py
index ecc77778cc..52072205b5 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py
@@ -53,6 +53,7 @@ def AssetBrowser_TreeNavigation():
import azlmbr.legacy.general as general
import editor_python_test_tools.pyside_utils as pyside_utils
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
@@ -69,8 +70,7 @@ def AssetBrowser_TreeNavigation():
file_path = ("AutomatedTesting", "Assets", "ImageGradients", "image_grad_test_gsi.png")
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Open Asset Browser (if not opened already)
editor_window = pyside_utils.get_editor_main_window()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py
index 59a78c9e5d..047d6edf41 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py
@@ -215,8 +215,7 @@ def AssetPicker_UI_UX():
QtTest.QTest.keyClick(tree, Qt.Key_Enter, Qt.NoModifier)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create entity and add Mesh component
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py
index 39cacf9af5..48b7d2b176 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py
@@ -56,19 +56,17 @@ def BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD():
06. delete parent entity
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.editor_entity_utils import EditorEntity
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
- import azlmbr.legacy.general as general
import azlmbr.object
# 01. load an existing level
- test_level = 'Simple'
- general.open_level_no_prompt(test_level)
- Report.result(Tests.load_level, general.get_current_level_name() == test_level)
+ hydra.open_base_level()
# 02. create parent entity and set name
# Delete any exiting entity and Create a new Entity at the root level
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py
index 9c5880ab1e..f13b924e30 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py
@@ -31,7 +31,7 @@ class Tests:
"Component removed from entity successfully",
"Failed to remove component from entity"
)
- level_saved_and_exported = (
+ saved_and_exported = (
"Level saved and exported successfully",
"Failed to save/export level"
)
@@ -52,8 +52,7 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
- A new entity can be created
- Entity hierarchy can be adjusted
- Components can be added/removed/updated
- - Level can be saved
- - Level can be exported
+ - Level can be saved/exported
Note:
- This test file must be called from the O3DE Editor command terminal
@@ -70,7 +69,7 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
import azlmbr.editor as editor
import azlmbr.entity as entity
import azlmbr.math as math
- import azlmbr.paths
+ import azlmbr.paths as paths
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
@@ -84,7 +83,7 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
return None
# 1) Create a new level
- level = "tmp_level"
+ lvl_name = "tmp_level"
editor_window = pyside_utils.get_editor_main_window()
new_level_action = pyside_utils.get_action_for_menu_path(editor_window, "File", "New Level")
pyside_utils.trigger_action_async(new_level_action)
@@ -95,23 +94,24 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
Report.info("New Level dialog opened")
grp_box = new_level_dlg.findChild(QtWidgets.QGroupBox, "STATIC_GROUP1")
level_name = grp_box.findChild(QtWidgets.QLineEdit, "LEVEL")
- level_name.setText(level)
+ level_name.setText(lvl_name)
button_box = new_level_dlg.findChild(QtWidgets.QDialogButtonBox, "buttonBox")
button_box.button(QtWidgets.QDialogButtonBox.Ok).click()
# Verify new level was created successfully
level_create_success = await pyside_utils.wait_for_condition(lambda: editor.EditorToolsApplicationRequestBus(
- bus.Broadcast, "GetCurrentLevelName") == level, 5.0)
+ bus.Broadcast, "GetCurrentLevelName") == lvl_name, 5.0)
Report.critical_result(Tests.level_created, level_create_success)
# 2) Delete existing entities, and create and manipulate new entities via Entity Inspector
search_filter = azlmbr.entity.SearchFilter()
all_entities = entity.SearchBus(azlmbr.bus.Broadcast, "SearchEntities", search_filter)
editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntities", all_entities)
- entity_outliner_widget = editor_window.findChild(QtWidgets.QWidget, "OutlinerWidgetUI")
+ entity_outliner_widget = editor_window.findChild(QtWidgets.QWidget, "EntityOutlinerWidgetUI")
outliner_object_list = entity_outliner_widget.findChild(QtWidgets.QWidget, "m_objectList_Contents")
outliner_tree = outliner_object_list.findChild(QtWidgets.QWidget, "m_objectTree")
- await pyside_utils.trigger_context_menu_entry(outliner_tree, "Create entity")
+ outliner_viewport = outliner_tree.findChild(QtWidgets.QWidget, "qt_scrollarea_viewport")
+ await pyside_utils.trigger_context_menu_entry(outliner_viewport, "Create entity")
# Find the new entity
parent_entity_id = find_entity_by_name("Entity1")
@@ -153,14 +153,10 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
save_level_action = pyside_utils.get_action_for_menu_path(editor_window, "File", "Save")
pyside_utils.trigger_action_async(save_level_action)
- # 5) Export the level
- export_action = pyside_utils.get_action_for_menu_path(editor_window, "Game", "Export to Engine")
- pyside_utils.trigger_action_async(export_action)
- level_pak_file = os.path.join(
- "AutomatedTesting", "Levels", level, "level.pak"
- )
- export_success = await pyside_utils.wait_for_condition(lambda: os.path.exists(level_pak_file), 5.0)
- Report.result(Tests.level_saved_and_exported, export_success)
+ # 5) Verify the save/export of the level
+ level_prefab_path = os.path.join(paths.products, "levels", lvl_name, f"{lvl_name}.spawnable")
+ success = await pyside_utils.wait_for_condition(lambda: os.path.exists(level_prefab_path), 5.0)
+ Report.result(Tests.saved_and_exported, success)
run_test()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py
index 779f1ef953..6772450405 100755
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py
@@ -63,7 +63,7 @@ def ComponentCRUD_Add_Delete_Components():
:return: None
"""
- from PySide2 import QtWidgets, QtTest, QtCore
+ from PySide2 import QtWidgets, QtTest
from PySide2.QtCore import Qt
import azlmbr.legacy.general as general
@@ -74,7 +74,6 @@ def ComponentCRUD_Add_Delete_Components():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
async def add_component(component_name):
pyside_utils.click_button_async(add_comp_btn)
@@ -88,8 +87,7 @@ def ComponentCRUD_Add_Delete_Components():
QtTest.QTest.keyClick(tree, Qt.Key_Enter, Qt.NoModifier)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create entity
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py
index 6683fc952a..a5a94f06a5 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py
@@ -62,12 +62,11 @@ def Docking_BasicDockedTools():
import azlmbr.editor as editor
import azlmbr.entity as entity
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Make sure the Entity Outliner, Entity Inspector and Console tools are open
general.open_pane("Entity Outliner (PREVIEW)")
@@ -80,7 +79,7 @@ def Docking_BasicDockedTools():
editor.EditorEntityAPIBus(bus.Event, 'SetName', entity_id, entity_original_name)
editor_window = pyside_utils.get_editor_main_window()
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
# 1) Open the tools and dock them together in a floating tabbed widget.
# We drag/drop it over the viewport since it doesn't allow docking, so this will undock it
@@ -88,15 +87,15 @@ def Docking_BasicDockedTools():
pyside_utils.drag_and_drop(entity_outliner, render_overlay)
# We need to grab a new reference to the Entity Outliner QDockWidget because when it gets moved
- # to the floating window, its parent changes so the wrapped intance we had becomes invalid
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ # to the floating window, its parent changes so the wrapped instance we had becomes invalid
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
# Dock the Entity Inspector tabbed with the floating Entity Outliner
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
pyside_utils.drag_and_drop(entity_inspector, entity_outliner)
# We need to grab a new reference to the Entity Inspector QDockWidget because when it gets moved
- # to the floating window, its parent changes so the wrapped intance we had becomes invalid
+ # to the floating window, its parent changes so the wrapped instance we had becomes invalid
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
# Dock the Console tabbed with the floating Entity Inspector
@@ -106,7 +105,7 @@ def Docking_BasicDockedTools():
# Check to ensure all the tools are parented to the same QStackedWidget
def check_all_panes_tabbed():
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
console = editor_window.findChild(QtWidgets.QDockWidget, "Console")
entity_inspector_parent = entity_inspector.parentWidget()
entity_outliner_parent = entity_outliner.parentWidget()
@@ -122,7 +121,7 @@ def Docking_BasicDockedTools():
# 2.1,2) Select an Entity in the Entity Outliner.
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
console = editor_window.findChild(QtWidgets.QDockWidget, "Console")
object_tree = entity_outliner.findChild(QtWidgets.QTreeView, "m_objectTree")
test_entity_index = pyside_utils.find_child_by_pattern(object_tree, entity_original_name)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py
index 5fa8130302..fab7984df9 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py
@@ -30,11 +30,13 @@ def EntityOutliner_EntityOrdering():
5) Add another new entity, ensure the rest of the order is unchanged
"""
- import editor_python_test_tools.pyside_utils as pyside_utils
+ from PySide2 import QtCore
+
import azlmbr.legacy.general as general
+
+ import editor_python_test_tools.hydra_editor_utils as hydra
+ import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
- from PySide2 import QtCore, QtWidgets, QtGui, QtTest
# Grab the Editor, Entity Outliner, and Outliner Model
editor_window = pyside_utils.get_editor_main_window()
@@ -110,8 +112,7 @@ def EntityOutliner_EntityOrdering():
expected_order = []
# 1) Open the empty Prefab Base level
- helper.init_idle()
- helper.open_level("Prefab", "Base")
+ hydra.open_base_level()
# 2) Add 5 entities to the outliner
ENTITIES_TO_ADD = 5
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py
index f4769dab4d..07c89ff110 100755
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py
@@ -69,8 +69,8 @@ def InputBindings_Add_Remove_Input_Events():
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
def open_asset_editor():
general.open_pane("Asset Editor")
@@ -81,8 +81,7 @@ def InputBindings_Add_Remove_Input_Events():
return not general.is_pane_visible("Asset Editor")
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Open Asset Editor
Report.result(Tests.asset_editor_opened, open_asset_editor())
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py
index bd213be293..ce85cf223f 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py
@@ -26,9 +26,9 @@ def Menus_EditMenuOptions_Work():
:return: None
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
edit_menu_options = [
("Undo",),
@@ -52,19 +52,20 @@ def Menus_EditMenuOptions_Work():
("Editor Settings", "Global Preferences"),
("Editor Settings", "Editor Settings Manager"),
("Editor Settings", "Keyboard Customization", "Customize Keyboard"),
- ("Editor Settings", "Keyboard Customization", "Export Keyboard Settings"),
- ("Editor Settings", "Keyboard Customization", "Import Keyboard Settings"),
+ # The following menu options are temporarily disabled due to https://github.com/o3de/o3de/issues/6746
+ #("Editor Settings", "Keyboard Customization", "Export Keyboard Settings"),
+ #("Editor Settings", "Keyboard Customization", "Import Keyboard Settings"),
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Interact with Edit Menu options
editor_window = pyside_utils.get_editor_main_window()
for option in edit_menu_options:
try:
action = pyside_utils.get_action_for_menu_path(editor_window, "Edit", *option)
+ Report.info(f"Triggering {action.iconText()}")
action.trigger()
action_triggered = True
except Exception as e:
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py
index a3e7611b5e..bedf474387 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py
@@ -26,14 +26,14 @@ def Menus_FileMenuOptions_Work():
:return: None
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
file_menu_options = [
("New Level",),
("Open Level",),
- ("Import",),
+ #("Import",), #Temporarily disabled due to https://github.com/o3de/o3de/issues/6746
("Save",),
("Save As",),
("Save Level Statistics",),
@@ -42,19 +42,18 @@ def Menus_FileMenuOptions_Work():
("New Project",),
("Open Project",),
("Show Log File",),
- ("Resave All Slices",),
("Exit",),
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Interact with File Menu options
editor_window = pyside_utils.get_editor_main_window()
for option in file_menu_options:
try:
action = pyside_utils.get_action_for_menu_path(editor_window, "File", *option)
+ Report.info(f"Triggering {action.iconText()}")
action.trigger()
action_triggered = True
except Exception as e:
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py
index deff2855a0..bb9ff15082 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py
@@ -26,13 +26,15 @@ def Menus_ViewMenuOptions_Work():
:return: None
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
view_menu_options = [
("Center on Selection",),
("Show Quick Access Bar",),
+ ("Layouts", "Component Entity Layout",),
+ ("Layouts", "Save Layout",),
("Viewport", "Configure Layout"),
("Viewport", "Go to Position"),
("Viewport", "Center on Selection"),
@@ -45,14 +47,14 @@ def Menus_ViewMenuOptions_Work():
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Interact with View Menu options
editor_window = pyside_utils.get_editor_main_window()
for option in view_menu_options:
try:
action = pyside_utils.get_action_for_menu_path(editor_window, "View", *option)
+ Report.info(f"Triggering {action.iconText()}")
action.trigger()
action_triggered = True
except Exception as e:
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py
index c9e91687e0..3805ef15dd 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py
@@ -7,48 +7,77 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import os
import pytest
-import sys
import ly_test_tools.environment.file_system as file_system
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.fixture
-def remove_test_level(request, workspace, project):
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- request.addfinalizer(teardown)
+from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
@pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
+class TestAutomationNoAutoTestMode(EditorTestSuite):
- def test_BasicEditorWorkflows_LevelEntityComponentCRUD(self, request, workspace, editor, launcher_platform,
- remove_test_level):
+ # Disable -autotest_mode and -BatchMode. Tests cannot run in -BatchMode due to UI interactions, and these tests
+ # interact with modal dialogs
+ global_extra_cmdline_args = []
+
+ class test_AssetPicker_UI_UX(EditorSharedTest):
+ from .EditorScripts import AssetPicker_UI_UX as test_module
+
+ class test_BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD(EditorSharedTest):
+ from .EditorScripts import BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD as test_module
+
+ class test_BasicEditorWorkflows_LevelEntityComponentCRUD(EditorSingleTest):
+ # Custom teardown to remove level created during test
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
+ True, True)
from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, autotest_mode=False, enable_prefab_system=False)
@pytest.mark.REQUIRES_gpu
- def test_BasicEditorWorkflows_GPU_LevelEntityComponentCRUD(self, request, workspace, editor, launcher_platform,
- remove_test_level):
- from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, autotest_mode=False,
- use_null_renderer=False, enable_prefab_system=False)
+ class test_BasicEditorWorkflows_GPU_LevelEntityComponentCRUD(EditorSingleTest):
+ # Disable null renderer
+ use_null_renderer = False
- def test_EntityOutlienr_EntityOrdering(self, request, workspace, editor, launcher_platform):
+ # Custom teardown to remove level created during test
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
+ True, True)
+ from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
+
+ class test_InputBindings_Add_Remove_Input_Events(EditorSharedTest):
+ from .EditorScripts import InputBindings_Add_Remove_Input_Events as test_module
+
+
+@pytest.mark.SUITE_main
+@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
+@pytest.mark.parametrize("project", ["AutomatedTesting"])
+class TestAutomationAutoTestMode(EditorTestSuite):
+
+ # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
+ global_extra_cmdline_args = ["-autotest_mode"]
+
+ class test_AssetBrowser_SearchFiltering(EditorSharedTest):
+ from .EditorScripts import AssetBrowser_SearchFiltering as test_module
+
+ class test_AssetBrowser_TreeNavigation(EditorSharedTest):
+ from .EditorScripts import AssetBrowser_TreeNavigation as test_module
+
+ class test_ComponentCRUD_Add_Delete_Components(EditorSharedTest):
+ from .EditorScripts import ComponentCRUD_Add_Delete_Components as test_module
+
+ @pytest.mark.skip("Passes locally/fails on Jenkins. https://github.com/o3de/o3de/issues/6747")
+ class test_Docking_BasicDockedTools(EditorSharedTest):
+ from .EditorScripts import Docking_BasicDockedTools as test_module
+
+ class test_EntityOutliner_EntityOrdering(EditorSharedTest):
from .EditorScripts import EntityOutliner_EntityOrdering as test_module
- self._run_test(
- request,
- workspace,
- editor,
- test_module,
- batch_mode=False,
- autotest_mode=True,
- )
+
+ class test_Menus_EditMenuOptions_Work(EditorSharedTest):
+ from .EditorScripts import Menus_EditMenuOptions as test_module
+
+ class test_Menus_FileMenuOptions_Work(EditorSharedTest):
+ from .EditorScripts import Menus_FileMenuOptions as test_module
+
+ class test_Menus_ViewMenuOptions_Work(EditorSharedTest):
+ from .EditorScripts import Menus_ViewMenuOptions as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main_Optimized.py
deleted file mode 100644
index d87fd8625b..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main_Optimized.py
+++ /dev/null
@@ -1,79 +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
-"""
-
-import os
-import pytest
-
-import ly_test_tools.environment.file_system as file_system
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomationNoAutoTestMode(EditorTestSuite):
-
- # Disable -autotest_mode and -BatchMode. Tests cannot run in -BatchMode due to UI interactions, and these tests
- # interact with modal dialogs
- global_extra_cmdline_args = []
-
- enable_prefab_system = False
-
- class test_BasicEditorWorkflows_LevelEntityComponentCRUD(EditorSingleTest):
- # Custom teardown to remove slice asset created during test
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
- True, True)
- from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
-
- @pytest.mark.REQUIRES_gpu
- class test_BasicEditorWorkflows_GPU_LevelEntityComponentCRUD(EditorSingleTest):
- # Disable null renderer
- use_null_renderer = False
-
- # Custom teardown to remove slice asset created during test
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
- True, True)
- from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
-
- class test_InputBindings_Add_Remove_Input_Events(EditorSharedTest):
- from .EditorScripts import InputBindings_Add_Remove_Input_Events as test_module
-
- class test_AssetPicker_UI_UX(EditorSharedTest):
- from .EditorScripts import AssetPicker_UI_UX as test_module
-
-
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomationAutoTestMode(EditorTestSuite):
-
- # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
- global_extra_cmdline_args = ["-autotest_mode"]
-
- enable_prefab_system = False
-
- class test_AssetBrowser_TreeNavigation(EditorSharedTest):
- from .EditorScripts import AssetBrowser_TreeNavigation as test_module
-
- class test_AssetBrowser_SearchFiltering(EditorSharedTest):
- from .EditorScripts import AssetBrowser_SearchFiltering as test_module
-
- class test_ComponentCRUD_Add_Delete_Components(EditorSharedTest):
- from .EditorScripts import ComponentCRUD_Add_Delete_Components as test_module
-
- class test_Menus_ViewMenuOptions_Work(EditorSharedTest):
- from .EditorScripts import Menus_ViewMenuOptions as test_module
-
- @pytest.mark.skip(reason="Times out due to dialogs failing to dismiss: LYN-4208")
- class test_Menus_FileMenuOptions_Work(EditorSharedTest):
- from .EditorScripts import Menus_FileMenuOptions as test_module
-
- class test_BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD(EditorSharedTest):
- from .EditorScripts import BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Periodic.py
deleted file mode 100644
index 1bd1d7f987..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Periodic.py
+++ /dev/null
@@ -1,60 +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
-"""
-
-import os
-import pytest
-import sys
-
-import ly_test_tools.environment.file_system as file_system
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.fixture
-def remove_test_level(request, workspace, project):
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- request.addfinalizer(teardown)
-
-
-@pytest.mark.SUITE_periodic
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
-
- def test_AssetBrowser_TreeNavigation(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetBrowser_TreeNavigation as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_AssetBrowser_SearchFiltering(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetBrowser_SearchFiltering as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_AssetPicker_UI_UX(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetPicker_UI_UX as test_module
- self._run_test(request, workspace, editor, test_module, autotest_mode=False, batch_mode=False, enable_prefab_system=False)
-
- def test_ComponentCRUD_Add_Delete_Components(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ComponentCRUD_Add_Delete_Components as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_InputBindings_Add_Remove_Input_Events(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import InputBindings_Add_Remove_Input_Events as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, autotest_mode=False, enable_prefab_system=False)
-
- def test_Menus_ViewMenuOptions_Work(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Menus_ViewMenuOptions as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- @pytest.mark.skip(reason="Times out due to dialogs failing to dismiss: LYN-4208")
- def test_Menus_FileMenuOptions_Work(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Menus_FileMenuOptions as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox.py
deleted file mode 100644
index 8a56a2dbfd..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox.py
+++ /dev/null
@@ -1,27 +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
-"""
-
-import os
-import pytest
-import sys
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.mark.SUITE_sandbox
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
-
- def test_Menus_EditMenuOptions_Work(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Menus_EditMenuOptions as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_Docking_BasicDockedTools(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Docking_BasicDockedTools as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox_Optimized.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox_Optimized.py
deleted file mode 100644
index ce0d5e43e9..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox_Optimized.py
+++ /dev/null
@@ -1,28 +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
-"""
-
-import os
-import pytest
-
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.SUITE_sandbox
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomationAutoTestMode(EditorTestSuite):
-
- # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
- global_extra_cmdline_args = ["-autotest_mode"]
-
- enable_prefab_system = False
-
- class test_Docking_BasicDockedTools(EditorSharedTest):
- from .EditorScripts import Docking_BasicDockedTools as test_module
-
- class test_Menus_EditMenuOptions_Work(EditorSharedTest):
- from .EditorScripts import Menus_EditMenuOptions as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt
index ba607ede32..f016094b26 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt
@@ -14,7 +14,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
NAME AutomatedTesting::DynamicVegetationTests_Main_Optimized
TEST_SERIAL
TEST_SUITE main
- PATH ${CMAKE_CURRENT_LIST_DIR}/dyn_veg/TestSuite_Main_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/dyn_veg/TestSuite_Main.py
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
Legacy::Editor
@@ -27,7 +27,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
NAME AutomatedTesting::DynamicVegetationTests_Periodic_Optimized
TEST_SERIAL
TEST_SUITE periodic
- PATH ${CMAKE_CURRENT_LIST_DIR}/dyn_veg/TestSuite_Periodic_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/dyn_veg/TestSuite_Periodic.py
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
Legacy::Editor
@@ -43,7 +43,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
NAME AutomatedTesting::LandscapeCanvasTests_Main_Optimized
TEST_SERIAL
TEST_SUITE main
- PATH ${CMAKE_CURRENT_LIST_DIR}/landscape_canvas/TestSuite_Main_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/landscape_canvas/TestSuite_Main.py
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
Legacy::Editor
@@ -58,7 +58,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
NAME AutomatedTesting::GradientSignalTests_Periodic_Optimized
TEST_SERIAL
TEST_SUITE periodic
- PATH ${CMAKE_CURRENT_LIST_DIR}/gradient_signal/TestSuite_Periodic_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/gradient_signal/TestSuite_Periodic.py
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
Legacy::Editor
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude.py
index 66aa6d27ad..aa5e5e4f9c 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude.py
@@ -51,22 +51,18 @@ def AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude():
import os
- import azlmbr.asset as asset
import azlmbr.editor as editor
import azlmbr.legacy.general as general
import azlmbr.bus as bus
import azlmbr.math as math
- import azlmbr.prefab as prefab
import editor_python_test_tools.hydra_editor_utils as hydra
- from editor_python_test_tools.prefab_utils import Prefab
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -76,9 +72,9 @@ def AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude():
center_point = math.Vector3(512.0, 512.0, 32.0)
flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
- flower_prefab = dynveg.create_temp_mesh_prefab(flower_asset_path, "PinkFlower")[0]
+ flower_prefab = dynveg.create_temp_mesh_prefab(flower_asset_path, "AltFilter_PinkFlower")[0]
- spawner_entity = dynveg.create_prefab_vegetation_area("Instance Spawner", center_point, 32.0, 32.0, 32.0, flower_prefab)
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", center_point, 32.0, 32.0, 32.0, flower_prefab)
# Add a Vegetation Altitude Filter
spawner_entity.add_component("Vegetation Altitude Filter")
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 06f6c2a7b4..be2c5e4d8c 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_FilterStageToggle.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_FilterStageToggle.py
@@ -32,9 +32,7 @@ def AltitudeFilter_FilterStageToggle():
import os
import azlmbr.legacy.general as general
- import azlmbr.bus as bus
import azlmbr.math as math
- import azlmbr.prefab as prefab
import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
@@ -45,17 +43,16 @@ def AltitudeFilter_FilterStageToggle():
POSTPROCESS_INSTANCE_COUNT = 34
# Open an existing simple level
- helper.init_idle()
- helper.open_level("", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create basic vegetation entity
position = math.Vector3(512.0, 512.0, 32.0)
flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
- flower_prefab = dynveg.create_temp_mesh_prefab(flower_asset_path, "PinkFlower")[0]
+ flower_prefab = dynveg.create_temp_mesh_prefab(flower_asset_path, "AltFilter_PinkFlower2")[0]
- vegetation = dynveg.create_prefab_vegetation_area("vegetation", position, 16.0, 16.0, 16.0, flower_prefab)
+ vegetation = dynveg.create_temp_prefab_vegetation_area("vegetation", position, 16.0, 16.0, 16.0, flower_prefab)
# Add a Vegetation Altitude Filter to the vegetation area entity
vegetation.add_component("Vegetation Altitude Filter")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude.py
index 544a58e242..1e9762d7d8 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude.py
@@ -56,8 +56,7 @@ def AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -67,9 +66,9 @@ def AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude():
center_point = math.Vector3(512.0, 512.0, 32.0)
flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
- flower_prefab = dynveg.create_temp_mesh_prefab(flower_asset_path, "PinkFlower")[0]
+ flower_prefab = dynveg.create_temp_mesh_prefab(flower_asset_path, "AltFilter_PinkFlower3")[0]
- spawner_entity = dynveg.create_prefab_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 16.0, flower_prefab)
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 16.0, flower_prefab)
# Add a Vegetation Altitude Filter
spawner_entity.add_component("Vegetation Altitude Filter")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea.py
index a856256929..7242b0b629 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea.py
@@ -56,19 +56,21 @@ def AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea():
"""
import os
+ from pathlib import Path
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.legacy.general as general
import azlmbr.math as math
import azlmbr.vegetation as vegetation
+ import azlmbr.prefab as prefab
import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
- def create_asset_list_entity(name, center, dynamic_slice_asset_path):
+ def create_asset_list_entity(name, center, target_prefab):
asset_list_entity = hydra.Entity(name)
asset_list_entity.create_entity(
center,
@@ -77,18 +79,34 @@ def AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea():
if asset_list_entity.id.IsValid():
print(f"'{asset_list_entity.name}' created")
- # Set the Asset List to a Dynamic Slice spawner with a specific slice asset selected
- dynamic_slice_spawner = vegetation.DynamicSliceInstanceSpawner()
- dynamic_slice_spawner.SetSliceAssetPath(dynamic_slice_asset_path)
+ if target_prefab:
+ # Get the in-memory spawnable asset id if exists
+ spawnable_name = Path(target_prefab.file_path).stem
+ spawnable_asset_id = prefab.PrefabPublicRequestBus(bus.Broadcast, 'GetInMemorySpawnableAssetId',
+ spawnable_name)
+
+ # Create the in-memory spawnable asset from given prefab if the spawnable does not exist
+ if not spawnable_asset_id.is_valid():
+ create_spawnable_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'CreateInMemorySpawnableAsset',
+ target_prefab.file_path,
+ spawnable_name)
+ assert create_spawnable_result.IsSuccess(), \
+ f"Prefab operation 'CreateInMemorySpawnableAssets' failed. Error: {create_spawnable_result.GetError()}"
+ spawnable_asset_id = create_spawnable_result.GetValue()
+ else:
+ spawnable_asset_id = None
+
+ # Set the vegetation area to a prefab instance spawner with a specific prefab asset selected
descriptor = hydra.get_component_property_value(asset_list_entity.components[0],
- "Configuration|Embedded Assets|[0]")
- descriptor.spawner = dynamic_slice_spawner
+ 'Configuration|Embedded Assets|[0]')
+ prefab_spawner = vegetation.PrefabInstanceSpawner()
+ prefab_spawner.SetPrefabAssetId(spawnable_asset_id)
+ descriptor.spawner = prefab_spawner
asset_list_entity.get_set_test(0, "Configuration|Embedded Assets|[0]", descriptor)
return asset_list_entity
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -96,11 +114,13 @@ def AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea():
# 2) Create 3 entities with Vegetation Asset List components set to spawn different descriptors
center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- asset_path2 = os.path.join("Slices", "PurpleFlower.dynamicslice")
- asset_list_entity = create_asset_list_entity("Asset List 1", center_point, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "AssetList_PinkFlower")[0]
+ purple_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ purple_flower_prefab = dynveg.create_temp_mesh_prefab(purple_flower_asset_path, "AssetList_PurpleFlower")[0]
+ asset_list_entity = create_asset_list_entity("Asset List 1", center_point, pink_flower_prefab)
asset_list_entity2 = create_asset_list_entity("Asset List 2", center_point, None)
- asset_list_entity3 = create_asset_list_entity("Asset List 3", center_point, asset_path2)
+ asset_list_entity3 = create_asset_list_entity("Asset List 3", center_point, purple_flower_prefab)
# 3) Create a planting surface and add a Vegetation System Settings level component with instances set to spawn
# on center instead of corner
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetWeightSelector_InstancesExpressBasedOnWeight.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetWeightSelector_InstancesExpressBasedOnWeight.py
index b8b50f8110..8ea0b6b23d 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetWeightSelector_InstancesExpressBasedOnWeight.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/AssetWeightSelector_InstancesExpressBasedOnWeight.py
@@ -56,8 +56,7 @@ def AssetWeightSelector_InstancesExpressBasedOnWeight():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -66,14 +65,15 @@ def AssetWeightSelector_InstancesExpressBasedOnWeight():
# 2) Create a new instance spawner entity with multiple Dynamic Slice Instance Spawner descriptors, one set to a
# valid slice entity, and one set to None
spawner_center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "AssetWeight_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
desc_asset = hydra.get_component_property_value(spawner_entity.components[2],
"Configuration|Embedded Assets")[0]
desc_list = [desc_asset, desc_asset]
spawner_entity.get_set_test(2, "Configuration|Embedded Assets", desc_list)
- spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[1]|Instance|Slice Asset", None)
+ spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[1]|Instance|Prefab Asset", None)
# Add an Asset Weight Selector component to the spawner entity
spawner_entity.add_component("Vegetation Asset Weight Selector")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py
index ed5501d719..be0fe8dba7 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py
@@ -64,16 +64,15 @@ def DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius():
instance_query_point_c = math.Vector3(515.0, 512.5, 32.0)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
-
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# 2) Create a new entity with required vegetation area components
spawner_center_point = math.Vector3(520.0, 520.0, 32.0)
- asset_path = os.path.join("Slices", "1m_cube.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
- asset_path)
+ cube_asset_path = os.path.join("testdata", "multi-mat_fbx", "multi-mat_1m_cube.azmodel")
+ cube_prefab = dynveg.create_temp_mesh_prefab(cube_asset_path, "DistanceBetween_1m_cube2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
+ cube_prefab)
# 3) Create a surface to plant on
surface_center_point = math.Vector3(512.0, 512.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py
index c24ec3c314..b2244fdfa7 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py
@@ -62,16 +62,15 @@ def DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius():
instance_query_point_c = math.Vector3(515.0, 512.5, 32.0)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
-
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# 2) Create a new entity with required vegetation area components
spawner_center_point = math.Vector3(520.0, 520.0, 32.0)
- asset_path = os.path.join("Slices", "1m_cube.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
- asset_path)
+ cube_asset_path = os.path.join("testdata", "multi-mat_fbx", "multi-mat_1m_cube.azmodel")
+ cube_prefab = dynveg.create_temp_mesh_prefab(cube_asset_path, "DistanceBetween_1m_cube")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point,
+ 16.0, 16.0, 16.0, cube_prefab)
# 3) Create a surface to plant on
surface_center_point = math.Vector3(512.0, 512.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynVegUtils_TempPrefabCreationWorks.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynVegUtils_TempPrefabCreationWorks.py
index d016473d5e..c1ca3cbfc6 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynVegUtils_TempPrefabCreationWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynVegUtils_TempPrefabCreationWorks.py
@@ -39,11 +39,11 @@ def DynVegUtils_TempPrefabCreationWorks():
with Tracer() as error_tracer:
# Create dictionary for prefab filenames and paths to create using helper function
mesh_prefabs = {
- "PinkFlower": os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel"),
- "PurpleFlower": os.path.join("assets", "objects", "foliage", "grass_flower_purple.azmodel"),
- "1m_Cube": os.path.join("objects", "_primitives", "_box_1x1.azmodel"),
- "CedarTree": os.path.join("assets", "objects", "foliage", "cedar.azmodel"),
- "Bush": os.path.join("assets", "objects", "foliage", "bush_privet_01.azmodel"),
+ "UtilsTest_PinkFlower": os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel"),
+ "UtilsTest_PurpleFlower": os.path.join("assets", "objects", "foliage", "grass_flower_purple.azmodel"),
+ "UtilsTest_1m_Cube": os.path.join("objects", "_primitives", "_box_1x1.azmodel"),
+ "UtilsTest_CedarTree": os.path.join("assets", "objects", "foliage", "cedar.azmodel"),
+ "UtilsTest_Bush": os.path.join("assets", "objects", "foliage", "bush_privet_01.azmodel"),
}
# 1) Open an existing simple level
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks.py
index fcbf85c59d..c8581ad275 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks.py
@@ -71,8 +71,7 @@ def DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Grab the UUID that we need for creating an Dynamic Slice Instance Spawner
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/EmptyInstanceSpawner_EmptySpawnerWorks.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/EmptyInstanceSpawner_EmptySpawnerWorks.py
index d0a51809b4..91315a6971 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/EmptyInstanceSpawner_EmptySpawnerWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/EmptyInstanceSpawner_EmptySpawnerWorks.py
@@ -57,8 +57,7 @@ def EmptyInstanceSpawner_EmptySpawnerWorks():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Grab the UUID that we need for creating an Empty Spawner
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/InstanceSpawnerPriority_LayerAndSubPriority.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/InstanceSpawnerPriority_LayerAndSubPriority.py
index 471c8862fd..f83807a62b 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/InstanceSpawnerPriority_LayerAndSubPriority.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/InstanceSpawnerPriority_LayerAndSubPriority.py
@@ -60,8 +60,7 @@ def InstanceSpawnerPriority_LayerAndSubPriority():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -69,9 +68,10 @@ def InstanceSpawnerPriority_LayerAndSubPriority():
# 2) Create overlapping areas: 1 instance spawner area, and 1 blocker area
spawner_center_point = math.Vector3(508.0, 508.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 1.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "Priority_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 1.0,
+ pink_flower_prefab)
blocker_center_point = math.Vector3(516.0, 516.0, 32.0)
blocker_entity = dynveg.create_blocker_area("Instance Blocker", blocker_center_point, 16.0, 16.0, 1.0)
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 f2c7faae8a..79f2e4169b 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
@@ -85,18 +85,14 @@ def LayerBlender_E2E_Editor():
# 2) Create 2 vegetation areas with different meshes
purple_position = math.Vector3(504.0, 512.0, 32.0)
- purple_asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity_1 = dynveg.create_dynamic_slice_vegetation_area("Purple Spawner",
- purple_position,
- 16.0, 16.0, 1.0,
- purple_asset_path)
+ purple_flower_prefab_path = os.path.join("assets", "prefabs", "PurpleFlower.spawnable")
+ spawner_entity_1 = dynveg.create_prefab_vegetation_area("Purple Spawner", purple_position, 16.0, 16.0, 1.0,
+ purple_flower_prefab_path)
pink_position = math.Vector3(520.0, 512.0, 32.0)
- pink_asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity_2 = dynveg.create_dynamic_slice_vegetation_area("Pink Spawner",
- pink_position,
- 16.0, 16.0, 1.0,
- pink_asset_path)
+ pink_flower_prefab_path = os.path.join("assets", "prefabs", "PinkFlower.spawnable")
+ spawner_entity_2 = dynveg.create_prefab_vegetation_area("Pink Spawner", pink_position, 16.0, 16.0, 1.0,
+ pink_flower_prefab_path)
base_position = math.Vector3(512.0, 512.0, 32.0)
dynveg.create_surface_entity("Surface Entity",
@@ -135,11 +131,11 @@ def LayerBlender_E2E_Editor():
pink_count = 0
purple_count = 0
for instance in instances:
- purple_asset_path = purple_asset_path.replace("\\", "/").lower()
- pink_asset_path = pink_asset_path.replace("\\", "/").lower()
- if instance.descriptor.spawner.GetSliceAssetPath() == pink_asset_path:
+ purple_flower_prefab_path = purple_flower_prefab_path.replace("\\", "/").lower()
+ pink_flower_prefab_path = pink_flower_prefab_path.replace("\\", "/").lower()
+ if instance.descriptor.spawner.GetPrefabAssetPath() == pink_flower_prefab_path:
pink_count += 1
- elif instance.descriptor.spawner.GetSliceAssetPath() == purple_asset_path:
+ elif instance.descriptor.spawner.GetPrefabAssetPath() == purple_flower_prefab_path:
purple_count += 1
Report.result(Tests.instances_blended, pink_count == purple_count and (pink_count + purple_count == num_expected))
@@ -152,11 +148,11 @@ def LayerBlender_E2E_Editor():
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 to engine
+ # 6) Save the created level
general.save_level()
- general.export_to_engine()
- pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
- Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
+ level_prefab_path = os.path.join(paths.products, "levels", lvl_name, f"{lvl_name}.spawnable")
+ success = helper.wait_for_condition(lambda: os.path.exists(level_prefab_path), 5.0)
+ Report.result(Tests.saved_and_exported, success)
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlocker_InstancesBlockedInConfiguredArea.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlocker_InstancesBlockedInConfiguredArea.py
index b89edcdeb7..5c3083ee3d 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlocker_InstancesBlockedInConfiguredArea.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlocker_InstancesBlockedInConfiguredArea.py
@@ -17,7 +17,6 @@ class Tests:
)
-
def LayerBlocker_InstancesBlockedInConfiguredArea():
"""
Summary:
@@ -58,8 +57,7 @@ def LayerBlocker_InstancesBlockedInConfiguredArea():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -67,9 +65,10 @@ def LayerBlocker_InstancesBlockedInConfiguredArea():
# 2) Create a new instance spawner entity
spawner_center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "Blocker_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point,
+ 16.0, 16.0, 16.0, pink_flower_prefab)
# 3) Create surface for planting on
dynveg.create_surface_entity("Surface Entity", spawner_center_point, 32.0, 32.0, 1.0)
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 6796f56b11..a277f14a41 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_FilterStageToggle.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_FilterStageToggle.py
@@ -42,16 +42,17 @@ def LayerSpawner_FilterStageToggle():
POSTPROCESS_INSTANCE_COUNT = 19
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(500.49, 498.69, 46.66)
general.set_current_view_rotation(-42.05, 0.00, -36.33)
# Create a vegetation area with all needed components
position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- vegetation_entity = dynveg.create_dynamic_slice_vegetation_area("vegetation", position, 16.0, 16.0, 16.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SpawnerFilter_PinkFlower")[0]
+ vegetation_entity = dynveg.create_temp_prefab_vegetation_area("vegetation", position, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
vegetation_entity.add_component("Vegetation Altitude Filter")
vegetation_entity.add_component("Vegetation Position Modifier")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InheritBehaviorFlag.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InheritBehaviorFlag.py
index 1153ae2657..dc06c298d1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InheritBehaviorFlag.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InheritBehaviorFlag.py
@@ -42,19 +42,16 @@ def LayerSpawner_InheritBehaviorFlag():
SURFACE_TAG = "test_tag"
- def set_dynamic_slice_asset(entity_obj, component_index, dynamic_slice_asset_path):
- dynamic_slice_spawner = vegetation.DynamicSliceInstanceSpawner()
- dynamic_slice_spawner.SetSliceAssetPath(dynamic_slice_asset_path)
- descriptor = hydra.get_component_property_value(
- entity_obj.components[component_index], "Configuration|Embedded Assets|[0]"
- )
- descriptor.spawner = dynamic_slice_spawner
+ def set_prefab_asset(entity_obj, component_index, spawnable_prefab):
+ descriptor = hydra.get_component_property_value(entity_obj.components[component_index],
+ "Configuration|Embedded Assets|[0]")
+ prefab_spawner = vegetation.PrefabInstanceSpawner()
+ prefab_spawner.SetPrefabAssetId(spawnable_prefab)
+ descriptor.spawner = prefab_spawner
entity_obj.get_set_test(2, "Configuration|Embedded Assets|[0]", descriptor)
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
-
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create Emitter entity and add the required components
@@ -80,7 +77,9 @@ def LayerSpawner_InheritBehaviorFlag():
veg_1.create_entity(
position, ["Vegetation Layer Spawner", "Shape Reference", "Vegetation Asset List"]
)
- set_dynamic_slice_asset(veg_1, 2, os.path.join("Slices", "PinkFlower.dynamicslice"))
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SpawnerInheritBehavior_PinkFlower")[0]
+ set_prefab_asset(veg_1, 2, pink_flower_prefab)
veg_1.get_set_test(1, "Configuration|Shape Entity Id", blender_entity.id)
# Create second vegetation area and assign a valid asset
@@ -88,7 +87,9 @@ def LayerSpawner_InheritBehaviorFlag():
veg_2.create_entity(
position, ["Vegetation Layer Spawner", "Shape Reference", "Vegetation Asset List"]
)
- set_dynamic_slice_asset(veg_2, 2, os.path.join("Slices", "PurpleFlower.dynamicslice"))
+ purple_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ purple_flower_prefab = dynveg.create_temp_mesh_prefab(purple_flower_asset_path, "temp_PurpleFlower")[0]
+ set_prefab_asset(veg_2, 2, purple_flower_prefab)
veg_2.get_set_test(1, "Configuration|Shape Entity Id", blender_entity.id)
# Assign the vegetation areas to the Blender entity
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesPlantInAllSupportedShapes.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesPlantInAllSupportedShapes.py
index beec54b4eb..662ac63714 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesPlantInAllSupportedShapes.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesPlantInAllSupportedShapes.py
@@ -56,16 +56,14 @@ def LayerSpawner_InstancesPlantInAllSupportedShapes():
Report.result(success, result)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create basic vegetation area entity and set the properties
entity_position = math.Vector3(125.0, 136.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- vegetation = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner",
- entity_position,
- 10.0, 10.0, 10.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SpawnerShapePlant_PinkFlower")[0]
+ vegetation = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 10.0, 10.0, 10.0,
+ pink_flower_prefab)
vegetation.remove_component("Box Shape")
vegetation.add_component("Shape Reference")
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 fe8863c625..deb0376c9b 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerSpawner_InstancesRefreshUsingCorrectViewportCamera.py
@@ -43,13 +43,13 @@ def LayerSpawner_InstancesRefreshUsingCorrectViewportCamera():
import azlmbr.legacy.general as general
import azlmbr.math as math
+ import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set up a test environment to validate that switching viewports correctly changes which camera
# the vegetation system uses.
@@ -100,11 +100,12 @@ def LayerSpawner_InstancesRefreshUsingCorrectViewportCamera():
surface_height)
# Create the two vegetation areas
- test_slice_asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- first_veg_entity = dynveg.create_dynamic_slice_vegetation_area("Veg Area 1", first_entity_center_point, box_size, box_size,
- box_size, test_slice_asset_path)
- second_veg_entity = dynveg.create_dynamic_slice_vegetation_area("Veg Area 2", second_entity_center_point, box_size, box_size,
- box_size, test_slice_asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SpawnerViewportRefresh_PinkFlower")[0]
+ first_veg_entity = dynveg.create_temp_prefab_vegetation_area("Veg Area 1", first_entity_center_point, box_size, box_size,
+ box_size, pink_flower_prefab)
+ second_veg_entity = dynveg.create_temp_prefab_vegetation_area("Veg Area 2", second_entity_center_point, box_size, box_size,
+ box_size, pink_flower_prefab)
# When the first viewport is active, the first area should be full of instances, and the second should be empty
general.set_active_viewport(0)
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 9777a52c82..7c365d0ee5 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMesh.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMesh.py
@@ -50,19 +50,17 @@ def MeshBlocker_InstancesBlockedByMesh():
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(500.49, 498.69, 46.66)
general.set_current_view_rotation(-42.05, 0.00, -36.33)
# Create entity with components "Vegetation Layer Spawner", "Vegetation Asset List", "Box Shape"
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner",
- entity_position,
- 10.0, 10.0, 10.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "MeshBlocker_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 10.0, 10.0, 10.0,
+ pink_flower_prefab)
# Create surface entity to plant on
dynveg.create_surface_entity("Surface Entity", entity_position, 10.0, 10.0, 1.0)
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 3c47edeb91..a54a8653f0 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMeshHeightTuning.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshBlocker_InstancesBlockedByMeshHeightTuning.py
@@ -53,19 +53,17 @@ def MeshBlocker_InstancesBlockedByMeshHeightTuning():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(500.49, 498.69, 46.66)
general.set_current_view_rotation(-42.05, 0.00, -36.33)
# 2) Create entity with components "Vegetation Layer Spawner", "Vegetation Asset List", "Box Shape"
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner",
- entity_position,
- 10.0, 10.0, 10.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "MeshBlocker_PinkFlower2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 10.0, 10.0, 10.0,
+ pink_flower_prefab)
# 3) Create surface entity to plant on
dynveg.create_surface_entity("Surface Entity", entity_position, 10.0, 10.0, 1.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_DependentOnMeshComponent.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_DependentOnMeshComponent.py
index cee8ebe5b6..9af17b0cd5 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_DependentOnMeshComponent.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_DependentOnMeshComponent.py
@@ -58,8 +58,7 @@ def MeshSurfaceTagEmitter_DependentOnMeshComponent():
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", EntityComponentIdPair)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create a new entity with component "Mesh Surface Tag Emitter"
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py
index d7abc66106..cd9963e844 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py
@@ -47,8 +47,7 @@ def MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create a new entity with components "Mesh Surface Tag Emitter", "Mesh"
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PhysXColliderSurfaceTagEmitter_E2E_Editor.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PhysXColliderSurfaceTagEmitter_E2E_Editor.py
index 6232cd374d..cdb2fac80b 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PhysXColliderSurfaceTagEmitter_E2E_Editor.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PhysXColliderSurfaceTagEmitter_E2E_Editor.py
@@ -55,8 +55,7 @@ def PhysXColliderSurfaceTagEmitter_E2E_Editor():
return behavior_context_test_success
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Verify all of the BehaviorContext API:
behavior_context = (
@@ -90,8 +89,10 @@ def PhysXColliderSurfaceTagEmitter_E2E_Editor():
dynveg.create_surface_entity("Baseline Surface", entity_center_point, 32.0, 32.0, 1.0)
# Create a new entity with required vegetation area components
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Veg Area", entity_center_point, 32.0, 32.0, 32.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "PhysXCollider_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_center_point, test_box_size,
+ test_box_size, test_box_size, pink_flower_prefab)
# Add a Vegetation Surface Mask Filter component to the spawner entity and set it to include the "test" tag
spawner_entity.add_component("Vegetation Surface Mask Filter")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_AutoSnapToSurfaceWorks.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_AutoSnapToSurfaceWorks.py
index be7e8ad754..85a1cddb95 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_AutoSnapToSurfaceWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_AutoSnapToSurfaceWorks.py
@@ -64,8 +64,7 @@ def PositionModifier_AutoSnapToSurfaceWorks():
'Configuration|Position Z|Range Min', 'Configuration|Position Z|Range Max']
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -73,9 +72,10 @@ def PositionModifier_AutoSnapToSurfaceWorks():
# 2) Create a new entity with required vegetation area components and a Position Modifier
spawner_center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "PosMod_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0,
+ 16.0, pink_flower_prefab)
# Add a Vegetation Position Modifier and set offset values to 0
spawner_entity.add_component("Vegetation Position Modifier")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets.py
index 07d4fbd067..6be3dc31f7 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets.py
@@ -102,16 +102,17 @@ def PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets():
return offset_success and offset_success2
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(16.0, -5.0, 32.0)
# 2) Create a new entity with required vegetation area components
spawner_center_point = math.Vector3(16.0, 16.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 1.0, 1.0, 1.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "PosMod_PinkFlower2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point, 1.0, 1.0,
+ 1.0, pink_flower_prefab)
# Add a Vegetation Position Modifier and set offset values to 0
spawner_entity.add_component("Vegetation Position Modifier")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PrefabInstanceSpawner_Embedded_E2E.py
similarity index 86%
rename from AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
rename to AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PrefabInstanceSpawner_Embedded_E2E.py
index 86035bfbae..8ce865b5d2 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PrefabInstanceSpawner_Embedded_E2E.py
@@ -63,12 +63,14 @@ def DynamicSliceInstanceSpawner_Embedded_E2E():
import azlmbr.entity as entity
import azlmbr.math as math
import azlmbr.paths as paths
+ import azlmbr.vegetation as vegetation
import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
+
# 1) Create a new, temporary level
lvl_name = "tmp_level"
helper.init_idle()
@@ -79,13 +81,14 @@ def DynamicSliceInstanceSpawner_Embedded_E2E():
# 2) Create a new entity with required vegetation area components and Script Canvas component for launcher test
center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 1.0, asset_path)
+ pink_flower_prefab_path = os.path.join("assets", "prefabs", "PinkFlower.spawnable")
+ spawner_entity = dynveg.create_prefab_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 1.0,
+ pink_flower_prefab_path)
spawner_entity.add_component("Script Canvas")
instance_counter_path = os.path.join("scriptcanvas", "instance_counter.scriptcanvas")
instance_counter_script = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", instance_counter_path,
math.Uuid(), False)
- spawner_entity.get_set_test(3, "Script Canvas Asset|Script Canvas Asset", instance_counter_script)
+ spawner_entity.get_set_test(3, "Properties", instance_counter_script)
Report.result(Tests.spawner_entity_created, spawner_entity.id.IsValid() and hydra.has_components(spawner_entity.id,
["Script Canvas"]))
@@ -106,11 +109,11 @@ def DynamicSliceInstanceSpawner_Embedded_E2E():
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
+ # 6) Save the created level
general.save_level()
- general.export_to_engine()
- pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
- Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
+ level_prefab_path = os.path.join(paths.products, "levels", lvl_name, f"{lvl_name}.spawnable")
+ success = helper.wait_for_condition(lambda: os.path.exists(level_prefab_path), 5.0)
+ Report.result(Tests.saved_and_exported, success)
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PrefabInstanceSpawner_External_E2E.py
similarity index 95%
rename from AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
rename to AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PrefabInstanceSpawner_External_E2E.py
index 2353095849..a3e60f6337 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/PrefabInstanceSpawner_External_E2E.py
@@ -128,11 +128,11 @@ def DynamicSliceInstanceSpawner_External_E2E():
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
+ # 6) Save the created level
general.save_level()
- general.export_to_engine()
- pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
- Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
+ level_prefab_path = os.path.join(paths.products, "levels", lvl_name, f"{lvl_name}.spawnable")
+ success = helper.wait_for_condition(lambda: os.path.exists(level_prefab_path), 5.0)
+ Report.result(Tests.saved_and_exported, success)
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifierOverrides_InstancesRotateWithinRange.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifierOverrides_InstancesRotateWithinRange.py
index c1ea8e03d1..877a38c231 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifierOverrides_InstancesRotateWithinRange.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifierOverrides_InstancesRotateWithinRange.py
@@ -81,14 +81,15 @@ def RotationModifierOverrides_InstancesRotateWithinRange():
return result
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# 2) Create vegetation entity and add components
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Spawner Entity", entity_position, 16.0, 16.0, 16.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "RotMod_PinkFlower2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
spawner_entity.add_component("Vegetation Rotation Modifier")
# Our default vegetation settings places 20 instances per 16 meters, so we expect 20 * 20 total instances.
num_expected = 20 * 20
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifier_InstancesRotateWithinRange.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifier_InstancesRotateWithinRange.py
index 518c11a0cf..b0999f3195 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifier_InstancesRotateWithinRange.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/RotationModifier_InstancesRotateWithinRange.py
@@ -120,13 +120,14 @@ def RotationModifier_InstancesRotateWithinRange():
# Main Script
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# 2) Set up vegetation entities
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Spawner Entity", LEVEL_CENTER, 2.0, 2.0, 2.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "RotMod_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", LEVEL_CENTER, 2.0, 2.0, 2.0,
+ pink_flower_prefab)
additional_components = [
"Vegetation Rotation Modifier"
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifierOverrides_InstancesProperlyScale.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifierOverrides_InstancesProperlyScale.py
index b2ce6d8afa..42b042e26e 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifierOverrides_InstancesProperlyScale.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifierOverrides_InstancesProperlyScale.py
@@ -91,16 +91,17 @@ def ScaleModifierOverrides_InstancesProperlyScale():
return False
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(500.49, 498.69, 46.66)
general.set_current_view_rotation(-42.05, 0.00, -36.33)
# 2) Create a new entity with components "Vegetation Layer Spawner", "Vegetation Asset List", "Box Shape"
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Spawner Entity", entity_position, 16.0, 16.0, 10.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "ScaleMod_PinkFlower2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
# Create a surface to plant on and add a Vegetation Debugger Level component to allow refreshes
dynveg.create_surface_entity("Surface Entity", entity_position, 20.0, 20.0, 1.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifier_InstancesProperlyScale.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifier_InstancesProperlyScale.py
index fd0df1c83d..8008224e3e 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifier_InstancesProperlyScale.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ScaleModifier_InstancesProperlyScale.py
@@ -84,8 +84,7 @@ def ScaleModifier_InstancesProperlyScale():
return False
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(500.49, 498.69, 46.66)
general.set_current_view_rotation(-42.05, 0.00, -36.33)
@@ -93,9 +92,10 @@ def ScaleModifier_InstancesProperlyScale():
# 2) Create a new entity with components Vegetation Layer Spawner, Vegetation Asset List, Box Shape and
# Vegetation Scale Modifier
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Spawner Entity", entity_position, 16.0, 16.0, 16.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "ScaleMod_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
spawner_entity.add_component("Vegetation Scale Modifier")
# Create a surface to plant on and add a Vegetation Debugger Level component to allow refreshes
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py
index 8f179f7f50..5436855433 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py
@@ -49,15 +49,16 @@ def ShapeIntersectionFilter_FilterStageToggle():
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create basic vegetation entity
position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- vegetation = dynveg.create_dynamic_slice_vegetation_area("vegetation", position, 16.0, 16.0, 16.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "ShapeIntersection_PinkFlower")[0]
+ vegetation = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", position, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
# Create Surface for instances to plant on
dynveg.create_surface_entity("Surface_Entity_Parent", position, 16.0, 16.0, 1.0)
@@ -68,7 +69,7 @@ def ShapeIntersectionFilter_FilterStageToggle():
# Create a new entity as a child of the vegetation area entity with Box Shape
box = hydra.Entity("box")
box.create_entity(position, ["Box Shape"])
- box.get_set_test(0, "Box Shape|Box Configuration|Dimensions", math.Vector3(8.0, 8.0, 1.0))
+ box.get_set_test(0, "Box Shape|Box Configuration|Dimensions", math.Vector3(5.0, 5.0, 1.0))
# Create a new entity as a child of the vegetation area entity with Cylinder Shape.
cylinder = hydra.Entity("cylinder")
@@ -80,10 +81,10 @@ def ShapeIntersectionFilter_FilterStageToggle():
# On the Shape Intersection Filter component, click the crosshair button, and add child entities one by one
vegetation.get_set_test(3, "Configuration|Shape Entity Id", box.id)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 8.0, 100), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 49), 2.0)
Report.result(Tests.instance_count_in_box_shape, result)
vegetation.get_set_test(3, "Configuration|Shape Entity Id", cylinder.id)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 100), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 121), 2.0)
Report.result(Tests.instance_count_in_cylinder_shape, result)
# Create a new entity as a child of the area entity with Random Noise Gradient, Gradient Transform Modifier,
@@ -98,12 +99,13 @@ def ShapeIntersectionFilter_FilterStageToggle():
# Pin the Random Noise entity to the Gradient Entity Id field of the Position Modifier's Gradient X
vegetation.get_set_test(4, "Configuration|Position X|Gradient|Gradient Entity Id", random_noise.id)
- # Toggle between PreProcess and PostProcess
+ # Toggle between PreProcess and PostProcess and validate instances. Validate in a 0.3m wider radius due to position
+ # offsets
vegetation.get_set_test(3, "Configuration|Filter Stage", 1)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 117), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.3, 121), 2.0)
Report.result(Tests.preprocess_instance_count, result)
vegetation.get_set_test(3, "Configuration|Filter Stage", 2)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 122), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.3, 122), 2.0)
Report.result(Tests.postprocess_instance_count, result)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_InstancesPlantInAssignedShape.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_InstancesPlantInAssignedShape.py
index 6678a620af..e9e4c722f1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_InstancesPlantInAssignedShape.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_InstancesPlantInAssignedShape.py
@@ -60,8 +60,7 @@ def ShapeIntersectionFilter_InstancesPlantInAssignedShape():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -69,9 +68,10 @@ def ShapeIntersectionFilter_InstancesPlantInAssignedShape():
# 2) Create a new entity with required vegetation area components and Vegetation Shape Intersection Filter
center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 1.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "ShapeIntersection_PinkFlower2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 1.0,
+ pink_flower_prefab)
spawner_entity.add_component("Vegetation Shape Intersection Filter")
# Create a planting surface
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment.py
index c9233d15ea..07dbb3f977 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment.py
@@ -58,15 +58,16 @@ def SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment():
return False
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create a spawner entity setup with all needed components
center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 32.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SlopeAlign_PinkFlower2")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 32.0,
+ pink_flower_prefab)
# Create a sloped mesh surface for the instances to plant on
center_point = math.Vector3(502.0, 512.0, 24.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifier_InstanceSurfaceAlignment.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifier_InstanceSurfaceAlignment.py
index d92babffa4..088728480b 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifier_InstanceSurfaceAlignment.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeAlignmentModifier_InstanceSurfaceAlignment.py
@@ -59,15 +59,16 @@ def SlopeAlignmentModifier_InstanceSurfaceAlignment():
return False
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create a spawner entity setup with all needed components
center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 32.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SlopeAlign_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", center_point, 16.0, 16.0, 32.0,
+ pink_flower_prefab)
# Create a sloped mesh surface for the instances to plant on
center_point = math.Vector3(502.0, 512.0, 24.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope.py
index 0f95853156..cc04dc4cb1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope.py
@@ -63,16 +63,17 @@ def SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlopes():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 475.0, 38.0)
# 2) Create a new entity with required vegetation area components
center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", center_point, 32.0, 32.0, 32.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "Slope_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", center_point, 32.0, 32.0, 32.0,
+ pink_flower_prefab)
# Add a Vegetation Slope Filter
spawner_entity.add_component("Vegetation Slope Filter")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerPrefabs_PrefabCreationAndVisibilityToggleWorks.py
similarity index 52%
rename from AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py
rename to AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerPrefabs_PrefabCreationAndVisibilityToggleWorks.py
index c36d1b5bc9..182bd5510a 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerPrefabs_PrefabCreationAndVisibilityToggleWorks.py
@@ -7,21 +7,21 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
class Tests:
- spawner_slice_created = (
- "Spawner slice created successfully",
- "Failed to create Spawner slice"
+ spawner_prefab_created = (
+ "Spawner prefab created successfully",
+ "Failed to create Spawner prefab"
)
instance_count_unhidden = (
"Initial instance counts are as expected",
"Found an unexpected number of initial instances"
)
instance_count_hidden = (
- "Instance counts upon hiding the Spawner slice are as expected",
- "Unexpectedly found instances with the Spawner slice hidden"
+ "Instance counts upon hiding the Spawner prefab are as expected",
+ "Unexpectedly found instances with the Spawner prefab hidden"
)
- blender_slice_created = (
- "Blender slice created successfully",
- "Failed to create Blender slice"
+ blender_prefab_created = (
+ "Blender prefab created successfully",
+ "Failed to create Blender prefab"
)
@@ -43,81 +43,76 @@ def SpawnerSlices_SliceCreationAndVisibilityToggleWorks():
import azlmbr.math as math
import azlmbr.legacy.general as general
- import azlmbr.slice as slice
import azlmbr.bus as bus
import azlmbr.editor as editor
- import azlmbr.asset as asset
import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
+ from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
-
- def path_is_valid_asset(asset_path):
- asset_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", asset_path, math.Uuid(), False)
- return asset_id.invoke("IsValid")
+ from editor_python_test_tools.prefab_utils import Prefab
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
- # 2) C2627900 Verifies if a slice containing the Vegetation Layer Spawner component can be created.
+ # 2) Verifies if a prefab containing the Vegetation Layer Spawner component can be created.
# 2.1) Create basic vegetation entity
position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- veg_1 = dynveg.create_dynamic_slice_vegetation_area("vegetation_1", position, 16.0, 16.0, 16.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SpawnerPrefab_PinkFlower")[0]
+ veg_1 = dynveg.create_temp_prefab_vegetation_area("vegetation_1", position, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
- # 2.2) Create slice from the entity
- slice_path = os.path.join("slices", "TestSlice_1.slice")
- slice.SliceRequestBus(bus.Broadcast, "CreateNewSlice", veg_1.id, slice_path)
+ # 2.2) Create prefab from the entity
+ spawner_prefab_filename = "TestPrefab_1"
+ spawner_prefab, spawner_prefab_instance = Prefab.create_prefab([veg_1], spawner_prefab_filename)
- # 2.3) Verify if the slice has been created successfully
- spawner_slice_success = helper.wait_for_condition(lambda: path_is_valid_asset(slice_path), 5.0)
- Report.result(Tests.spawner_slice_created, spawner_slice_success)
+ # Verify if prefab is created
+ Report.result(Tests.spawner_prefab_created, spawner_prefab.is_prefab_loaded(spawner_prefab_filename))
- # 3) C2627904: Hiding a slice containing the component clears any visuals from the Viewport
+ # 3) Hiding a prefab containing the component clears any visuals from the Viewport
# 3.1) Create Surface for instances to plant on
dynveg.create_surface_entity("Surface_Entity", position, 16.0, 16.0, 1.0)
- # 3.2) Initially verify instance count before hiding slice
+ # 3.2) Initially verify instance count before hiding prefab
initial_count_success = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 16.0, 400), 5.0)
Report.result(Tests.instance_count_unhidden, initial_count_success)
- # 3.3) Hide the slice and verify instance count
- editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", veg_1.id, False)
+ # 3.3) Hide the prefab and verify instance count
+ editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", spawner_prefab_instance.container_entity.id, False)
hidden_instance_count = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 16.0, 0), 5.0)
Report.result(Tests.instance_count_hidden, hidden_instance_count)
# 3.4) Unhide the slice
- editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", veg_1.id, True)
+ editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", spawner_prefab_instance.container_entity.id, True)
- # 4) C2627905 A slice containing the Vegetation Layer Blender component can be created.
+ # 4) A slice containing the Vegetation Layer Blender component can be created.
# 4.1) Create another vegetation entity to add to blender component
- veg_2 = dynveg.create_dynamic_slice_vegetation_area("vegetation_2", position, 1.0, 1.0, 1.0, "")
+ veg_2 = dynveg.create_empty_vegetation_area("vegetation_2", position, 1.0, 1.0, 1.0)
# 4.2) Create entity with Vegetation Layer Blender
components_to_add = ["Box Shape", "Vegetation Layer Blender"]
- blender_entity = hydra.Entity("blender_entity")
- blender_entity.create_entity(position, components_to_add)
+ blender_entity = EditorEntity.create_editor_entity("blender_entity")
+ blender_entity.add_components(components_to_add)
# 4.3) Pin both the vegetation areas to the blender entity
- pte = hydra.get_property_tree(blender_entity.components[1])
+ pte = blender_entity.components[1].get_property_tree()
path = "Configuration|Vegetation Areas"
pte.update_container_item(path, 0, veg_1.id)
pte.add_container_item(path, 1, veg_2.id)
# 4.4) Drag the simple vegetation areas under the Vegetation Layer Blender entity to create an entity hierarchy.
veg_1.set_test_parent_entity(blender_entity)
- veg_2.set_test_parent_entity(blender_entity)
+ veg_2.set_parent_entity(blender_entity.id)
- # 4.5) Create slice from blender entity
- slice_path = os.path.join("slices", "TestSlice_2.slice")
- slice.SliceRequestBus(bus.Broadcast, "CreateNewSlice", blender_entity.id, slice_path)
+ # 4.5) Create prefab from blender entity
+ blender_prefab_filename = "TestPrefab_2"
+ blender_prefab, blender_prefab_instance = Prefab.create_prefab([veg_2], blender_prefab_filename)
- # 4.6) Verify if the slice has been created successfully
- blender_slice_success = helper.wait_for_condition(lambda: path_is_valid_asset(slice_path), 5.0)
- Report.result(Tests.blender_slice_created, blender_slice_success)
+ # 4.6) Verify if the prefab has been created successfully
+ Report.result(Tests.blender_prefab_created, blender_prefab.is_prefab_loaded(blender_prefab_filename))
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceDataRefreshes_RemainsStable.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceDataRefreshes_RemainsStable.py
index 1ad4f305c3..3612e03bcc 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceDataRefreshes_RemainsStable.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceDataRefreshes_RemainsStable.py
@@ -34,13 +34,12 @@ def SurfaceDataRefreshes_RemainsStable():
import azlmbr.legacy.general as general
import azlmbr.math as math
+ import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
world_center = math.Vector3(512.0, 512.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected.py
index 3e76a03c53..b98b0f0546 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected.py
@@ -67,8 +67,7 @@ def SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected():
surface_data.SurfaceTag("test_tag3")]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Set view of planting area for visual debugging
general.set_current_view_position(512.0, 500.0, 38.0)
@@ -76,9 +75,10 @@ def SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected():
# 2) Create a new instance spawner entity with multiple Dynamic Slice Instance Spawner descriptors
spawner_center_point = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0, 16.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SurfaceMaskOverrides_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", spawner_center_point, 16.0, 16.0,
+ 16.0, pink_flower_prefab)
asset_list_component = spawner_entity.components[2]
desc_asset = hydra.get_component_property_value(asset_list_component,
"Configuration|Embedded Assets")[0]
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_BasicSurfaceTagCreation.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_BasicSurfaceTagCreation.py
index fee62c04d1..fe17b03c6f 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_BasicSurfaceTagCreation.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_BasicSurfaceTagCreation.py
@@ -39,12 +39,12 @@ def SurfaceMaskFilter_BasicSurfaceTagCreation():
"""
import azlmbr.surface_data as surface_data
+
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
tag1 = surface_data.SurfaceTag()
tag2 = surface_data.SurfaceTag()
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_ExclusionList.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_ExclusionList.py
index 3f298e793e..f5174af3bb 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_ExclusionList.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_ExclusionList.py
@@ -91,18 +91,16 @@ def SurfaceMaskFilter_ExclusionList():
Report.info(f"Failed to add Generated surface tag of {surface_tag}")
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# 2) Create entity with components "Vegetation Layer Spawner", "Vegetation Asset List", "Box Shape"
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner",
- entity_position,
- 10.0, 10.0, 10.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SurfaceMaskTagExclusion_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 10.0, 10.0, 10.0,
+ pink_flower_prefab)
# 3) Add a Vegetation Surface Mask Filter component to the entity.
spawner_entity.add_component("Vegetation Surface Mask Filter")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_InclusionList.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_InclusionList.py
index 39b72ff4a9..34d22d3d9b 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_InclusionList.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SurfaceMaskFilter_InclusionList.py
@@ -92,18 +92,16 @@ def SurfaceMaskFilter_InclusionList():
Report.info(f"Failed to add Generated surface tag of {surface_tag}")
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# 2) Create entity with components "Vegetation Layer Spawner", "Vegetation Asset List", "Box Shape"
entity_position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Instance Spawner",
- entity_position,
- 10.0, 10.0, 10.0,
- asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SurfaceMaskTagInclusion_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", entity_position, 10.0, 10.0, 10.0,
+ pink_flower_prefab)
# 3) Add a Vegetation Surface Mask Filter component to the entity.
spawner_entity.add_component("Vegetation Surface Mask Filter")
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorPointDensity.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorPointDensity.py
index 167fb8901c..7516bfb31d 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorPointDensity.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorPointDensity.py
@@ -47,15 +47,16 @@ def SystemSettings_SectorPointDensity():
INSTANCE_COUNT_AFTER_DENSITY_CHANGE = 100
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create basic vegetation entity
position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- dynveg.create_dynamic_slice_vegetation_area("vegetation", position, 16.0, 16.0, 1.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SectorPoint_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", position, 16.0, 16.0, 1.0,
+ pink_flower_prefab)
dynveg.create_surface_entity("Surface_Entity", position, 16.0, 16.0, 1.0)
# Count the number of vegetation instances in the vegetation area
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorSize.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorSize.py
index 7bb78ac3e0..ef7959a3e7 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorSize.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SystemSettings_SectorSize.py
@@ -43,15 +43,16 @@ def SystemSettings_SectorSize():
VEGETATION_INSTANCE_COUNT = 400
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
general.set_current_view_position(512.0, 480.0, 38.0)
# Create basic vegetation entity
position = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PinkFlower.dynamicslice")
- vegetation = dynveg.create_dynamic_slice_vegetation_area("vegetation", position, 16.0, 16.0, 1.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "SectorSize_PinkFlower")[0]
+ vegetation = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", position, 16.0, 16.0, 1.0,
+ pink_flower_prefab)
dynveg.create_surface_entity("Surface_Entity", position, 16.0, 16.0, 1.0)
# Add the Vegetation Debugger component to the Level Inspector
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/VegetationInstances_DespawnWhenOutOfRange.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/VegetationInstances_DespawnWhenOutOfRange.py
index 8a6c4d9a17..b6069d1ef5 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/VegetationInstances_DespawnWhenOutOfRange.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/VegetationInstances_DespawnWhenOutOfRange.py
@@ -43,18 +43,20 @@ def VegetationInstances_DespawnWhenOutOfRange():
import azlmbr.legacy.general as general
import azlmbr.math as math
+ import editor_python_test_tools.hydra_editor_utils as hydra
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Create vegetation layer spawner
world_center = math.Vector3(512.0, 512.0, 32.0)
- asset_path = os.path.join("Slices", "PurpleFlower.dynamicslice")
- spawner_entity = dynveg.create_dynamic_slice_vegetation_area("Spawner Instance", world_center, 16.0, 16.0, 16.0, asset_path)
+ pink_flower_asset_path = os.path.join("assets", "objects", "foliage", "grass_flower_pink.azmodel")
+ pink_flower_prefab = dynveg.create_temp_mesh_prefab(pink_flower_asset_path, "RangeDespawn_PinkFlower")[0]
+ spawner_entity = dynveg.create_temp_prefab_vegetation_area("Instance Spawner", world_center, 16.0, 16.0, 16.0,
+ pink_flower_prefab)
# Create a surface to spawn on
dynveg.create_surface_entity("Spawner Entity", world_center, 16.0, 16.0, 1.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main.py
index 06c9c5f615..d508e390cb 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main.py
@@ -7,21 +7,171 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import os
import pytest
-import sys
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../automatedtesting_shared')
-from base import TestAutomationBase
+import ly_test_tools.environment.file_system as file_system
+from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
@pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
+class TestAutomation(EditorTestSuite):
- def test_DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks(self, request, workspace, editor, launcher_platform):
+ # Helpers for test asset cleanup
+ def cleanup_test_level(self, workspace):
+ file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
+ True, True)
+
+ class test_AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude(EditorSharedTest):
+ from .EditorScripts import AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude as test_module
+
+ class test_AltitudeFilter_FilterStageToggle(EditorSharedTest):
+ from .EditorScripts import AltitudeFilter_FilterStageToggle as test_module
+
+ class test_AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude(EditorSharedTest):
+ from .EditorScripts import AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude as test_module
+
+ class test_AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea(EditorSharedTest):
+ from .EditorScripts import AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea as test_module
+
+ class test_AssetWeightSelector_InstancesExpressBasedOnWeight(EditorSharedTest):
+ from .EditorScripts import AssetWeightSelector_InstancesExpressBasedOnWeight as test_module
+
+ @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/4155")
+ class test_DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius(EditorSharedTest):
+ from .EditorScripts import DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius as test_module
+
+ @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/4155")
+ class test_DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius(EditorSharedTest):
+ from .EditorScripts import DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius as test_module
+
+ class test_DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks(EditorSharedTest):
from .EditorScripts import DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_EmptyInstanceSpawner_EmptySpawnerWorks(self, request, workspace, editor, launcher_platform):
+ class test_EmptyInstanceSpawner_EmptySpawnerWorks(EditorSharedTest):
from .EditorScripts import EmptyInstanceSpawner_EmptySpawnerWorks as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
+
+ class test_InstanceSpawnerPriority_LayerAndSubPriority_HigherValuesPlantOverLower(EditorSharedTest):
+ from .EditorScripts import InstanceSpawnerPriority_LayerAndSubPriority as test_module
+
+ class test_LayerBlender_E2E_Editor(EditorSingleTest):
+ from .EditorScripts import LayerBlender_E2E_Editor as test_module
+
+ # Custom setup/teardown to remove test level created during test
+ def setup(self, request, workspace, editor, editor_test_results, launcher_platform):
+ TestAutomation.cleanup_test_level(self, workspace)
+
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ TestAutomation.cleanup_test_level(self, workspace)
+
+ class test_LayerBlocker_InstancesBlockedInConfiguredArea(EditorSharedTest):
+ from .EditorScripts import LayerBlocker_InstancesBlockedInConfiguredArea as test_module
+
+ class test_LayerSpawner_FilterStageToggle(EditorSharedTest):
+ from .EditorScripts import LayerSpawner_FilterStageToggle as test_module
+
+ class test_LayerSpawner_InheritBehaviorFlag(EditorSharedTest):
+ from .EditorScripts import LayerSpawner_InheritBehaviorFlag as test_module
+
+ class test_LayerSpawner_InstancesPlantInAllSupportedShapes(EditorSharedTest):
+ from .EditorScripts import LayerSpawner_InstancesPlantInAllSupportedShapes as test_module
+
+ @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/6549")
+ class test_LayerSpawner_InstancesRefreshUsingCorrectViewportCamera(EditorSharedTest):
+ from .EditorScripts import LayerSpawner_InstancesRefreshUsingCorrectViewportCamera as test_module
+
+ class test_MeshBlocker_InstancesBlockedByMesh(EditorSharedTest):
+ from .EditorScripts import MeshBlocker_InstancesBlockedByMesh as test_module
+
+ class test_MeshBlocker_InstancesBlockedByMeshHeightTuning(EditorSharedTest):
+ from .EditorScripts import MeshBlocker_InstancesBlockedByMeshHeightTuning as test_module
+
+ class test_MeshSurfaceTagEmitter_DependentOnMeshComponent(EditorSharedTest):
+ from .EditorScripts import MeshSurfaceTagEmitter_DependentOnMeshComponent as test_module
+
+ class test_MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully(EditorSharedTest):
+ from .EditorScripts import MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully as test_module
+
+ class test_PhysXColliderSurfaceTagEmitter_E2E_Editor(EditorSharedTest):
+ from .EditorScripts import PhysXColliderSurfaceTagEmitter_E2E_Editor as test_module
+
+ class test_PositionModifier_AutoSnapToSurfaceWorks(EditorSharedTest):
+ from .EditorScripts import PositionModifier_AutoSnapToSurfaceWorks as test_module
+
+ class test_PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets(EditorSharedTest):
+ from .EditorScripts import \
+ PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets as test_module
+
+ class test_PrefabInstanceSpawner_Embedded_E2E_Editor(EditorSingleTest):
+ from .EditorScripts import PrefabInstanceSpawner_Embedded_E2E as test_module
+
+ # Custom setup/teardown to remove test level created during test
+ def setup(self, request, workspace, editor, editor_test_results, launcher_platform):
+ TestAutomation.cleanup_test_level(self, workspace)
+
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ TestAutomation.cleanup_test_level(self, workspace)
+
+ class test_PrefabInstanceSpawner_External_E2E_Editor(EditorSingleTest):
+ from .EditorScripts import PrefabInstanceSpawner_External_E2E as test_module
+
+ # Custom setup/teardown to remove test level created during test
+ def setup(self, request, workspace, editor, editor_test_results, launcher_platform):
+ TestAutomation.cleanup_test_level(self, workspace)
+
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ TestAutomation.cleanup_test_level(self, workspace)
+
+ class test_RotationModifier_InstancesRotateWithinRange(EditorSharedTest):
+ from .EditorScripts import RotationModifier_InstancesRotateWithinRange as test_module
+
+ class test_RotationModifierOverrides_InstancesRotateWithinRange(EditorSharedTest):
+ from .EditorScripts import RotationModifierOverrides_InstancesRotateWithinRange as test_module
+
+ class test_ScaleModifier_InstancesProperlyScale(EditorSharedTest):
+ from .EditorScripts import ScaleModifier_InstancesProperlyScale as test_module
+
+ class test_ScaleModifierOverrides_InstancesProperlyScale(EditorSharedTest):
+ from .EditorScripts import ScaleModifierOverrides_InstancesProperlyScale as test_module
+
+ class test_ShapeIntersectionFilter_FilterStageToggle(EditorSharedTest):
+ from .EditorScripts import ShapeIntersectionFilter_FilterStageToggle as test_module
+
+ class test_ShapeIntersectionFilter_InstancesPlantInAssignedShape(EditorSharedTest):
+ from .EditorScripts import ShapeIntersectionFilter_InstancesPlantInAssignedShape as test_module
+
+ class test_SlopeAlignmentModifier_InstanceSurfaceAlignment(EditorSharedTest):
+ from .EditorScripts import SlopeAlignmentModifier_InstanceSurfaceAlignment as test_module
+
+ class test_SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment(EditorSharedTest):
+ from .EditorScripts import SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment as test_module
+
+ class test_SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlopes(EditorSharedTest):
+ from .EditorScripts import SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope as test_module
+
+ class test_SpawnerPrefabs_PrefabCreationAndVisibilityToggleWorks(EditorSharedTest):
+ from .EditorScripts import SpawnerPrefabs_PrefabCreationAndVisibilityToggleWorks as test_module
+
+ class test_SurfaceDataRefreshes_RemainsStable(EditorSharedTest):
+ from .EditorScripts import SurfaceDataRefreshes_RemainsStable as test_module
+
+ class test_SurfaceMaskFilter_BasicSurfaceTagCreation(EditorSharedTest):
+ from .EditorScripts import SurfaceMaskFilter_BasicSurfaceTagCreation as test_module
+
+ class test_SurfaceMaskFilter_ExclusiveSurfaceTags_Function(EditorSharedTest):
+ from .EditorScripts import SurfaceMaskFilter_ExclusionList as test_module
+
+ class test_SurfaceMaskFilter_InclusiveSurfaceTags_Function(EditorSharedTest):
+ from .EditorScripts import SurfaceMaskFilter_InclusionList as test_module
+
+ class test_SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected(EditorSharedTest):
+ from .EditorScripts import SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected as test_module
+
+ class test_SystemSettings_SectorPointDensity(EditorSharedTest):
+ from .EditorScripts import SystemSettings_SectorPointDensity as test_module
+
+ class test_SystemSettings_SectorSize(EditorSharedTest):
+ from .EditorScripts import SystemSettings_SectorSize as test_module
+
+ class test_VegetationInstances_DespawnWhenOutOfRange(EditorSharedTest):
+ from .EditorScripts import VegetationInstances_DespawnWhenOutOfRange as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main_Optimized.py
deleted file mode 100644
index 5b1e504442..0000000000
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Main_Optimized.py
+++ /dev/null
@@ -1,192 +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
-"""
-
-import os
-import pytest
-
-import ly_test_tools.environment.file_system as file_system
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(EditorTestSuite):
- class test_AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude(EditorParallelTest):
- from .EditorScripts import AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude as test_module
-
- class test_AltitudeFilter_FilterStageToggle(EditorParallelTest):
- from .EditorScripts import AltitudeFilter_FilterStageToggle as test_module
-
- class test_AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude(EditorParallelTest):
- from .EditorScripts import AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude as test_module
-
-
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation_PrefabNotEnabled(EditorTestSuite):
-
- enable_prefab_system = False
-
- # Helpers for test asset cleanup
- def cleanup_test_level(self, workspace):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
- True, True)
-
- def cleanup_test_slices(self, workspace):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "slices",
- "TestSlice_1.slice")], True, True)
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "slices",
- "TestSlice_2.slice")], True, True)
-
- class test_DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks(EditorParallelTest):
- from .EditorScripts import DynamicSliceInstanceSpawner_DynamicSliceSpawnerWorks as test_module
-
- class test_EmptyInstanceSpawner_EmptySpawnerWorks(EditorParallelTest):
- from .EditorScripts import EmptyInstanceSpawner_EmptySpawnerWorks as test_module
-
- class test_SpawnerSlices_SliceCreationAndVisibilityToggleWorks(EditorSingleTest):
- # Custom teardown to remove slice asset created during test
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_slices(self, workspace)
- from .EditorScripts import SpawnerSlices_SliceCreationAndVisibilityToggleWorks as test_module
-
- class test_AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea(EditorParallelTest):
- from .EditorScripts import AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea as test_module
-
- class test_AssetWeightSelector_InstancesExpressBasedOnWeight(EditorParallelTest):
- from .EditorScripts import AssetWeightSelector_InstancesExpressBasedOnWeight as test_module
-
- @pytest.mark.skip(reason="https://github.com/o3de/o3de/issues/4155")
- class test_DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius(EditorParallelTest):
- from .EditorScripts import DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius as test_module
-
- @pytest.mark.skip(reason="https://github.com/o3de/o3de/issues/4155")
- class test_DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius(EditorParallelTest):
- from .EditorScripts import DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius as test_module
-
- class test_SurfaceDataRefreshes_RemainsStable(EditorParallelTest):
- from .EditorScripts import SurfaceDataRefreshes_RemainsStable as test_module
-
- class test_VegetationInstances_DespawnWhenOutOfRange(EditorParallelTest):
- from .EditorScripts import VegetationInstances_DespawnWhenOutOfRange as test_module
-
- class test_InstanceSpawnerPriority_LayerAndSubPriority_HigherValuesPlantOverLower(EditorParallelTest):
- from .EditorScripts import InstanceSpawnerPriority_LayerAndSubPriority as test_module
-
- class test_LayerBlocker_InstancesBlockedInConfiguredArea(EditorParallelTest):
- from .EditorScripts import LayerBlocker_InstancesBlockedInConfiguredArea as test_module
-
- class test_LayerSpawner_InheritBehaviorFlag(EditorParallelTest):
- from .EditorScripts import LayerSpawner_InheritBehaviorFlag as test_module
-
- class test_LayerSpawner_InstancesPlantInAllSupportedShapes(EditorParallelTest):
- from .EditorScripts import LayerSpawner_InstancesPlantInAllSupportedShapes as test_module
-
- class test_LayerSpawner_FilterStageToggle(EditorParallelTest):
- from .EditorScripts import LayerSpawner_FilterStageToggle as test_module
-
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/2038")
- class test_LayerSpawner_InstancesRefreshUsingCorrectViewportCamera(EditorParallelTest):
- from .EditorScripts import LayerSpawner_InstancesRefreshUsingCorrectViewportCamera as test_module
-
- class test_MeshBlocker_InstancesBlockedByMesh(EditorParallelTest):
- from .EditorScripts import MeshBlocker_InstancesBlockedByMesh as test_module
-
- class test_MeshBlocker_InstancesBlockedByMeshHeightTuning(EditorParallelTest):
- from .EditorScripts import MeshBlocker_InstancesBlockedByMeshHeightTuning as test_module
-
- class test_MeshSurfaceTagEmitter_DependentOnMeshComponent(EditorParallelTest):
- from .EditorScripts import MeshSurfaceTagEmitter_DependentOnMeshComponent as test_module
-
- class test_MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully(EditorParallelTest):
- from .EditorScripts import MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully as test_module
-
- class test_PhysXColliderSurfaceTagEmitter_E2E_Editor(EditorParallelTest):
- from .EditorScripts import PhysXColliderSurfaceTagEmitter_E2E_Editor as test_module
-
- class test_PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets(EditorParallelTest):
- from .EditorScripts import PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets as test_module
-
- class test_PositionModifier_AutoSnapToSurfaceWorks(EditorParallelTest):
- from .EditorScripts import PositionModifier_AutoSnapToSurfaceWorks as test_module
-
- class test_RotationModifier_InstancesRotateWithinRange(EditorParallelTest):
- from .EditorScripts import RotationModifier_InstancesRotateWithinRange as test_module
-
- class test_RotationModifierOverrides_InstancesRotateWithinRange(EditorParallelTest):
- from .EditorScripts import RotationModifierOverrides_InstancesRotateWithinRange as test_module
-
- class test_ScaleModifier_InstancesProperlyScale(EditorParallelTest):
- from .EditorScripts import ScaleModifier_InstancesProperlyScale as test_module
-
- class test_ScaleModifierOverrides_InstancesProperlyScale(EditorParallelTest):
- from .EditorScripts import ScaleModifierOverrides_InstancesProperlyScale as test_module
-
- class test_ShapeIntersectionFilter_InstancesPlantInAssignedShape(EditorParallelTest):
- from .EditorScripts import ShapeIntersectionFilter_InstancesPlantInAssignedShape as test_module
-
- class test_ShapeIntersectionFilter_FilterStageToggle(EditorParallelTest):
- from .EditorScripts import ShapeIntersectionFilter_FilterStageToggle as test_module
-
- class test_SlopeAlignmentModifier_InstanceSurfaceAlignment(EditorParallelTest):
- from .EditorScripts import SlopeAlignmentModifier_InstanceSurfaceAlignment as test_module
-
- class test_SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment(EditorParallelTest):
- from .EditorScripts import SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment as test_module
-
- class test_SurfaceMaskFilter_BasicSurfaceTagCreation(EditorParallelTest):
- from .EditorScripts import SurfaceMaskFilter_BasicSurfaceTagCreation as test_module
-
- class test_SurfaceMaskFilter_ExclusiveSurfaceTags_Function(EditorParallelTest):
- from .EditorScripts import SurfaceMaskFilter_ExclusionList as test_module
-
- class test_SurfaceMaskFilter_InclusiveSurfaceTags_Function(EditorParallelTest):
- from .EditorScripts import SurfaceMaskFilter_InclusionList as test_module
-
- class test_SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected(EditorParallelTest):
- from .EditorScripts import SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected as test_module
-
- class test_SystemSettings_SectorPointDensity(EditorParallelTest):
- from .EditorScripts import SystemSettings_SectorPointDensity as test_module
-
- class test_SystemSettings_SectorSize(EditorParallelTest):
- from .EditorScripts import SystemSettings_SectorSize as test_module
-
- class test_SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlopes(EditorParallelTest):
- from .EditorScripts import SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope as test_module
-
- class test_DynamicSliceInstanceSpawner_Embedded_E2E_Editor(EditorSingleTest):
- from .EditorScripts import DynamicSliceInstanceSpawner_Embedded_E2E as test_module
-
- # Custom setup/teardown to remove test level created during test
- def setup(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_level(self, workspace)
-
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_level(self, workspace)
-
- class test_DynamicSliceInstanceSpawner_External_E2E_Editor(EditorSingleTest):
- from .EditorScripts import DynamicSliceInstanceSpawner_External_E2E as test_module
-
- # Custom setup/teardown to remove test level created during test
- def setup(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_level(self, workspace)
-
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_level(self, workspace)
-
- class test_LayerBlender_E2E_Editor(EditorSingleTest):
- from .EditorScripts import LayerBlender_E2E_Editor as test_module
-
- # Custom setup/teardown to remove test level created during test
- def setup(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_level(self, workspace)
-
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- TestAutomation_PrefabNotEnabled.cleanup_test_level(self, workspace)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic.py
index 64f6cfdf30..bf7e76f973 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic.py
@@ -7,277 +7,17 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import os
import pytest
-import sys
-import ly_test_tools.environment.waiter as waiter
import ly_test_tools.environment.file_system as file_system
-import editor_python_test_tools.hydra_test_utils as hydra
-from ly_remote_console.remote_console_commands import RemoteConsole as RemoteConsole
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.fixture
-def remove_test_slice(request, workspace, project):
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "slices", "TestSlice_1.slice")], True,
- True)
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "slices", "TestSlice_2.slice")], True,
- True)
-
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "slices", "TestSlice_1.slice")], True,
- True)
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "slices", "TestSlice_2.slice")], True,
- True)
- request.addfinalizer(teardown)
-
-
-@pytest.fixture
-def remote_console_instance(request):
- console = RemoteConsole()
-
- def teardown():
- if console.connected:
- console.stop()
-
- request.addfinalizer(teardown)
- return console
+from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
@pytest.mark.SUITE_periodic
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
+class TestAutomation(EditorTestSuite):
- def test_AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AltitudeFilter_ComponentAndOverrides_InstancesPlantAtSpecifiedAltitude as test_module
- self._run_test(request, workspace, editor, test_module)
+ global_extra_cmdline_args = ["-BatchMode", "-autotest_mode"]
- def test_AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AltitudeFilter_ShapeSample_InstancesPlantAtSpecifiedAltitude as test_module
- self._run_test(request, workspace, editor, test_module)
-
- def test_AltitudeFilter_FilterStageToggle(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AltitudeFilter_FilterStageToggle as test_module
- self._run_test(request, workspace, editor, test_module)
-
- def test_SpawnerSlices_SliceCreationAndVisibilityToggleWorks(self, request, workspace, editor, remove_test_slice, launcher_platform):
- from .EditorScripts import SpawnerSlices_SliceCreationAndVisibilityToggleWorks as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetListCombiner_CombinedDescriptorsExpressInConfiguredArea as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_AssetWeightSelector_InstancesExpressBasedOnWeight(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetWeightSelector_InstancesExpressBasedOnWeight as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/4155")
- def test_DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/4155")
- def test_DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SurfaceDataRefreshes_RemainsStable(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SurfaceDataRefreshes_RemainsStable as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_VegetationInstances_DespawnWhenOutOfRange(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import VegetationInstances_DespawnWhenOutOfRange as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_InstanceSpawnerPriority_LayerAndSubPriority_HigherValuesPlantOverLower(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import InstanceSpawnerPriority_LayerAndSubPriority as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LayerBlocker_InstancesBlockedInConfiguredArea(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerBlocker_InstancesBlockedInConfiguredArea as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LayerSpawner_InheritBehaviorFlag(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerSpawner_InheritBehaviorFlag as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LayerSpawner_InstancesPlantInAllSupportedShapes(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerSpawner_InstancesPlantInAllSupportedShapes as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LayerSpawner_FilterStageToggle(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerSpawner_FilterStageToggle as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/2038")
- def test_LayerSpawner_InstancesRefreshUsingCorrectViewportCamera(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerSpawner_InstancesRefreshUsingCorrectViewportCamera as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_MeshBlocker_InstancesBlockedByMesh(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import MeshBlocker_InstancesBlockedByMesh as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_MeshBlocker_InstancesBlockedByMeshHeightTuning(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import MeshBlocker_InstancesBlockedByMeshHeightTuning as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_MeshSurfaceTagEmitter_DependentOnMeshComponent(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import MeshSurfaceTagEmitter_DependentOnMeshComponent as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import MeshSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_PhysXColliderSurfaceTagEmitter_E2E_Editor(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import PhysXColliderSurfaceTagEmitter_E2E_Editor as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import PositionModifier_ComponentAndOverrides_InstancesPlantAtSpecifiedOffsets as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_PositionModifier_AutoSnapToSurfaceWorks(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import PositionModifier_AutoSnapToSurfaceWorks as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_RotationModifier_InstancesRotateWithinRange(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import RotationModifier_InstancesRotateWithinRange as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_RotationModifierOverrides_InstancesRotateWithinRange(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import RotationModifierOverrides_InstancesRotateWithinRange as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_ScaleModifier_InstancesProperlyScale(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ScaleModifier_InstancesProperlyScale as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_ScaleModifierOverrides_InstancesProperlyScale(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ScaleModifierOverrides_InstancesProperlyScale as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_ShapeIntersectionFilter_InstancesPlantInAssignedShape(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ShapeIntersectionFilter_InstancesPlantInAssignedShape as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_ShapeIntersectionFilter_FilterStageToggle(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ShapeIntersectionFilter_FilterStageToggle as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SlopeAlignmentModifier_InstanceSurfaceAlignment(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SlopeAlignmentModifier_InstanceSurfaceAlignment as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SlopeAlignmentModifierOverrides_InstanceSurfaceAlignment as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SurfaceMaskFilter_BasicSurfaceTagCreation(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SurfaceMaskFilter_BasicSurfaceTagCreation as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SurfaceMaskFilter_ExclusiveSurfaceTags_Function(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SurfaceMaskFilter_ExclusionList as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SurfaceMaskFilter_InclusiveSurfaceTags_Function(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SurfaceMaskFilter_InclusionList as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SurfaceMaskFilterOverrides_MultipleDescriptorOverridesPlantAsExpected as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SystemSettings_SectorPointDensity(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SystemSettings_SectorPointDensity as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SystemSettings_SectorSize(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SystemSettings_SectorSize as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlopes(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SlopeFilter_ComponentAndOverrides_InstancesPlantOnValidSlope as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
-
-@pytest.mark.SUITE_periodic
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("level", ["tmp_level"])
-class TestAutomationE2E(TestAutomationBase):
-
- # The following tests must run in order, please do not move tests out of order
-
- @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
- def test_DynamicSliceInstanceSpawner_Embedded_E2E_Editor(self, request, workspace, project, level, editor, launcher_platform):
- # Ensure our test level does not already exist
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- from .EditorScripts import DynamicSliceInstanceSpawner_Embedded_E2E as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.parametrize("launcher_platform", ['windows'])
- def test_DynamicSliceInstanceSpawner_Embedded_E2E_Launcher(self, workspace, launcher, level,
- remote_console_instance, project, launcher_platform):
-
- expected_lines = [
- "Instances found in area = 400"
- ]
-
- hydra.launch_and_validate_results_launcher(launcher, level, remote_console_instance, expected_lines, launch_ap=False)
-
- # Cleanup our temp level
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
- def test_DynamicSliceInstanceSpawner_External_E2E_Editor(self, request, workspace, project, level, editor, launcher_platform):
- # Ensure our test level does not already exist
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- from .EditorScripts import DynamicSliceInstanceSpawner_External_E2E as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.parametrize("launcher_platform", ['windows'])
- def test_DynamicSliceInstanceSpawner_External_E2E_Launcher(self, workspace, launcher, level,
- remote_console_instance, project, launcher_platform):
-
- expected_lines = [
- "Instances found in area = 400"
- ]
-
- hydra.launch_and_validate_results_launcher(launcher, level, remote_console_instance, expected_lines, launch_ap=False)
-
- # Cleanup our temp level
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
- def test_LayerBlender_E2E_Editor(self, request, workspace, project, level, editor, launcher_platform):
- # Ensure our test level does not already exist
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- from .EditorScripts import LayerBlender_E2E_Editor as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.parametrize("launcher_platform", ['windows'])
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/4170")
- def test_LayerBlender_E2E_Launcher(self, workspace, launcher, level,
- remote_console_instance, project, launcher_platform):
-
- launcher.args.extend(["-rhi=Null"])
- launcher.start(launch_ap=False)
- assert launcher.is_alive(), "Launcher failed to start"
-
- # Wait for test script to quit the launcher. If wait_for returns exc, test was not successful
- waiter.wait_for(lambda: not launcher.is_alive(), timeout=300)
-
- # Verify launcher quit successfully and did not crash
- ret_code = launcher.get_returncode()
- assert ret_code == 0, "Test failed. See Game.log for details"
-
- # Cleanup our temp level
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
+ class test_DynVegUtils_TempPrefabCreationWorks(EditorSharedTest):
+ from .EditorScripts import DynVegUtils_TempPrefabCreationWorks as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic_Optimized.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic_Optimized.py
deleted file mode 100644
index f87d6567ef..0000000000
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/TestSuite_Periodic_Optimized.py
+++ /dev/null
@@ -1,23 +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
-"""
-
-import os
-import pytest
-
-import ly_test_tools.environment.file_system as file_system
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(EditorTestSuite):
-
- global_extra_cmdline_args = ["-BatchMode", "-autotest_mode"]
-
- class test_DynVegUtils_TempPrefabCreationWorks(EditorSharedTest):
- from .EditorScripts import DynVegUtils_TempPrefabCreationWorks as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientGenerators_Incompatibilities.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientGenerators_Incompatibilities.py
index 09cd760647..6979ff1dee 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientGenerators_Incompatibilities.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientGenerators_Incompatibilities.py
@@ -65,8 +65,7 @@ def GradientGenerators_Incompatibilities():
}
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# For every gradient generator component, verify that they are incompatible
# which each vegetation area component
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientModifiers_Incompatibilities.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientModifiers_Incompatibilities.py
index a4d9181744..962a0004f9 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientModifiers_Incompatibilities.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientModifiers_Incompatibilities.py
@@ -74,8 +74,7 @@ def GradientModifiers_Incompatibilities():
}
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# For every gradient modifier component, verify that they are incompatible
# which each vegetation area and gradient generator/modifier component
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin.py
index 3749f93bf5..87f9e1a9b1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin.py
@@ -86,8 +86,7 @@ def GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin():
return entity
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create entity with Random Noise gradient and verify gradient position after clearing pinned entity
clear_entityid_check_position(
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_DefaultPinnedEntityIsSelf.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_DefaultPinnedEntityIsSelf.py
index 3756452710..cd3fd7e1ee 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_DefaultPinnedEntityIsSelf.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientPreviewSettings_DefaultPinnedEntityIsSelf.py
@@ -90,8 +90,7 @@ def GradientPreviewSettings_DefaultPinnedEntityIsSelf():
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
for param in param_list:
execute_test(param.required_components[param.accessed_component],
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSampling_GradientReferencesAddRemoveSuccessfully.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSampling_GradientReferencesAddRemoveSuccessfully.py
index 8e85345a6f..f2980d9634 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSampling_GradientReferencesAddRemoveSuccessfully.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSampling_GradientReferencesAddRemoveSuccessfully.py
@@ -61,8 +61,7 @@ def GradientSampling_GradientReferencesAddRemoveSuccessfully():
Report.result(gradient_cleared_from_modifier, entity.Equal(EntityId.EntityId()))
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create a new entity with components "Random Noise Gradient", "Gradient Transform Modifier" and "Box Shape"
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_ComponentDependencies.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_ComponentDependencies.py
index f653515a39..0cc325efd1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_ComponentDependencies.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_ComponentDependencies.py
@@ -42,8 +42,7 @@ def GradientSurfaceTagEmitter_ComponentDependencies():
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", EntityComponentIdPair)
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Create an entity with Gradient Surface Tag Emitter component
position = math.Vector3(512.0, 512.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py
index 90840a135d..cf48096a31 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully.py
@@ -36,8 +36,7 @@ def GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create an entity with Gradient Surface Tag Emitter and Reference Gradient components.
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithExpectedGradients.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithExpectedGradients.py
index 5e6df4d52f..27ef248d6c 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithExpectedGradients.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithExpectedGradients.py
@@ -46,8 +46,7 @@ def GradientTransform_ComponentIncompatibleWithExpectedGradients():
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", EntityComponentIdPair)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create a new entity with components Gradient Transform Modifier and Box Shape
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithSpawners.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithSpawners.py
index fd65996fdd..9c23cdea75 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithSpawners.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_ComponentIncompatibleWithSpawners.py
@@ -44,8 +44,7 @@ def GradientTransform_ComponentIncompatibleWithSpawners():
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", EntityComponentIdPair)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create a new entity with components Gradient Transform Modifier and Box Shape
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange.py
index 530503db86..6d6911ff3a 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange.py
@@ -54,8 +54,7 @@ def GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create entity
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_RequiresShape.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_RequiresShape.py
index 09cce359d5..ec142f92d2 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_RequiresShape.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/GradientTransform_RequiresShape.py
@@ -47,8 +47,7 @@ def GradientTransform_RequiresShape():
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Create a new Entity in the level
entity_id = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', entity.EntityId())
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_ProcessedImageAssignedSuccessfully.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_ProcessedImageAssignedSuccessfully.py
index 42458665e1..afe0893da9 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_ProcessedImageAssignedSuccessfully.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_ProcessedImageAssignedSuccessfully.py
@@ -56,8 +56,7 @@ def ImageGradient_ProcessedImageAssignedSuccessfully():
from editor_python_test_tools.utils import TestHelper as helper
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create an entity with Image Gradient and Gradient Transform Modifier components
components_to_add = ["Image Gradient", "Gradient Transform Modifier", "Box Shape"]
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_RequiresShape.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_RequiresShape.py
index 3b832d160a..85582d198a 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_RequiresShape.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/EditorScripts/ImageGradient_RequiresShape.py
@@ -47,8 +47,7 @@ def ImageGradient_RequiresShape():
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Create a new Entity in the level
entity_id = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', entity.EntityId())
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic.py
index 3ad27eb973..d4199c31f6 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic.py
@@ -5,67 +5,51 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
-import os
import pytest
-import sys
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../automatedtesting_shared')
-from base import TestAutomationBase
+from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
@pytest.mark.SUITE_periodic
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
+class TestAutomation(EditorTestSuite):
- def test_GradientGenerators_Incompatibilities(self, request, workspace, editor, launcher_platform):
+ class test_GradientGenerators_Incompatibilities(EditorSharedTest):
from .EditorScripts import GradientGenerators_Incompatibilities as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_GradientModifiers_Incompatibilities(self, request, workspace, editor, launcher_platform):
+ class test_GradientModifiers_Incompatibilities(EditorSharedTest):
from .EditorScripts import GradientModifiers_Incompatibilities as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_GradientPreviewSettings_DefaultPinnedEntityIsSelf(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientPreviewSettings_DefaultPinnedEntityIsSelf as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin(self, request, workspace, editor, launcher_platform):
+ class test_GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin(EditorSharedTest):
from .EditorScripts import GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_GradientSampling_GradientReferencesAddRemoveSuccessfully(self, request, workspace, editor, launcher_platform):
+ class test_GradientPreviewSettings_DefaultPinnedEntityIsSelf(EditorSharedTest):
+ from .EditorScripts import GradientPreviewSettings_DefaultPinnedEntityIsSelf as test_module
+
+ class test_GradientSampling_GradientReferencesAddRemoveSuccessfully(EditorSharedTest):
from .EditorScripts import GradientSampling_GradientReferencesAddRemoveSuccessfully as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_GradientSurfaceTagEmitter_ComponentDependencies(self, request, workspace, editor, launcher_platform):
+ class test_GradientSurfaceTagEmitter_ComponentDependencies(EditorSharedTest):
from .EditorScripts import GradientSurfaceTagEmitter_ComponentDependencies as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully(self, request, workspace, editor, launcher_platform):
+ class test_GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully(EditorSharedTest):
from .EditorScripts import GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_GradientTransform_RequiresShape(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientTransform_RequiresShape as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_GradientTransform_ComponentIncompatibleWithSpawners(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientTransform_ComponentIncompatibleWithSpawners as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_GradientTransform_ComponentIncompatibleWithExpectedGradients(self, request, workspace, editor, launcher_platform):
+ class test_GradientTransform_ComponentIncompatibleWithExpectedGradients(EditorSharedTest):
from .EditorScripts import GradientTransform_ComponentIncompatibleWithExpectedGradients as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
- def test_ImageGradient_RequiresShape(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ImageGradient_RequiresShape as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
+ class test_GradientTransform_ComponentIncompatibleWithSpawners(EditorSharedTest):
+ from .EditorScripts import GradientTransform_ComponentIncompatibleWithSpawners as test_module
- def test_ImageGradient_ProcessedImageAssignedSuccessfully(self, request, workspace, editor, launcher_platform):
+ class test_GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange(EditorSharedTest):
+ from .EditorScripts import GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange as test_module
+
+ class test_GradientTransform_RequiresShape(EditorSharedTest):
+ from .EditorScripts import GradientTransform_RequiresShape as test_module
+
+ class test_ImageGradient_ProcessedImageAssignedSuccessfully(EditorSharedTest):
from .EditorScripts import ImageGradient_ProcessedImageAssignedSuccessfully as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
+
+ class test_ImageGradient_RequiresShape(EditorSharedTest):
+ from .EditorScripts import ImageGradient_RequiresShape as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py
deleted file mode 100644
index 6ac0658b4d..0000000000
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py
+++ /dev/null
@@ -1,57 +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
-"""
-
-import pytest
-
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.SUITE_periodic
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(EditorTestSuite):
-
- enable_prefab_system = False
-
- class test_GradientGenerators_Incompatibilities(EditorSharedTest):
- from .EditorScripts import GradientGenerators_Incompatibilities as test_module
-
- class test_GradientModifiers_Incompatibilities(EditorSharedTest):
- from .EditorScripts import GradientModifiers_Incompatibilities as test_module
-
- class test_GradientPreviewSettings_DefaultPinnedEntityIsSelf(EditorSharedTest):
- from .EditorScripts import GradientPreviewSettings_DefaultPinnedEntityIsSelf as test_module
-
- class test_GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin(EditorSharedTest):
- from .EditorScripts import GradientPreviewSettings_ClearingPinnedEntitySetsPreviewToOrigin as test_module
-
- class test_GradientSampling_GradientReferencesAddRemoveSuccessfully(EditorSharedTest):
- from .EditorScripts import GradientSampling_GradientReferencesAddRemoveSuccessfully as test_module
-
- class test_GradientSurfaceTagEmitter_ComponentDependencies(EditorSharedTest):
- from .EditorScripts import GradientSurfaceTagEmitter_ComponentDependencies as test_module
-
- class test_GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully(EditorSharedTest):
- from .EditorScripts import GradientSurfaceTagEmitter_SurfaceTagsAddRemoveSuccessfully as test_module
-
- class test_GradientTransform_RequiresShape(EditorSharedTest):
- from .EditorScripts import GradientTransform_RequiresShape as test_module
-
- class test_GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange(EditorSharedTest):
- from .EditorScripts import GradientTransform_FrequencyZoomCanBeSetBeyondSliderRange as test_module
-
- class test_GradientTransform_ComponentIncompatibleWithSpawners(EditorSharedTest):
- from .EditorScripts import GradientTransform_ComponentIncompatibleWithSpawners as test_module
-
- class test_GradientTransform_ComponentIncompatibleWithExpectedGradients(EditorSharedTest):
- from .EditorScripts import GradientTransform_ComponentIncompatibleWithExpectedGradients as test_module
-
- class test_ImageGradient_RequiresShape(EditorSharedTest):
- from .EditorScripts import ImageGradient_RequiresShape as test_module
-
- class test_ImageGradient_ProcessedImageAssignedSuccessfully(EditorSharedTest):
- from .EditorScripts import ImageGradient_ProcessedImageAssignedSuccessfully as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_DependentComponentsAdded.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_DependentComponentsAdded.py
index c69ce77041..09dc6d7d0b 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_DependentComponentsAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_DependentComponentsAdded.py
@@ -68,8 +68,7 @@ def AreaNodes_DependentComponentsAdded():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityCreatedOnNodeAdd.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityCreatedOnNodeAdd.py
index f3f4a1862d..95294de2d2 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityCreatedOnNodeAdd.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityCreatedOnNodeAdd.py
@@ -58,7 +58,6 @@ def AreaNodes_EntityCreatedOnNodeAdd():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -67,8 +66,7 @@ def AreaNodes_EntityCreatedOnNodeAdd():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityRemovedOnNodeDelete.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityRemovedOnNodeDelete.py
index f8b0539759..4e5e75b3e1 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityRemovedOnNodeDelete.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/AreaNodes_EntityRemovedOnNodeDelete.py
@@ -59,8 +59,8 @@ def AreaNodes_EntityRemovedOnNodeDelete():
import azlmbr.math as math
import azlmbr.paths
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -73,8 +73,7 @@ def AreaNodes_EntityRemovedOnNodeDelete():
deletedEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ComponentUpdates_UpdateGraph.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ComponentUpdates_UpdateGraph.py
index cc40d8b861..1635365a08 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ComponentUpdates_UpdateGraph.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ComponentUpdates_UpdateGraph.py
@@ -1,15 +1,14 @@
"""
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
"""
class Tests:
- slice_instantiated = (
- "Slice instantiated successfully",
- "Failed to instantiate slice"
+ prefab_instantiated = (
+ "Prefab instantiated successfully",
+ "Failed to instantiate prefab"
)
lc_entity_found = (
"LandscapeCanvas entity found",
@@ -24,7 +23,7 @@ class Tests:
"Failed to find Distribution Filter component on BushSpawner entity"
)
existing_graph_opened = (
- "Opened existing graph from slice",
+ "Opened existing graph from prefab",
"Failed to open existing graph"
)
dist_filter_node_found = (
@@ -66,10 +65,8 @@ def ComponentUpdates_UpdateGraph():
Summary:
This test verifies that the Landscape Canvas graphs update properly when components are added/removed outside of
Landscape Canvas.
-
Expected Behavior:
Graphs properly reflect component changes made to entities outside of Landscape Canvas.
-
Test Steps:
1. Open Level
2. Find LandscapeCanvas named entity
@@ -83,41 +80,36 @@ def ComponentUpdates_UpdateGraph():
9. Add a new entity with unique name as a child of the Landscape Canvas entity
10. Add a Box Shape component to the new child entity
11. Ensure Box Shape node is present on the open graph
-
Note:
- This test file must be called from the Open 3D Engine Editor command terminal
- Any passed and failed tests are written to the Editor.log file.
Parsing the file or running a log_monitor are required to observe the test results.
-
:return: None
"""
import os
- import azlmbr.asset as asset
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
import azlmbr.legacy.general as general
import azlmbr.landscapecanvas as landscapecanvas
import azlmbr.math as math
- import azlmbr.slice as slice
+ import azlmbr.prefab as prefab
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
- # Open a simple level and instantiate LC_BushFlowerBlender.slice
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ # Open a simple level and instantiate BushFlowerBlender.prefab
+ hydra.open_base_level()
transform = math.Transform_CreateIdentity()
position = math.Vector3(64.0, 64.0, 32.0)
transform.invoke('SetPosition', position)
- test_slice_path = os.path.join("Slices", "LC_BushFlowerBlender.slice")
- test_slice_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", test_slice_path, math.Uuid(),
- False)
- test_slice = slice.SliceRequestBus(bus.Broadcast, 'InstantiateSliceFromAssetId', test_slice_id, transform)
- Report.critical_result(Tests.slice_instantiated, test_slice.IsValid())
+ test_prefab_path = os.path.join("Assets", "Prefabs", "BushFlowerBlender.prefab")
+ prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'InstantiatePrefab', test_prefab_path,
+ entity.EntityId(), position)
+ Report.critical_result(Tests.prefab_instantiated, prefab_result.IsSuccess())
# Find root entity in the loaded level
search_filter = entity.SearchFilter()
@@ -126,8 +118,8 @@ def ComponentUpdates_UpdateGraph():
# Allow a few seconds for matching entity to be found
helper.wait_for_condition(lambda: len(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)) > 0, 5.0)
lc_matching_entities = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)
- slice_root_id = lc_matching_entities[0] #Entity with Landscape Canvas component
- Report.critical_result(Tests.lc_entity_found, slice_root_id.IsValid())
+ prefab_root_id = lc_matching_entities[0] #Entity with Landscape Canvas component
+ Report.critical_result(Tests.lc_entity_found, prefab_root_id.IsValid())
# Find the BushSpawner entity
search_filter.names = ["BushSpawner"]
@@ -147,7 +139,7 @@ def ComponentUpdates_UpdateGraph():
# Open Landscape Canvas and the existing graph
general.open_pane('Landscape Canvas')
- open_graph = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'OnGraphEntity', slice_root_id)
+ open_graph = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'OnGraphEntity', prefab_root_id)
Report.critical_result(Tests.existing_graph_opened, open_graph.IsValid())
# Verify that Distribution Filter node is present on the graph
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Component_AddedRemoved.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Component_AddedRemoved.py
index 7f21a26595..465cf14481 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Component_AddedRemoved.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Component_AddedRemoved.py
@@ -45,11 +45,9 @@ def Component_AddedRemoved():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Create an Entity at the root of the level
newEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', entity.EntityId())
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_DisabledNodeDuplication.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_DisabledNodeDuplication.py
index 4dfc227c53..e5b66399cb 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_DisabledNodeDuplication.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_DisabledNodeDuplication.py
@@ -59,8 +59,7 @@ def Edit_DisabledNodeDuplication():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_UndoNodeDelete_SliceEntity.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_UndoNodeDelete_PrefabEntity.py
old mode 100755
new mode 100644
similarity index 85%
rename from AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_UndoNodeDelete_SliceEntity.py
rename to AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_UndoNodeDelete_PrefabEntity.py
index a26e16755f..d7735f59c2
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_UndoNodeDelete_SliceEntity.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Edit_UndoNodeDelete_PrefabEntity.py
@@ -1,15 +1,14 @@
"""
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
"""
class Tests:
- slice_spawned = (
- "Slice instantiated successfully",
- "Failed to instantiate slice"
+ prefab_instantiated = (
+ "Prefab instantiated successfully",
+ "Failed to instantiate prefab"
)
lc_entity_found = (
"Landscape Canvas entity found",
@@ -31,31 +30,28 @@ class Tests:
"Vegetation Layer Spawner node was successfully removed",
"Failed to remove Vegetation Layer Spawner node"
)
-def Edit_UndoNodeDelete_SliceEntity():
+
+
+def Edit_UndoNodeDelete_PrefabEntity():
"""
Summary:
- This test verifies Editor stability after undoing the deletion of nodes on a slice entity.
-
+ This test verifies Editor stability after undoing the deletion of nodes on a prefab entity.
Expected Behavior:
Editor remains stable and free of crashes.
-
Test Steps:
1) Open a simple level
- 2) Instantiate a slice with a Landscape Canvas setup
+ 2) Instantiate a prefab with a Landscape Canvas setup
3) Find a specific node on the graph, and delete it
4) Restore the node with Undo
-
Note:
- This test file must be called from the Open 3D Engine Editor command terminal
- Any passed and failed tests are written to the Editor.log file.
Parsing the file or running a log_monitor are required to observe the test results.
-
:return: None
"""
import os
- import azlmbr.asset as asset
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
@@ -63,25 +59,23 @@ def Edit_UndoNodeDelete_SliceEntity():
import azlmbr.editor.graph as graph
import azlmbr.landscapecanvas as landscapecanvas
import azlmbr.math as math
- import azlmbr.slice as slice
+ import azlmbr.prefab as prefab
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Instantiate slice
transform = math.Transform_CreateIdentity()
position = math.Vector3(64.0, 64.0, 32.0)
transform.invoke('SetPosition', position)
- test_slice_path = os.path.join("Slices", "LC_BushFlowerBlender.slice")
- test_slice_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", test_slice_path, math.Uuid(),
- False)
- test_slice = slice.SliceRequestBus(bus.Broadcast, 'InstantiateSliceFromAssetId', test_slice_id, transform)
- Report.result(Tests.slice_spawned, test_slice.IsValid())
+ test_prefab_path = os.path.join("Assets", "Prefabs", "BushFlowerBlender.prefab")
+ prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'InstantiatePrefab', test_prefab_path,
+ entity.EntityId(), position)
+ Report.critical_result(Tests.prefab_instantiated, prefab_result.IsSuccess())
# Find root entity in the loaded level
search_filter = entity.SearchFilter()
@@ -134,5 +128,4 @@ def Edit_UndoNodeDelete_SliceEntity():
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
- Report.start_test(Edit_UndoNodeDelete_SliceEntity)
-
+ Report.start_test(Edit_UndoNodeDelete_PrefabEntity)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientMixer_NodeConstruction.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientMixer_NodeConstruction.py
index c390df7c61..95a9b08fe5 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientMixer_NodeConstruction.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientMixer_NodeConstruction.py
@@ -76,7 +76,6 @@ def GradientMixer_NodeConstruction():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -85,8 +84,7 @@ def GradientMixer_NodeConstruction():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityCreatedOnNodeAdd.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityCreatedOnNodeAdd.py
index c3952fe34b..3b6e28ca3d 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityCreatedOnNodeAdd.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityCreatedOnNodeAdd.py
@@ -58,7 +58,6 @@ def GradientModifierNodes_EntityCreatedOnNodeAdd():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -67,8 +66,7 @@ def GradientModifierNodes_EntityCreatedOnNodeAdd():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityRemovedOnNodeDelete.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityRemovedOnNodeDelete.py
index d7789a21fb..e6fb61e10a 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityRemovedOnNodeDelete.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientModifierNodes_EntityRemovedOnNodeDelete.py
@@ -58,8 +58,8 @@ def GradientModifierNodes_EntityRemovedOnNodeDelete():
import azlmbr.legacy.general as general
import azlmbr.math as math
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -72,8 +72,7 @@ def GradientModifierNodes_EntityRemovedOnNodeDelete():
deletedEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_DependentComponentsAdded.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_DependentComponentsAdded.py
index 63df9a6fcb..c2007e49e2 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_DependentComponentsAdded.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_DependentComponentsAdded.py
@@ -60,7 +60,6 @@ def GradientNodes_DependentComponentsAdded():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -69,8 +68,7 @@ def GradientNodes_DependentComponentsAdded():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityCreatedOnNodeAdd.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityCreatedOnNodeAdd.py
index d5595e342c..5111f45f22 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityCreatedOnNodeAdd.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityCreatedOnNodeAdd.py
@@ -58,7 +58,6 @@ def GradientNodes_EntityCreatedOnNodeAdd():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -67,8 +66,7 @@ def GradientNodes_EntityCreatedOnNodeAdd():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityRemovedOnNodeDelete.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityRemovedOnNodeDelete.py
index e5bfbfc7f1..1840fd3f1a 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityRemovedOnNodeDelete.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GradientNodes_EntityRemovedOnNodeDelete.py
@@ -58,8 +58,8 @@ def GradientNodes_EntityRemovedOnNodeDelete():
import azlmbr.legacy.general as general
import azlmbr.math as math
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -72,8 +72,7 @@ def GradientNodes_EntityRemovedOnNodeDelete():
deletedEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnEntityDelete.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnEntityDelete.py
index 0f83688206..1902516fb3 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnEntityDelete.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnEntityDelete.py
@@ -51,8 +51,8 @@ def GraphClosed_OnEntityDelete():
import azlmbr.editor.graph as graph
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -61,8 +61,7 @@ def GraphClosed_OnEntityDelete():
newRootEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnLevelChange.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnLevelChange.py
index 67c2ec6908..d5d46c042d 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnLevelChange.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_OnLevelChange.py
@@ -51,14 +51,13 @@ def GraphClosed_OnLevelChange():
import azlmbr.editor.graph as graph
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
@@ -73,7 +72,7 @@ def GraphClosed_OnLevelChange():
Report.result(Tests.graph_registered, graph_registered)
# Open a different level, which should close any open Landscape Canvas graphs
- general.open_level_no_prompt('WhiteBox/EmptyLevel')
+ general.open_level_no_prompt('Base')
# Make sure the graph we created is now closed
graphIsOpen = graph.AssetEditorRequestBus(bus.Event, 'ContainsGraph', editorId, newGraphId)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_TabbedGraph.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_TabbedGraph.py
index 83762e0afb..d33ee7746f 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_TabbedGraph.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphClosed_TabbedGraph.py
@@ -51,8 +51,8 @@ def GraphClosed_TabbedGraphClosesIndependently():
import azlmbr.editor.graph as graph
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editor_id = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -65,8 +65,7 @@ def GraphClosed_TabbedGraphClosesIndependently():
return graph_open
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphUpdates_UpdateComponents.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphUpdates_UpdateComponents.py
index c489c738d5..6a007a9014 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphUpdates_UpdateComponents.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/GraphUpdates_UpdateComponents.py
@@ -1,18 +1,17 @@
"""
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
"""
class Tests:
- slice_instantiated = (
- "Slice instantiated successfully",
- "Failed to instantiate slice"
+ prefab_instantiated = (
+ "Prefab instantiated successfully",
+ "Failed to instantiate prefab"
)
existing_graph_opened = (
- "Opened existing graph from slice",
+ "Opened existing graph from prefab",
"Failed to open existing graph"
)
node_removed = (
@@ -37,13 +36,11 @@ def GraphUpdates_UpdateComponent():
"""
Summary:
This test verifies that components are properly updated as nodes are added/removed/updated.
-
Expected Behavior:
Landscape Canvas node CRUD properly updates component entities.
-
Test Steps:
1. Open Level.
- 2. Open the graph on LC_BushFlowerBlender.slice
+ 2. Open the graph on BushFlowerBlender.prefab
3. Find the Rotation Modifier node on the BushSpawner entity
4. Delete the Rotation Modifier node
5. Ensure the Vegetation Rotation Modifier component is removed from the BushSpawner entity
@@ -51,18 +48,15 @@ def GraphUpdates_UpdateComponent():
7. Ensure BushSpawner entity is deleted
8. Change connection from second Rotation Modifier node to a different Gradient
9. Ensure Gradient reference on component is updated
-
Note:
- This test file must be called from the Open 3D Engine Editor command terminal
- Any passed and failed tests are written to the Editor.log file.
Parsing the file or running a log_monitor are required to observe the test results.
-
:return: None
"""
import os
- import azlmbr.asset as asset
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
@@ -70,39 +64,37 @@ def GraphUpdates_UpdateComponent():
import azlmbr.editor.graph as graph
import azlmbr.landscapecanvas as landscapecanvas
import azlmbr.math as math
- import azlmbr.slice as slice
+ import azlmbr.prefab as prefab
import automatedtesting_shared.landscape_canvas_utils as lc
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
- # Open a simple level and instantiate LC_BushFlowerBlender.slice
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ # Open a simple level and instantiate BushFlowerBlender.prefab
+ hydra.open_base_level()
transform = math.Transform_CreateIdentity()
position = math.Vector3(64.0, 64.0, 32.0)
transform.invoke('SetPosition', position)
- test_slice_path = os.path.join("Slices", "LC_BushFlowerBlender.slice")
- test_slice_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", test_slice_path, math.Uuid(),
- False)
- test_slice = slice.SliceRequestBus(bus.Broadcast, 'InstantiateSliceFromAssetId', test_slice_id, transform)
- Report.critical_result(Tests.slice_instantiated, test_slice.IsValid())
+ test_prefab_path = os.path.join("Assets", "Prefabs", "BushFlowerBlender.prefab")
+ prefab_result = prefab.PrefabPublicRequestBus(bus.Broadcast, 'InstantiatePrefab', test_prefab_path,
+ entity.EntityId(), position)
+ Report.critical_result(Tests.prefab_instantiated, prefab_result.IsSuccess())
- # Search for root entity to ensure slice is loaded
+ # Search for root entity to ensure prefab is loaded
search_filter = entity.SearchFilter()
search_filter.names = ["LandscapeCanvas"]
helper.wait_for_condition(lambda: len(entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)) > 0, 5.0)
+ prefab_lc_root = entity.SearchBus(bus.Broadcast, 'SearchEntities', search_filter)[0]
# Find needed entities in the loaded level
- slice_root_id = hydra.find_entity_by_name('LandscapeCanvas')
bush_spawner_id = hydra.find_entity_by_name('BushSpawner')
flower_spawner_id = hydra.find_entity_by_name('FlowerSpawner')
inverted_perlin_noise_id = hydra.find_entity_by_name('Invert')
# Open Landscape Canvas and the existing graph
general.open_pane('Landscape Canvas')
- open_graph_id = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'OnGraphEntity', slice_root_id)
+ open_graph_id = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'OnGraphEntity', prefab_lc_root)
Report.critical_result(Tests.existing_graph_opened, open_graph_id.IsValid())
# Find the Rotation Modifier node on the BushSpawner entity
@@ -110,6 +102,7 @@ def GraphUpdates_UpdateComponent():
# Remove the Rotation Modifier node
graph.GraphControllerRequestBus(bus.Event, 'RemoveNode', open_graph_id, rotation_modifier_node[0])
+ general.idle_wait_frames(2)
# Verify node was removed
rotation_modifier_node = lc.find_nodes_matching_entity_component('Vegetation Rotation Modifier', bush_spawner_id)
@@ -121,14 +114,18 @@ def GraphUpdates_UpdateComponent():
Report.result(Tests.component_removed, not has_rotation_modifier)
# Find the Vegetation Layer Spawner node on the BushSpawner entity
+ open_graph_id = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'OnGraphEntity', prefab_lc_root)
layer_spawner_node = lc.find_nodes_matching_entity_component('Vegetation Layer Spawner', bush_spawner_id)
# Remove the Vegetation Layer Spawner node and verify the corresponding entity is deleted
graph.GraphControllerRequestBus(bus.Event, 'RemoveNode', open_graph_id, layer_spawner_node[0])
+ general.idle_wait_frames(2)
+ layer_spawner_node = lc.find_nodes_matching_entity_component('Vegetation Layer Spawner', bush_spawner_id)
bush_spawner_id = hydra.find_entity_by_name('BushSpawner')
- Report.result(Tests.entity_deleted, not bush_spawner_id)
+ Report.result(Tests.entity_deleted, not layer_spawner_node and not bush_spawner_id)
# Connect the FlowerSpawner's Rotation Modifier node to the Invert Gradient Modifier node
+ open_graph_id = landscapecanvas.LandscapeCanvasRequestBus(bus.Broadcast, 'OnGraphEntity', prefab_lc_root)
rotation_modifier_node = lc.find_nodes_matching_entity_component('Vegetation Rotation Modifier', flower_spawner_id)
invert_node = lc.find_nodes_matching_entity_component('Invert Gradient Modifier', inverted_perlin_noise_id)
@@ -137,7 +134,7 @@ def GraphUpdates_UpdateComponent():
graph.GraphControllerRequestBus(bus.Event, 'AddConnectionBySlotId', open_graph_id, invert_node[0],
outbound_gradient_slot, rotation_modifier_node[0], inbound_gradient_z_slot)
- general.idle_wait(1.0) # Add a small wait to ensure component property has time to update
+ general.idle_wait_frames(2) # Add a small wait to ensure component property has time to update
# Verify the Gradient Entity Id reference on the Rotation Modifier component was properly set
rotation_type_id = hydra.get_component_type_id('Vegetation Rotation Modifier')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerBlender_NodeConstruction.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerBlender_NodeConstruction.py
index b2bf20411b..da9a21aee6 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerBlender_NodeConstruction.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerBlender_NodeConstruction.py
@@ -64,7 +64,6 @@ def LayerBlender_NodeConstruction():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -73,8 +72,7 @@ def LayerBlender_NodeConstruction():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerExtenderNodes_ComponentEntitySync.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerExtenderNodes_ComponentEntitySync.py
index 510c404614..cd54a741ec 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerExtenderNodes_ComponentEntitySync.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/LayerExtenderNodes_ComponentEntitySync.py
@@ -63,7 +63,6 @@ def LayerExtenderNodes_ComponentEntitySync():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -72,8 +71,7 @@ def LayerExtenderNodes_ComponentEntitySync():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/NewGraph_CreatedSuccessfully.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/NewGraph_CreatedSuccessfully.py
index d13c5dfa2f..f7564a643d 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/NewGraph_CreatedSuccessfully.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/NewGraph_CreatedSuccessfully.py
@@ -60,7 +60,6 @@ def NewGraph_CreatedSuccessfully():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -69,8 +68,7 @@ def NewGraph_CreatedSuccessfully():
new_root_entity_id = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Listen for entity creation notifications so we can check if the entity created
# with the new graph has our Landscape Canvas component automatically added
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Prefab_CreateInstantiate.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Prefab_CreateInstantiate.py
new file mode 100644
index 0000000000..894a69a40e
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Prefab_CreateInstantiate.py
@@ -0,0 +1,69 @@
+"""
+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
+"""
+
+
+class Tests:
+ prefab_created = (
+ "Prefab created successfully",
+ "Failed to create prefab"
+ )
+ prefab_instantiated = (
+ "Prefab instantiated successfully",
+ "Failed to instantiate prefab"
+ )
+
+
+def Prefab_CreateInstantiate():
+ """
+ Summary:
+ A prefab containing the LandscapeCanvas component can be created/instantiated.
+ Expected Result:
+ Prefab is created/processed/instantiated successfully and free of errors/warnings.
+ Test Steps:
+ 1) Open a simple level
+ 2) Create a new entity with a Landscape Canvas component
+ 3) Create a prefab of the new entity
+ 4) Instantiate a new copy of the prefab
+ Note:
+ - This test file must be called from the Open 3D Engine Editor command terminal
+ - Any passed and failed tests are written to the Editor.log file.
+ Parsing the file or running a log_monitor are required to observe the test results.
+ :return: None
+ """
+
+ import azlmbr.math as math
+
+ import editor_python_test_tools.hydra_editor_utils as hydra
+ from editor_python_test_tools.utils import Report
+ from editor_python_test_tools.utils import TestHelper as helper
+ from editor_python_test_tools.prefab_utils import Prefab
+
+ # Open an existing simple level
+ hydra.open_base_level()
+
+ # Create entity with Landscape Canvas component
+ position = math.Vector3(512.0, 512.0, 32.0)
+ landscape_canvas = hydra.Entity("landscape_canvas_entity")
+ landscape_canvas.create_entity(position, ["Landscape Canvas"])
+
+ # Create in-memory prefab from the created entity
+ lc_prefab_filename = "LC_PrefabTest"
+ lc_prefab, lc_prefab_instance = Prefab.create_prefab([landscape_canvas], lc_prefab_filename)
+
+ # Verify if prefab is created
+ helper.wait_for_condition(lambda: lc_prefab.is_prefab_loaded(lc_prefab_filename), 5.0)
+ Report.result(Tests.prefab_created, lc_prefab.is_prefab_loaded(lc_prefab_filename))
+
+ # Instantiate prefab
+ lc_prefab_instance2 = lc_prefab.instantiate()
+ helper.wait_for_condition(lambda: lc_prefab_instance2.has_editor_prefab_component(), 5.0)
+ Report.result(Tests.prefab_instantiated, lc_prefab_instance2.has_editor_prefab_component())
+
+
+if __name__ == "__main__":
+
+ from editor_python_test_tools.utils import Report
+ Report.start_test(Prefab_CreateInstantiate)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityCreatedOnNodeAdd.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityCreatedOnNodeAdd.py
index 93464c7ad3..c93b377945 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityCreatedOnNodeAdd.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityCreatedOnNodeAdd.py
@@ -58,7 +58,6 @@ def ShapeNodes_EntityCreatedOnNodeAdd():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -66,10 +65,8 @@ def ShapeNodes_EntityCreatedOnNodeAdd():
global newEntityId
newEntityId = parameters[0]
- # Open an existing simple level
-
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ # Open an existing simple level
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityRemovedOnNodeDelete.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityRemovedOnNodeDelete.py
index d2708f643d..4057e7f6e9 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityRemovedOnNodeDelete.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/ShapeNodes_EntityRemovedOnNodeDelete.py
@@ -58,8 +58,8 @@ def ShapeNodes_EntityRemovedOnNodeDelete():
import azlmbr.legacy.general as general
import azlmbr.math as math
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -72,8 +72,7 @@ def ShapeNodes_EntityRemovedOnNodeDelete():
deletedEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Slice_CreateInstantiate.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Slice_CreateInstantiate.py
deleted file mode 100644
index c5ab08f99a..0000000000
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/Slice_CreateInstantiate.py
+++ /dev/null
@@ -1,84 +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
-"""
-
-
-class Tests:
- slice_created = (
- "Slice created successfully",
- "Failed to create slice"
- )
- slice_instantiated = (
- "Slice instantiated successfully",
- "Failed to instantiate slice"
- )
-
-
-def Slice_CreateInstantiate():
- """
- Summary:
- A slice containing the LandscapeCanvas component can be created/instantiated.
-
- Expected Result:
- Slice is created/processed/instantiated successfully and free of errors/warnings.
-
- Test Steps:
- 1) Open a simple level
- 2) Create a new entity with a Landscape Canvas component
- 3) Create a slice of the new entity
- 4) Instantiate a new copy of the slice
-
- Note:
- - This test file must be called from the Open 3D Engine Editor command terminal
- - Any passed and failed tests are written to the Editor.log file.
- Parsing the file or running a log_monitor are required to observe the test results.
- :return: None
- """
-
- import os
-
- import azlmbr.math as math
- import azlmbr.bus as bus
- import azlmbr.asset as asset
- import azlmbr.slice as slice
-
- import editor_python_test_tools.hydra_editor_utils as hydra
- from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
-
- def path_is_valid_asset(asset_path):
- asset_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", asset_path, math.Uuid(), False)
- return asset_id.invoke("IsValid")
-
- # Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
-
- # Create entity with Landscape Canvas component
- position = math.Vector3(512.0, 512.0, 32.0)
- landscape_canvas = hydra.Entity("landscape_canvas_entity")
- landscape_canvas.create_entity(position, ["Landscape Canvas"])
-
- # Create slice from the created entity
- slice_path = os.path.join("slices", "TestSlice.slice")
- slice.SliceRequestBus(bus.Broadcast, "CreateNewSlice", landscape_canvas.id, slice_path)
-
- # Verify if slice is created
- helper.wait_for_condition(lambda: path_is_valid_asset(slice_path), 5.0)
- Report.result(Tests.slice_created, path_is_valid_asset(slice_path))
-
- # Instantiate slice
- transform = math.Transform_CreateIdentity()
- asset_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", slice_path, math.Uuid(), False)
- test_slice = slice.SliceRequestBus(bus.Broadcast, "InstantiateSliceFromAssetId", asset_id, transform)
- helper.wait_for_condition(lambda: test_slice.IsValid(), 5.0)
- Report.result(Tests.slice_instantiated, test_slice.IsValid())
-
-
-if __name__ == "__main__":
-
- from editor_python_test_tools.utils import Report
- Report.start_test(Slice_CreateInstantiate)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/SlotConnections_UpdateComponentReferences.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/SlotConnections_UpdateComponentReferences.py
index 3169908621..208849ea61 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/SlotConnections_UpdateComponentReferences.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/EditorScripts/SlotConnections_UpdateComponentReferences.py
@@ -67,7 +67,6 @@ def SlotConnections_UpdateComponentReferences():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
editorId = azlmbr.globals.property.LANDSCAPE_CANVAS_EDITOR_ID
@@ -101,8 +100,7 @@ def SlotConnections_UpdateComponentReferences():
newEntityId = parameters[0]
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Open Landscape Canvas tool and verify
general.open_pane('Landscape Canvas')
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main.py
index dedc9c70c0..12e426e400 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main.py
@@ -1,29 +1,88 @@
"""
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
"""
-import os
import pytest
-import sys
-import ly_test_tools.environment.file_system as file_system
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../automatedtesting_shared')
-from base import TestAutomationBase
+from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-@pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
+class TestAutomation(EditorTestSuite):
- def test_LandscapeCanvas_SlotConnections_UpdateComponentReferences(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import SlotConnections_UpdateComponentReferences as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
+ class test_LandscapeCanvas_AreaNodes_DependentComponentsAdded(EditorSharedTest):
+ from .EditorScripts import AreaNodes_DependentComponentsAdded as test_module
- def test_LandscapeCanvas_GradientMixer_NodeConstruction(self, request, workspace, editor, launcher_platform):
+ class test_LandscapeCanvas_AreaNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
+ from .EditorScripts import AreaNodes_EntityCreatedOnNodeAdd as test_module
+
+ class test_LandscapeCanvas_AreaNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
+ from .EditorScripts import AreaNodes_EntityRemovedOnNodeDelete as test_module
+
+ class test_LandscapeCanvas_Component_AddedRemoved(EditorSharedTest):
+ from .EditorScripts import Component_AddedRemoved as test_module
+
+ class test_LandscapeCanvas_ComponentUpdates_UpdateGraph(EditorSharedTest):
+ from .EditorScripts import ComponentUpdates_UpdateGraph as test_module
+
+ class test_LandscapeCanvas_Edit_DisabledNodeDuplication(EditorSharedTest):
+ from .EditorScripts import Edit_DisabledNodeDuplication as test_module
+
+ class test_LandscapeCanvas_Edit_UndoNodeDelete_PrefabEntity(EditorSharedTest):
+ from .EditorScripts import Edit_UndoNodeDelete_PrefabEntity as test_module
+
+ class test_LandscapeCanvas_GradientMixer_NodeConstruction(EditorSharedTest):
from .EditorScripts import GradientMixer_NodeConstruction as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
+
+ class test_LandscapeCanvas_GradientModifierNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
+ from .EditorScripts import GradientModifierNodes_EntityCreatedOnNodeAdd as test_module
+
+ class test_LandscapeCanvas_GradientModifierNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
+ from .EditorScripts import GradientModifierNodes_EntityRemovedOnNodeDelete as test_module
+
+ class test_LandscapeCanvas_GradientNodes_DependentComponentsAdded(EditorSharedTest):
+ from .EditorScripts import GradientNodes_DependentComponentsAdded as test_module
+
+ class test_LandscapeCanvas_GradientNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
+ from .EditorScripts import GradientNodes_EntityCreatedOnNodeAdd as test_module
+
+ class test_LandscapeCanvas_GradientNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
+ from .EditorScripts import GradientNodes_EntityRemovedOnNodeDelete as test_module
+
+ @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/2201")
+ class test_LandscapeCanvas_GraphClosed_OnEntityDelete(EditorSharedTest):
+ from .EditorScripts import GraphClosed_OnEntityDelete as test_module
+
+ class test_LandscapeCanvas_GraphClosed_OnLevelChange(EditorSharedTest):
+ from .EditorScripts import GraphClosed_OnLevelChange as test_module
+
+ class test_LandscapeCanvas_GraphClosed_TabbedGraphClosesIndependently(EditorSharedTest):
+ from .EditorScripts import GraphClosed_TabbedGraph as test_module
+
+ @pytest.mark.skip(reason="https://github.com/o3de/o3de/issues/7141" "https://github.com/o3de/o3de/issues/4872")
+ class test_LandscapeCanvas_GraphUpdates_UpdateComponents(EditorSharedTest):
+ from .EditorScripts import GraphUpdates_UpdateComponents as test_module
+
+ class test_LandscapeCanvas_LayerBlender_NodeConstruction(EditorSharedTest):
+ from .EditorScripts import LayerBlender_NodeConstruction as test_module
+
+ class test_LandscapeCanvas_LayerExtenderNodes_ComponentEntitySync(EditorSharedTest):
+ from .EditorScripts import LayerExtenderNodes_ComponentEntitySync as test_module
+
+ class test_LandscapeCanvas_NewGraph_CreatedSuccessfully(EditorSharedTest):
+ from .EditorScripts import NewGraph_CreatedSuccessfully as test_module
+
+ class test_LandscapeCanvas_Prefab_CreateInstantiate(EditorSharedTest):
+ from .EditorScripts import Prefab_CreateInstantiate as test_module
+
+ class test_LandscapeCanvas_ShapeNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
+ from .EditorScripts import ShapeNodes_EntityCreatedOnNodeAdd as test_module
+
+ class test_LandscapeCanvas_ShapeNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
+ from .EditorScripts import ShapeNodes_EntityRemovedOnNodeDelete as test_module
+
+ class test_LandscapeCanvas_SlotConnections_UpdateComponentReferences(EditorSharedTest):
+ from .EditorScripts import SlotConnections_UpdateComponentReferences as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main_Optimized.py
deleted file mode 100644
index 402df133cb..0000000000
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Main_Optimized.py
+++ /dev/null
@@ -1,100 +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
-"""
-
-import os
-import pytest
-
-import ly_test_tools.environment.file_system as file_system
-import ly_test_tools._internal.pytest_plugin as internal_plugin
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.SUITE_periodic
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(EditorTestSuite):
-
- enable_prefab_system = False
-
- class test_LandscapeCanvas_SlotConnections_UpdateComponentReferences(EditorSharedTest):
- from .EditorScripts import SlotConnections_UpdateComponentReferences as test_module
-
- class test_LandscapeCanvas_GradientMixer_NodeConstruction(EditorSharedTest):
- from .EditorScripts import GradientMixer_NodeConstruction as test_module
-
- class test_LandscapeCanvas_AreaNodes_DependentComponentsAdded(EditorSharedTest):
- from .EditorScripts import AreaNodes_DependentComponentsAdded as test_module
-
- class test_LandscapeCanvas_AreaNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
- from .EditorScripts import AreaNodes_EntityCreatedOnNodeAdd as test_module
-
- class test_LandscapeCanvas_AreaNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
- from .EditorScripts import AreaNodes_EntityRemovedOnNodeDelete as test_module
-
- class test_LandscapeCanvas_LayerExtenderNodes_ComponentEntitySync(EditorSharedTest):
- from .EditorScripts import LayerExtenderNodes_ComponentEntitySync as test_module
-
- class test_LandscapeCanvas_Edit_DisabledNodeDuplication(EditorSharedTest):
- from .EditorScripts import Edit_DisabledNodeDuplication as test_module
-
- class test_LandscapeCanvas_Edit_UndoNodeDelete_SliceEntity(EditorSharedTest):
- from .EditorScripts import Edit_UndoNodeDelete_SliceEntity as test_module
-
- class test_LandscapeCanvas_NewGraph_CreatedSuccessfully(EditorSharedTest):
- from .EditorScripts import NewGraph_CreatedSuccessfully as test_module
-
- class test_LandscapeCanvas_Component_AddedRemoved(EditorSharedTest):
- from .EditorScripts import Component_AddedRemoved as test_module
-
- class test_LandscapeCanvas_GraphClosed_OnLevelChange(EditorSharedTest):
- from .EditorScripts import GraphClosed_OnLevelChange as test_module
-
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/2201")
- class test_LandscapeCanvas_GraphClosed_OnEntityDelete(EditorSharedTest):
- from .EditorScripts import GraphClosed_OnEntityDelete as test_module
-
- class test_LandscapeCanvas_GraphClosed_TabbedGraphClosesIndependently(EditorSharedTest):
- from .EditorScripts import GraphClosed_TabbedGraph as test_module
-
- class test_LandscapeCanvas_Slice_CreateInstantiate(EditorSingleTest):
- from .EditorScripts import Slice_CreateInstantiate as test_module
- # Custom teardown to remove slice asset created during test
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "slices",
- "TestSlice.slice")], True, True)
-
- class test_LandscapeCanvas_GradientModifierNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
- from .EditorScripts import GradientModifierNodes_EntityCreatedOnNodeAdd as test_module
-
- class test_LandscapeCanvas_GradientModifierNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
- from .EditorScripts import GradientModifierNodes_EntityRemovedOnNodeDelete as test_module
-
- class test_LandscapeCanvas_GradientNodes_DependentComponentsAdded(EditorSharedTest):
- from .EditorScripts import GradientNodes_DependentComponentsAdded as test_module
-
- class test_LandscapeCanvas_GradientNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
- from .EditorScripts import GradientNodes_EntityCreatedOnNodeAdd as test_module
-
- class test_LandscapeCanvas_GradientNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
- from .EditorScripts import GradientNodes_EntityRemovedOnNodeDelete as test_module
-
- @pytest.mark.skipif("debug" == os.path.basename(internal_plugin.build_directory),
- reason="https://github.com/o3de/o3de/issues/4872")
- class test_LandscapeCanvas_GraphUpdates_UpdateComponents(EditorSharedTest):
- from .EditorScripts import GraphUpdates_UpdateComponents as test_module
-
- class test_LandscapeCanvas_ComponentUpdates_UpdateGraph(EditorSharedTest):
- from .EditorScripts import ComponentUpdates_UpdateGraph as test_module
-
- class test_LandscapeCanvas_LayerBlender_NodeConstruction(EditorSharedTest):
- from .EditorScripts import LayerBlender_NodeConstruction as test_module
-
- class test_LandscapeCanvas_ShapeNodes_EntityCreatedOnNodeAdd(EditorSharedTest):
- from .EditorScripts import ShapeNodes_EntityCreatedOnNodeAdd as test_module
-
- class test_LandscapeCanvas_ShapeNodes_EntityRemovedOnNodeDelete(EditorSharedTest):
- from .EditorScripts import ShapeNodes_EntityRemovedOnNodeDelete as test_module
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Periodic.py
deleted file mode 100644
index a719b1a7c0..0000000000
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/landscape_canvas/TestSuite_Periodic.py
+++ /dev/null
@@ -1,121 +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
-"""
-
-import os
-import pytest
-import sys
-
-import ly_test_tools.environment.file_system as file_system
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.fixture
-def remove_test_slice(request, workspace, project):
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "slices", "TestSlice.slice")], True, True)
-
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "slices", "TestSlice.slice")], True,
- True)
-
- request.addfinalizer(teardown)
-
-
-@pytest.mark.SUITE_periodic
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
-
- def test_LandscapeCanvas_AreaNodes_DependentComponentsAdded(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AreaNodes_DependentComponentsAdded as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_AreaNodes_EntityCreatedOnNodeAdd(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AreaNodes_EntityCreatedOnNodeAdd as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_AreaNodes_EntityRemovedOnNodeDelete(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AreaNodes_EntityRemovedOnNodeDelete as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_LayerExtenderNodes_ComponentEntitySync(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerExtenderNodes_ComponentEntitySync as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_Edit_DisabledNodeDuplication(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Edit_DisabledNodeDuplication as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_Edit_UndoNodeDelete_SliceEntity(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Edit_UndoNodeDelete_SliceEntity as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_NewGraph_CreatedSuccessfully(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import NewGraph_CreatedSuccessfully as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_Component_AddedRemoved(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Component_AddedRemoved as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GraphClosed_OnLevelChange(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GraphClosed_OnLevelChange as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- @pytest.mark.xfail(reason="https://github.com/o3de/o3de/issues/2201")
- def test_LandscapeCanvas_GraphClosed_OnEntityDelete(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GraphClosed_OnEntityDelete as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GraphClosed_TabbedGraphClosesIndependently(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GraphClosed_TabbedGraph as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_Slice_CreateInstantiate(self, request, workspace, editor, remove_test_slice, launcher_platform):
- from .EditorScripts import Slice_CreateInstantiate as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GradientModifierNodes_EntityCreatedOnNodeAdd(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientModifierNodes_EntityCreatedOnNodeAdd as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GradientModifierNodes_EntityRemovedOnNodeDelete(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientModifierNodes_EntityRemovedOnNodeDelete as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GradientNodes_DependentComponentsAdded(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientNodes_DependentComponentsAdded as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GradientNodes_EntityCreatedOnNodeAdd(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientNodes_EntityCreatedOnNodeAdd as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GradientNodes_EntityRemovedOnNodeDelete(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GradientNodes_EntityRemovedOnNodeDelete as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_GraphUpdates_UpdateComponents(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import GraphUpdates_UpdateComponents as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_ComponentUpdates_UpdateGraph(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ComponentUpdates_UpdateGraph as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_LayerBlender_NodeConstruction(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import LayerBlender_NodeConstruction as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_ShapeNodes_EntityCreatedOnNodeAdd(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ShapeNodes_EntityCreatedOnNodeAdd as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
-
- def test_LandscapeCanvas_ShapeNodes_EntityRemovedOnNodeDelete(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ShapeNodes_EntityRemovedOnNodeDelete as test_module
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=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 37afeff8c0..fd6a907b2e 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
@@ -114,7 +114,8 @@ def create_dynamic_slice_vegetation_area(name, center_point, box_size_x, box_siz
return spawner_entity
-def create_prefab_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_z, target_prefab):
+def create_temp_prefab_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_z, target_prefab):
+ """Creates a vegetation area using in-memory prefabs. Use when test is solely contained to Editor"""
# Create a vegetation area entity to use as our test vegetation spawner
spawner_entity = hydra.Entity(name)
spawner_entity.create_entity(
@@ -148,6 +149,31 @@ def create_prefab_vegetation_area(name, center_point, box_size_x, box_size_y, bo
return spawner_entity
+def create_prefab_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_z, prefab_path):
+ """Creates a vegetation area using on-disk spawnable prefabs. Use when test requires saving/loading in Launcher"""
+ # Create a vegetation area entity to use as our test vegetation spawner
+ prefab_asset_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", prefab_path, math.Uuid(),
+ False)
+ spawner_entity = hydra.Entity(name)
+ spawner_entity.create_entity(
+ center_point,
+ ["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List"]
+ )
+ if spawner_entity.id.IsValid():
+ print(f"'{spawner_entity.name}' created")
+ spawner_entity.get_set_test(1, "Box Shape|Box Configuration|Dimensions", math.Vector3(box_size_x, box_size_y,
+ box_size_z))
+
+ # Set the vegetation area to a prefab instance spawner with a specific prefab asset selected
+ descriptor = hydra.get_component_property_value(spawner_entity.components[2],
+ 'Configuration|Embedded Assets|[0]')
+ prefab_spawner = vegetation.PrefabInstanceSpawner()
+ prefab_spawner.SetPrefabAssetId(prefab_asset_id)
+ descriptor.spawner = prefab_spawner
+ spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[0]", descriptor)
+ return spawner_entity
+
+
def create_blocker_area(name, center_point, box_size_x, box_size_y, box_size_z):
# Create a Vegetation Layer Blocker area
blocker_entity = hydra.Entity(name)
@@ -162,6 +188,23 @@ def create_blocker_area(name, center_point, box_size_x, box_size_y, box_size_z):
return blocker_entity
+def create_empty_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_z):
+ # Create a vegetation area entity to use as our test vegetation spawner
+ spawner_entity = EditorEntity.create_editor_entity_at(center_point, name=name)
+ spawner_entity.add_components(["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List"])
+ if spawner_entity.id.IsValid():
+ print(f"'{spawner_entity.get_name()}' created")
+ spawner_entity.components[1].set_component_property_value("Box Shape|Box Configuration|Dimensions",
+ math.Vector3(box_size_x, box_size_y, box_size_z))
+
+ # Set the vegetation area to an empty spawner
+ empty_spawner = vegetation.EmptyInstanceSpawner()
+ descriptor = spawner_entity.components[2].get_component_property_value("Configuration|Embedded Assets|[0]")
+ descriptor.spawner = empty_spawner
+ spawner_entity.components[2].set_component_property_value("Configuration|Embedded Assets|[0]", descriptor)
+ return spawner_entity
+
+
def validate_instance_count(center, radius, num_expected):
# Verify that we have the correct number of instances in the given area. This creates a bounding box based on a
# sphere radius
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
index 5d0808adb6..69d411536f 100644
--- a/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
@@ -31,19 +31,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
Smoke
)
- ly_add_pytest(
- NAME AutomatedTesting::EditorTestWithGPU
- TEST_REQUIRES gpu
- PATH ${CMAKE_CURRENT_LIST_DIR}/test_Editor_NewExistingLevels_Works.py
- TIMEOUT 100
- RUNTIME_DEPENDENCIES
- AZ::AssetProcessor
- AZ::PythonBindingsExample
- Legacy::Editor
- AutomatedTesting.GameLauncher
- AutomatedTesting.Assets
- )
-
ly_add_pytest(
NAME AutomatedTesting::GameLauncherWithGPU
TEST_SUITE sandbox
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/Editor_NewExistingLevels_Works.py b/AutomatedTesting/Gem/PythonTests/smoke/Editor_NewExistingLevels_Works.py
deleted file mode 100644
index 71956488fc..0000000000
--- a/AutomatedTesting/Gem/PythonTests/smoke/Editor_NewExistingLevels_Works.py
+++ /dev/null
@@ -1,143 +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
-
-
-Test Case Title: Create Test for UI apps- Editor
-"""
-
-
-class Tests():
- level_created = ("Level created", "Failed to create level")
- entity_found = ("New Entity created in level", "Failed to create New Entity in level")
- mesh_added = ("Mesh Component added", "Failed to add Mesh Component")
- enter_game_mode = ("Game Mode successfully entered", "Failed to enter in Game Mode")
- exit_game_mode = ("Game Mode successfully exited", "Failed to exit in Game Mode")
- level_opened = ("Level opened successfully", "Failed to open level")
- level_exported = ("Level exported successfully", "Failed to export level")
- mesh_removed = ("Mesh Component removed", "Failed to remove Mesh Component")
- entity_deleted = ("Entity deleted", "Failed to delete Entity")
- level_edits_present = ("Level edits persist after saving", "Failed to save level edits after saving")
-
-
-def Editor_NewExistingLevels_Works():
- """
- Summary: Perform the below operations on Editor
-
- 1) Launch & Close editor
- 2) Create new level
- 3) Saving and loading levels
- 4) Level edits persist after saving
- 5) Export Level
- 6) Can switch to play mode (ctrl+g) and exit that
- 7) Run editor python bindings test
- 8) Create an Entity
- 9) Delete an Entity
- 10) Add a component to an Entity
-
- Expected Behavior:
- All operations succeed and do not cause a crash
-
- Test Steps:
- 1) Launch editor and Create a new level
- 2) Create a new entity
- 3) Add Mesh component
- 4) Verify enter/exit game mode
- 5) Save, Load and Export level
- 6) Remove Mesh component
- 7) Delete entity
- 8) Open an existing level
- 9) Create a new entity in an existing level
- 10) Save, Load and Export an existing level and close editor
-
- Note:
- - This test file must be called from the O3DE Editor command terminal
- - Any passed and failed tests are written to the Editor.log file.
- Parsing the file or running a log_monitor are required to observe the test results.
-
- :return: None
- """
-
- import os
- import editor_python_test_tools.hydra_editor_utils as hydra
- from editor_python_test_tools.utils import TestHelper as helper
- from editor_python_test_tools.utils import Report
- import azlmbr.bus as bus
- import azlmbr.editor as editor
- import azlmbr.legacy.general as general
- import azlmbr.math as math
-
- # 1) Launch editor and Create a new level
- helper.init_idle()
- test_level_name = "temp_level"
- general.create_level_no_prompt(test_level_name, 128, 1, 128, False)
- helper.wait_for_condition(lambda: general.get_current_level_name() == test_level_name, 2.0)
- Report.result(Tests.level_created, general.get_current_level_name() == test_level_name)
-
- # 2) Create a new entity
- entity_position = math.Vector3(200.0, 200.0, 38.0)
- new_entity = hydra.Entity("Entity1")
- new_entity.create_entity(entity_position, [])
- test_entity = hydra.find_entity_by_name("Entity1")
- Report.result(Tests.entity_found, test_entity.IsValid())
-
- # 3) Add Mesh component
- new_entity.add_component("Mesh")
- Report.result(Tests.mesh_added, hydra.has_components(new_entity.id, ["Mesh"]))
-
- # 4) Verify enter/exit game mode
- helper.enter_game_mode(Tests.enter_game_mode)
- helper.exit_game_mode(Tests.exit_game_mode)
-
- # 5) Save, Load and Export level
- # Save Level
- general.save_level()
- # Open Level
- general.open_level(test_level_name)
- Report.result(Tests.level_opened, general.get_current_level_name() == test_level_name)
- # Export Level
- general.export_to_engine()
- level_pak_file = os.path.join("AutomatedTesting", "Levels", test_level_name, "level.pak")
- Report.result(Tests.level_exported, os.path.exists(level_pak_file))
-
- # 6) Remove Mesh component
- new_entity.remove_component("Mesh")
- Report.result(Tests.mesh_removed, not hydra.has_components(new_entity.id, ["Mesh"]))
-
- # 7) Delete entity
- editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntityById", new_entity.id)
- test_entity = hydra.find_entity_by_name("Entity1")
- Report.result(Tests.entity_deleted, len(test_entity) == 0)
-
- # 8) Open an existing level
- general.open_level(test_level_name)
- Report.result(Tests.level_opened, general.get_current_level_name() == test_level_name)
-
- # 9) Create a new entity in an existing level
- entity_position = math.Vector3(200.0, 200.0, 38.0)
- new_entity_2 = hydra.Entity("Entity2")
- new_entity_2.create_entity(entity_position, [])
- test_entity = hydra.find_entity_by_name("Entity2")
- Report.result(Tests.entity_found, test_entity.IsValid())
-
- # 10) Save, Load and Export an existing level
- # Save Level
- general.save_level()
- # Open Level
- general.open_level(test_level_name)
- Report.result(Tests.level_opened, general.get_current_level_name() == test_level_name)
- entity_id = hydra.find_entity_by_name(new_entity_2.name)
- Report.result(Tests.level_edits_present, entity_id == new_entity_2.id)
- # Export Level
- general.export_to_engine()
- level_pak_file = os.path.join("AutomatedTesting", "Levels", test_level_name, "level.pak")
- Report.result(Tests.level_exported, os.path.exists(level_pak_file))
-
-
-if __name__ == "__main__":
-
- from editor_python_test_tools.utils import Report
-
- Report.start_test(Editor_NewExistingLevels_Works)
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/test_Editor_NewExistingLevels_Works.py b/AutomatedTesting/Gem/PythonTests/smoke/test_Editor_NewExistingLevels_Works.py
deleted file mode 100644
index 5caf7744c4..0000000000
--- a/AutomatedTesting/Gem/PythonTests/smoke/test_Editor_NewExistingLevels_Works.py
+++ /dev/null
@@ -1,34 +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
-
-
-Test should run in both gpu and non gpu
-"""
-
-import pytest
-import os
-from automatedtesting_shared.base import TestAutomationBase
-
-import ly_test_tools
-import ly_test_tools.environment.file_system as file_system
-
-
-@pytest.mark.SUITE_smoke
-@pytest.mark.skipif(not ly_test_tools.WINDOWS, reason="Only succeeds on windows https://github.com/o3de/o3de/issues/5539")
-@pytest.mark.parametrize("launcher_platform", ["windows_editor"])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("level", ["temp_level"])
-class TestAutomation(TestAutomationBase):
- def test_Editor_NewExistingLevels_Works(self, request, workspace, editor, level, project, launcher_platform):
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- request.addfinalizer(teardown)
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- from . import Editor_NewExistingLevels_Works as test_module
-
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material
index cc2c9e785b..d15aa620c7 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material
index a4bfb73d12..579359b085 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material
index fe9c54bc02..88d5fc0fc6 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material
index a19afa33e2..7244397ee9 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material
index 0c1208d8fb..8a3f289c26 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material
index 6aad4d644a..7bc193978f 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material
index 302589dc85..a53cbef4e4 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material
index 5217a4e4be..6ddb645319 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material
index dba44f7b49..e3d310cd15 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"emissive": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material b/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material
index c8e9f1f8f7..35677a81c6 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"emissive": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/gem.json b/AutomatedTesting/Gem/Sponza/gem.json
index 68749cd5f4..f36b22a805 100644
--- a/AutomatedTesting/Gem/Sponza/gem.json
+++ b/AutomatedTesting/Gem/Sponza/gem.json
@@ -4,14 +4,19 @@
"license": "Apache-2.0 Or MIT",
"license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
"origin": "Open 3D Engine - o3de.org",
+ "origin_url": "https://github.com/o3de/o3de",
"type": "Asset",
"summary": "A standard test scene for Global Illumination (forked from crytek sponza scene)",
"canonical_tags": [
- "Gem"
+ "Gem",
+ "Asset"
],
"user_tags": [
- "Assets"
+ "Sponza"
],
+ "icon_path": "preview.png",
"requirements": "",
- "dependencies": []
+ "documentation_url": "",
+ "dependencies": [
+ ]
}
diff --git a/AutomatedTesting/Gem/Sponza/preview.png b/AutomatedTesting/Gem/Sponza/preview.png
new file mode 100644
index 0000000000..2979dbb6a4
--- /dev/null
+++ b/AutomatedTesting/Gem/Sponza/preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de0e6e480ece5b423222f4feacf56553d73713fe9afea8bbc9a2660a3cd54ec7
+size 1232
diff --git a/AutomatedTesting/Gem/gem.json b/AutomatedTesting/Gem/gem.json
index df197df09d..90a0c8cb01 100644
--- a/AutomatedTesting/Gem/gem.json
+++ b/AutomatedTesting/Gem/gem.json
@@ -3,13 +3,21 @@
"display_name": "AutomatedTesting",
"license": "Apache-2.0 Or MIT",
"license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
- "origin": "Amazon Web Services, Inc.",
+ "origin": "Open 3D Engine - o3de.org",
+ "origin_url": "https://github.com/o3de/o3de",
"type": "Code",
"summary": "Project Gem for customizing the AutomatedTesting project functionality.",
"canonical_tags": [
"Gem"
],
- "user_tags": [],
+ "user_tags": [
+ "AutomatedTesting"
+ ],
"icon_path": "preview.png",
- "requirements": ""
+ "requirements": "",
+ "documentation_url": "",
+ "dependencies": [],
+ "external_subdirectories": [
+ "PythonCoverage"
+ ]
}
diff --git a/AutomatedTesting/Gem/preview.png b/AutomatedTesting/Gem/preview.png
index 2f1ed47754..2979dbb6a4 100644
--- a/AutomatedTesting/Gem/preview.png
+++ b/AutomatedTesting/Gem/preview.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6d6204c6730e5675791765ca194e9b1cbec282208e280507de830afc2805e5fa
-size 41127
+oid sha256:de0e6e480ece5b423222f4feacf56553d73713fe9afea8bbc9a2660a3cd54ec7
+size 1232
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/PbrMaterialChart.prefab b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/PbrMaterialChart.prefab
similarity index 97%
rename from AutomatedTesting/Levels/PbrMaterialChart/PbrMaterialChart.prefab
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/PbrMaterialChart.prefab
index faa93597de..2c0ee5cb1a 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/PbrMaterialChart.prefab
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/PbrMaterialChart.prefab
@@ -1474,9 +1474,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{1FD47684-2E9E-5525-BBCA-251795F9033C}"
+ "guid": "{12B5A321-3D64-5DF6-9E15-D8F447229EC1}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r00.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r00.azmaterial"
}
}
}
@@ -1569,9 +1569,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{B5660D78-818E-5273-AF3D-EC8189E2E6CB}"
+ "guid": "{EB8B9C49-D6F4-5098-AC97-543381E2554A}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r01.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r01.azmaterial"
}
}
}
@@ -1824,9 +1824,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{512443BD-9511-5F13-A84A-3ED5DB9E9B5A}"
+ "guid": "{CAA9CAFC-8A48-5406-BE26-448E5AA1A5B0}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r02.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r02.azmaterial"
}
}
}
@@ -1926,9 +1926,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{E28A5CC5-4B8B-5B90-877A-3D92C75DC75A}"
+ "guid": "{2F338C0B-EF86-5AC4-AEE6-28A26BB9E97E}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r03.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r03.azmaterial"
}
}
}
@@ -2028,9 +2028,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{1495BCCF-3F96-5D0B-8176-228DB22CEC82}"
+ "guid": "{9BF4E656-0D4F-5746-A256-32740742712B}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r04.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r04.azmaterial"
}
}
}
@@ -2130,9 +2130,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{40494612-0ABF-55B5-9C56-E968763FCFDE}"
+ "guid": "{850398D7-386A-56C6-AEB2-95E4F64368B1}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r05.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r05.azmaterial"
}
}
}
@@ -2232,9 +2232,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{76CF9D4A-009F-5494-83AB-6E3D4D1B4A36}"
+ "guid": "{74784C2A-A713-5C6A-8B3D-B66CAE3DD055}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r06.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r06.azmaterial"
}
}
}
@@ -2334,9 +2334,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{8431B792-E6CC-51DD-B82E-F3E4A12FCB4A}"
+ "guid": "{4F9F91F7-7E22-5A14-856D-194CC258E70D}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r07.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r07.azmaterial"
}
}
}
@@ -2436,9 +2436,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{4B1F29FF-7971-5524-AA1B-0DC2392A33C4}"
+ "guid": "{842AE870-802B-5934-997F-0965F960ECB9}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r08.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r08.azmaterial"
}
}
}
@@ -2538,9 +2538,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{785BE6DE-C0EB-5B47-9438-4F9ECFC34A96}"
+ "guid": "{0184CF10-E675-5C33-B1B9-009C383AB463}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r09.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r09.azmaterial"
}
}
}
@@ -2640,9 +2640,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{C40DE9AE-6756-57E7-B3B4-FB0542B5CD0F}"
+ "guid": "{6DDA0761-C165-58CC-B45E-03C29F0CF598}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r10.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r10.azmaterial"
}
}
}
@@ -2896,9 +2896,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{251C4C29-4ECD-5763-AF4F-20675EAC048B}"
+ "guid": "{101AB53A-3B3E-5ACF-841C-65DB2BFBF305}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r04.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r04.azmaterial"
}
}
}
@@ -2998,9 +2998,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{02D082C4-5032-57CC-A081-BC4D8518BCF0}"
+ "guid": "{B82B96D6-7511-5E22-A36E-FFF682B3236B}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r05.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r05.azmaterial"
}
}
}
@@ -3100,9 +3100,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{FA9D8842-95B2-5371-8352-CBEEEAABE676}"
+ "guid": "{DBED5292-3E17-5038-9974-80A8BB1F79E8}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r06.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r06.azmaterial"
}
}
}
@@ -3202,9 +3202,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{522A9626-FF4C-561A-A44A-64B68F7274D2}"
+ "guid": "{25F07733-365C-5826-AEE3-E92FBE807555}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r07.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r07.azmaterial"
}
}
}
@@ -3304,9 +3304,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{06DDFD66-D7F5-5D55-8972-6D61276E88F6}"
+ "guid": "{C9A7B916-CF71-5A34-B9B9-54FE8CB058DC}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r00.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r00.azmaterial"
}
}
}
@@ -3399,9 +3399,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{060EF1B7-1029-5227-B03B-1415C74E9D65}"
+ "guid": "{85C8DFC5-358D-579D-B922-14FA1B401571}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r08.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r08.azmaterial"
}
}
}
@@ -3501,9 +3501,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{7B7BC6F8-150A-518F-816E-2F7DBE786461}"
+ "guid": "{51924281-7A06-5654-B783-A4F5759063ED}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r01.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r01.azmaterial"
}
}
}
@@ -3603,9 +3603,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{270881B6-21E9-509D-A6CD-1046674FB0BE}"
+ "guid": "{7877F64E-26E3-558C-B6D9-B609ED6E43BF}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r09.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r09.azmaterial"
}
}
}
@@ -3705,9 +3705,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{C0538953-C56E-5C1A-BBE2-E6BE04764C20}"
+ "guid": "{6CC3C6B9-EE05-5A77-A12D-7085D93D89DB}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r02.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r02.azmaterial"
}
}
}
@@ -3874,9 +3874,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{5EA26E09-E3D6-5181-8E7A-F2E98A24247C}"
+ "guid": "{E6E15876-EEF3-555D-BD80-1B9D5A7ECC7D}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r10.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r10.azmaterial"
}
}
}
@@ -3976,9 +3976,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{E1A5D708-7A49-5CCA-81C3-4CB337C47703}"
+ "guid": "{83179EEC-BAC7-5D39-9788-37D33E9584B1}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r03.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r03.azmaterial"
}
}
}
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic.material
similarity index 95%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic.material
index 32ac8dfd10..6af3ceb0c1 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic.material
@@ -1,6 +1,6 @@
{
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"baseColor": {
"color": [ 1.0, 1.0, 1.0 ],
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r00.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r00.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r00.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r00.material
index 1c1096bf12..541bd83981 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r00.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r00.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r01.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r01.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r01.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r01.material
index 33148f3f73..19691258e0 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r01.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r01.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r02.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r02.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r02.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r02.material
index 38339454cb..46fda2aab1 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r02.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r02.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r03.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r03.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r03.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r03.material
index e21ab5775a..79cf4bf401 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r03.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r03.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r04.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r04.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r04.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r04.material
index 0272e66081..9aabf3e158 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r04.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r04.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r05.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r05.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r05.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r05.material
index 67d51777a4..8b02f225fc 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r05.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r05.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r06.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r06.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r06.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r06.material
index 3136f654e6..5b089da4bd 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r06.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r06.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r07.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r07.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r07.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r07.material
index a79744ea11..25741cf689 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r07.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r07.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r08.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r08.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r08.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r08.material
index 1372283500..04103273f2 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r08.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r08.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r09.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r09.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r09.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r09.material
index d1c951e53c..74eb68da99 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r09.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r09.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r10.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r10.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r10.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r10.material
index d34fc46530..3533ca6676 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r10.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r10.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r00.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r00.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r00.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r00.material
index 92ddfec7c4..d2ce0fadc9 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r00.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r00.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r01.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r01.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r01.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r01.material
index 874422384a..8d96ea6217 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r01.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r01.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r02.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r02.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r02.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r02.material
index b017add10b..e8feb87283 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r02.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r02.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r03.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r03.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r03.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r03.material
index 5353d651c8..c14591bd52 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r03.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r03.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r04.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r04.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r04.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r04.material
index 6dd47e4e3b..60a3167f02 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r04.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r04.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r05.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r05.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r05.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r05.material
index 04912cbfd4..d71ff06961 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r05.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r05.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r06.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r06.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r06.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r06.material
index 27f7f6ff42..6fa8cfe1a6 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r06.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r06.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r07.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r07.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r07.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r07.material
index e2b5df681c..773cc66f03 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r07.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r07.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r08.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r08.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r08.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r08.material
index 5418f9c855..6971597d1d 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r08.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r08.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r09.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r09.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r09.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r09.material
index dd1ec3489a..c2d8cc47bd 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r09.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r09.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r10.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r10.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r10.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r10.material
index 5f9317d2cc..906879b0ea 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r10.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r10.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/tags.txt b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/PbrMaterialChart/tags.txt
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/tags.txt
diff --git a/AutomatedTesting/Levels/Sponza/Sponza.prefab b/AutomatedTesting/Levels/Graphics/Sponza/Sponza.prefab
similarity index 100%
rename from AutomatedTesting/Levels/Sponza/Sponza.prefab
rename to AutomatedTesting/Levels/Graphics/Sponza/Sponza.prefab
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/tags.txt b/AutomatedTesting/Levels/Graphics/Sponza/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/tags.txt
rename to AutomatedTesting/Levels/Graphics/Sponza/tags.txt
diff --git a/AutomatedTesting/Levels/Graphics/base_empty/base_empty.prefab b/AutomatedTesting/Levels/Graphics/base_empty/base_empty.prefab
new file mode 100644
index 0000000000..f7e42e7731
--- /dev/null
+++ b/AutomatedTesting/Levels/Graphics/base_empty/base_empty.prefab
@@ -0,0 +1,53 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/tags.txt b/AutomatedTesting/Levels/Graphics/base_empty/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/tags.txt
rename to AutomatedTesting/Levels/Graphics/base_empty/tags.txt
diff --git a/AutomatedTesting/Levels/macbeth_shaderballs/macbeth_shaderballs.prefab b/AutomatedTesting/Levels/Graphics/macbeth_shaderballs/macbeth_shaderballs.prefab
similarity index 100%
rename from AutomatedTesting/Levels/macbeth_shaderballs/macbeth_shaderballs.prefab
rename to AutomatedTesting/Levels/Graphics/macbeth_shaderballs/macbeth_shaderballs.prefab
diff --git a/AutomatedTesting/Levels/Sponza/tags.txt b/AutomatedTesting/Levels/Graphics/macbeth_shaderballs/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Sponza/tags.txt
rename to AutomatedTesting/Levels/Graphics/macbeth_shaderballs/tags.txt
diff --git a/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.prefab b/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.prefab
index 758cb4fca8..35d5ef9527 100644
--- a/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.prefab
+++ b/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.prefab
@@ -568,22 +568,10 @@
"$type": "EditorScriptCanvasComponent",
"Id": 14750978061505735417,
"m_name": "GlobalGameData",
- "m_assetHolder": {
- "m_asset": {
- "assetId": {
- "guid": "{B16589A0-EA01-56BC-8141-91A3967FB95F}"
- },
- "assetHint": "levels/multiplayer/autocomponent_rpc/globalgamedata.scriptcanvas"
- }
- },
"runtimeDataIsValid": true,
- "runtimeDataOverrides": {
- "source": {
- "assetId": {
- "guid": "{B16589A0-EA01-56BC-8141-91A3967FB95F}"
- },
- "assetHint": "levels/multiplayer/autocomponent_rpc/globalgamedata.scriptcanvas"
- }
+ "sourceHandle": {
+ "id": "{B16589A0-EA01-56BC-8141-91A3967FB95F}",
+ "path": "levels/multiplayer/autocomponent_rpc/globalgamedata.scriptcanvas"
}
},
"Component_[16436925042043744033]": {
@@ -636,6 +624,13 @@
"$type": "SelectionComponent",
"Id": 12302672911455629152
},
+ "Component_[12517591696100736853]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 12517591696100736853,
+ "m_template": {
+ "$type": "AutomatedTesting::NetworkTestLevelEntityComponent"
+ }
+ },
"Component_[14169903623243423134]": {
"$type": "EditorVisibilityComponent",
"Id": 14169903623243423134
@@ -644,13 +639,6 @@
"$type": "EditorInspectorComponent",
"Id": 14607413934411389854
},
- "Component_[15396284312416541768]": {
- "$type": "GenericComponentWrapper",
- "Id": 15396284312416541768,
- "m_template": {
- "$type": "Multiplayer::LocalPredictionPlayerInputComponent"
- }
- },
"Component_[15494977028055234270]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 15494977028055234270
@@ -682,22 +670,10 @@
"$type": "EditorScriptCanvasComponent",
"Id": 7256163899440301540,
"m_name": "AutoComponent_RPC_NetLevelEntity",
- "m_assetHolder": {
- "m_asset": {
- "assetId": {
- "guid": "{1D517006-AC01-5ECA-AE66-0E007871F0CD}"
- },
- "assetHint": "levels/multiplayer/autocomponent_rpc/autocomponent_rpc_netlevelentity.scriptcanvas"
- }
- },
"runtimeDataIsValid": true,
- "runtimeDataOverrides": {
- "source": {
- "assetId": {
- "guid": "{1D517006-AC01-5ECA-AE66-0E007871F0CD}"
- },
- "assetHint": "levels/multiplayer/autocomponent_rpc/autocomponent_rpc_netlevelentity.scriptcanvas"
- }
+ "sourceHandle": {
+ "id": "{1D517006-AC01-5ECA-AE66-0E007871F0CD}",
+ "path": "levels/multiplayer/autocomponent_rpc/autocomponent_rpc_netlevelentity.scriptcanvas"
}
},
"Component_[731336627222243355]": {
@@ -730,13 +706,6 @@
"$type": "NetBindComponent"
}
},
- "Component_[9816897251206708579]": {
- "$type": "GenericComponentWrapper",
- "Id": 9816897251206708579,
- "m_template": {
- "$type": "AutomatedTesting::NetworkTestPlayerComponent"
- }
- },
"Component_[9880860858035405475]": {
"$type": "EditorOnlyEntityComponent",
"Id": 9880860858035405475
diff --git a/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.scriptcanvas b/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.scriptcanvas
index c1c77b14fe..7f3f8181ae 100644
--- a/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.scriptcanvas
+++ b/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC.scriptcanvas
@@ -5,7 +5,7 @@
"ClassData": {
"m_scriptCanvas": {
"Id": {
- "id": 2816238339133127497
+ "id": 8397436129732444837
},
"Name": "AutoComponent_RPC",
"Components": {
@@ -37,7 +37,7 @@
}
},
"Component_[9755768666831861951]": {
- "$type": "{4D755CA9-AB92-462C-B24F-0B3376F19967} Graph",
+ "$type": "EditorGraph",
"Id": 9755768666831861951,
"m_graphData": {
"m_nodes": [
@@ -1734,6 +1734,1542 @@
{
"m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
},
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
{
"m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
}
@@ -3272,6 +4808,1542 @@
{
"m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
},
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
+ {
+ "m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
+ },
{
"m_id": "{82D3E2FD-ADFA-47F7-A889-D1172BF2EC49}"
}
@@ -4723,7 +7795,7 @@
"{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
"$type": "GeometrySaveData",
"Position": [
- 380.0,
+ 360.0,
620.0
]
},
@@ -4953,15 +8025,16 @@
},
{
"Key": {
- "id": 2816238339133127497
+ "id": 8397436129732444837
},
"Value": {
"ComponentData": {
"{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
"$type": "SceneComponentSaveData",
"ViewParams": {
- "AnchorX": 260.0,
- "AnchorY": 479.0
+ "Scale": 0.8049999999999999,
+ "AnchorX": -166.45962524414063,
+ "AnchorY": -216.14906311035156
}
}
}
diff --git a/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC_NetLevelEntity.scriptcanvas b/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC_NetLevelEntity.scriptcanvas
index 3869dfdfcb..70730a4496 100644
--- a/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC_NetLevelEntity.scriptcanvas
+++ b/AutomatedTesting/Levels/Multiplayer/AutoComponent_RPC/AutoComponent_RPC_NetLevelEntity.scriptcanvas
@@ -5,15 +5,120 @@
"ClassData": {
"m_scriptCanvas": {
"Id": {
- "id": 1685762441320719908
+ "id": 7558387155527535988
},
"Name": "AutoComponent_RPC_NetLevelEntity",
"Components": {
"Component_[2936040539888065977]": {
- "$type": "{4D755CA9-AB92-462C-B24F-0B3376F19967} Graph",
+ "$type": "EditorGraph",
"Id": 2936040539888065977,
"m_graphData": {
"m_nodes": [
+ {
+ "Id": {
+ "id": 11993350262154
+ },
+ "Name": "SC-Node(GetAuthorityToClientNoParams_PlayFxEventByEntityId)",
+ "Components": {
+ "Component_[103174496050601676]": {
+ "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method",
+ "Id": 103174496050601676,
+ "Slots": [
+ {
+ "id": {
+ "m_id": "{AE2A0AA3-99DD-4DE4-AFEA-7560F078943C}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "EntityId: 0",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 2
+ },
+ "DataType": 1
+ },
+ {
+ "id": {
+ "m_id": "{4D460DFD-82A1-4A92-8EAE-D32A96E79FA0}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "In",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{3FD9A3D0-FFAA-475E-89CB-D24EB4FEB952}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Out",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{F120FEE1-448B-4D61-8439-10511C797707}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Event<>",
+ "DisplayDataType": {
+ "m_type": 4,
+ "m_azType": "{F429F985-AF00-529B-8449-16E56694E5F9}"
+ },
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 2
+ },
+ "DataType": 1
+ }
+ ],
+ "Datums": [
+ {
+ "scriptCanvasType": {
+ "m_type": 1
+ },
+ "isNullPointer": false,
+ "$type": "EntityId",
+ "value": {
+ "id": 2901262558
+ },
+ "label": "EntityId: 0"
+ }
+ ],
+ "methodType": 2,
+ "methodName": "GetAuthorityToClientNoParams_PlayFxEventByEntityId",
+ "className": "NetworkTestLevelEntityComponent",
+ "resultSlotIDs": [
+ {}
+ ],
+ "inputSlots": [
+ {
+ "m_id": "{AE2A0AA3-99DD-4DE4-AFEA-7560F078943C}"
+ }
+ ],
+ "prettyClassName": "NetworkTestLevelEntityComponent"
+ }
+ }
+ },
{
"Id": {
"id": 56986727032248
@@ -338,7 +443,7 @@
"isNullPointer": false,
"$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
"value": "AutoComponent_RPC_NetLevelEntity: I'm a client playing some superficial fx",
- "label": "Color"
+ "label": "Text"
},
{
"scriptCanvasType": {
@@ -352,7 +457,7 @@
0.0,
1.0
],
- "label": "Color: 2"
+ "label": "Color"
},
{
"scriptCanvasType": {
@@ -361,7 +466,7 @@
"isNullPointer": false,
"$type": "double",
"value": 2.0,
- "label": "Number: 3"
+ "label": "Duration"
}
],
"methodType": 0,
@@ -486,153 +591,6 @@
}
}
},
- {
- "Id": {
- "id": 8318619017825
- },
- "Name": "SC-EventNode(AuthorityToClientNoParams_PlayFx Notify Event)",
- "Components": {
- "Component_[15772128920819427182]": {
- "$type": "AzEventHandler",
- "Id": 15772128920819427182,
- "Slots": [
- {
- "id": {
- "m_id": "{2A42C379-8E3B-46EF-BC63-C1D5395CB583}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- },
- {
- "$type": "ConnectionLimitContract",
- "limit": 1
- },
- {
- "$type": "RestrictedNodeContract",
- "m_nodeId": {
- "id": 7820402811489
- }
- }
- ],
- "slotName": "Connect",
- "toolTip": "Connect the AZ Event to this AZ Event Handler.",
- "Descriptor": {
- "ConnectionType": 1,
- "SlotType": 1
- }
- },
- {
- "id": {
- "m_id": "{3DB9829E-6088-49B9-A56D-4D1884C679BD}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "Disconnect",
- "toolTip": "Disconnect current AZ Event from this AZ Event Handler.",
- "Descriptor": {
- "ConnectionType": 1,
- "SlotType": 1
- }
- },
- {
- "id": {
- "m_id": "{9AC3CF57-B648-4B43-8FCA-8576B6EA350B}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "On Connected",
- "toolTip": "Signaled when a connection has taken place.",
- "Descriptor": {
- "ConnectionType": 2,
- "SlotType": 1
- }
- },
- {
- "id": {
- "m_id": "{5FB8D529-6FC6-4543-99B5-5B147EBD7BE6}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "On Disconnected",
- "toolTip": "Signaled when this event handler is disconnected.",
- "Descriptor": {
- "ConnectionType": 2,
- "SlotType": 1
- }
- },
- {
- "id": {
- "m_id": "{0481BBFE-D31E-421F-A6C2-8A7AF3012545}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "OnEvent",
- "toolTip": "Triggered when the AZ Event invokes Signal() function.",
- "Descriptor": {
- "ConnectionType": 2,
- "SlotType": 1
- },
- "IsLatent": true
- },
- {
- "id": {
- "m_id": "{5F809F1C-ED4E-4391-9E33-AD3B64561A40}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- },
- {
- "$type": "ConnectionLimitContract",
- "limit": 1
- },
- {
- "$type": "RestrictedNodeContract",
- "m_nodeId": {
- "id": 7820402811489
- }
- }
- ],
- "slotName": "AuthorityToClientNoParams_PlayFx Notify Event",
- "Descriptor": {
- "ConnectionType": 1,
- "SlotType": 2
- },
- "DataType": 1
- }
- ],
- "Datums": [
- {
- "scriptCanvasType": {
- "m_type": 4,
- "m_azType": "{F429F985-AF00-529B-8449-16E56694E5F9}"
- },
- "isNullPointer": true,
- "label": "AuthorityToClientNoParams_PlayFx Notify Event"
- }
- ],
- "m_azEventEntry": {
- "m_eventName": "AuthorityToClientNoParams_PlayFx Notify Event",
- "m_eventSlotId": {
- "m_id": "{5F809F1C-ED4E-4391-9E33-AD3B64561A40}"
- }
- }
- }
- }
- },
{
"Id": {
"id": 56991021999544
@@ -732,6 +690,199 @@
}
}
},
+ {
+ "Id": {
+ "id": 11750998249450
+ },
+ "Name": "SC-Node(IsNetEntityRoleAuthority)",
+ "Components": {
+ "Component_[17217487756380135718]": {
+ "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method",
+ "Id": 17217487756380135718,
+ "Slots": [
+ {
+ "id": {
+ "m_id": "{C58EF254-1A51-443B-B35E-B26831323D27}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "EntityId: 0",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 2
+ },
+ "DataType": 1
+ },
+ {
+ "id": {
+ "m_id": "{98927A53-663A-452D-ABAF-01D31F7D5D53}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "In",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{89F646CA-FBC6-45D2-916B-0B47474EE693}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Out",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{3FFC81A6-5C31-4CBA-8253-5DF361F10610}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Is Role Authority",
+ "DisplayDataType": {
+ "m_type": 0
+ },
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 2
+ },
+ "DataType": 1
+ }
+ ],
+ "Datums": [
+ {
+ "isOverloadedStorage": false,
+ "scriptCanvasType": {
+ "m_type": 1
+ },
+ "isNullPointer": false,
+ "$type": "EntityId",
+ "value": {
+ "id": 2901262558
+ },
+ "label": "Entity Id"
+ }
+ ],
+ "methodType": 2,
+ "methodName": "IsNetEntityRoleAuthority",
+ "className": "NetBindComponent",
+ "inputSlots": [
+ {
+ "m_id": "{C58EF254-1A51-443B-B35E-B26831323D27}"
+ }
+ ],
+ "prettyClassName": "NetBindComponent"
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 13206992162794
+ },
+ "Name": "SC-Node(Gate)",
+ "Components": {
+ "Component_[18126119383071583133]": {
+ "$type": "Gate",
+ "Id": 18126119383071583133,
+ "Slots": [
+ {
+ "id": {
+ "m_id": "{3896AA13-516C-410F-AB9C-2CAA5E71AEF6}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Condition",
+ "toolTip": "If true the node will signal the Output and proceed execution",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 2
+ },
+ "DataType": 1
+ },
+ {
+ "id": {
+ "m_id": "{F651B19A-FD1A-44EB-9C16-0CDB44CD85AA}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "In",
+ "toolTip": "Input signal",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{78807DC9-82B7-4893-ADA4-53E51C2AD3D1}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "True",
+ "toolTip": "Signaled if the condition provided evaluates to true.",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{3B353484-F14C-4D93-AD1D-6F3EDAE4B71C}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "False",
+ "toolTip": "Signaled if the condition provided evaluates to false.",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ }
+ ],
+ "Datums": [
+ {
+ "isOverloadedStorage": false,
+ "scriptCanvasType": {
+ "m_type": 0
+ },
+ "isNullPointer": false,
+ "$type": "bool",
+ "value": false,
+ "label": "Condition"
+ }
+ ]
+ }
+ }
+ },
{
"Id": {
"id": 57025381737912
@@ -868,17 +1019,17 @@
},
{
"Id": {
- "id": 8400576252253
+ "id": 16962627423626
},
"Name": "SC-Node(AuthorityToClientNoParams_PlayFxByEntityId)",
"Components": {
- "Component_[6332803108634970671]": {
+ "Component_[3643560316791874936]": {
"$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method",
- "Id": 6332803108634970671,
+ "Id": 3643560316791874936,
"Slots": [
{
"id": {
- "m_id": "{87B7266B-D7B1-4CAD-9898-4D7F0274DAB0}"
+ "m_id": "{029728DF-0939-4D64-A9A1-3DB4B8AF127E}"
},
"contracts": [
{
@@ -886,7 +1037,7 @@
}
],
"slotName": "Source",
- "toolTip": "The Source containing the NetworkTestPlayerComponentController",
+ "toolTip": "The Source containing the NetworkTestLevelEntityComponentController",
"Descriptor": {
"ConnectionType": 1,
"SlotType": 2
@@ -895,7 +1046,7 @@
},
{
"id": {
- "m_id": "{AB0D7C00-A334-449A-AC56-EA3167AB8900}"
+ "m_id": "{2C322CF8-1A5C-48D4-8CD2-9723E2DD4A4D}"
},
"contracts": [
{
@@ -910,7 +1061,7 @@
},
{
"id": {
- "m_id": "{A52302D6-9DF9-45C2-960D-19BF90A4A931}"
+ "m_id": "{51F7773F-90F9-4465-8A0E-627EFC30E696}"
},
"contracts": [
{
@@ -939,16 +1090,163 @@
],
"methodType": 2,
"methodName": "AuthorityToClientNoParams_PlayFxByEntityId",
- "className": "NetworkTestPlayerComponent",
+ "className": "NetworkTestLevelEntityComponent",
"resultSlotIDs": [
{}
],
"inputSlots": [
{
- "m_id": "{87B7266B-D7B1-4CAD-9898-4D7F0274DAB0}"
+ "m_id": "{029728DF-0939-4D64-A9A1-3DB4B8AF127E}"
}
],
- "prettyClassName": "NetworkTestPlayerComponent"
+ "prettyClassName": "NetworkTestLevelEntityComponent"
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 12482976533898
+ },
+ "Name": "SC-EventNode(AuthorityToClientNoParams_PlayFx Notify Event)",
+ "Components": {
+ "Component_[3959674633056578794]": {
+ "$type": "AzEventHandler",
+ "Id": 3959674633056578794,
+ "Slots": [
+ {
+ "id": {
+ "m_id": "{D9C7482D-62F3-494B-ABD8-DEE1EC423F5B}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ },
+ {
+ "$type": "ConnectionLimitContract",
+ "limit": 1
+ },
+ {
+ "$type": "RestrictedNodeContract",
+ "m_nodeId": {
+ "id": 11993350262154
+ }
+ }
+ ],
+ "slotName": "Connect",
+ "toolTip": "Connect the AZ Event to this AZ Event Handler.",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{79E07161-43E8-46B6-A402-ACEF441621ED}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Disconnect",
+ "toolTip": "Disconnect current AZ Event from this AZ Event Handler.",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{0DA1B9BC-BAA1-4144-B9A8-C64A3C1EF3B7}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "On Connected",
+ "toolTip": "Signaled when a connection has taken place.",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{F978B3BE-22DC-48EA-B004-D9C7FA7B32E8}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "On Disconnected",
+ "toolTip": "Signaled when this event handler is disconnected.",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{27F4E9A2-F450-4519-8358-D13D823DA33F}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "OnEvent",
+ "toolTip": "Triggered when the AZ Event invokes Signal() function.",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ },
+ "IsLatent": true
+ },
+ {
+ "id": {
+ "m_id": "{3CCA270B-6726-48D0-8523-154B42269D61}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ },
+ {
+ "$type": "ConnectionLimitContract",
+ "limit": 1
+ },
+ {
+ "$type": "RestrictedNodeContract",
+ "m_nodeId": {
+ "id": 11993350262154
+ }
+ }
+ ],
+ "slotName": "AuthorityToClientNoParams_PlayFx Notify Event",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 2
+ },
+ "DataType": 1
+ }
+ ],
+ "Datums": [
+ {
+ "scriptCanvasType": {
+ "m_type": 4,
+ "m_azType": "{F429F985-AF00-529B-8449-16E56694E5F9}"
+ },
+ "isNullPointer": true,
+ "label": "AuthorityToClientNoParams_PlayFx Notify Event"
+ }
+ ],
+ "m_azEventEntry": {
+ "m_eventName": "AuthorityToClientNoParams_PlayFx Notify Event",
+ "m_eventSlotId": {
+ "m_id": "{3CCA270B-6726-48D0-8523-154B42269D61}"
+ }
+ }
}
}
},
@@ -1090,111 +1388,6 @@
}
}
}
- },
- {
- "Id": {
- "id": 7820402811489
- },
- "Name": "SC-Node(GetAuthorityToClientNoParams_PlayFxEventByEntityId)",
- "Components": {
- "Component_[9263945554457190064]": {
- "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method",
- "Id": 9263945554457190064,
- "Slots": [
- {
- "id": {
- "m_id": "{F22A7438-E72F-4757-90D9-99F03C91E10D}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "EntityId: 0",
- "Descriptor": {
- "ConnectionType": 1,
- "SlotType": 2
- },
- "DataType": 1
- },
- {
- "id": {
- "m_id": "{510F56FD-6778-4DB8-BDDE-258335431CC6}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "In",
- "Descriptor": {
- "ConnectionType": 1,
- "SlotType": 1
- }
- },
- {
- "id": {
- "m_id": "{94C2AF04-6BFA-4E5A-9490-C7479A7AF61E}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "Out",
- "Descriptor": {
- "ConnectionType": 2,
- "SlotType": 1
- }
- },
- {
- "id": {
- "m_id": "{9C6DDF96-6BF0-45ED-B15F-2E6C2FF5F886}"
- },
- "contracts": [
- {
- "$type": "SlotTypeContract"
- }
- ],
- "slotName": "Event<>",
- "DisplayDataType": {
- "m_type": 4,
- "m_azType": "{F429F985-AF00-529B-8449-16E56694E5F9}"
- },
- "Descriptor": {
- "ConnectionType": 2,
- "SlotType": 2
- },
- "DataType": 1
- }
- ],
- "Datums": [
- {
- "scriptCanvasType": {
- "m_type": 1
- },
- "isNullPointer": false,
- "$type": "EntityId",
- "value": {
- "id": 2901262558
- },
- "label": "EntityId: 0"
- }
- ],
- "methodType": 2,
- "methodName": "GetAuthorityToClientNoParams_PlayFxEventByEntityId",
- "className": "NetworkTestPlayerComponent",
- "resultSlotIDs": [
- {}
- ],
- "inputSlots": [
- {
- "m_id": "{F22A7438-E72F-4757-90D9-99F03C91E10D}"
- }
- ],
- "prettyClassName": "NetworkTestPlayerComponent"
- }
- }
}
],
"m_connections": [
@@ -1226,62 +1419,6 @@
}
}
},
- {
- "Id": {
- "id": 57055446508984
- },
- "Name": "srcEndpoint=(TimeDelay: Done), destEndpoint=(Repeater: Start)",
- "Components": {
- "Component_[6292481678297438578]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 6292481678297438578,
- "sourceEndpoint": {
- "nodeId": {
- "id": 57012496836024
- },
- "slotId": {
- "m_id": "{158B30BE-BD39-40AE-A8A8-F0E5694F0180}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 56986727032248
- },
- "slotId": {
- "m_id": "{07267CBA-B377-4B57-8A04-E322F8BFC07F}"
- }
- }
- }
- }
- },
- {
- "Id": {
- "id": 9392713697629
- },
- "Name": "srcEndpoint=(Repeater: Action), destEndpoint=(AuthorityToClientNoParams_PlayFxByEntityId: In)",
- "Components": {
- "Component_[17811480012084226596]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 17811480012084226596,
- "sourceEndpoint": {
- "nodeId": {
- "id": 56986727032248
- },
- "slotId": {
- "m_id": "{C1CCBA7B-A13B-4FCE-99ED-8FD1A8F72869}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 8400576252253
- },
- "slotId": {
- "m_id": "{AB0D7C00-A334-449A-AC56-EA3167AB8900}"
- }
- }
- }
- }
- },
{
"Id": {
"id": 10269167405311
@@ -1366,146 +1503,6 @@
}
}
},
- {
- "Id": {
- "id": 9022993654369
- },
- "Name": "srcEndpoint=(GetAuthorityToClientNoParams_PlayFxEventByEntityId: Event<>), destEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: AuthorityToClientNoParams_PlayFx Notify Event)",
- "Components": {
- "Component_[4910818715692868417]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 4910818715692868417,
- "sourceEndpoint": {
- "nodeId": {
- "id": 7820402811489
- },
- "slotId": {
- "m_id": "{9C6DDF96-6BF0-45ED-B15F-2E6C2FF5F886}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 8318619017825
- },
- "slotId": {
- "m_id": "{5F809F1C-ED4E-4391-9E33-AD3B64561A40}"
- }
- }
- }
- }
- },
- {
- "Id": {
- "id": 9078828229217
- },
- "Name": "srcEndpoint=(GetAuthorityToClientNoParams_PlayFxEventByEntityId: Out), destEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: Connect)",
- "Components": {
- "Component_[16758724763058723803]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 16758724763058723803,
- "sourceEndpoint": {
- "nodeId": {
- "id": 7820402811489
- },
- "slotId": {
- "m_id": "{94C2AF04-6BFA-4E5A-9490-C7479A7AF61E}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 8318619017825
- },
- "slotId": {
- "m_id": "{2A42C379-8E3B-46EF-BC63-C1D5395CB583}"
- }
- }
- }
- }
- },
- {
- "Id": {
- "id": 9808972669537
- },
- "Name": "srcEndpoint=(TimeDelay: Done), destEndpoint=(GetAuthorityToClientNoParams_PlayFxEventByEntityId: In)",
- "Components": {
- "Component_[597205010205160938]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 597205010205160938,
- "sourceEndpoint": {
- "nodeId": {
- "id": 57012496836024
- },
- "slotId": {
- "m_id": "{158B30BE-BD39-40AE-A8A8-F0E5694F0180}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 7820402811489
- },
- "slotId": {
- "m_id": "{510F56FD-6778-4DB8-BDDE-258335431CC6}"
- }
- }
- }
- }
- },
- {
- "Id": {
- "id": 10148275085921
- },
- "Name": "srcEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: OnEvent), destEndpoint=(Print: In)",
- "Components": {
- "Component_[1594149632687531010]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 1594149632687531010,
- "sourceEndpoint": {
- "nodeId": {
- "id": 8318619017825
- },
- "slotId": {
- "m_id": "{0481BBFE-D31E-421F-A6C2-8A7AF3012545}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 56995316966840
- },
- "slotId": {
- "m_id": "{7CAD6E31-6218-4326-8FFB-0523F545E250}"
- }
- }
- }
- }
- },
- {
- "Id": {
- "id": 10629311423073
- },
- "Name": "srcEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: OnEvent), destEndpoint=(DrawTextOnEntity: In)",
- "Components": {
- "Component_[17976200298405988971]": {
- "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
- "Id": 17976200298405988971,
- "sourceEndpoint": {
- "nodeId": {
- "id": 8318619017825
- },
- "slotId": {
- "m_id": "{0481BBFE-D31E-421F-A6C2-8A7AF3012545}"
- }
- },
- "targetEndpoint": {
- "nodeId": {
- "id": 57003906901432
- },
- "slotId": {
- "m_id": "{1673B8A0-D4EC-4CC7-8F80-0419BB5560EB}"
- }
- }
- }
- }
- },
{
"Id": {
"id": 42045766425613
@@ -1533,6 +1530,286 @@
}
}
}
+ },
+ {
+ "Id": {
+ "id": 13187351170442
+ },
+ "Name": "srcEndpoint=(GetAuthorityToClientNoParams_PlayFxEventByEntityId: Event<>), destEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: AuthorityToClientNoParams_PlayFx Notify Event)",
+ "Components": {
+ "Component_[16956267859815935178]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 16956267859815935178,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 11993350262154
+ },
+ "slotId": {
+ "m_id": "{F120FEE1-448B-4D61-8439-10511C797707}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 12482976533898
+ },
+ "slotId": {
+ "m_id": "{3CCA270B-6726-48D0-8523-154B42269D61}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 13243185745290
+ },
+ "Name": "srcEndpoint=(GetAuthorityToClientNoParams_PlayFxEventByEntityId: Out), destEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: Connect)",
+ "Components": {
+ "Component_[8562287491617113016]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 8562287491617113016,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 11993350262154
+ },
+ "slotId": {
+ "m_id": "{3FD9A3D0-FFAA-475E-89CB-D24EB4FEB952}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 12482976533898
+ },
+ "slotId": {
+ "m_id": "{D9C7482D-62F3-494B-ABD8-DEE1EC423F5B}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 14252503059850
+ },
+ "Name": "srcEndpoint=(TimeDelay: Done), destEndpoint=(GetAuthorityToClientNoParams_PlayFxEventByEntityId: In)",
+ "Components": {
+ "Component_[2852756465133807472]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 2852756465133807472,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 57012496836024
+ },
+ "slotId": {
+ "m_id": "{158B30BE-BD39-40AE-A8A8-F0E5694F0180}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 11993350262154
+ },
+ "slotId": {
+ "m_id": "{4D460DFD-82A1-4A92-8EAE-D32A96E79FA0}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 14690589724042
+ },
+ "Name": "srcEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: OnEvent), destEndpoint=(DrawTextOnEntity: In)",
+ "Components": {
+ "Component_[5236071663388486964]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 5236071663388486964,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 12482976533898
+ },
+ "slotId": {
+ "m_id": "{27F4E9A2-F450-4519-8358-D13D823DA33F}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 57003906901432
+ },
+ "slotId": {
+ "m_id": "{1673B8A0-D4EC-4CC7-8F80-0419BB5560EB}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 14943992794506
+ },
+ "Name": "srcEndpoint=(AuthorityToClientNoParams_PlayFx Notify Event: OnEvent), destEndpoint=(Print: In)",
+ "Components": {
+ "Component_[3230673372890452861]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 3230673372890452861,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 12482976533898
+ },
+ "slotId": {
+ "m_id": "{27F4E9A2-F450-4519-8358-D13D823DA33F}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 56995316966840
+ },
+ "slotId": {
+ "m_id": "{7CAD6E31-6218-4326-8FFB-0523F545E250}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 18109383691658
+ },
+ "Name": "srcEndpoint=(Repeater: Action), destEndpoint=(AuthorityToClientNoParams_PlayFxByEntityId: In)",
+ "Components": {
+ "Component_[12099207352632363628]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 12099207352632363628,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 56986727032248
+ },
+ "slotId": {
+ "m_id": "{C1CCBA7B-A13B-4FCE-99ED-8FD1A8F72869}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 16962627423626
+ },
+ "slotId": {
+ "m_id": "{2C322CF8-1A5C-48D4-8CD2-9723E2DD4A4D}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 13030898503658
+ },
+ "Name": "srcEndpoint=(TimeDelay: Done), destEndpoint=(IsNetEntityRoleAuthority: In)",
+ "Components": {
+ "Component_[14235185264262332827]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 14235185264262332827,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 57012496836024
+ },
+ "slotId": {
+ "m_id": "{158B30BE-BD39-40AE-A8A8-F0E5694F0180}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 11750998249450
+ },
+ "slotId": {
+ "m_id": "{98927A53-663A-452D-ABAF-01D31F7D5D53}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 14005856079850
+ },
+ "Name": "srcEndpoint=(IsNetEntityRoleAuthority: Out), destEndpoint=(If: In)",
+ "Components": {
+ "Component_[16302238484508620286]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 16302238484508620286,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 11750998249450
+ },
+ "slotId": {
+ "m_id": "{89F646CA-FBC6-45D2-916B-0B47474EE693}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 13206992162794
+ },
+ "slotId": {
+ "m_id": "{F651B19A-FD1A-44EB-9C16-0CDB44CD85AA}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 14302208823274
+ },
+ "Name": "srcEndpoint=(IsNetEntityRoleAuthority: Is Role Authority), destEndpoint=(If: Condition)",
+ "Components": {
+ "Component_[3887593885874168259]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 3887593885874168259,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 11750998249450
+ },
+ "slotId": {
+ "m_id": "{3FFC81A6-5C31-4CBA-8253-5DF361F10610}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 13206992162794
+ },
+ "slotId": {
+ "m_id": "{3896AA13-516C-410F-AB9C-2CAA5E71AEF6}"
+ }
+ }
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 14637216272362
+ },
+ "Name": "srcEndpoint=(If: True), destEndpoint=(Repeater: Start)",
+ "Components": {
+ "Component_[8721834474263401249]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 8721834474263401249,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 13206992162794
+ },
+ "slotId": {
+ "m_id": "{78807DC9-82B7-4893-ADA4-53E51C2AD3D1}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 56986727032248
+ },
+ "slotId": {
+ "m_id": "{07267CBA-B377-4B57-8A04-E322F8BFC07F}"
+ }
+ }
+ }
+ }
}
]
},
@@ -1543,37 +1820,6 @@
"_fileVersion": 1
},
"GraphCanvasData": [
- {
- "Key": {
- "id": 7820402811489
- },
- "Value": {
- "ComponentData": {
- "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
- "$type": "NodeSaveData"
- },
- "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
- "$type": "GeneralNodeTitleComponentSaveData",
- "PaletteOverride": "MethodNodeTitlePalette"
- },
- "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
- "$type": "GeometrySaveData",
- "Position": [
- -100.0,
- 400.0
- ]
- },
- "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
- "$type": "StylingComponentSaveData",
- "SubStyle": ".method"
- },
- "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
- "$type": "PersistentIdComponentSaveData",
- "PersistentId": "{F35F8202-B5EE-4ADD-9FF6-AF214A094266}"
- }
- }
- }
- },
{
"Key": {
"id": 8310662318335
@@ -1607,38 +1853,7 @@
},
{
"Key": {
- "id": 8318619017825
- },
- "Value": {
- "ComponentData": {
- "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
- "$type": "NodeSaveData"
- },
- "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
- "$type": "GeneralNodeTitleComponentSaveData",
- "PaletteOverride": "HandlerNodeTitlePalette"
- },
- "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
- "$type": "GeometrySaveData",
- "Position": [
- 340.0,
- 400.0
- ]
- },
- "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
- "$type": "StylingComponentSaveData",
- "SubStyle": ".azeventhandler"
- },
- "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
- "$type": "PersistentIdComponentSaveData",
- "PersistentId": "{67499699-CA73-48B4-87E0-C66F4A3EA7CB}"
- }
- }
- }
- },
- {
- "Key": {
- "id": 8400576252253
+ "id": 11750998249450
},
"Value": {
"ComponentData": {
@@ -1652,8 +1867,8 @@
"{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
"$type": "GeometrySaveData",
"Position": [
- 420.0,
- -60.0
+ 100.0,
+ 60.0
]
},
"{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1662,7 +1877,130 @@
},
"{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
"$type": "PersistentIdComponentSaveData",
- "PersistentId": "{2B6329F7-4CE7-4E01-B1A4-1FFCAB2D0B72}"
+ "PersistentId": "{73B270BC-9743-41C1-9E48-0CAB5A63AC97}"
+ }
+ }
+ }
+ },
+ {
+ "Key": {
+ "id": 11993350262154
+ },
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "MethodNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 60.0,
+ 480.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData",
+ "SubStyle": ".method"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{AF658C01-E781-416E-B719-70C171E3FA18}"
+ }
+ }
+ }
+ },
+ {
+ "Key": {
+ "id": 12482976533898
+ },
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "HandlerNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 520.0,
+ 500.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData",
+ "SubStyle": ".azeventhandler"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{404C56EB-23C4-4AC8-A08A-752725B19703}"
+ }
+ }
+ }
+ },
+ {
+ "Key": {
+ "id": 13206992162794
+ },
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "LogicNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 540.0,
+ 60.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{3F73BD0E-D02D-4A48-9E25-F9FD4A0F1B89}"
+ }
+ }
+ }
+ },
+ {
+ "Key": {
+ "id": 16962627423626
+ },
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "MethodNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 1240.0,
+ 0.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData",
+ "SubStyle": ".method"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{E06094C1-8911-4FB6-9D28-E02B808F1DB1}"
}
}
}
@@ -1683,8 +2021,8 @@
"{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
"$type": "GeometrySaveData",
"Position": [
- 80.0,
- -60.0
+ 860.0,
+ 0.0
]
},
"{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1743,8 +2081,8 @@
"{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
"$type": "GeometrySaveData",
"Position": [
- 800.0,
- 260.0
+ 980.0,
+ 400.0
]
},
"{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1773,8 +2111,8 @@
"{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
"$type": "GeometrySaveData",
"Position": [
- 420.0,
- 100.0
+ 1220.0,
+ 140.0
]
},
"{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1803,8 +2141,8 @@
"{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
"$type": "GeometrySaveData",
"Position": [
- 800.0,
- 460.0
+ 980.0,
+ 600.0
]
},
"{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1880,15 +2218,16 @@
},
{
"Key": {
- "id": 1685762441320719908
+ "id": 7558387155527535988
},
"Value": {
"ComponentData": {
"{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
"$type": "SceneComponentSaveData",
"ViewParams": {
- "AnchorX": -349.0,
- "AnchorY": 10.0
+ "Scale": 0.9585879578077288,
+ "AnchorX": 488.2181091308594,
+ "AnchorY": -175.25778198242188
}
}
}
@@ -1897,6 +2236,10 @@
],
"StatisticsHelper": {
"InstanceCounter": [
+ {
+ "Key": 435784057388502002,
+ "Value": 1
+ },
{
"Key": 4199610336680704683,
"Value": 1
@@ -1905,16 +2248,20 @@
"Key": 4847610523576971761,
"Value": 1
},
+ {
+ "Key": 5317247366618270757,
+ "Value": 1
+ },
{
"Key": 6462358712820489356,
"Value": 1
},
{
- "Key": 7087687843968394353,
+ "Key": 8065262779685207188,
"Value": 1
},
{
- "Key": 8679770052035517025,
+ "Key": 8452971738487658154,
"Value": 1
},
{
diff --git a/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/Player.prefab b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/Player.prefab
new file mode 100644
index 0000000000..975319a516
--- /dev/null
+++ b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/Player.prefab
@@ -0,0 +1,151 @@
+{
+ "ContainerEntity": {
+ "Id": "ContainerEntity",
+ "Name": "Player",
+ "Components": {
+ "Component_[10626669441604518614]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 10626669441604518614
+ },
+ "Component_[15284109105474306026]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15284109105474306026
+ },
+ "Component_[1884250773831675865]": {
+ "$type": "SelectionComponent",
+ "Id": 1884250773831675865
+ },
+ "Component_[3027124663594865592]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 3027124663594865592
+ },
+ "Component_[3314300526416851038]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 3314300526416851038,
+ "Child Entity Order": [
+ "Entity_[1340484004600]"
+ ]
+ },
+ "Component_[5583377204116393478]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5583377204116393478
+ },
+ "Component_[5897955848881060165]": {
+ "$type": "EditorLockComponent",
+ "Id": 5897955848881060165
+ },
+ "Component_[6405389103180201977]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6405389103180201977,
+ "Parent Entity": ""
+ },
+ "Component_[7695912346724202125]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 7695912346724202125
+ },
+ "Component_[775363990560391238]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 775363990560391238
+ },
+ "Component_[904355854135646057]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 904355854135646057
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1340484004600]": {
+ "Id": "Entity_[1340484004600]",
+ "Name": "Player",
+ "Components": {
+ "Component_[12294726333564087591]": {
+ "$type": "SelectionComponent",
+ "Id": 12294726333564087591
+ },
+ "Component_[13587084088242540786]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 13587084088242540786,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 6819443882832501114
+ },
+ {
+ "ComponentId": 4337571454344109612,
+ "SortIndex": 1
+ },
+ {
+ "ComponentId": 16457408099527309065,
+ "SortIndex": 2
+ },
+ {
+ "ComponentId": 5577505593558922067,
+ "SortIndex": 3
+ }
+ ]
+ },
+ "Component_[14335168881008289852]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14335168881008289852
+ },
+ "Component_[16308902899170829847]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16308902899170829847
+ },
+ "Component_[16457408099527309065]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 16457408099527309065,
+ "m_template": {
+ "$type": "Multiplayer::NetworkTransformComponent"
+ }
+ },
+ "Component_[16541569566865026527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 16541569566865026527
+ },
+ "Component_[2002761223483048905]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 2002761223483048905
+ },
+ "Component_[4337571454344109612]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 4337571454344109612,
+ "m_template": {
+ "$type": "NetBindComponent"
+ }
+ },
+ "Component_[477591477979440744]": {
+ "$type": "EditorLockComponent",
+ "Id": 477591477979440744
+ },
+ "Component_[5577505593558922067]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5577505593558922067,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{6DE0E9A8-A1C7-5D0F-9407-4E627C1F223C}",
+ "subId": 284780167
+ },
+ "assetHint": "models/sphere.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5828214869455694702]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5828214869455694702
+ },
+ "Component_[6819443882832501114]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6819443882832501114,
+ "Parent Entity": "ContainerEntity"
+ },
+ "Component_[8838623765985560328]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8838623765985560328
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.prefab b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.prefab
new file mode 100644
index 0000000000..abe458246a
--- /dev/null
+++ b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.prefab
@@ -0,0 +1,580 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]",
+ "Entity_[806656324666]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 9021008456353177945
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ },
+ "Entity_[806656324666]": {
+ "Id": "Entity_[806656324666]",
+ "Name": "NetEntity",
+ "Components": {
+ "Component_[10272449525230713408]": {
+ "$type": "EditorScriptCanvasComponent",
+ "Id": 10272449525230713408,
+ "m_name": "SimpleNetworkLevelEntity.scriptcanvas",
+ "runtimeDataIsValid": true,
+ "runtimeDataOverrides": {
+ "source": {
+ "id": "{C8F17F94-1225-5FFB-A89F-7C5546FF9DD2}",
+ "path": "C:/prj/o3de/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.scriptcanvas"
+ }
+ },
+ "sourceHandle": {
+ "id": "{C8F17F94-1225-5FFB-A89F-7C5546FF9DD2}",
+ "path": "C:/prj/o3de/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.scriptcanvas"
+ }
+ },
+ "Component_[12604265186664827718]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 12604265186664827718
+ },
+ "Component_[12971088454284742740]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 12971088454284742740
+ },
+ "Component_[13637345797899267673]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13637345797899267673
+ },
+ "Component_[14691827217729577086]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 14691827217729577086
+ },
+ "Component_[17587769654029626028]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 17587769654029626028,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{6DE0E9A8-A1C7-5D0F-9407-4E627C1F223C}",
+ "subId": 284780167
+ },
+ "assetHint": "models/sphere.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[3583806849894952953]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3583806849894952953
+ },
+ "Component_[3992057042487734240]": {
+ "$type": "EditorLockComponent",
+ "Id": 3992057042487734240
+ },
+ "Component_[4205899043279271481]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 4205899043279271481,
+ "m_template": {
+ "$type": "Multiplayer::NetworkTransformComponent"
+ }
+ },
+ "Component_[4416976521140638764]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 4416976521140638764
+ },
+ "Component_[4951162661196722987]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 4951162661196722987
+ },
+ "Component_[57491843687005111]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 57491843687005111,
+ "Parent Entity": "Entity_[1146574390643]",
+ "Transform Data": {
+ "Translate": [
+ -0.010266244411468506,
+ 0.09999752044677734,
+ 0.4922151565551758
+ ]
+ }
+ },
+ "Component_[7427201282284088219]": {
+ "$type": "SelectionComponent",
+ "Id": 7427201282284088219
+ },
+ "Component_[9767802049284917261]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 9767802049284917261,
+ "m_template": {
+ "$type": "NetBindComponent"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.scriptcanvas b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.scriptcanvas
new file mode 100644
index 0000000000..7f41ed9af2
--- /dev/null
+++ b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/SimpleNetworkLevelEntity.scriptcanvas
@@ -0,0 +1,228 @@
+{
+ "Type": "JsonSerialization",
+ "Version": 1,
+ "ClassName": "ScriptCanvasData",
+ "ClassData": {
+ "m_scriptCanvas": {
+ "Id": {
+ "id": 5227099818161821361
+ },
+ "Name": "Script Canvas Graph",
+ "Components": {
+ "Component_[14745706451564425001]": {
+ "$type": "EditorGraphVariableManagerComponent",
+ "Id": 14745706451564425001
+ },
+ "Component_[6188351434280490877]": {
+ "$type": "EditorGraph",
+ "Id": 6188351434280490877,
+ "m_graphData": {
+ "m_nodes": [
+ {
+ "Id": {
+ "id": 1181151842701
+ },
+ "Name": "SC-Node(Print)",
+ "Components": {
+ "Component_[11204048151736284490]": {
+ "$type": "Print",
+ "Id": 11204048151736284490,
+ "Slots": [
+ {
+ "id": {
+ "m_id": "{A417FF98-493E-4DE6-AD3A-E7A1848661E4}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "In",
+ "toolTip": "Input signal",
+ "Descriptor": {
+ "ConnectionType": 1,
+ "SlotType": 1
+ }
+ },
+ {
+ "id": {
+ "m_id": "{38BC2AB1-7654-407E-9903-4B5D77EDB6F3}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Out",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ }
+ ],
+ "m_format": "SimpleNetworkLevelEntity: On Graph Start\n",
+ "m_unresolvedString": [
+ "SimpleNetworkLevelEntity: On Graph Start\n"
+ ]
+ }
+ }
+ },
+ {
+ "Id": {
+ "id": 811784655245
+ },
+ "Name": "SC-Node(Start)",
+ "Components": {
+ "Component_[2986280341871382503]": {
+ "$type": "Start",
+ "Id": 2986280341871382503,
+ "Slots": [
+ {
+ "id": {
+ "m_id": "{61FBEFC6-23BA-4A53-89BF-D0D0E834608C}"
+ },
+ "contracts": [
+ {
+ "$type": "SlotTypeContract"
+ }
+ ],
+ "slotName": "Out",
+ "toolTip": "Signaled when the entity that owns this graph is fully activated.",
+ "Descriptor": {
+ "ConnectionType": 2,
+ "SlotType": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "m_connections": [
+ {
+ "Id": {
+ "id": 2521181639053
+ },
+ "Name": "srcEndpoint=(On Graph Start: Out), destEndpoint=(Print: In)",
+ "Components": {
+ "Component_[16295428600276205051]": {
+ "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+ "Id": 16295428600276205051,
+ "sourceEndpoint": {
+ "nodeId": {
+ "id": 811784655245
+ },
+ "slotId": {
+ "m_id": "{61FBEFC6-23BA-4A53-89BF-D0D0E834608C}"
+ }
+ },
+ "targetEndpoint": {
+ "nodeId": {
+ "id": 1181151842701
+ },
+ "slotId": {
+ "m_id": "{A417FF98-493E-4DE6-AD3A-E7A1848661E4}"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "m_assetType": "{00000000-0000-0000-D033-B2489A010000}",
+ "versionData": {
+ "_grammarVersion": 1,
+ "_runtimeVersion": 1,
+ "_fileVersion": 1
+ },
+ "GraphCanvasData": [
+ {
+ "Key": {
+ "id": 811784655245
+ },
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "TimeNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 340.0,
+ 180.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{6045F7F7-02B0-442A-96C7-A0CBCEFF7275}"
+ }
+ }
+ }
+ },
+ {
+ "Key": {
+ "id": 1181151842701
+ },
+ "Value": {
+ "ComponentData": {
+ "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+ "$type": "NodeSaveData"
+ },
+ "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+ "$type": "GeneralNodeTitleComponentSaveData",
+ "PaletteOverride": "StringNodeTitlePalette"
+ },
+ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+ "$type": "GeometrySaveData",
+ "Position": [
+ 580.0,
+ 180.0
+ ]
+ },
+ "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+ "$type": "StylingComponentSaveData"
+ },
+ "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+ "$type": "PersistentIdComponentSaveData",
+ "PersistentId": "{589F773E-D82A-4EDD-AEBD-3ADC07FC67CE}"
+ }
+ }
+ }
+ },
+ {
+ "Key": {
+ "id": 5227099818161821361
+ },
+ "Value": {
+ "ComponentData": {
+ "{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
+ "$type": "SceneComponentSaveData"
+ }
+ }
+ }
+ }
+ ],
+ "StatisticsHelper": {
+ "InstanceCounter": [
+ {
+ "Key": 4199610336680704683,
+ "Value": 1
+ },
+ {
+ "Key": 10684225535275896474,
+ "Value": 1
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/macbeth_shaderballs/tags.txt b/AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/macbeth_shaderballs/tags.txt
rename to AutomatedTesting/Levels/Multiplayer/SimpleNetworkLevelEntity/tags.txt
diff --git a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
index 9babf84ba4..18b503bab5 100644
--- a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
+++ b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:60276c07b45a734e4f71d695278167ea61e884f8b513906168c9642078ad5954
-size 6045
+oid sha256:0d004c329a7c5044a8fe05b6dbbf9b19de29c60acec75f13fdbc344a55aab8c7
+size 6404
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly
new file mode 100644
index 0000000000..b908d29eab
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e89946c224d2e765931e8ba8e33133ac24651af321a404016d9a9ea8c323db6c
+size 8563
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml
new file mode 100644
index 0000000000..bb94b733b3
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak
new file mode 100644
index 0000000000..614e41c4b2
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a46437ba86135567d87d43af0c4d499bf3cfe321721dbaf6e3cda8e49427ee1
+size 40212
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt
new file mode 100644
index 0000000000..0d6c1880e7
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt
@@ -0,0 +1,12 @@
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terraintexture.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/terraintexture.pak
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terraintexture.pak
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/terraintexture.pak
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly
new file mode 100644
index 0000000000..216426fc2a
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95996da3902d885060e700c573d13144bab246b930dfeedaed6066c13c879b11
+size 8737
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml
new file mode 100644
index 0000000000..5f5b4928fc
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak
new file mode 100644
index 0000000000..d920770374
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:894dfd4ab92aa4d1d6003aebf82cf7ff854a8b3684e010234e073879f88b64e5
+size 40210
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt
new file mode 100644
index 0000000000..0d6c1880e7
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt
@@ -0,0 +1,12 @@
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
+0,0,0,0,0,0
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terraintexture.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/terraintexture.pak
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terraintexture.pak
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/terraintexture.pak
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly
deleted file mode 100644
index a5953fc44b..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:969b77ee335d2a04524a27c765dd2f2bdee048661f3ff7be0766ba69d18d5842
-size 10409
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml
deleted file mode 100644
index 9a78b1bfd5..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak
deleted file mode 100644
index 8e6b3b29cb..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:547d7fdfcd959569b69d78eb6f63c7c19fc90840d69ca2d46eca8a3e82b8db75
-size 39337
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml
deleted file mode 100644
index 668a4583bd..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml
deleted file mode 100644
index 456d609b8a..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield
deleted file mode 100644
index 011356e521..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19096597087688692a225c1955f73d22c46354995fca1df8dff107a90c2f17a2
-size 4202594
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly
deleted file mode 100644
index 9f48f08a1b..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:29f752c141514cb4b50aea07e6b63de5c8f43149ddac37722e9ddb8b5f4a667d
-size 9495
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml
deleted file mode 100644
index 9a78b1bfd5..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak
deleted file mode 100644
index 8e6b3b29cb..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:547d7fdfcd959569b69d78eb6f63c7c19fc90840d69ca2d46eca8a3e82b8db75
-size 39337
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml
deleted file mode 100644
index 668a4583bd..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml
deleted file mode 100644
index 456d609b8a..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield
deleted file mode 100644
index 011356e521..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19096597087688692a225c1955f73d22c46354995fca1df8dff107a90c2f17a2
-size 4202594
diff --git a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
index d6052ffa7c..a4b28a9e96 100644
--- a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
+++ b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cb97ada674d123c67d7a32eb65e81fa66472cf51f748054c4a4297649f2a0f40
-size 5568
+oid sha256:0f645243fb623258ed4b063c5a18ea414560496f97d7234782ca97884e0ed8f0
+size 5961
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/Environment.xml b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TimeOfDay.xml
deleted file mode 100644
index c5b404318e..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/TerrainTexture.pak b/AutomatedTesting/Levels/TestDependenciesLevel/TerrainTexture.pak
deleted file mode 100644
index fe3604a050..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/TerrainTexture.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
-size 22
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.ly b/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.ly
deleted file mode 100644
index 95cc91cd6b..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:825828fe7c183e765315f933a8b1eb25283739d34d62cb84c34e2dcb56591d6e
-size 12415
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.prefab b/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.prefab
new file mode 100644
index 0000000000..cf30cb178c
--- /dev/null
+++ b/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.prefab
@@ -0,0 +1,555 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 3342481886060234850
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ }
+ },
+ "Instances": {
+ "Instance_[425258647110]": {
+ "Source": "assets/simple_pot_fbx.procprefab"
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/filelist.xml b/AutomatedTesting/Levels/TestDependenciesLevel/filelist.xml
deleted file mode 100644
index b5164a4aee..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/level.pak b/AutomatedTesting/Levels/TestDependenciesLevel/level.pak
deleted file mode 100644
index dfba7fb4e3..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2611b691998640a0e802461f47b5b876f6832fbece62d34cc25da53e135e1c38
-size 44525
diff --git a/AutomatedTesting/Materials/DefaultPBRTransparent.material b/AutomatedTesting/Materials/DefaultPBRTransparent.material
index 7c8aa6cf94..a7000d5371 100644
--- a/AutomatedTesting/Materials/DefaultPBRTransparent.material
+++ b/AutomatedTesting/Materials/DefaultPBRTransparent.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "Materials/Presets/PBR/default_grid.material",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"opacity": {
"mode": "Blended"
diff --git a/AutomatedTesting/Materials/basic_grey.material b/AutomatedTesting/Materials/basic_grey.material
index 0b890db4c6..6ecc1e029a 100644
--- a/AutomatedTesting/Materials/basic_grey.material
+++ b/AutomatedTesting/Materials/basic_grey.material
@@ -1,6 +1,6 @@
{
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"baseColor": {
"color": [ 0.18, 0.18, 0.18 ],
diff --git a/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material b/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material
index 878b3ac39f..52c323b454 100644
--- a/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material
+++ b/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/Skin.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"wrinkleLayers": {
"count": 3,
diff --git a/AutomatedTesting/Passes/MainPipeline.pass b/AutomatedTesting/Passes/MainPipeline.pass
index c34c556983..39b992a11d 100644
--- a/AutomatedTesting/Passes/MainPipeline.pass
+++ b/AutomatedTesting/Passes/MainPipeline.pass
@@ -42,6 +42,16 @@
"RayTracingAccelerationStructurePass"
]
},
+ {
+ "Name": "TerrainDetailTextureComputePass",
+ "TemplateName": "TerrainDetailTextureComputePassTemplate",
+ "Enabled": false
+ },
+ {
+ "Name": "TerrainMacroTextureComputePass",
+ "TemplateName": "TerrainMacroTextureComputePassTemplate",
+ "Enabled": false
+ },
{
"Name": "DepthPrePass",
"TemplateName": "DepthMSAAParentTemplate",
@@ -215,7 +225,7 @@
// Note: The following two lines represent the choice of rendering pipeline for the hair.
// You can either choose to use PPLL or ShortCut and accordingly change the flag
// 'm_usePPLLRenderTechnique' in the class 'HairFeatureProcessor.cpp'
-// "TemplateName": "HairParentPassTemplate",
+ // "TemplateName": "HairParentPassTemplate",
"TemplateName": "HairParentShortCutPassTemplate",
"Enabled": true,
"Connections": [
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToAutonomousNoParamsNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomousNoParamsNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToAutonomousNoParamsNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomousNoParamsNotifyEvent.names
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToAutonomousNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomousNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToAutonomousNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomousNotifyEvent.names
diff --git a/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomous_PlayerNumberNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomous_PlayerNumberNotifyEvent.names
new file mode 100644
index 0000000000..7255c61d23
--- /dev/null
+++ b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToAutonomous_PlayerNumberNotifyEvent.names
@@ -0,0 +1,56 @@
+{
+ "entries": [
+ {
+ "base": "AuthorityToAutonomous_PlayerNumber Notify Event",
+ "context": "AZEventHandler",
+ "variant": "",
+ "details": {
+ "name": "Authority To Autonomous_ Player Number Notify Event"
+ },
+ "slots": [
+ {
+ "base": "player_number",
+ "details": {
+ "name": "player_number"
+ }
+ },
+ {
+ "base": "AuthorityToAutonomous_PlayerNumber Notify Event",
+ "details": {
+ "name": "AuthorityToAutonomous_PlayerNumber Notify Event"
+ }
+ },
+ {
+ "base": "Connect",
+ "details": {
+ "name": "Connect"
+ }
+ },
+ {
+ "base": "Disconnect",
+ "details": {
+ "name": "Disconnect"
+ }
+ },
+ {
+ "base": "On Connected",
+ "details": {
+ "name": "On Connected"
+ }
+ },
+ {
+ "base": "On Disconnected",
+ "details": {
+ "name": "On Disconnected"
+ }
+ },
+ {
+ "base": "OnEvent",
+ "details": {
+ "name": "OnEvent"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToClientNoParamsNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNoParamsNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToClientNoParamsNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNoParamsNotifyEvent.names
diff --git a/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNoParams_PlayFxNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNoParams_PlayFxNotifyEvent.names
new file mode 100644
index 0000000000..3e0207a705
--- /dev/null
+++ b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNoParams_PlayFxNotifyEvent.names
@@ -0,0 +1,50 @@
+{
+ "entries": [
+ {
+ "base": "AuthorityToClientNoParams_PlayFx Notify Event",
+ "context": "AZEventHandler",
+ "variant": "",
+ "details": {
+ "name": "Authority To Client No Params_ Play Fx Notify Event"
+ },
+ "slots": [
+ {
+ "base": "AuthorityToClientNoParams_PlayFx Notify Event",
+ "details": {
+ "name": "AuthorityToClientNoParams_PlayFx Notify Event"
+ }
+ },
+ {
+ "base": "Connect",
+ "details": {
+ "name": "Connect"
+ }
+ },
+ {
+ "base": "Disconnect",
+ "details": {
+ "name": "Disconnect"
+ }
+ },
+ {
+ "base": "On Connected",
+ "details": {
+ "name": "On Connected"
+ }
+ },
+ {
+ "base": "On Disconnected",
+ "details": {
+ "name": "On Disconnected"
+ }
+ },
+ {
+ "base": "OnEvent",
+ "details": {
+ "name": "OnEvent"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToClientNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AuthorityToClientNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AuthorityToClientNotifyEvent.names
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AutonomousToAuthorityNoParamsNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AutonomousToAuthorityNoParamsNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AutonomousToAuthorityNoParamsNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AutonomousToAuthorityNoParamsNotifyEvent.names
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AutonomousToAuthorityNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AutonomousToAuthorityNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/AutonomousToAuthorityNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/AutonomousToAuthorityNotifyEvent.names
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/ServerToAuthorityNoParamNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthorityNoParamNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/ServerToAuthorityNoParamNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthorityNoParamNotifyEvent.names
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/ServerToAuthorityNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthorityNotifyEvent.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/AZEvents/ServerToAuthorityNotifyEvent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthorityNotifyEvent.names
diff --git a/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthority_DealDamageNotifyEvent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthority_DealDamageNotifyEvent.names
new file mode 100644
index 0000000000..2505d9593a
--- /dev/null
+++ b/AutomatedTesting/ScriptCanvas/TranslationAssets/AZEvents/ServerToAuthority_DealDamageNotifyEvent.names
@@ -0,0 +1,56 @@
+{
+ "entries": [
+ {
+ "base": "ServerToAuthority_DealDamage Notify Event",
+ "context": "AZEventHandler",
+ "variant": "",
+ "details": {
+ "name": "Server To Authority_ Deal Damage Notify Event"
+ },
+ "slots": [
+ {
+ "base": "damage",
+ "details": {
+ "name": "damage"
+ }
+ },
+ {
+ "base": "ServerToAuthority_DealDamage Notify Event",
+ "details": {
+ "name": "ServerToAuthority_DealDamage Notify Event"
+ }
+ },
+ {
+ "base": "Connect",
+ "details": {
+ "name": "Connect"
+ }
+ },
+ {
+ "base": "Disconnect",
+ "details": {
+ "name": "Disconnect"
+ }
+ },
+ {
+ "base": "On Connected",
+ "details": {
+ "name": "On Connected"
+ }
+ },
+ {
+ "base": "On Disconnected",
+ "details": {
+ "name": "On Disconnected"
+ }
+ },
+ {
+ "base": "OnEvent",
+ "details": {
+ "name": "OnEvent"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/Classes/NetworkTestPlayerComponent.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/Classes/NetworkTestPlayerComponent.names
similarity index 90%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/Classes/NetworkTestPlayerComponent.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/Classes/NetworkTestPlayerComponent.names
index 22636e0453..03e949f784 100644
--- a/Gems/ScriptCanvas/Assets/TranslationAssets/Classes/NetworkTestPlayerComponent.names
+++ b/AutomatedTesting/ScriptCanvas/TranslationAssets/Classes/NetworkTestPlayerComponent.names
@@ -8,64 +8,6 @@
"name": "Network Test Player Component"
},
"methods": [
- {
- "base": "AutonomousToAuthority",
- "context": "NetworkTestPlayerComponent",
- "entry": {
- "name": "In",
- "tooltip": "When signaled, this will invoke Autonomous To Authority"
- },
- "exit": {
- "name": "Out",
- "tooltip": "Signaled after Autonomous To Authority is invoked"
- },
- "details": {
- "name": "Autonomous To Authority"
- },
- "params": [
- {
- "typeid": "{CA5E5C37-98A6-04D2-E15C-1B4BFEE4C7DD}",
- "details": {
- "name": "Network Test Player Component"
- }
- },
- {
- "typeid": "{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}",
- "details": {
- "name": "float"
- }
- }
- ]
- },
- {
- "base": "ServerToAuthority",
- "context": "NetworkTestPlayerComponent",
- "entry": {
- "name": "In",
- "tooltip": "When signaled, this will invoke Server To Authority"
- },
- "exit": {
- "name": "Out",
- "tooltip": "Signaled after Server To Authority is invoked"
- },
- "details": {
- "name": "Server To Authority"
- },
- "params": [
- {
- "typeid": "{CA5E5C37-98A6-04D2-E15C-1B4BFEE4C7DD}",
- "details": {
- "name": "Network Test Player Component"
- }
- },
- {
- "typeid": "{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}",
- "details": {
- "name": "float"
- }
- }
- ]
- },
{
"base": "AutonomousToAuthorityByEntityId",
"context": "NetworkTestPlayerComponent",
@@ -97,18 +39,72 @@
]
},
{
- "base": "ServerToAuthorityByEntityId",
+ "base": "AuthorityToClientNoParams_PlayFxByEntityId",
"context": "NetworkTestPlayerComponent",
"entry": {
"name": "In",
- "tooltip": "When signaled, this will invoke Server To Authority By Entity Id"
+ "tooltip": "When signaled, this will invoke Authority To Client No Params_ Play Fx By Entity Id"
},
"exit": {
"name": "Out",
- "tooltip": "Signaled after Server To Authority By Entity Id is invoked"
+ "tooltip": "Signaled after Authority To Client No Params_ Play Fx By Entity Id is invoked"
},
"details": {
- "name": "Server To Authority By Entity Id"
+ "name": "Authority To Client No Params_ Play Fx By Entity Id"
+ },
+ "params": [
+ {
+ "typeid": "{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}",
+ "details": {
+ "name": "Source",
+ "tooltip": "The Source containing the NetworkTestPlayerComponentController"
+ }
+ }
+ ]
+ },
+ {
+ "base": "AuthorityToAutonomous_PlayerNumberByEntityId",
+ "context": "NetworkTestPlayerComponent",
+ "entry": {
+ "name": "In",
+ "tooltip": "When signaled, this will invoke Authority To Autonomous_ Player Number By Entity Id"
+ },
+ "exit": {
+ "name": "Out",
+ "tooltip": "Signaled after Authority To Autonomous_ Player Number By Entity Id is invoked"
+ },
+ "details": {
+ "name": "Authority To Autonomous_ Player Number By Entity Id"
+ },
+ "params": [
+ {
+ "typeid": "{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}",
+ "details": {
+ "name": "Source",
+ "tooltip": "The Source containing the NetworkTestPlayerComponentController"
+ }
+ },
+ {
+ "typeid": "{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}",
+ "details": {
+ "name": "player_number"
+ }
+ }
+ ]
+ },
+ {
+ "base": "ServerToAuthority_DealDamageByEntityId",
+ "context": "NetworkTestPlayerComponent",
+ "entry": {
+ "name": "In",
+ "tooltip": "When signaled, this will invoke Server To Authority_ Deal Damage By Entity Id"
+ },
+ "exit": {
+ "name": "Out",
+ "tooltip": "Signaled after Server To Authority_ Deal Damage By Entity Id is invoked"
+ },
+ "details": {
+ "name": "Server To Authority_ Deal Damage By Entity Id"
},
"params": [
{
@@ -121,47 +117,48 @@
{
"typeid": "{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}",
"details": {
- "name": "some Float"
+ "name": "damage"
}
}
]
},
{
- "base": "AutonomousToAuthorityNoParams",
+ "base": "AutonomousToAuthorityNoParamsByEntityId",
"context": "NetworkTestPlayerComponent",
"entry": {
"name": "In",
- "tooltip": "When signaled, this will invoke Autonomous To Authority No Params"
+ "tooltip": "When signaled, this will invoke Autonomous To Authority No Params By Entity Id"
},
"exit": {
"name": "Out",
- "tooltip": "Signaled after Autonomous To Authority No Params is invoked"
+ "tooltip": "Signaled after Autonomous To Authority No Params By Entity Id is invoked"
},
"details": {
- "name": "Autonomous To Authority No Params"
+ "name": "Autonomous To Authority No Params By Entity Id"
},
"params": [
{
- "typeid": "{CA5E5C37-98A6-04D2-E15C-1B4BFEE4C7DD}",
+ "typeid": "{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}",
"details": {
- "name": "Network Test Player Component"
+ "name": "Source",
+ "tooltip": "The Source containing the NetworkTestPlayerComponentController"
}
}
]
},
{
- "base": "AuthorityToAutonomous",
+ "base": "ServerToAuthority_DealDamage",
"context": "NetworkTestPlayerComponent",
"entry": {
"name": "In",
- "tooltip": "When signaled, this will invoke Authority To Autonomous"
+ "tooltip": "When signaled, this will invoke Server To Authority_ Deal Damage"
},
"exit": {
"name": "Out",
- "tooltip": "Signaled after Authority To Autonomous is invoked"
+ "tooltip": "Signaled after Server To Authority_ Deal Damage is invoked"
},
"details": {
- "name": "Authority To Autonomous"
+ "name": "Server To Authority_ Deal Damage"
},
"params": [
{
@@ -179,18 +176,18 @@
]
},
{
- "base": "AuthorityToClientNoParams",
+ "base": "AutonomousToAuthority",
"context": "NetworkTestPlayerComponent",
"entry": {
"name": "In",
- "tooltip": "When signaled, this will invoke Authority To Client No Params"
+ "tooltip": "When signaled, this will invoke Autonomous To Authority"
},
"exit": {
"name": "Out",
- "tooltip": "Signaled after Authority To Client No Params is invoked"
+ "tooltip": "Signaled after Autonomous To Authority is invoked"
},
"details": {
- "name": "Authority To Client No Params"
+ "name": "Autonomous To Authority"
},
"params": [
{
@@ -198,6 +195,41 @@
"details": {
"name": "Network Test Player Component"
}
+ },
+ {
+ "typeid": "{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}",
+ "details": {
+ "name": "float"
+ }
+ }
+ ]
+ },
+ {
+ "base": "AuthorityToAutonomous_PlayerNumber",
+ "context": "NetworkTestPlayerComponent",
+ "entry": {
+ "name": "In",
+ "tooltip": "When signaled, this will invoke Authority To Autonomous_ Player Number"
+ },
+ "exit": {
+ "name": "Out",
+ "tooltip": "Signaled after Authority To Autonomous_ Player Number is invoked"
+ },
+ "details": {
+ "name": "Authority To Autonomous_ Player Number"
+ },
+ "params": [
+ {
+ "typeid": "{CA5E5C37-98A6-04D2-E15C-1B4BFEE4C7DD}",
+ "details": {
+ "name": "Network Test Player Component"
+ }
+ },
+ {
+ "typeid": "{72039442-EB38-4D42-A1AD-CB68F7E0EEF6}",
+ "details": {
+ "name": "int"
+ }
}
]
},
@@ -308,79 +340,47 @@
]
},
{
- "base": "AuthorityToClientNoParamsByEntityId",
+ "base": "AutonomousToAuthorityNoParams",
"context": "NetworkTestPlayerComponent",
"entry": {
"name": "In",
- "tooltip": "When signaled, this will invoke Authority To Client No Params By Entity Id"
+ "tooltip": "When signaled, this will invoke Autonomous To Authority No Params"
},
"exit": {
"name": "Out",
- "tooltip": "Signaled after Authority To Client No Params By Entity Id is invoked"
+ "tooltip": "Signaled after Autonomous To Authority No Params is invoked"
},
"details": {
- "name": "Authority To Client No Params By Entity Id"
+ "name": "Autonomous To Authority No Params"
},
"params": [
{
- "typeid": "{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}",
+ "typeid": "{CA5E5C37-98A6-04D2-E15C-1B4BFEE4C7DD}",
"details": {
- "name": "Source",
- "tooltip": "The Source containing the NetworkTestPlayerComponentController"
+ "name": "Network Test Player Component"
}
}
]
},
{
- "base": "AuthorityToAutonomousByEntityId",
+ "base": "AuthorityToClientNoParams_PlayFx",
"context": "NetworkTestPlayerComponent",
"entry": {
"name": "In",
- "tooltip": "When signaled, this will invoke Authority To Autonomous By Entity Id"
+ "tooltip": "When signaled, this will invoke Authority To Client No Params_ Play Fx"
},
"exit": {
"name": "Out",
- "tooltip": "Signaled after Authority To Autonomous By Entity Id is invoked"
+ "tooltip": "Signaled after Authority To Client No Params_ Play Fx is invoked"
},
"details": {
- "name": "Authority To Autonomous By Entity Id"
+ "name": "Authority To Client No Params_ Play Fx"
},
"params": [
{
- "typeid": "{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}",
+ "typeid": "{CA5E5C37-98A6-04D2-E15C-1B4BFEE4C7DD}",
"details": {
- "name": "Source",
- "tooltip": "The Source containing the NetworkTestPlayerComponentController"
- }
- },
- {
- "typeid": "{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}",
- "details": {
- "name": "some Float"
- }
- }
- ]
- },
- {
- "base": "AutonomousToAuthorityNoParamsByEntityId",
- "context": "NetworkTestPlayerComponent",
- "entry": {
- "name": "In",
- "tooltip": "When signaled, this will invoke Autonomous To Authority No Params By Entity Id"
- },
- "exit": {
- "name": "Out",
- "tooltip": "Signaled after Autonomous To Authority No Params By Entity Id is invoked"
- },
- "details": {
- "name": "Autonomous To Authority No Params By Entity Id"
- },
- "params": [
- {
- "typeid": "{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}",
- "details": {
- "name": "Source",
- "tooltip": "The Source containing the NetworkTestPlayerComponentController"
+ "name": "Network Test Player Component"
}
}
]
diff --git a/Gems/ScriptCanvas/Assets/TranslationAssets/Classes/NetworkTestPlayerComponentNetworkInput.names b/AutomatedTesting/ScriptCanvas/TranslationAssets/Classes/NetworkTestPlayerComponentNetworkInput.names
similarity index 100%
rename from Gems/ScriptCanvas/Assets/TranslationAssets/Classes/NetworkTestPlayerComponentNetworkInput.names
rename to AutomatedTesting/ScriptCanvas/TranslationAssets/Classes/NetworkTestPlayerComponentNetworkInput.names
diff --git a/AutomatedTesting/ScriptCanvas/instance_counter.scriptcanvas b/AutomatedTesting/ScriptCanvas/instance_counter.scriptcanvas
index 0e5524273c..4ef5f0a8d5 100644
--- a/AutomatedTesting/ScriptCanvas/instance_counter.scriptcanvas
+++ b/AutomatedTesting/ScriptCanvas/instance_counter.scriptcanvas
@@ -5,7 +5,7 @@
"ClassData": {
"m_scriptCanvas": {
"Id": {
- "id": 3744110453276
+ "id": 337666590525276931
},
"Name": "instance_counter",
"Components": {
@@ -87,7 +87,6 @@
],
"Datums": [
{
- "isOverloadedStorage": false,
"scriptCanvasType": {
"m_type": 3
},
@@ -228,7 +227,6 @@
],
"Datums": [
{
- "isOverloadedStorage": false,
"scriptCanvasType": {
"m_type": 1
},
@@ -237,7 +235,7 @@
"value": {
"id": 2901262558
},
- "label": "Source"
+ "label": "EntityID: 0"
}
],
"methodType": 0,
@@ -340,7 +338,6 @@
],
"Datums": [
{
- "isOverloadedStorage": false,
"scriptCanvasType": {
"m_type": 3
},
@@ -587,26 +584,10 @@
"m_assetType": "{3E2AC8CD-713F-453E-967F-29517F331784}",
"versionData": {
"_grammarVersion": 1,
- "_runtimeVersion": 1
+ "_runtimeVersion": 1,
+ "_fileVersion": 1
},
"GraphCanvasData": [
- {
- "Key": {
- "id": 3744110453276
- },
- "Value": {
- "ComponentData": {
- "{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
- "$type": "SceneComponentSaveData",
- "ViewParams": {
- "Scale": 0.9218543514249998,
- "AnchorX": 50.98419189453125,
- "AnchorY": -272.27728271484375
- }
- }
- }
- }
- },
{
"Key": {
"id": 3748405420572
@@ -757,6 +738,18 @@
}
}
}
+ },
+ {
+ "Key": {
+ "id": 337666590525276931
+ },
+ "Value": {
+ "ComponentData": {
+ "{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
+ "$type": "SceneComponentSaveData"
+ }
+ }
+ }
}
],
"StatisticsHelper": {
diff --git a/AutomatedTesting/project.json b/AutomatedTesting/project.json
index fc14645d2b..a928547f20 100644
--- a/AutomatedTesting/project.json
+++ b/AutomatedTesting/project.json
@@ -5,12 +5,15 @@
"modules": [],
"project_id": "{D816AFAE-4BB7-4FEF-88F4-E2B786DCF29D}",
"android_settings": {
- "package_name": "com.lumberyard.yourgame",
+ "package_name": "org.o3de.automatedtesting",
"version_number": 1,
"version_name": "1.0.0",
"orientation": "landscape"
},
"engine": "o3de",
"display_name": "AutomatedTesting",
- "icon_path": "preview.png"
+ "icon_path": "preview.png",
+ "external_subdirectories": [
+ "Gem"
+ ]
}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f61a9561e8..3f9f56a606 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,26 +44,27 @@ include(cmake/SettingsRegistry.cmake)
include(cmake/TestImpactFramework/LYTestImpactFramework.cmake)
include(cmake/CMakeFiles.cmake)
include(cmake/O3DEJson.cmake)
+include(cmake/Subdirectories.cmake)
-################################################################################
-# Subdirectory processing
-################################################################################
-
-function(add_engine_json_external_subdirectories)
- read_json_external_subdirs(external_subdis ${LY_ROOT_FOLDER}/engine.json)
- foreach(external_subdir ${external_subdis})
- file(REAL_PATH ${external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER})
- list(APPEND engine_external_subdirs ${real_external_subdir})
- endforeach()
-
- set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${engine_external_subdirs})
-endfunction()
+# Gather the list of o3de_manifest external Subdirectories
+# into the LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST_PROPERTY
+add_o3de_manifest_json_external_subdirectories()
# Add the projects first so the Launcher can find them
include(cmake/Projects.cmake)
+if(LY_EXTERNAL_SUBDIRS)
+ set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${LY_EXTERNAL_SUBDIRS})
+endif()
+
if(NOT INSTALLED_ENGINE)
-
+ # Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
+ # external subdirectories. This should go before adding the rest of the targets so the targets are available to the launcher.
+ add_engine_json_external_subdirectories()
+
+ # Invoke add_subdirectory on external subdirectories that should be used a this point
+ add_subdirectory_on_external_subdirs()
+
# Add the rest of the targets
add_subdirectory(Assets)
add_subdirectory(Code)
@@ -73,31 +74,11 @@ if(NOT INSTALLED_ENGINE)
add_subdirectory(Templates)
add_subdirectory(Tools)
- # Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
- # external subdirectories
- add_engine_json_external_subdirectories()
else()
ly_find_o3de_packages()
+ add_subdirectory_on_external_subdirs()
endif()
-get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS)
-list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs})
-
-# Loop over the additional external subdirectories and invoke add_subdirectory on them
-foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
- # Hash the extenal_directory name and append it to the Binary Directory section of add_subdirectory
- # This is to deal with potential situations where multiple external directories has the same last directory name
- # For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory
- file(REAL_PATH ${external_directory} full_directory_path)
- string(SHA256 full_directory_hash ${full_directory_path})
- # Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit
- # when the external subdirectory contains relative paths of significant length
- string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash)
- # Use the last directory as the suffix path to use for the Binary Directory
- get_filename_component(directory_name ${external_directory} NAME)
- add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash})
-endforeach()
-
################################################################################
# Post-processing
################################################################################
diff --git a/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp b/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp
index baa287e47f..73c3d6f9ed 100644
--- a/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp
+++ b/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp
@@ -191,6 +191,7 @@ void AssetImporterManager::OnBrowseDestinationFilePath(QLineEdit* destinationLin
fileDialog.setViewMode(QFileDialog::List);
fileDialog.setWindowModality(Qt::WindowModality::ApplicationModal);
fileDialog.setWindowTitle(tr("Select import destination"));
+ fileDialog.setFileMode(QFileDialog::Directory);
QSettings settings;
QString currentDestination = settings.value(AssetImporterManagerPrivate::g_selectDestinationFilesPath).toString();
diff --git a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp b/Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp
deleted file mode 100644
index 1a45d1e391..0000000000
--- a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp
+++ /dev/null
@@ -1,73 +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
- *
- */
-#include "AzAssetBrowserWindow.h"
-#include "AzAssetBrowser/ui_AssetBrowserWindow.h"
-
-#include
-#include
-#include
-#include
-#include
-
-const char* ASSET_BROWSER_PREVIEW_NAME = "Asset Browser (PREVIEW)";
-
-AzAssetBrowserWindow::AzAssetBrowserWindow(const QString& name, QWidget* parent)
- : QDialog(parent)
- , m_ui(new Ui::AssetBrowserWindowClass())
- , m_assetDatabaseSortFilterProxyModel(new AssetBrowser::UI::SortFilterProxyModel(parent))
- , m_name(name)
- , m_assetBrowser(new AssetBrowser::UI::AssetTreeView(name, this))
- {
- EBUS_EVENT_RESULT(m_assetBrowserModel, AssetBrowser::AssetCache::AssetCacheRequestsBus, GetAssetBrowserModel);
- AZ_Assert(m_assetBrowserModel, "Failed to get filebrowser model");
- m_assetDatabaseSortFilterProxyModel->setSourceModel(m_assetBrowserModel);
-
- m_ui->setupUi(this);
-
- connect(m_ui->searchCriteriaWidget,
- &AzToolsFramework::SearchCriteriaWidget::SearchCriteriaChanged,
- m_assetDatabaseSortFilterProxyModel.data(),
- &AssetBrowser::UI::SortFilterProxyModel::OnSearchCriteriaChanged);
-
- connect(m_assetBrowser, &QTreeView::customContextMenuRequested, this, &AzAssetBrowserWindow::OnContextMenu);
- }
-
- AzAssetBrowserWindow::~AzAssetBrowserWindow()
- {
- m_assetBrowser->SaveState();
- }
-
- //////////////////////////////////////////////////////////////////////////
- const AZ::Uuid& AzAssetBrowserWindow::GetClassID()
- {
- return AZ::AzTypeInfo::Uuid();
- }
-
- void AzAssetBrowserWindow::OnContextMenu(const QPoint& point)
- {
- (void)point;
- //get the selected entries
- QModelIndexList sourceIndexes;
- for (const auto& index : m_assetBrowser->selectedIndexes())
- {
- sourceIndexes.push_back(m_assetDatabaseSortFilterProxyModel->mapToSource(index));
- }
- AZStd::vector entries;
- m_assetBrowserModel->SourceIndexesToAssetDatabaseEntries(sourceIndexes, entries);
-
- if (entries.empty() || entries.size() > 1)
- {
- return;
- }
- auto entry = entries.front();
-
- EBUS_EVENT(AssetBrowser::AssetBrowserRequestBus::Bus, OnItemContextMenu, this, entry);
- }
-
-#include
-
diff --git a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.h b/Code/Editor/AzAssetBrowser/AssetBrowserWindow.h
deleted file mode 100644
index a16cc4b494..0000000000
--- a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.h
+++ /dev/null
@@ -1,57 +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
- *
- */
-#pragma once
-
-#if !defined(Q_MOC_RUN)
-#include
-#include
-
-#include
-#endif
-
-namespace Ui
-{
- class AssetBrowserWindowClass;
-}
-
-namespace AssetBrowser
-{
- namespace UI
- {
- class AssetTreeView;
- class SortFilterProxyModel;
- class AssetBrowserModel;
- }
-}
-
-class AzAssetBrowserWindow
- : public QDialog
-{
- Q_OBJECT
-public:
- AZ_CLASS_ALLOCATOR(AzAssetBrowserWindow, AZ::SystemAllocator, 0);
- AZ_TYPE_INFO(AzAssetBrowserWindow, "{20238D23-2670-44BC-9110-A51374C18B5A}");
-
- explicit AzAssetBrowserWindow(const QString& name = "default", QWidget* parent = nullptr);
- virtual ~AzAssetBrowserWindow();
-
- static const AZ::Uuid& GetClassID();
-
-protected Q_SLOTS:
- void OnContextMenu(const QPoint& point);
-
-private:
- QScopedPointer m_ui;
- QScopedPointer m_assetDatabaseModel;
- QScopedPointer m_assetDatabaseSortFilterProxyModel;
- QString m_name;
- AssetBrowser::UI::AssetTreeView* m_assetBrowser;
- AssetBrowser::UI::AssetBrowserModel* m_assetBrowserModel;
-};
-
-extern const char* ASSET_BROWSER_PREVIEW_NAME;
diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
index bcaaa02b67..36e08982a7 100644
--- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
+++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
// AzQtComponents
#include
@@ -31,6 +32,15 @@ AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
AZ_CVAR_EXTERNED(bool, ed_useNewAssetBrowserTableView);
+namespace AzToolsFramework
+{
+ namespace AssetBrowser
+ {
+ static constexpr const char* CollapseAllIcon = "Assets/Editor/Icons/AssetBrowser/Collapse_All.svg";
+ static constexpr const char* MenuIcon = ":/Menu/menu.svg";
+ } // namespace AssetBrowser
+} // namespace AzToolsFramework
+
class ListenerForShowAssetEditorEvent
: public QObject
, private AzToolsFramework::EditorEvents::Bus::Handler
@@ -83,10 +93,24 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent)
m_ui->m_assetBrowserTableViewWidget->setVisible(false);
m_ui->m_toggleDisplayViewBtn->setVisible(false);
m_ui->m_searchWidget->SetFilterInputInterval(AZStd::chrono::milliseconds(250));
+
+ m_assetBrowserModel->SetFilterModel(m_filterModel.data());
+
+ m_ui->m_collapseAllButton->setAutoRaise(true); // hover highlight
+ m_ui->m_collapseAllButton->setIcon(QIcon(AzAssetBrowser::CollapseAllIcon));
+
+ connect(
+ m_ui->m_collapseAllButton, &QToolButton::clicked, this,
+ [this]()
+ {
+ m_ui->m_assetBrowserTreeViewWidget->collapseAll();
+ });
+
if (ed_useNewAssetBrowserTableView)
{
m_ui->m_toggleDisplayViewBtn->setVisible(true);
- m_ui->m_toggleDisplayViewBtn->setIcon(QIcon(":/Menu/menu.svg"));
+ m_ui->m_toggleDisplayViewBtn->setAutoRaise(true);
+ m_ui->m_toggleDisplayViewBtn->setIcon(QIcon(AzAssetBrowser::MenuIcon));
m_tableModel->setFilterRole(Qt::DisplayRole);
m_tableModel->setSourceModel(m_filterModel.data());
diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui
index a345438aed..e07a5cda95 100644
--- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui
+++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui
@@ -72,6 +72,19 @@
+ -
+
+
+ Qt::ClickFocus
+
+
+ Collapse All
+
+
+
+
+
+
-
@@ -143,15 +156,6 @@
true
-
- false
-
-
- true
-
-
- false
-
-
diff --git a/Code/Editor/CMakeLists.txt b/Code/Editor/CMakeLists.txt
index 3358b49dce..3f340e37d8 100644
--- a/Code/Editor/CMakeLists.txt
+++ b/Code/Editor/CMakeLists.txt
@@ -63,7 +63,7 @@ ly_add_target(
set(pal_cmake_files "")
foreach(enabled_platform ${LY_PAL_TOOLS_ENABLED})
string(TOLOWER ${enabled_platform} enabled_platform_lowercase)
- ly_get_list_relative_pal_filename(pal_cmake_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${enabled_platform})
+ o3de_pal_dir(pal_cmake_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${enabled_platform} ${O3DE_ENGINE_RESTRICTED_PATH} ${LY_ROOT_FOLDER})
list(APPEND pal_cmake_files ${pal_cmake_dir}/editor_lib_${enabled_platform_lowercase}_files.cmake)
endforeach()
@@ -104,13 +104,11 @@ ly_add_target(
3rdParty::Qt::Concurrent
3rdParty::TIFF
3rdParty::squish-ccr
- 3rdParty::AWSNativeSDK::STS
Legacy::CryCommon
Legacy::EditorCommon
AZ::AzCore
AZ::AzToolsFramework
Gem::LmbrCentral.Static
- AZ::AWSNativeSDKInit
AZ::AtomCore
Gem::Atom_RPI.Edit
Gem::Atom_RPI.Public
@@ -119,7 +117,6 @@ ly_add_target(
Gem::AtomViewportDisplayInfo
${additional_dependencies}
PUBLIC
- 3rdParty::AWSNativeSDK::Core
3rdParty::Qt::Network
Legacy::EditorCore
RUNTIME_DEPENDENCIES
diff --git a/Code/Editor/CVarMenu.cpp b/Code/Editor/CVarMenu.cpp
deleted file mode 100644
index 6449be9b3c..0000000000
--- a/Code/Editor/CVarMenu.cpp
+++ /dev/null
@@ -1,186 +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
- *
- */
-
-#include "EditorDefs.h"
-
-#include "CVarMenu.h"
-
-CVarMenu::CVarMenu(QWidget* parent)
- : QMenu(parent)
-{
-}
-
-void CVarMenu::AddCVarToggleItem(CVarToggle cVarToggle)
-{
- // Add CVar toggle action
- QAction* action = addAction(cVarToggle.m_displayName);
- connect(action, &QAction::triggered, [this, cVarToggle](bool checked)
- {
- // Update the CVar's value based on the action's new checked state
- ICVar* cVar = gEnv->pConsole->GetCVar(cVarToggle.m_cVarName.toUtf8().data());
- if (cVar)
- {
- SetCVar(cVar, checked ? cVarToggle.m_onValue : cVarToggle.m_offValue);
- }
- });
- action->setCheckable(true);
-
- // Initialize the action's checked state based on the associated CVar's value
- ICVar* cVar = gEnv->pConsole->GetCVar(cVarToggle.m_cVarName.toUtf8().data());
- bool checked = (cVar && cVar->GetFVal() == cVarToggle.m_onValue);
- action->setChecked(checked);
-}
-
-void CVarMenu::AddCVarValuesItem(QString cVarName,
- QString displayName,
- CVarDisplayNameValuePairs availableCVarValues,
- float offValue)
-{
- // Add a submenu offering multiple values for one CVar
- QMenu* menu = addMenu(displayName);
- QActionGroup* group = new QActionGroup(menu);
- group->setExclusive(true);
-
- ICVar* cVar = gEnv->pConsole->GetCVar(cVarName.toUtf8().data());
- float cVarValue = cVar ? cVar->GetFVal() : 0.0f;
- for (const auto& availableCVarValue : availableCVarValues)
- {
- QAction* action = menu->addAction(availableCVarValue.first);
- action->setCheckable(true);
- group->addAction(action);
-
- float availableOnValue = availableCVarValue.second;
- connect(action, &QAction::triggered, [this, action, cVarName, availableOnValue, offValue](bool checked)
- {
- ICVar* cVar = gEnv->pConsole->GetCVar(cVarName.toUtf8().data());
- if (cVar)
- {
- if (!checked)
- {
- SetCVar(cVar, offValue);
- }
- else
- {
- // Toggle the CVar and update the action's checked state to
- // allow none of the items to be checked in the exclusive group.
- // Otherwise we could have just used the action's currently checked
- // state and updated the CVar's value only
- bool cVarOn = (cVar->GetFVal() == availableOnValue);
- checked = !cVarOn;
- SetCVar(cVar, checked ? availableOnValue : offValue);
- action->setChecked(checked);
- }
- }
- });
-
- // Initialize the action's checked state based on the CVar's current value
- bool checked = (cVarValue == availableOnValue);
- action->setChecked(checked);
- }
-}
-
-void CVarMenu::AddUniqueCVarsItem(QString displayName,
- AZStd::vector availableCVars)
-{
- // Add a submenu of actions offering values for unique CVars
- QMenu* menu = addMenu(displayName);
- QActionGroup* group = new QActionGroup(menu);
- group->setExclusive(true);
-
- for (const CVarToggle& availableCVar : availableCVars)
- {
- QAction* action = menu->addAction(availableCVar.m_displayName);
- action->setCheckable(true);
- group->addAction(action);
-
- connect(action, &QAction::triggered, [this, action, availableCVar, availableCVars](bool checked)
- {
- ICVar* cVar = gEnv->pConsole->GetCVar(availableCVar.m_cVarName.toUtf8().data());
- if (cVar)
- {
- if (!checked)
- {
- SetCVar(cVar, availableCVar.m_offValue);
- }
- else
- {
- // Toggle the CVar and update the action's checked state to
- // allow none of the items to be checked in the exclusive group.
- // Otherwise we could have just used the action's currently checked
- // state and updated the CVar's value only
- bool cVarOn = (cVar->GetFVal() == availableCVar.m_onValue);
- bool cVarChecked = !cVarOn;
- SetCVar(cVar, cVarChecked ? availableCVar.m_onValue : availableCVar.m_offValue);
- action->setChecked(cVarChecked);
- if (cVarChecked)
- {
- // Set the rest of the CVars in the group to their off values
- SetCVarsToOffValue(availableCVars, availableCVar);
- }
- }
- }
- });
-
- // Initialize the action's checked state based on its associated CVar's current value
- ICVar* cVar = gEnv->pConsole->GetCVar(availableCVar.m_cVarName.toUtf8().data());
- bool cVarChecked = (cVar && cVar->GetFVal() == availableCVar.m_onValue);
- action->setChecked(cVarChecked);
- if (cVarChecked)
- {
- // Set the rest of the CVars in the group to their off values
- SetCVarsToOffValue(availableCVars, availableCVar);
- }
- }
-}
-
-void CVarMenu::AddResetCVarsItem()
-{
- QAction* action = addAction(tr("Reset to Default"));
- connect(action, &QAction::triggered, this, [this]()
- {
- for (auto it : m_originalCVarValues)
- {
- ICVar* cVar = gEnv->pConsole->GetCVar(it.first.c_str());
- if (cVar)
- {
- cVar->Set(it.second);
- }
- }
- });
-}
-
-void CVarMenu::SetCVarsToOffValue(const AZStd::vector& cVarToggles, const CVarToggle& excludeCVarToggle)
-{
- // Set all but the specified CVars to their off values
- for (const CVarToggle& cVarToggle : cVarToggles)
- {
- if (cVarToggle.m_cVarName != excludeCVarToggle.m_cVarName
- || cVarToggle.m_onValue != excludeCVarToggle.m_onValue)
- {
- ICVar* cVar = gEnv->pConsole->GetCVar(cVarToggle.m_cVarName.toUtf8().data());
- if (cVar)
- {
- SetCVar(cVar, cVarToggle.m_offValue);
- }
- }
- }
-}
-
-void CVarMenu::SetCVar(ICVar* cVar, float newValue)
-{
- float oldValue = cVar->GetFVal();
- cVar->Set(newValue);
-
- // Store original value for CVar if not already in the list
- m_originalCVarValues.emplace(AZStd::string(cVar->GetName()), oldValue);
-}
-
-void CVarMenu::AddSeparator()
-{
- addSeparator();
-}
diff --git a/Code/Editor/CVarMenu.h b/Code/Editor/CVarMenu.h
deleted file mode 100644
index 5195bd99d7..0000000000
--- a/Code/Editor/CVarMenu.h
+++ /dev/null
@@ -1,65 +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
- *
- */
-
-#pragma once
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-
-struct ICVar;
-
-class CVarMenu
- : public QMenu
-{
- Q_OBJECT
-public:
- // CVar that can be toggled on and off
- struct CVarToggle
- {
- QString m_cVarName;
- QString m_displayName;
- float m_onValue;
- float m_offValue;
- };
-
- // List of a CVar's available values and their descriptions
- using CVarDisplayNameValuePairs = AZStd::vector>;
-
- CVarMenu(QWidget* parent = nullptr);
-
- // Add an action that turns a CVar on/off
- void AddCVarToggleItem(CVarToggle cVarToggle);
-
- // Add a submenu of actions for a CVar that offers multiple values for exclusive selection
- void AddCVarValuesItem(QString cVarName,
- QString displayName,
- CVarDisplayNameValuePairs availableCVarValues,
- float offValue);
-
- // Add a submenu of actions for exclusively turning unique CVars on/off
- void AddUniqueCVarsItem(QString displayName,
- AZStd::vector availableCVars);
-
- // Add an action to reset all CVars to their original values before they
- // were modified by this menu
- void AddResetCVarsItem();
-
- void AddSeparator();
-
-private:
- void SetCVarsToOffValue(const AZStd::vector& cVarToggles, const CVarToggle& excludeCVarToggle);
- void SetCVar(ICVar* cVar, float newValue);
-
- // Original CVar values before they were modified by this menu
- AZStd::unordered_map m_originalCVarValues;
-};
diff --git a/Code/Editor/Commands/CommandManagerBus.h b/Code/Editor/Commands/CommandManagerBus.h
deleted file mode 100644
index a5edceaee8..0000000000
--- a/Code/Editor/Commands/CommandManagerBus.h
+++ /dev/null
@@ -1,30 +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
- *
- */
-
-#pragma once
-
-#include
-
-class CommandManagerRequests : public AZ::EBusTraits
-{
-public:
-
- struct CommandDetails
- {
- AZStd::string m_name;
- AZStd::vector m_arguments;
- };
-
- virtual AZStd::vector GetCommands() const = 0;
- virtual void ExecuteCommand(const AZStd::string& commandLine) {}
-
- virtual void GetCommandDetails(AZStd::string commandName, CommandDetails& outArguments) const = 0;
-
-};
-
-using CommandManagerRequestBus = AZ::EBus;
diff --git a/Code/Editor/ConfigGroup.cpp b/Code/Editor/ConfigGroup.cpp
deleted file mode 100644
index 42236e43dd..0000000000
--- a/Code/Editor/ConfigGroup.cpp
+++ /dev/null
@@ -1,195 +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
- *
- */
-
-
-#include "EditorDefs.h"
-
-#include "ConfigGroup.h"
-
-namespace Config
-{
- CConfigGroup::CConfigGroup()
- {
- }
-
- CConfigGroup::~CConfigGroup()
- {
- for (IConfigVar* var : m_vars)
- {
- delete var;
- }
- }
-
- void CConfigGroup::AddVar(IConfigVar* var)
- {
- m_vars.push_back(var);
- }
-
- AZ::u32 CConfigGroup::GetVarCount()
- {
- return aznumeric_cast(m_vars.size());
- }
-
- IConfigVar* CConfigGroup::GetVar(const char* szName)
- {
- for (IConfigVar* var : m_vars)
- {
- if (0 == _stricmp(szName, var->GetName().c_str()))
- {
- return var;
- }
- }
-
- return nullptr;
- }
-
- const IConfigVar* CConfigGroup::GetVar(const char* szName) const
- {
- for (const IConfigVar* var : m_vars)
- {
- if (0 == _stricmp(szName, var->GetName().c_str()))
- {
- return var;
- }
-
- }
-
- return nullptr;
- }
-
- IConfigVar* CConfigGroup::GetVar(AZ::u32 index)
- {
- if (index < m_vars.size())
- {
- return m_vars[index];
- }
-
- return nullptr;
- }
-
- const IConfigVar* CConfigGroup::GetVar(AZ::u32 index) const
- {
- if (index < m_vars.size())
- {
- return m_vars[index];
- }
-
- return nullptr;
- }
-
- void CConfigGroup::SaveToXML(XmlNodeRef node)
- {
- // save only values that don't have default values
- for (const IConfigVar* var : m_vars)
- {
- if (var->IsFlagSet(IConfigVar::eFlag_DoNotSave) || var->IsDefault())
- {
- continue;
- }
-
- const char* szName = var->GetName().c_str();
-
- switch (var->GetType())
- {
- case IConfigVar::eType_BOOL:
- {
- bool currentValue = false;
- var->Get(¤tValue);
- node->setAttr(szName, currentValue);
- break;
- }
-
- case IConfigVar::eType_INT:
- {
- int currentValue = 0;
- var->Get(¤tValue);
- node->setAttr(szName, currentValue);
- break;
- }
-
- case IConfigVar::eType_FLOAT:
- {
- float currentValue = 0;
- var->Get(¤tValue);
- node->setAttr(szName, currentValue);
- break;
- }
-
- case IConfigVar::eType_STRING:
- {
- AZStd::string currentValue;
- var->Get(¤tValue);
- node->setAttr(szName, currentValue.c_str());
- break;
- }
- }
- }
- }
-
- void CConfigGroup::LoadFromXML(XmlNodeRef node)
- {
- // load values that are save-able
- for (IConfigVar* var : m_vars)
- {
- if (var->IsFlagSet(IConfigVar::eFlag_DoNotSave))
- {
- continue;
- }
- const char* szName = var->GetName().c_str();
-
- switch (var->GetType())
- {
- case IConfigVar::eType_BOOL:
- {
- bool currentValue = false;
- var->GetDefault(¤tValue);
- if (node->getAttr(szName, currentValue))
- {
- var->Set(¤tValue);
- }
- break;
- }
-
- case IConfigVar::eType_INT:
- {
- int currentValue = 0;
- var->GetDefault(¤tValue);
- if (node->getAttr(szName, currentValue))
- {
- var->Set(¤tValue);
- }
- break;
- }
-
- case IConfigVar::eType_FLOAT:
- {
- float currentValue = 0;
- var->GetDefault(¤tValue);
- if (node->getAttr(szName, currentValue))
- {
- var->Set(¤tValue);
- }
- break;
- }
-
- case IConfigVar::eType_STRING:
- {
- AZStd::string currentValue;
- var->GetDefault(¤tValue);
- QString readValue(currentValue.c_str());
- if (node->getAttr(szName, readValue))
- {
- currentValue = readValue.toUtf8().data();
- var->Set(¤tValue);
- }
- break;
- }
- }
- }
- }
-}
diff --git a/Code/Editor/ConfigGroup.h b/Code/Editor/ConfigGroup.h
deleted file mode 100644
index 004725e32c..0000000000
--- a/Code/Editor/ConfigGroup.h
+++ /dev/null
@@ -1,113 +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
- *
- */
-
-
-#pragma once
-#include
-#include
-#include
-
-struct ICVar;
-class XmlNodeRef;
-
-namespace Config
-{
- // Abstract configurable variable
- struct IConfigVar
- {
- public:
- enum EType
- {
- eType_BOOL,
- eType_INT,
- eType_FLOAT,
- eType_STRING,
- };
-
- enum EFlags
- {
- eFlag_NoUI = 1 << 0,
- eFlag_NoCVar = 1 << 1,
- eFlag_DoNotSave = 1 << 2,
- };
-
- IConfigVar(const char* szName, const char* szDescription, EType varType, AZ::u8 flags)
- : m_name(szName)
- , m_description(szDescription)
- , m_type(varType)
- , m_flags(flags)
- , m_ptr(nullptr)
- {};
-
- virtual ~IConfigVar() = default;
-
- AZ_FORCE_INLINE EType GetType() const
- {
- return m_type;
- }
-
- AZ_FORCE_INLINE const AZStd::string& GetName() const
- {
- return m_name;
- }
-
- AZ_FORCE_INLINE const AZStd::string& GetDescription() const
- {
- return m_description;
- }
-
- AZ_FORCE_INLINE bool IsFlagSet(EFlags flag) const
- {
- return 0 != (m_flags & flag);
- }
-
- virtual void Get(void* outPtr) const = 0;
- virtual void Set(const void* ptr) = 0;
- virtual bool IsDefault() const = 0;
- virtual void GetDefault(void* outPtr) const = 0;
- virtual void Reset() = 0;
-
- static constexpr EType TranslateType(const bool&) { return eType_BOOL; }
- static constexpr EType TranslateType(const int&) { return eType_INT; }
- static constexpr EType TranslateType(const float&) { return eType_FLOAT; }
- static constexpr EType TranslateType(const AZStd::string&) { return eType_STRING; }
-
- protected:
- EType m_type;
- AZ::u8 m_flags;
- AZStd::string m_name;
- AZStd::string m_description;
- void* m_ptr;
- ICVar* m_pCVar;
- };
-
- // Group of configuration variables with optional mapping to CVars
- class CConfigGroup
- {
- private:
- using TConfigVariables = AZStd::vector ;
- TConfigVariables m_vars;
-
- using TConsoleVariables = AZStd::vector;
- TConsoleVariables m_consoleVars;
-
- public:
- CConfigGroup();
- virtual ~CConfigGroup();
-
- void AddVar(IConfigVar* var);
- AZ::u32 GetVarCount();
- IConfigVar* GetVar(const char* szName);
- IConfigVar* GetVar(AZ::u32 index);
- const IConfigVar* GetVar(const char* szName) const;
- const IConfigVar* GetVar(AZ::u32 index) const;
-
- void SaveToXML(XmlNodeRef node);
- void LoadFromXML(XmlNodeRef node);
- };
-};
diff --git a/Code/Editor/Controls/BitmapToolTip.cpp b/Code/Editor/Controls/BitmapToolTip.cpp
deleted file mode 100644
index d639ac0677..0000000000
--- a/Code/Editor/Controls/BitmapToolTip.cpp
+++ /dev/null
@@ -1,369 +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
- *
- */
-
-
-// Description : Tooltip that displays bitmap.
-
-
-#include "EditorDefs.h"
-
-#include "BitmapToolTip.h"
-
-// Qt
-#include
-
-// Editor
-#include "Util/Image.h"
-#include "Util/ImageUtil.h"
-
-
-static const int STATIC_TEXT_C_HEIGHT = 42;
-static const int HISTOGRAM_C_HEIGHT = 130;
-
-/////////////////////////////////////////////////////////////////////////////
-// CBitmapToolTip
-CBitmapToolTip::CBitmapToolTip(QWidget* parent)
- : QWidget(parent, Qt::ToolTip)
- , m_staticBitmap(new QLabel(this))
- , m_staticText(new QLabel(this))
- , m_rgbaHistogram(new CImageHistogramCtrl(this))
- , m_alphaChannelHistogram(new CImageHistogramCtrl(this))
-{
- m_nTimer = 0;
- m_hToolWnd = nullptr;
- m_bShowHistogram = true;
- m_bShowFullsize = false;
- m_eShowMode = ESHOW_RGB;
-
- connect(&m_timer, &QTimer::timeout, this, &CBitmapToolTip::OnTimer);
-
- auto* layout = new QVBoxLayout(this);
- layout->setSizeConstraint(QLayout::SetFixedSize);
-
- layout->addWidget(m_staticBitmap);
- layout->addWidget(m_staticText);
-
- auto* histogramLayout = new QHBoxLayout();
- histogramLayout->addWidget(m_rgbaHistogram);
- histogramLayout->addWidget(m_alphaChannelHistogram);
- m_alphaChannelHistogram->setVisible(false);
-
- layout->addLayout(histogramLayout);
-
- setLayout(layout);
-}
-
-CBitmapToolTip::~CBitmapToolTip()
-{
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBitmapToolTip::GetShowMode(EShowMode& eShowMode, bool& bShowInOriginalSize) const
-{
- bShowInOriginalSize = CheckVirtualKey(Qt::Key_Space);
- eShowMode = ESHOW_RGB;
-
- if (m_bHasAlpha)
- {
- if (CheckVirtualKey(Qt::Key_Control))
- {
- eShowMode = ESHOW_RGB_ALPHA;
- }
- else if (CheckVirtualKey(Qt::Key_Alt))
- {
- eShowMode = ESHOW_ALPHA;
- }
- else if (CheckVirtualKey(Qt::Key_Shift))
- {
- eShowMode = ESHOW_RGBA;
- }
- }
- else if (m_bIsLimitedHDR)
- {
- if (CheckVirtualKey(Qt::Key_Shift))
- {
- eShowMode = ESHOW_RGBE;
- }
- }
-}
-
-const char* CBitmapToolTip::GetShowModeDescription(EShowMode eShowMode, [[maybe_unused]] bool bShowInOriginalSize) const
-{
- switch (eShowMode)
- {
- case ESHOW_RGB:
- return "RGB";
- case ESHOW_RGB_ALPHA:
- return "RGB+A";
- case ESHOW_ALPHA:
- return "Alpha";
- case ESHOW_RGBA:
- return "RGBA";
- case ESHOW_RGBE:
- return "RGBExp";
- }
-
- return "";
-}
-
-void CBitmapToolTip::RefreshViewmode()
-{
- LoadImage(m_filename);
-
- if (m_eShowMode == ESHOW_RGB_ALPHA || m_eShowMode == ESHOW_RGBA)
- {
- m_rgbaHistogram->setVisible(true);
- m_alphaChannelHistogram->setVisible(true);
- }
- else if (m_eShowMode == ESHOW_ALPHA)
- {
- m_rgbaHistogram->setVisible(false);
- m_alphaChannelHistogram->setVisible(true);
- }
- else
- {
- m_rgbaHistogram->setVisible(true);
- m_alphaChannelHistogram->setVisible(false);
- }
-}
-
-bool CBitmapToolTip::LoadImage(const QString& imageFilename)
-{
- EShowMode eShowMode = ESHOW_RGB;
- const char* pShowModeDescription = "RGB";
- bool bShowInOriginalSize = false;
-
- GetShowMode(eShowMode, bShowInOriginalSize);
- pShowModeDescription = GetShowModeDescription(eShowMode, bShowInOriginalSize);
-
- QString convertedFileName = Path::GamePathToFullPath(Path::ReplaceExtension(imageFilename, ".dds"));
-
- // We need to check against both the image filename and the converted filename as it is possible that the
- // converted file existed but failed to load previously and we reverted to loading the source asset.
- bool alreadyLoadedImage = ((m_filename == convertedFileName) || (m_filename == imageFilename));
- if (alreadyLoadedImage && (m_eShowMode == eShowMode) && (m_bShowFullsize == bShowInOriginalSize))
- {
- return true;
- }
-
- CCryFile fileCheck;
- if (!fileCheck.Open(convertedFileName.toUtf8().data(), "rb"))
- {
- // if we didn't find it, then default back to just using what we can find (if any)
- convertedFileName = imageFilename;
- }
- else
- {
- fileCheck.Close();
- }
-
- m_eShowMode = eShowMode;
- m_bShowFullsize = bShowInOriginalSize;
-
- CImageEx image;
- image.SetHistogramEqualization(CheckVirtualKey(Qt::Key_Shift));
- bool loadedRequestedAsset = true;
- if (!CImageUtil::LoadImage(convertedFileName, image))
- {
- //Failed to load the requested asset, let's try loading the source asset if available.
- loadedRequestedAsset = false;
- if (!CImageUtil::LoadImage(imageFilename, image))
- {
- m_staticBitmap->clear();
- return false;
- }
- }
-
- QString imginfo;
-
- m_filename = loadedRequestedAsset ? convertedFileName : imageFilename;
- m_bHasAlpha = image.HasAlphaChannel();
- m_bIsLimitedHDR = image.IsLimitedHDR();
-
- GetShowMode(eShowMode, bShowInOriginalSize);
- pShowModeDescription = GetShowModeDescription(eShowMode, bShowInOriginalSize);
-
- if (m_bHasAlpha)
- {
- imginfo = tr("%1x%2 %3\nShowing %4 (ALT=Alpha, SHIFT=RGBA, CTRL=RGB+A, SPACE=see in original size)");
- }
- else if (m_bIsLimitedHDR)
- {
- imginfo = tr("%1x%2 %3\nShowing %4 (SHIFT=see hist.-equalized, SPACE=see in original size)");
- }
- else
- {
- imginfo = tr("%1x%2 %3\nShowing %4 (SPACE=see in original size)");
- }
-
- imginfo = imginfo.arg(image.GetWidth()).arg(image.GetHeight()).arg(image.GetFormatDescription()).arg(pShowModeDescription);
-
- m_staticText->setText(imginfo);
-
- int w = image.GetWidth();
- int h = image.GetHeight();
- int multiplier = (m_eShowMode == ESHOW_RGB_ALPHA ? 2 : 1);
- int originalW = w * multiplier;
- int originalH = h;
-
- if (!bShowInOriginalSize || (w == 0))
- {
- w = 256;
- }
- if (!bShowInOriginalSize || (h == 0))
- {
- h = 256;
- }
-
- w *= multiplier;
-
- resize(w + 4, h + 4 + STATIC_TEXT_C_HEIGHT + HISTOGRAM_C_HEIGHT);
- setVisible(true);
-
- CImageEx scaledImage;
-
- if (bShowInOriginalSize && (originalW < w))
- {
- w = originalW;
- }
- if (bShowInOriginalSize && (originalH < h))
- {
- h = originalH;
- }
-
- scaledImage.Allocate(w, h);
-
- if (m_eShowMode == ESHOW_RGB_ALPHA)
- {
- CImageUtil::ScaleToDoubleFit(image, scaledImage);
- }
- else
- {
- CImageUtil::ScaleToFit(image, scaledImage);
- }
-
- if (m_eShowMode == ESHOW_RGB || m_eShowMode == ESHOW_RGBE)
- {
- scaledImage.SwapRedAndBlue();
- scaledImage.FillAlpha();
- }
- else if (m_eShowMode == ESHOW_ALPHA)
- {
- for (int hh = 0; hh < scaledImage.GetHeight(); hh++)
- {
- for (int ww = 0; ww < scaledImage.GetWidth(); ww++)
- {
- int a = scaledImage.ValueAt(ww, hh) >> 24;
- scaledImage.ValueAt(ww, hh) = RGB(a, a, a);
- }
- }
- }
- else if (m_eShowMode == ESHOW_RGB_ALPHA)
- {
- int halfWidth = scaledImage.GetWidth() / 2;
- for (int hh = 0; hh < scaledImage.GetHeight(); hh++)
- {
- for (int ww = 0; ww < halfWidth; ww++)
- {
- int r = GetRValue(scaledImage.ValueAt(ww, hh));
- int g = GetGValue(scaledImage.ValueAt(ww, hh));
- int b = GetBValue(scaledImage.ValueAt(ww, hh));
- int a = scaledImage.ValueAt(ww, hh) >> 24;
- scaledImage.ValueAt(ww, hh) = RGB(b, g, r);
- scaledImage.ValueAt(ww + halfWidth, hh) = RGB(a, a, a);
- }
- }
- }
- else //if (m_showMode == ESHOW_RGBA)
- {
- scaledImage.SwapRedAndBlue();
- }
-
- QImage qImage(scaledImage.GetWidth(), scaledImage.GetHeight(), QImage::Format_RGB32);
- memcpy(qImage.bits(), scaledImage.GetData(), qImage.sizeInBytes());
- m_staticBitmap->setPixmap(QPixmap::fromImage(qImage));
-
- if (m_bShowHistogram && scaledImage.GetData())
- {
- m_rgbaHistogram->ComputeHistogram(image, CImageHistogram::eImageFormat_32BPP_BGRA);
- m_rgbaHistogram->setDrawMode(EHistogramDrawMode::OverlappedRGB);
-
- m_alphaChannelHistogram->histogramDisplay()->CopyComputedDataFrom(m_rgbaHistogram->histogramDisplay());
- m_alphaChannelHistogram->setDrawMode(EHistogramDrawMode::AlphaChannel);
- }
-
- return true;
-}
-
-void CBitmapToolTip::OnTimer()
-{
- /*
- if (IsWindowVisible())
- {
- if (m_bHaveAnythingToRender)
- Invalidate();
- }
- */
- if (m_hToolWnd)
- {
- QRect toolRc(m_toolRect);
- QRect rc = geometry();
- QPoint cursorPos = QCursor::pos();
- toolRc.moveTopLeft(m_hToolWnd->mapToGlobal(toolRc.topLeft()));
- if (!toolRc.contains(cursorPos) && !rc.contains(cursorPos))
- {
- setVisible(false);
- }
- else
- {
- RefreshViewmode();
- }
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBitmapToolTip::showEvent([[maybe_unused]] QShowEvent* event)
-{
- QPoint cursorPos = QCursor::pos();
- move(cursorPos);
- m_timer.start(500);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBitmapToolTip::hideEvent([[maybe_unused]] QHideEvent* event)
-{
- m_timer.stop();
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-void CBitmapToolTip::keyPressEvent(QKeyEvent* event)
-{
- if (event->key() == Qt::Key_Control || event->key() == Qt::Key_Alt || event->key() == Qt::Key_Shift)
- {
- RefreshViewmode();
- }
-}
-
-void CBitmapToolTip::keyReleaseEvent(QKeyEvent* event)
-{
- if (event->key() == Qt::Key_Control || event->key() == Qt::Key_Alt || event->key() == Qt::Key_Shift)
- {
- RefreshViewmode();
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBitmapToolTip::SetTool(QWidget* pWnd, const QRect& rect)
-{
- assert(pWnd);
- m_hToolWnd = pWnd;
- m_toolRect = rect;
-}
-
-#include
diff --git a/Code/Editor/Controls/BitmapToolTip.h b/Code/Editor/Controls/BitmapToolTip.h
deleted file mode 100644
index 5b7c56cbf3..0000000000
--- a/Code/Editor/Controls/BitmapToolTip.h
+++ /dev/null
@@ -1,88 +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
- *
- */
-
-
-// Description : Tooltip that displays bitmap.
-
-
-#ifndef CRYINCLUDE_EDITOR_CONTROLS_BITMAPTOOLTIP_H
-#define CRYINCLUDE_EDITOR_CONTROLS_BITMAPTOOLTIP_H
-#pragma once
-
-
-#if !defined(Q_MOC_RUN)
-#include "Controls/ImageHistogramCtrl.h"
-
-#include
-#include
-#endif
-
-//////////////////////////////////////////////////////////////////////////
-class CBitmapToolTip
- : public QWidget
-{
- Q_OBJECT
- // Construction
-public:
-
- enum EShowMode
- {
- ESHOW_RGB = 0,
- ESHOW_ALPHA,
- ESHOW_RGBA,
- ESHOW_RGB_ALPHA,
- ESHOW_RGBE
- };
-
- CBitmapToolTip(QWidget* parent = nullptr);
- virtual ~CBitmapToolTip();
-
- bool Create(const RECT& rect);
-
- // Attributes
-public:
-
- // Operations
-public:
- void RefreshViewmode();
-
- bool LoadImage(const QString& imageFilename);
- void SetTool(QWidget* pWnd, const QRect& rect);
-
- // Generated message map functions
-protected:
- void OnTimer();
-
- void keyPressEvent(QKeyEvent* event) override;
- void keyReleaseEvent(QKeyEvent* event) override;
-
- void showEvent(QShowEvent* event) override;
- void hideEvent(QHideEvent* event) override;
-
-private:
- void GetShowMode(EShowMode& showMode, bool& showInOriginalSize) const;
- const char* GetShowModeDescription(EShowMode showMode, bool showInOriginalSize) const;
-
- QLabel* m_staticBitmap;
- QLabel* m_staticText;
- QString m_filename;
- bool m_bShowHistogram;
- EShowMode m_eShowMode;
- bool m_bShowFullsize;
- bool m_bHasAlpha;
- bool m_bIsLimitedHDR;
- CImageHistogramCtrl* m_rgbaHistogram;
- CImageHistogramCtrl* m_alphaChannelHistogram;
- int m_nTimer;
- QWidget* m_hToolWnd;
- QRect m_toolRect;
- QTimer m_timer;
-};
-
-
-#endif // CRYINCLUDE_EDITOR_CONTROLS_BITMAPTOOLTIP_H
diff --git a/Code/Editor/Controls/QBitmapPreviewDialog.cpp b/Code/Editor/Controls/QBitmapPreviewDialog.cpp
deleted file mode 100644
index 912db3708c..0000000000
--- a/Code/Editor/Controls/QBitmapPreviewDialog.cpp
+++ /dev/null
@@ -1,172 +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
- *
- */
-#include "EditorDefs.h"
-
-#include "QBitmapPreviewDialog.h"
-#include
-
-#include
-#include
-#include
-#include
-
-void QBitmapPreviewDialog::ImageData::setRgba8888(const void* buffer, const int& w, const int& h)
-{
- const unsigned long bytes = w * h * 4;
- m_buffer.resize(bytes);
- memcpy(m_buffer.data(), buffer, bytes);
- m_image = QImage((uchar*)m_buffer.constData(), w, h, QImage::Format::Format_RGBA8888);
-}
-
-static void fillChecker(int w, int h, unsigned int* dst)
-{
- for (int y = 0; y < h; y++)
- {
- for (int x = 0; x < w; x++)
- {
- dst[y * w + x] = 0xFF000000 | (((x >> 2) + (y >> 2)) % 2 == 0 ? 0x007F7F7F : 0x00000000);
- }
- }
-}
-
-QBitmapPreviewDialog::QBitmapPreviewDialog(QWidget* parent)
- : QWidget(parent)
- , ui(new Ui::QBitmapTooltip)
-{
- ui->setupUi(this);
- setAttribute(Qt::WA_TranslucentBackground);
- setAttribute(Qt::WA_ShowWithoutActivating);
-
- // Clear label text
- ui->m_placeholderBitmap->setText("");
- ui->m_placeholderHistogram->setText("");
-
- ui->m_bitmapSize->setProperty("tableRow", "Odd");
- ui->m_Mips->setProperty("tableRow", "Even");
- ui->m_Mean->setProperty("tableRow", "Odd");
- ui->m_StdDev->setProperty("tableRow", "Even");
- ui->m_Median->setProperty("tableRow", "Odd");
- ui->m_labelForBitmapSize->setProperty("tooltipLabel", "content");
- ui->m_labelForMean->setProperty("tooltipLabel", "content");
- ui->m_labelForMedian->setProperty("tooltipLabel", "content");
- ui->m_labelForMips->setProperty("tooltipLabel", "content");
- ui->m_labelForStdDev->setProperty("tooltipLabel", "content");
- ui->m_vBitmapSize->setProperty("tooltipLabel", "content");
- ui->m_vMean->setProperty("tooltipLabel", "content");
- ui->m_vMedian->setProperty("tooltipLabel", "content");
- ui->m_vMips->setProperty("tooltipLabel", "content");
- ui->m_vStdDev->setProperty("tooltipLabel", "content");
-
- // Initialize placeholder images
- const int w = 64;
- const int h = 64;
- QByteArray buffer;
- buffer.resize(w * h * 4);
- unsigned int* dst = (unsigned int*)buffer.data();
- fillChecker(w, h, dst);
- m_checker.setRgba8888(buffer.constData(), w, h);
-
- m_initialSize = window()->window()->geometry().size();
-}
-
-QBitmapPreviewDialog::~QBitmapPreviewDialog()
-{
- delete ui;
-}
-
-void QBitmapPreviewDialog::setImageRgba8888(const void* buffer, const int& w, const int& h, [[maybe_unused]] const QString& info)
-{
- m_imageMain.setRgba8888(buffer, w, h);
-}
-
-
-QRect QBitmapPreviewDialog::getHistogramArea()
-{
- return QRect(ui->m_placeholderHistogram->pos(), ui->m_placeholderHistogram->size());
-}
-
-void QBitmapPreviewDialog::setFullSize(const bool& fullSize)
-{
- if (fullSize)
- {
- QSize desktop = QApplication::screenAt(ui->m_placeholderBitmap->pos())->availableGeometry().size();
- QSize image = m_imageMain.m_image.size();
- QPoint location = mapToGlobal(ui->m_placeholderBitmap->pos());
- QSize finalSize;
- finalSize.setWidth((image.width() < (desktop.width() - location.x())) ? image.width() : (desktop.width() - location.x()));
- finalSize.setHeight((image.height() < (desktop.height() - location.y())) ? image.height() : (desktop.height() - location.y()));
- float scale = (finalSize.width() < finalSize.height()) ? finalSize.width() / float(m_imageMain.m_image.width()) : finalSize.height() / float(m_imageMain.m_image.height());
- ui->m_placeholderBitmap->setFixedSize(scale * m_imageMain.m_image.size());
- }
- else
- {
- ui->m_placeholderBitmap->setFixedSize(256, 256);
- }
-
- adjustSize();
-
- update();
-}
-
-void QBitmapPreviewDialog::paintEvent(QPaintEvent* e)
-{
- QWidget::paintEvent(e);
- QRect rect(ui->m_placeholderBitmap->pos(), ui->m_placeholderBitmap->size());
- drawImageData(rect, m_imageMain);
-}
-
-void QBitmapPreviewDialog::drawImageData(const QRect& rect, const ImageData& imgData)
-{
- // Draw the
- QPainter p(this);
- p.drawImage(rect.topLeft(), m_checker.m_image.scaled(rect.size()));
- p.drawImage(rect.topLeft(), imgData.m_image.scaled(rect.size()));
-
- // Draw border
- QPen pen;
- pen.setColor(QColor(0, 0, 0));
- p.drawRect(rect.top(), rect.left(), rect.width() - 1, rect.height());
-}
-
-void QBitmapPreviewDialog::setSize(QString _value)
-{
- ui->m_vBitmapSize->setText(_value);
-}
-
-void QBitmapPreviewDialog::setMips(QString _value)
-{
- ui->m_vMips->setText(_value);
-}
-
-void QBitmapPreviewDialog::setMean(QString _value)
-{
- ui->m_vMean->setText(_value);
-}
-
-void QBitmapPreviewDialog::setMedian(QString _value)
-{
- ui->m_vMedian->setText(_value);
-}
-
-void QBitmapPreviewDialog::setStdDev(QString _value)
-{
- ui->m_vStdDev->setText(_value);
-}
-
-QSize QBitmapPreviewDialog::GetCurrentBitmapSize()
-{
- return ui->m_placeholderBitmap->size();
-}
-
-QSize QBitmapPreviewDialog::GetOriginalImageSize()
-{
- return m_imageMain.m_image.size();
-}
-
-
-#include
diff --git a/Code/Editor/Controls/QBitmapPreviewDialog.h b/Code/Editor/Controls/QBitmapPreviewDialog.h
deleted file mode 100644
index a5429bc8f0..0000000000
--- a/Code/Editor/Controls/QBitmapPreviewDialog.h
+++ /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
- *
- */
-#ifndef QBITMAPPREVIEWDIALOG_H
-#define QBITMAPPREVIEWDIALOG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-#include
-#include
-#endif
-
-class QLabel;
-
-namespace Ui {
- class QBitmapTooltip;
-}
-
-class QBitmapPreviewDialog
- : public QWidget
-{
- Q_OBJECT
-
- struct ImageData
- {
- QByteArray m_buffer;
- QImage m_image;
-
- void setRgba8888(const void* buffer, const int& w, const int& h);
- };
-
-public:
- explicit QBitmapPreviewDialog(QWidget* parent = 0);
- virtual ~QBitmapPreviewDialog();
- QSize GetCurrentBitmapSize();
- QSize GetOriginalImageSize();
-
-protected:
- void setImageRgba8888(const void* buffer, const int& w, const int& h, const QString& info);
- void setSize(QString _value);
- void setMips(QString _value);
- void setMean(QString _value);
- void setMedian(QString _value);
- void setStdDev(QString _value);
- QRect getHistogramArea();
- void setFullSize(const bool& fullSize);
-
- void paintEvent(QPaintEvent* e) override;
-
-private:
- void drawImageData(const QRect& rect, const ImageData& imgData);
-
-protected:
- Ui::QBitmapTooltip* ui;
- QSize m_initialSize;
- ImageData m_checker;
- ImageData m_imageMain;
-};
-
-#endif // QBITMAPPREVIEWDIALOG_H
diff --git a/Code/Editor/Controls/QBitmapPreviewDialog.ui b/Code/Editor/Controls/QBitmapPreviewDialog.ui
deleted file mode 100644
index 87b3a310ef..0000000000
--- a/Code/Editor/Controls/QBitmapPreviewDialog.ui
+++ /dev/null
@@ -1,390 +0,0 @@
-
-
- QBitmapTooltip
-
-
-
- 0
- 0
- 256
- 510
-
-
-
-
- 256
- 0
-
-
-
-
- 16777215
- 16777215
-
-
-
- Form
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 256
-
-
-
-
- 16777215
- 16777215
-
-
-
- false
-
-
- QFrame::NoFrame
-
-
- QFrame::Sunken
-
-
- Bitmap Area
-
-
- Qt::AlignCenter
-
-
- false
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 128
-
-
-
- QFrame::NoFrame
-
-
- QFrame::Sunken
-
-
- Histogram Area
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 16777215
- 24
-
-
-
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Size:
-
-
-
- -
-
-
- Qt::RightToLeft
-
-
- Size Value
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 16777215
- 24
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- DXT5 Mips:
-
-
-
- -
-
-
- Qt::RightToLeft
-
-
- Size Value
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 16777215
- 24
-
-
-
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Mean:
-
-
-
- -
-
-
- Qt::RightToLeft
-
-
- Size Value
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 16777215
- 24
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- StdDev:
-
-
-
- -
-
-
- Qt::RightToLeft
-
-
- Size Value
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 16777215
- 24
-
-
-
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Median:
-
-
-
- -
-
-
- Qt::RightToLeft
-
-
- Size Value
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Code/Editor/Controls/QBitmapPreviewDialogImp.cpp b/Code/Editor/Controls/QBitmapPreviewDialogImp.cpp
deleted file mode 100644
index b47a535d2a..0000000000
--- a/Code/Editor/Controls/QBitmapPreviewDialogImp.cpp
+++ /dev/null
@@ -1,528 +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
- *
- */
-#include "EditorDefs.h"
-
-#include "QBitmapPreviewDialogImp.h"
-
-// Cry
-#include
-
-// EditorCore
-#include
-#include
-
-// QT
-AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // 4251: class '...' needs to have dll-interface to be used by clients of class '...'
-#include
-#include
-#include
-#include
-#include
-AZ_POP_DISABLE_WARNING
-
-#include
-
-static const int kDefaultWidth = 256;
-static const int kDefaultHeight = 256;
-
-QBitmapPreviewDialogImp::QBitmapPreviewDialogImp(QWidget* parent)
- : QBitmapPreviewDialog(parent)
- , m_image(new CImageEx())
- , m_showOriginalSize(false)
- , m_showMode(ESHOW_RGB)
- , m_histrogramMode(eHistogramMode_OverlappedRGB)
-{
- setMouseTracking(true);
- setImage("");
- ui->m_placeholderBitmap->setStyleSheet("background-color: rgba(0, 0, 0, 0);");
- ui->m_placeholderHistogram->setStyleSheet("background-color: rgba(0, 0, 0, 0);");
-
- ui->m_labelForBitmapSize->setProperty("tooltipLabel", "Content");
- ui->m_labelForMean->setProperty("tooltipLabel", "Content");
- ui->m_labelForMedian->setProperty("tooltipLabel", "Content");
- ui->m_labelForMips->setProperty("tooltipLabel", "Content");
- ui->m_labelForStdDev->setProperty("tooltipLabel", "Content");
-
- ui->m_vBitmapSize->setProperty("tooltipLabel", "Content");
- ui->m_vMean->setProperty("tooltipLabel", "Content");
- ui->m_vMedian->setProperty("tooltipLabel", "Content");
- ui->m_vMips->setProperty("tooltipLabel", "Content");
- ui->m_vStdDev->setProperty("tooltipLabel", "Content");
-
- setUIStyleMode(EUISTYLE_IMAGE_ONLY);
-}
-
-QBitmapPreviewDialogImp::~QBitmapPreviewDialogImp()
-{
- SAFE_DELETE(m_image);
-}
-
-void QBitmapPreviewDialogImp::setImage(const QString path)
-{
- if (path.isEmpty()
- || m_path == path
- || !GetIEditor()->GetImageUtil()->LoadImage(path.toUtf8().data(), *m_image))
- {
- return;
- }
-
- m_showOriginalSize = isSizeSmallerThanDefault();
- m_path = path;
- refreshData();
-}
-
-void QBitmapPreviewDialogImp::setShowMode(EShowMode mode)
-{
- if (mode == ESHOW_NumModes)
- {
- return;
- }
-
- m_showMode = mode;
- refreshData();
- update();
-}
-
-void QBitmapPreviewDialogImp::toggleShowMode()
-{
- m_showMode = (EShowMode)(((int)m_showMode + 1) % ESHOW_NumModes);
- refreshData();
- update();
-}
-
-void QBitmapPreviewDialogImp::setUIStyleMode(EUIStyle mode)
-{
- if (mode >= EUISTYLE_NumModes)
- {
- return;
- }
-
- m_uiStyle = mode;
- if (m_uiStyle == EUISTYLE_IMAGE_ONLY)
- {
- ui->m_placeholderHistogram->hide();
-
- ui->m_labelForBitmapSize->hide();
- ui->m_labelForMean->hide();
- ui->m_labelForMedian->hide();
- ui->m_labelForMips->hide();
- ui->m_labelForStdDev->hide();
-
- ui->m_vBitmapSize->hide();
- ui->m_vMean->hide();
- ui->m_vMedian->hide();
- ui->m_vMips->hide();
- ui->m_vStdDev->hide();
- }
- else
- {
- ui->m_placeholderHistogram->show();
-
- ui->m_labelForBitmapSize->show();
- ui->m_labelForMean->show();
- ui->m_labelForMedian->show();
- ui->m_labelForMips->show();
- ui->m_labelForStdDev->show();
-
- ui->m_vBitmapSize->show();
- ui->m_vMean->show();
- ui->m_vMedian->show();
- ui->m_vMips->show();
- ui->m_vStdDev->show();
- }
-}
-
-const QBitmapPreviewDialogImp::EShowMode& QBitmapPreviewDialogImp::getShowMode() const
-{
- return m_showMode;
-}
-
-void QBitmapPreviewDialogImp::setHistogramMode(EHistogramMode mode)
-{
- if (mode == eHistogramMode_NumModes)
- {
- return;
- }
-
- m_histrogramMode = mode;
-}
-
-void QBitmapPreviewDialogImp::toggleHistrogramMode()
-{
- m_histrogramMode = (EHistogramMode)(((int)m_histrogramMode + 1) % eHistogramMode_NumModes);
- update();
-}
-
-const QBitmapPreviewDialogImp::EHistogramMode& QBitmapPreviewDialogImp::getHistogramMode() const
-{
- return m_histrogramMode;
-}
-
-void QBitmapPreviewDialogImp::toggleOriginalSize()
-{
- m_showOriginalSize = !m_showOriginalSize;
-
- refreshData();
- update();
-}
-
-bool QBitmapPreviewDialogImp::isSizeSmallerThanDefault()
-{
- return m_image->GetWidth() < kDefaultWidth && m_image->GetHeight() < kDefaultHeight;
-}
-
-void QBitmapPreviewDialogImp::setOriginalSize(bool value)
-{
- m_showOriginalSize = value;
-
- refreshData();
- update();
-}
-
-
-const char* QBitmapPreviewDialogImp::GetShowModeDescription(EShowMode eShowMode, [[maybe_unused]] bool bShowInOriginalSize) const
-{
- switch (eShowMode)
- {
- case ESHOW_RGB:
- return "RGB";
- case ESHOW_RGB_ALPHA:
- return "RGB+A";
- case ESHOW_ALPHA:
- return "Alpha";
- case ESHOW_RGBA:
- return "RGBA";
- case ESHOW_RGBE:
- return "RGBExp";
- }
-
- return "";
-}
-
-const char* getHistrogramModeStr(QBitmapPreviewDialogImp::EHistogramMode mode, bool shortName)
-{
- switch (mode)
- {
- case QBitmapPreviewDialogImp::eHistogramMode_Luminosity:
- return shortName ? "Lum" : "Luminosity";
- case QBitmapPreviewDialogImp::eHistogramMode_OverlappedRGB:
- return shortName ? "Overlap" : "Overlapped RGBA";
- case QBitmapPreviewDialogImp::eHistogramMode_SplitRGB:
- return shortName ? "R|G|B" : "Split RGB";
- case QBitmapPreviewDialogImp::eHistogramMode_RedChannel:
- return shortName ? "Red" : "Red Channel";
- case QBitmapPreviewDialogImp::eHistogramMode_GreenChannel:
- return shortName ? "Green" : "Green Channel";
- case QBitmapPreviewDialogImp::eHistogramMode_BlueChannel:
- return shortName ? "Blue" : "Blue Channel";
- case QBitmapPreviewDialogImp::eHistogramMode_AlphaChannel:
- return shortName ? "Alpha" : "Alpha Channel";
- default:
- break;
- }
-
- return "";
-}
-
-void QBitmapPreviewDialogImp::refreshData()
-{
- // Check if we have some usefull data loaded
- if (m_image->GetWidth() * m_image->GetHeight() == 0)
- {
- return;
- }
-
- int w = m_image->GetWidth();
- int h = m_image->GetHeight();
-
- int multiplier = (m_showMode == ESHOW_RGB_ALPHA ? 2 : 1);
- int originalW = w * multiplier;
- int originalH = h;
-
- if (!m_showOriginalSize || (w == 0))
- {
- w = kDefaultWidth;
- }
- if (!m_showOriginalSize || (h == 0))
- {
- h = kDefaultHeight;
- }
-
- w *= multiplier;
-
- CImageEx scaledImage;
-
- if (m_showOriginalSize && (originalW < w))
- {
- w = originalW;
- }
- if (m_showOriginalSize && (originalH < h))
- {
- h = originalH;
- }
-
- scaledImage.Allocate(w, h);
-
- if (m_showMode == ESHOW_RGB_ALPHA)
- {
- GetIEditor()->GetImageUtil()->ScaleToDoubleFit(*m_image, scaledImage);
- }
- else
- {
- GetIEditor()->GetImageUtil()->ScaleToFit(*m_image, scaledImage);
- }
-
- if (m_showMode == ESHOW_RGB || m_showMode == ESHOW_RGBE)
- {
- scaledImage.FillAlpha();
- }
- else if (m_showMode == ESHOW_ALPHA)
- {
- for (int h2 = 0; h2 < scaledImage.GetHeight(); h2++)
- {
- for (int w2 = 0; w2 < scaledImage.GetWidth(); w2++)
- {
- int a = scaledImage.ValueAt(w2, h2) >> 24;
- scaledImage.ValueAt(w2, h2) = RGB(a, a, a) | (a << 24);
- }
- }
- }
- else if (m_showMode == ESHOW_RGB_ALPHA)
- {
- int halfWidth = scaledImage.GetWidth() / 2;
- for (int h2 = 0; h2 < scaledImage.GetHeight(); h2++)
- {
- for (int w2 = 0; w2 < halfWidth; w2++)
- {
- int r = GetRValue(scaledImage.ValueAt(w2, h2));
- int g = GetGValue(scaledImage.ValueAt(w2, h2));
- int b = GetBValue(scaledImage.ValueAt(w2, h2));
- int a = scaledImage.ValueAt(w2, h2) >> 24;
- scaledImage.ValueAt(w2, h2) = RGB(r, g, b) | (a << 24);
- scaledImage.ValueAt(w2 + halfWidth, h2) = RGB(a, a, a) | (a << 24);
- }
- }
- }
-
-
- setImageRgba8888(scaledImage.GetData(), w, h, "");
- setSize(QString().asprintf("%d x %d", m_image->GetWidth(), m_image->GetHeight()));
- setMips(QString().asprintf("%d", m_image->GetNumberOfMipMaps()));
-
- setFullSize(m_showOriginalSize);
-
- // Compute histogram
- m_histogram.ComputeHistogram((BYTE*)scaledImage.GetData(), w, h, CImageHistogram::eImageFormat_32BPP_RGBA);
-}
-
-void QBitmapPreviewDialogImp::paintEvent(QPaintEvent* e)
-{
- QBitmapPreviewDialog::paintEvent(e);
-
- //if showing original size hide other information so it's easier to see
- if (m_showOriginalSize)
- {
- return;
- }
- if (m_uiStyle == EUISTYLE_IMAGE_ONLY)
- {
- return;
- }
-
- QPainter p(this);
- QPen pen;
- QPainterPath path[4];
-
- // Fill background color
- QRect histogramRect = getHistogramArea();
- p.fillRect(histogramRect, QColor(255, 255, 255));
-
- // Draw borders
- pen.setColor(QColor(0, 0, 0));
- p.setPen(pen);
- p.drawRect(histogramRect);
-
- // Draw histogram
-
- QVector drawChannels;
-
- switch (m_histrogramMode)
- {
- case eHistogramMode_Luminosity:
- drawChannels.push_back(3);
- break;
- case eHistogramMode_SplitRGB:
- drawChannels.push_back(0);
- drawChannels.push_back(1);
- drawChannels.push_back(2);
- break;
- case eHistogramMode_OverlappedRGB:
- drawChannels.push_back(0);
- drawChannels.push_back(1);
- drawChannels.push_back(2);
- break;
- case eHistogramMode_RedChannel:
- drawChannels.push_back(0);
- break;
- case eHistogramMode_GreenChannel:
- drawChannels.push_back(1);
- break;
- case eHistogramMode_BlueChannel:
- drawChannels.push_back(2);
- break;
- case eHistogramMode_AlphaChannel:
- drawChannels.push_back(3);
- break;
- }
-
- int graphWidth = qMax(histogramRect.width(), 1);
- int graphHeight = qMax(histogramRect.height() - 2, 0);
- int graphBottom = histogramRect.bottom() + 1;
- int currX[4] = {0, 0, 0, 0};
- int prevX[4] = {0, 0, 0, 0};
- float scale = 0.0f;
- static const int numSubGraphs = 3;
- const int subGraph = qCeil(graphWidth / numSubGraphs);
-
- // Fill background for Split RGB histogram
- if (m_histrogramMode == eHistogramMode_SplitRGB)
- {
- const static QColor backgroundColor[numSubGraphs] =
- {
- QColor(255, 220, 220),
- QColor(220, 255, 220),
- QColor(220, 220, 255)
- };
-
- for (int i = 0; i < numSubGraphs; i++)
- {
- p.fillRect(histogramRect.left() + subGraph * i,
- histogramRect.top(),
- subGraph + (i == numSubGraphs - 1 ? 1 : 0),
- histogramRect.height(), backgroundColor[i]);
- }
- }
-
- int lastHeight[CImageHistogram::kNumChannels] = { INT_MAX, INT_MAX, INT_MAX, INT_MAX };
-
- for (int x = 0; x < graphWidth; ++x)
- {
- for (int j = 0; j < drawChannels.size(); j++)
- {
- const int c = drawChannels[j];
- int& curr_x = currX[c];
- int& prev_x = prevX[c];
- int& last_height = lastHeight[c];
- QPainterPath& curr_path = path[c];
-
-
- curr_x = histogramRect.left() + x + 1;
- int i = static_cast(((float)x / (graphWidth - 1)) * (CImageHistogram::kNumColorLevels - 1));
- if (m_histrogramMode == eHistogramMode_SplitRGB)
- {
- // Filter out to area which we are interested
- const int k = x / subGraph;
- if (k != c)
- {
- continue;
- }
-
- i = qCeil((i - (subGraph * c)) * numSubGraphs);
- i = qMin(i, CImageHistogram::kNumColorLevels - 1);
- i = qMax(i, 0);
- }
-
- if (m_histrogramMode == eHistogramMode_Luminosity)
- {
- scale = (float)m_histogram.m_lumCount[i] / m_histogram.m_maxLumCount;
- }
- else if (m_histogram.m_maxCount[c])
- {
- scale = (float)m_histogram.m_count[c][i] / m_histogram.m_maxCount[c];
- }
-
- int height = static_cast(graphBottom - graphHeight * scale);
- if (last_height == INT_MAX)
- {
- last_height = height;
- }
-
- curr_path.moveTo(prev_x, last_height);
- curr_path.lineTo(curr_x, height);
- last_height = height;
-
- if (prev_x == INT_MAX)
- {
- prev_x = curr_x;
- }
-
- prev_x = curr_x;
- }
- }
-
- static const QColor kChannelColor[4] =
- {
- QColor(255, 0, 0),
- QColor(0, 255, 0),
- QColor(0, 0, 255),
- QColor(120, 120, 120)
- };
-
- for (int i = 0; i < drawChannels.size(); i++)
- {
- const int c = drawChannels[i];
- pen.setColor(kChannelColor[c]);
- p.setPen(pen);
- p.drawPath(path[c]);
- }
-
- // Update histogram info
- {
- float mean = 0, stdDev = 0, median = 0;
-
- switch (m_histrogramMode)
- {
- case eHistogramMode_Luminosity:
- case eHistogramMode_SplitRGB:
- case eHistogramMode_OverlappedRGB:
- mean = m_histogram.m_meanAvg;
- stdDev = m_histogram.m_stdDevAvg;
- median = m_histogram.m_medianAvg;
- break;
- case eHistogramMode_RedChannel:
- mean = m_histogram.m_mean[0];
- stdDev = m_histogram.m_stdDev[0];
- median = m_histogram.m_median[0];
- break;
- case eHistogramMode_GreenChannel:
- mean = m_histogram.m_mean[1];
- stdDev = m_histogram.m_stdDev[1];
- median = m_histogram.m_median[1];
- break;
- case eHistogramMode_BlueChannel:
- mean = m_histogram.m_mean[2];
- stdDev = m_histogram.m_stdDev[2];
- median = m_histogram.m_median[2];
- break;
- case eHistogramMode_AlphaChannel:
- mean = m_histogram.m_mean[3];
- stdDev = m_histogram.m_stdDev[3];
- median = m_histogram.m_median[3];
- break;
- }
- QString val;
- val.setNum(mean);
- setMean(val);
- val.setNum(stdDev);
- setStdDev(val);
- val.setNum(median);
- setMedian(val);
- }
-}
-
-#include
diff --git a/Code/Editor/Controls/QBitmapPreviewDialogImp.h b/Code/Editor/Controls/QBitmapPreviewDialogImp.h
deleted file mode 100644
index 63de867e6c..0000000000
--- a/Code/Editor/Controls/QBitmapPreviewDialogImp.h
+++ /dev/null
@@ -1,89 +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
- *
- */
-#ifndef QBITMAPPREVIEWDIALOG_IMP_H
-#define QBITMAPPREVIEWDIALOG_IMP_H
-
-#if !defined(Q_MOC_RUN)
-#include "QBitmapPreviewDialog.h"
-#include
-#endif
-
-class CImageEx;
-
-class QBitmapPreviewDialogImp
- : public QBitmapPreviewDialog
-{
- Q_OBJECT;
-public:
-
- enum EUIStyle
- {
- EUISTYLE_IMAGE_ONLY,
- EUISTYLE_IMAGE_HISTOGRAM,
- EUISTYLE_NumModes
- };
-
- enum EShowMode
- {
- ESHOW_RGB = 0,
- ESHOW_ALPHA,
- ESHOW_RGBA,
- ESHOW_RGB_ALPHA,
- ESHOW_RGBE,
- ESHOW_NumModes,
- };
-
- enum EHistogramMode
- {
- eHistogramMode_Luminosity,
- eHistogramMode_OverlappedRGB,
- eHistogramMode_SplitRGB,
- eHistogramMode_RedChannel,
- eHistogramMode_GreenChannel,
- eHistogramMode_BlueChannel,
- eHistogramMode_AlphaChannel,
- eHistogramMode_NumModes,
- };
-
- explicit QBitmapPreviewDialogImp(QWidget* parent = 0);
- virtual ~QBitmapPreviewDialogImp();
-
- void setImage(const QString path);
-
- void setShowMode(EShowMode mode);
- void toggleShowMode();
- void setUIStyleMode(EUIStyle mode);
- const EShowMode& getShowMode() const;
-
- void setHistogramMode(EHistogramMode mode);
- void toggleHistrogramMode();
- const EHistogramMode& getHistogramMode() const;
-
- void setOriginalSize(bool value);
- void toggleOriginalSize();
-
- bool isSizeSmallerThanDefault();
- void paintEvent(QPaintEvent* e) override;
-
-protected:
- void refreshData();
-
-private:
- const char* GetShowModeDescription(EShowMode eShowMode, bool bShowInOriginalSize) const;
-
-private:
- CImageEx* m_image;
- QString m_path;
- CImageHistogram m_histogram;
- bool m_showOriginalSize;
- EShowMode m_showMode;
- EHistogramMode m_histrogramMode;
- EUIStyle m_uiStyle;
-};
-
-#endif // QBITMAPPREVIEWDIALOG_IMP_H
diff --git a/Code/Editor/Controls/QToolTipWidget.cpp b/Code/Editor/Controls/QToolTipWidget.cpp
deleted file mode 100644
index 12a66a5d67..0000000000
--- a/Code/Editor/Controls/QToolTipWidget.cpp
+++ /dev/null
@@ -1,642 +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
- *
- */
-#include "EditorDefs.h"
-
-#include
-
-#include "QBitmapPreviewDialogImp.h"
-#include "qcoreapplication.h"
-#include "qguiapplication.h"
-#include "qapplication.h"
-#include
-#include
-#include
-#include
-
-void QToolTipWidget::RebuildLayout()
-{
- if (m_title != nullptr)
- {
- m_title->hide();
- }
- if (m_content != nullptr)
- {
- m_content->hide();
- }
- if (m_specialContent != nullptr)
- {
- m_specialContent->hide();
- }
-
- //empty layout
- while (m_layout->count() > 0)
- {
- m_layout->takeAt(0);
- }
- qDeleteAll(m_currentShortcuts);
- m_currentShortcuts.clear();
- if (m_includeTextureShortcuts)
- {
- m_currentShortcuts.append(new QLabel(tr("Alt - Alpha"), this));
- m_currentShortcuts.back()->setProperty("tooltipLabel", "Shortcut");
- m_currentShortcuts.append(new QLabel(tr("Shift - RGBA"), this));
- m_currentShortcuts.back()->setProperty("tooltipLabel", "Shortcut");
- }
-
- if (m_title != nullptr && !m_title->text().isEmpty())
- {
- m_layout->addWidget(m_title);
- m_title->show();
- }
-
- for (QLabel* var : m_currentShortcuts)
- {
- if (var != nullptr)
- {
- m_layout->addWidget(var);
- var->show();
- }
- }
- if (m_specialContent != nullptr)
- {
- m_layout->addWidget(m_specialContent);
- m_specialContent->show();
- }
- if (m_content != nullptr && !m_content->text().isEmpty())
- {
- m_layout->addWidget(m_content);
- m_content->show();
- }
- m_background->adjustSize();
- adjustSize();
-}
-
-void QToolTipWidget::Hide()
-{
- m_currentShortcuts.clear();
- hide();
-}
-
-void QToolTipWidget::Show(QPoint pos, ArrowDirection dir)
-{
- if (!IsValid())
- {
- return;
- }
- m_arrow->m_direction = dir;
- pos = AdjustTipPosByArrowSize(pos, dir);
- m_normalPos = pos;
- move(pos);
- RebuildLayout();
- show();
- m_arrow->show();
-}
-
-void QToolTipWidget::Display(QRect targetRect, ArrowDirection preferredArrowDir)
-{
- if (!IsValid())
- {
- return;
- }
-
- KeepTipOnScreen(targetRect, preferredArrowDir);
-
- RebuildLayout();
- show();
- m_arrow->show();
-}
-
-void QToolTipWidget::TryDisplay(QPoint mousePos, const QRect& rect, [[maybe_unused]] ArrowDirection preferredArrowDir)
-{
- if (rect.contains(mousePos))
- {
- Display(rect, QToolTipWidget::ArrowDirection::ARROW_RIGHT);
- }
- else
- {
- hide();
- }
- }
-
-void QToolTipWidget::TryDisplay(QPoint mousePos, const QWidget* widget, ArrowDirection preferredArrowDir)
-{
- const QRect rect(widget->mapToGlobal(QPoint(0,0)), widget->size());
- TryDisplay(mousePos, rect, preferredArrowDir);
-}
-
-void QToolTipWidget::SetTitle(QString title)
-{
- if (!title.isEmpty())
- {
- m_title->setText(title);
- }
- m_title->setProperty("tooltipLabel", "Title");
-
- setWindowTitle("ToolTip - " + title);
-}
-
-void QToolTipWidget::SetContent(QString content)
-{
- m_content->setWordWrap(true);
-
- m_content->setProperty("tooltipLabel", "Content");
- //line-height is not supported via stylesheet so we use the html rich-text subset in QT for it.
- m_content->setText(QString("%1").arg(content));
-}
-
-void QToolTipWidget::AppendContent(QString content)
-{
- m_content->setText(m_content->text() + "\n\n" + content);
- update();
- RebuildLayout();
- m_content->update();
- m_content->repaint();
-}
-
-QToolTipWidget::QToolTipWidget(QWidget* parent)
- : QWidget(parent)
-{
- m_background = new QWidget(this);
- m_background->setProperty("tooltip", "Background");
- m_background->stackUnder(this);
- m_title = new QLabel(this);
- m_currentShortcuts = QVector();
- m_content = new QLabel(this);
- m_specialContent = nullptr;
- setWindowTitle("ToolTip");
- setObjectName("ToolTip");
- m_layout = new QVBoxLayout(this);
- m_normalPos = QPoint(0, 0);
- m_arrow = new QArrow(m_background);
- setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
- m_arrow->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
- m_arrow->setAttribute(Qt::WA_TranslucentBackground, true);
- m_background->setLayout(m_layout);
- m_arrow->setObjectName("ToolTipArrow");
- m_background->setObjectName("ToolTipBackground");
-
- //we need a drop shadow for the background
- QGraphicsDropShadowEffect* dropShadow = new QGraphicsDropShadowEffect(this);
- dropShadow->setBlurRadius(m_shadowRadius);
- dropShadow->setColor(Qt::black);
- dropShadow->setOffset(0);
- dropShadow->setEnabled(true);
- m_background->setGraphicsEffect(dropShadow);
- //we need a second drop shadow effect for the arrow
- dropShadow = new QGraphicsDropShadowEffect(m_arrow);
- dropShadow->setBlurRadius(m_shadowRadius);
- dropShadow->setColor(Qt::black);
- dropShadow->setOffset(0);
- dropShadow->setEnabled(true);
- m_arrow->setGraphicsEffect(dropShadow);
-}
-
-QToolTipWidget::~QToolTipWidget()
-{
-}
-
-void QToolTipWidget::AddSpecialContent(QString type, QString dataStream)
-{
- if (type.isEmpty())
- {
- m_includeTextureShortcuts = false;
- if (m_specialContent != nullptr)
- {
- delete m_specialContent;
- m_specialContent = nullptr;
- }
- return;
- }
- if (type == "TEXTURE")
- {
- if (m_specialContent == nullptr)
- {
- QCoreApplication::instance()->installEventFilter(this); //grab the event filter while displaying the advanced texture tooltip
- m_specialContent = new QBitmapPreviewDialogImp(this);
- }
- QString path(dataStream);
- qobject_cast(m_specialContent)->setImage(path);
- // set default showmode to RGB
- qobject_cast(m_specialContent)->setShowMode(QBitmapPreviewDialogImp::EShowMode::ESHOW_RGB);
- QString dir = (path.split("/").count() > path.split("\\").count()) ? path.split("/").back() : path.split("\\").back();
- SetTitle(dir);
- //always use default size but not image size
- qobject_cast(m_specialContent)->setOriginalSize(false);
- m_includeTextureShortcuts = true;
- }
- else if (type == "ADD TO CONTENT")
- {
- AppendContent(dataStream);
-
- m_includeTextureShortcuts = false;
- if (m_specialContent != nullptr)
- {
- delete m_specialContent;
- m_specialContent = nullptr;
- }
- }
- else if (type == "REPLACE TITLE")
- {
- SetTitle(dataStream);
- m_includeTextureShortcuts = false;
- if (m_specialContent != nullptr)
- {
- delete m_specialContent;
- m_specialContent = nullptr;
- }
- }
- else if (type == "REPLACE CONTENT")
- {
- SetContent(dataStream);
- m_includeTextureShortcuts = false;
- if (m_specialContent != nullptr)
- {
- delete m_specialContent;
- m_specialContent = nullptr;
- }
- }
- else
- {
- m_includeTextureShortcuts = false;
- if (m_specialContent != nullptr)
- {
- delete m_specialContent;
- m_specialContent = nullptr;
- }
- return;
- }
-
- m_special = type;
-}
-
-
-bool QToolTipWidget::eventFilter(QObject* obj, QEvent* event)
-{
- if (event->type() == QEvent::KeyPress)
- {
- if (m_special == "TEXTURE" && m_specialContent != nullptr)
- {
- const QKeyEvent* ke = static_cast(event);
- Qt::KeyboardModifiers mods = ke->modifiers();
- if (mods & Qt::KeyboardModifier::AltModifier)
- {
- ((QBitmapPreviewDialogImp*)m_specialContent)->setShowMode(QBitmapPreviewDialogImp::ESHOW_ALPHA);
- }
- else if (mods & Qt::KeyboardModifier::ShiftModifier && !(mods & Qt::KeyboardModifier::ControlModifier))
- {
- ((QBitmapPreviewDialogImp*)m_specialContent)->setShowMode(QBitmapPreviewDialogImp::ESHOW_RGBA);
- }
- }
- }
- if (event->type() == QEvent::KeyRelease)
- {
- if (m_special == "TEXTURE" && m_specialContent != nullptr)
- {
- const QKeyEvent* ke = static_cast(event);
- Qt::KeyboardModifiers mods = ke->modifiers();
- if (!(mods& Qt::KeyboardModifier::AltModifier) && !(mods & Qt::KeyboardModifier::ShiftModifier))
- {
- ((QBitmapPreviewDialogImp*)m_specialContent)->setShowMode(QBitmapPreviewDialogImp::ESHOW_RGB);
- }
- }
- }
- return QWidget::eventFilter(obj, event);
-}
-
-void QToolTipWidget::hideEvent(QHideEvent* event)
-{
- QWidget::hideEvent(event);
- m_arrow->hide();
-}
-
-void QToolTipWidget::UpdateOptionalData(QString optionalData)
-{
- AddSpecialContent(m_special, optionalData);
-}
-
-
-
-QPoint QToolTipWidget::AdjustTipPosByArrowSize(QPoint pos, ArrowDirection dir)
-{
- switch (dir)
- {
- case QToolTipWidget::ArrowDirection::ARROW_UP:
- {
- m_arrow->move(pos);
- pos.setY(pos.y() + 10);
- m_arrow->setFixedSize(20, 10);
- pos -= QPoint(m_shadowRadius, m_shadowRadius);
- break;
- }
- case QToolTipWidget::ArrowDirection::ARROW_LEFT:
- {
- m_arrow->move(pos);
- pos.setX(pos.x() + 10);
- m_arrow->setFixedSize(10, 20);
- pos -= QPoint(m_shadowRadius, m_shadowRadius);
- break;
- }
- case QToolTipWidget::ArrowDirection::ARROW_RIGHT:
- {
- pos.setX(pos.x() - 10);
- m_arrow->move(QPoint(pos.x() + width(), pos.y()));
- m_arrow->setFixedSize(10, 20);
- pos -= QPoint(-m_shadowRadius, m_shadowRadius);
- break;
- }
- case QToolTipWidget::ArrowDirection::ARROW_DOWN:
- {
- pos.setY(pos.y() - 10);
- m_arrow->move(QPoint(pos.x(), pos.y() + height()));
- m_arrow->setFixedSize(20, 10);
- pos -= QPoint(m_shadowRadius, -m_shadowRadius);
- break;
- }
- default:
- m_arrow->move(-10, -10);
- break;
- }
- return pos;
-}
-
-bool QToolTipWidget::IsValid()
-{
- if (m_title->text().isEmpty() ||
- (m_content->text().isEmpty() && m_specialContent == nullptr))
- {
- return false;
- }
- return true;
-}
-
-void QToolTipWidget::KeepTipOnScreen(QRect targetRect, ArrowDirection preferredArrowDir)
-{
- QRect desktop = QApplication::desktop()->availableGeometry(this);
-
- if (this->isHidden())
- {
- setAttribute(Qt::WA_DontShowOnScreen, true);
- Show(QPoint(0, 0), preferredArrowDir);
- hide();
- setAttribute(Qt::WA_DontShowOnScreen, false);
- }
- //else assume the size is right
-
- //calculate initial rect
- QRect tipRect = QRect(0, 0, 0, 0);
- switch (preferredArrowDir)
- {
- case QToolTipWidget::ArrowDirection::ARROW_UP:
- {
- //tip is below the widget with a left alignment
- tipRect.setTopLeft(AdjustTipPosByArrowSize(targetRect.bottomLeft(), preferredArrowDir));
- break;
- }
- case QToolTipWidget::ArrowDirection::ARROW_LEFT:
- {
- //tip is on the right with the top being even
- tipRect.setTopLeft(AdjustTipPosByArrowSize(targetRect.topRight(), preferredArrowDir));
- break;
- }
- case QToolTipWidget::ArrowDirection::ARROW_RIGHT:
- {
- //tip is on the left with the top being even
- tipRect.setY(targetRect.top());
- tipRect.setX(targetRect.left() - width());
- tipRect.setTopLeft(AdjustTipPosByArrowSize(tipRect.topLeft(), preferredArrowDir));
- break;
- }
- case QToolTipWidget::ArrowDirection::ARROW_DOWN:
- {
- //tip is above the widget with a left alignment
- tipRect.setX(targetRect.left());
- tipRect.setY(targetRect.top() - height());
- tipRect.setTopLeft(AdjustTipPosByArrowSize(tipRect.topLeft(), preferredArrowDir));
- break;
- }
- default:
- {
- //tip is on the right with the top being even
- preferredArrowDir = QToolTipWidget::ArrowDirection::ARROW_LEFT;
- tipRect.setTopLeft(AdjustTipPosByArrowSize(targetRect.topRight(), QToolTipWidget::ArrowDirection::ARROW_LEFT));
- break;
- }
- }
- tipRect.setSize(size());
-
- //FixPositioning
- if (preferredArrowDir == ArrowDirection::ARROW_LEFT || preferredArrowDir == ArrowDirection::ARROW_RIGHT)
- {
- if (tipRect.left() <= desktop.left())
- {
- m_arrow->m_direction = ArrowDirection::ARROW_LEFT;
- tipRect.setTopLeft(AdjustTipPosByArrowSize(targetRect.topRight(), m_arrow->m_direction));
- }
- else if (tipRect.right() >= desktop.right())
- {
- m_arrow->m_direction = ArrowDirection::ARROW_RIGHT;
- tipRect.setLeft(targetRect.left() - width());
- tipRect.setTopLeft(AdjustTipPosByArrowSize(tipRect.topLeft(), m_arrow->m_direction));
- }
- }
- else if (preferredArrowDir == ArrowDirection::ARROW_UP || preferredArrowDir == ArrowDirection::ARROW_DOWN)
- {
- if (tipRect.top() <= desktop.top())
- {
- m_arrow->m_direction = ArrowDirection::ARROW_UP;
- tipRect.setTopLeft(AdjustTipPosByArrowSize(targetRect.bottomLeft(), m_arrow->m_direction));
- }
- else if (tipRect.bottom() >= desktop.bottom())
- {
- m_arrow->m_direction = ArrowDirection::ARROW_DOWN;
- tipRect.setY(targetRect.top() - height());
- tipRect.setTopLeft(AdjustTipPosByArrowSize(tipRect.topLeft(), m_arrow->m_direction));
- }
- }
-
- //Nudge tip without arrow
- if (preferredArrowDir == ArrowDirection::ARROW_UP || preferredArrowDir == ArrowDirection::ARROW_DOWN)
- {
- if (tipRect.left() <= desktop.left())
- {
- tipRect.setLeft(desktop.left());
- }
- else if (tipRect.right() >= desktop.right())
- {
- tipRect.setLeft(desktop.right() - width());
- }
- }
- else if (preferredArrowDir == ArrowDirection::ARROW_RIGHT || preferredArrowDir == ArrowDirection::ARROW_LEFT)
- {
- if (tipRect.top() <= desktop.top())
- {
- tipRect.setTop(desktop.top());
- }
- else if (tipRect.bottom() >= desktop.bottom())
- {
- tipRect.setTop(desktop.bottom() - height());
- }
- }
-
-
- m_normalPos = tipRect.topLeft();
- move(m_normalPos);
-}
-
-QPolygonF QToolTipWidget::QArrow::CreateArrow()
-{
- QVector vertex;
- //3 points in triangle
- vertex.reserve(3);
- //all magic number below are given in order to draw smooth transitions between tooltip and arrow
- if (m_direction == ArrowDirection::ARROW_UP)
- {
- vertex.push_back(QPointF(10, 1));
- vertex.push_back(QPointF(19, 10));
- vertex.push_back(QPointF(0, 10));
- }
- else if (m_direction == ArrowDirection::ARROW_RIGHT)
- {
- vertex.push_back(QPointF(9, 10));
- vertex.push_back(QPointF(0, 19));
- vertex.push_back(QPointF(0, 1));
- }
- else if (m_direction == ArrowDirection::ARROW_LEFT)
- {
- vertex.push_back(QPointF(1, 10));
- vertex.push_back(QPointF(10, 19));
- vertex.push_back(QPointF(10, 0));
- }
- else //ArrowDirection::ARROW_DOWN
- {
- vertex.push_back(QPointF(10, 10));
- vertex.push_back(QPointF(19, 0));
- vertex.push_back(QPointF(0, 0));
- }
- return QPolygonF(vertex);
-}
-
-void QToolTipWidget::QArrow::paintEvent([[maybe_unused]] QPaintEvent* event)
-{
- QColor color(255, 255, 255, 255);
- QPainter painter(this);
- painter.fillRect(rect(), Qt::transparent); //force transparency
- painter.setRenderHint(QPainter::Antialiasing, false);
- painter.setBrush(color);
- painter.setPen(Qt::NoPen);
- painter.drawPolygon(CreateArrow());
- //painter.setRenderHint(QPainter::Antialiasing, false);
-}
-
-QToolTipWrapper::QToolTipWrapper(QWidget* parent)
- : QObject(parent)
-{
-}
-
-void QToolTipWrapper::SetTitle(QString title)
-{
- m_title = title;
-}
-
-void QToolTipWrapper::SetContent(QString content)
-{
- AddSpecialContent("REPLACE CONTENT", content);
-}
-
-void QToolTipWrapper::AppendContent(QString content)
-{
- AddSpecialContent("ADD TO CONTENT", content);
-}
-
-void QToolTipWrapper::AddSpecialContent(QString type, QString dataStream)
-{
- if (type == "REPLACE CONTENT")
- {
- m_contentOperations.clear();
- }
- m_contentOperations.push_back({type, dataStream});
-}
-
-void QToolTipWrapper::UpdateOptionalData(QString optionalData)
-{
- m_contentOperations.push_back({"UPDATE OPTIONAL", optionalData});
-}
-
-void QToolTipWrapper::Display(QRect targetRect, QToolTipWidget::ArrowDirection preferredArrowDir)
-{
- GetOrCreateToolTip()->Display(targetRect, preferredArrowDir);
-}
-
-void QToolTipWrapper::TryDisplay(QPoint mousePos, const QWidget * widget, QToolTipWidget::ArrowDirection preferredArrowDir)
-{
- GetOrCreateToolTip()->TryDisplay(mousePos, widget, preferredArrowDir);
-}
-
-void QToolTipWrapper::TryDisplay(QPoint mousePos, const QRect & widget, QToolTipWidget::ArrowDirection preferredArrowDir)
-{
- GetOrCreateToolTip()->TryDisplay(mousePos, widget, preferredArrowDir);
-}
-
-void QToolTipWrapper::hide()
-{
- DestroyToolTip();
-}
-
-void QToolTipWrapper::show()
-{
- GetOrCreateToolTip()->show();
-}
-
-bool QToolTipWrapper::isVisible() const
-{
- return m_actualTooltip && m_actualTooltip->isVisible();
-}
-
-void QToolTipWrapper::update()
-{
- if (m_actualTooltip)
- {
- m_actualTooltip->update();
- }
-}
-
-void QToolTipWrapper::ReplayContentOperations(QToolTipWidget* tooltipWidget)
-{
- tooltipWidget->SetTitle(m_title);
- for (const auto& operation : m_contentOperations)
- {
- if (operation.first == "UPDATE OPTIONAL")
- {
- tooltipWidget->UpdateOptionalData(operation.second);
- }
- else
- {
- tooltipWidget->AddSpecialContent(operation.first, operation.second);
- }
- }
-}
-
-QToolTipWidget * QToolTipWrapper::GetOrCreateToolTip()
-{
- if (!m_actualTooltip)
- {
- QToolTipWidget* tooltipWidget = new QToolTipWidget(static_cast(parent()));
- tooltipWidget->setAttribute(Qt::WA_DeleteOnClose);
- ReplayContentOperations(tooltipWidget);
- m_actualTooltip = tooltipWidget;
- }
- return m_actualTooltip.data();
-}
-
-void QToolTipWrapper::DestroyToolTip()
-{
- if (m_actualTooltip)
- {
- m_actualTooltip->deleteLater();
- }
-}
diff --git a/Code/Editor/Controls/QToolTipWidget.h b/Code/Editor/Controls/QToolTipWidget.h
deleted file mode 100644
index 813f2a75fb..0000000000
--- a/Code/Editor/Controls/QToolTipWidget.h
+++ /dev/null
@@ -1,148 +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
- *
- */
-#ifndef QToolTipWidget_h__
-#define QToolTipWidget_h__
-
-#include "EditorCoreAPI.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-class IQToolTip
-{
-public:
- virtual void SetTitle(QString title) = 0;
- virtual void SetContent(QString content) = 0;
- virtual void AppendContent(QString content) = 0;
- virtual void AddSpecialContent(QString type, QString dataStream) = 0;
- virtual void UpdateOptionalData(QString optionalData) = 0;
-};
-
-class EDITOR_CORE_API QToolTipWidget
- : public QWidget
- , public IQToolTip
-{
-public:
- enum class ArrowDirection
- {
- ARROW_UP,
- ARROW_LEFT,
- ARROW_RIGHT,
- ARROW_DOWN
- };
- class QArrow
- : public QWidget
- {
- public:
- ArrowDirection m_direction;
- QPoint m_pos;
- QArrow(QWidget* parent)
- : QWidget(parent){ setWindowFlags(Qt::ToolTip); }
- virtual ~QArrow(){}
-
- QPolygonF CreateArrow();
- virtual void paintEvent(QPaintEvent*) override;
- };
- QToolTipWidget(QWidget* parent);
- ~QToolTipWidget();
- void SetTitle(QString title) override;
- void SetContent(QString content) override;
- void AppendContent(QString content) override;
- void AddSpecialContent(QString type, QString dataStream) override;
- void UpdateOptionalData(QString optionalData) override;
- void Display(QRect targetRect, ArrowDirection preferredArrowDir);
-
- //! Displays the tooltip on the given widget, only if the mouse is over it.
- void TryDisplay(QPoint mousePos, const QWidget* widget, ArrowDirection preferredArrowDir);
-
- //! Displays the tooltip on the given rect, only if the mouse is over it.
- void TryDisplay(QPoint mousePos, const QRect& widget, ArrowDirection preferredArrowDir);
-
- void Hide();
-
-protected:
- void Show(QPoint pos, ArrowDirection dir);
- bool IsValid();
- void KeepTipOnScreen(QRect targetRect, ArrowDirection preferredArrowDir);
- QPoint AdjustTipPosByArrowSize(QPoint pos, ArrowDirection dir);
- virtual bool eventFilter(QObject* obj, QEvent* event) override;
- void RebuildLayout();
- virtual void hideEvent(QHideEvent*) override;
-
- QLabel* m_title;
- AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
- QVector m_currentShortcuts;
- AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
- //can be anything from QLabel to QBitMapPreviewDialog
- //must allow movement, and show/hide calls
- QLabel* m_content;
- QWidget* m_specialContent;
- QWidget* m_background;
- QVBoxLayout* m_layout;
- QString m_special;
- QPoint m_normalPos;
- QArrow* m_arrow;
- const int m_shadowRadius = 5;
- bool m_includeTextureShortcuts; //added since Qt does not support modifier only shortcuts
-};
-
-// HACK: The EditorUI_QT classes all were keeping persistent references to QToolTipWidgets around
-// This led to many, many top-level widget creations, which led to many platform-side window allocations
-// which led to crashes in Qt5.15. As this is legacy code, this is a drop-in replacement that only
-// allocates the actual QToolTipWidget (and thus platform window) while the tooltip is visible
-class EDITOR_CORE_API QToolTipWrapper
- : public QObject
- , public IQToolTip
-{
-public:
- QToolTipWrapper(QWidget* parent);
-
- void SetTitle(QString title) override;
- void SetContent(QString content) override;
- void AppendContent(QString content) override;
- void AddSpecialContent(QString type, QString dataStream) override;
- void UpdateOptionalData(QString optionalData) override;
-
- void Display(QRect targetRect, QToolTipWidget::ArrowDirection preferredArrowDir);
- void TryDisplay(QPoint mousePos, const QWidget* widget, QToolTipWidget::ArrowDirection preferredArrowDir);
- void TryDisplay(QPoint mousePos, const QRect& widget, QToolTipWidget::ArrowDirection preferredArrowDir);
- void hide();
- void show();
- bool isVisible() const;
- void update();
- void repaint(){update();} //Things really shouldn't be calling repaint on these...
-
- void Hide(){hide();}
- void close(){hide();}
-
-private:
- void ReplayContentOperations(QToolTipWidget* tooltipWidget);
-
- QToolTipWidget* GetOrCreateToolTip();
- void DestroyToolTip();
-
- AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // conditional expression is constant, needs to have dll-interface to be used by clients of class 'AzQtComponents::FilteredSearchWidget'
- QPointer m_actualTooltip;
- AZ_POP_DISABLE_WARNING
-
- QString m_title;
- AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // conditional expression is constant, needs to have dll-interface to be used by clients of class 'AzQtComponents::FilteredSearchWidget'
- QVector> m_contentOperations;
- AZ_POP_DISABLE_WARNING
-};
-
-
-#endif // QToolTipWidget_h__
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp
deleted file mode 100644
index 4fb18e438c..0000000000
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp
+++ /dev/null
@@ -1,131 +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
- *
- */
-
-#include "EditorDefs.h"
-
-#include "PropertyAnimationCtrl.h"
-
-// Qt
-#include
-#include
-#include
-
-// Editor
-#include "Util/UIEnumerations.h"
-#include "IResourceSelectorHost.h"
-
-AnimationPropertyCtrl::AnimationPropertyCtrl(QWidget *pParent)
- : QWidget(pParent)
-{
- m_animationLabel = new QLabel;
-
- m_pApplyButton = new QToolButton;
- m_pApplyButton->setIcon(QIcon(":/reflectedPropertyCtrl/img/apply.png"));
-
- m_pApplyButton->setFocusPolicy(Qt::StrongFocus);
-
- QHBoxLayout *pLayout = new QHBoxLayout(this);
- pLayout->setContentsMargins(0, 0, 0, 0);
- pLayout->addWidget(m_animationLabel, 1);
- pLayout->addWidget(m_pApplyButton);
-
- connect(m_pApplyButton, &QAbstractButton::clicked, this, &AnimationPropertyCtrl::OnApplyClicked);
-};
-
-AnimationPropertyCtrl::~AnimationPropertyCtrl()
-{
-}
-
-
-void AnimationPropertyCtrl::SetValue(const CReflectedVarAnimation &animation)
-{
- m_animation = animation;
- m_animationLabel->setText(animation.m_animation.c_str());
-}
-
-CReflectedVarAnimation AnimationPropertyCtrl::value() const
-{
- return m_animation;
-}
-
-void AnimationPropertyCtrl::OnApplyClicked()
-{
- QStringList cSelectedAnimations;
- int nTotalAnimations(0);
- int nCurrentAnimation(0);
-
- QString combinedString = GetIEditor()->GetResourceSelectorHost()->GetGlobalSelection("animation");
- SplitString(combinedString, cSelectedAnimations, ',');
-
- nTotalAnimations = cSelectedAnimations.size();
- for (nCurrentAnimation = 0; nCurrentAnimation < nTotalAnimations; ++nCurrentAnimation)
- {
- QString& rstrCurrentAnimAction = cSelectedAnimations[nCurrentAnimation];
- if (!rstrCurrentAnimAction.isEmpty())
- {
- m_animation.m_animation = rstrCurrentAnimAction.toUtf8().data();
- m_animationLabel->setText(m_animation.m_animation.c_str());
- emit ValueChanged(m_animation);
- }
- }
-}
-
-QWidget* AnimationPropertyCtrl::GetFirstInTabOrder()
-{
- return m_pApplyButton;
-}
-QWidget* AnimationPropertyCtrl::GetLastInTabOrder()
-{
- return m_pApplyButton;
-}
-
-void AnimationPropertyCtrl::UpdateTabOrder()
-{
- setTabOrder(m_pApplyButton, m_pApplyButton);
-}
-
-
-QWidget* AnimationPropertyWidgetHandler::CreateGUI(QWidget *pParent)
-{
- AnimationPropertyCtrl* newCtrl = aznew AnimationPropertyCtrl(pParent);
- connect(newCtrl, &AnimationPropertyCtrl::ValueChanged, newCtrl, [newCtrl]()
- {
- EBUS_EVENT(AzToolsFramework::PropertyEditorGUIMessages::Bus, RequestWrite, newCtrl);
- });
- return newCtrl;
-}
-
-
-void AnimationPropertyWidgetHandler::ConsumeAttribute(AnimationPropertyCtrl* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName)
-{
- Q_UNUSED(GUI);
- Q_UNUSED(attrib);
- Q_UNUSED(attrValue);
- Q_UNUSED(debugName);
-}
-
-void AnimationPropertyWidgetHandler::WriteGUIValuesIntoProperty(size_t index, AnimationPropertyCtrl* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node)
-{
- Q_UNUSED(index);
- Q_UNUSED(node);
- CReflectedVarAnimation val = GUI->value();
- instance = static_cast(val);
-}
-
-bool AnimationPropertyWidgetHandler::ReadValuesIntoGUI(size_t index, AnimationPropertyCtrl* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node)
-{
- Q_UNUSED(index);
- Q_UNUSED(node);
- CReflectedVarAnimation val = instance;
- GUI->SetValue(val);
- return false;
-}
-
-
-#include
-
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h b/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h
deleted file mode 100644
index 6f3e5b44f3..0000000000
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h
+++ /dev/null
@@ -1,78 +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
- *
- */
-
-#ifndef CRYINCLUDE_EDITOR_UTILS_PROPERTYANIMATIONCTRL_H
-#define CRYINCLUDE_EDITOR_UTILS_PROPERTYANIMATIONCTRL_H
-#pragma once
-
-#if !defined(Q_MOC_RUN)
-#include
-#include
-#include
-#include "ReflectedVar.h"
-#include
-#include
-#endif
-
-class QToolButton;
-class QLabel;
-class QHBoxLayout;
-
-class AnimationPropertyCtrl
- : public QWidget
-{
- Q_OBJECT
-public:
- AZ_CLASS_ALLOCATOR(AnimationPropertyCtrl, AZ::SystemAllocator, 0);
-
- AnimationPropertyCtrl(QWidget* pParent = nullptr);
- virtual ~AnimationPropertyCtrl();
-
- CReflectedVarAnimation value() const;
-
- QWidget* GetFirstInTabOrder();
- QWidget* GetLastInTabOrder();
- void UpdateTabOrder();
-
-signals:
- void ValueChanged(CReflectedVarAnimation value);
-
-public slots:
- void SetValue(const CReflectedVarAnimation& animation);
-
-protected slots:
- void OnApplyClicked();
-
-private:
- QToolButton* m_pApplyButton;
- QLabel* m_animationLabel;
-
- CReflectedVarAnimation m_animation;
-};
-
-class AnimationPropertyWidgetHandler
- : QObject
- , public AzToolsFramework::PropertyHandler < CReflectedVarAnimation, AnimationPropertyCtrl >
-{
-public:
- AZ_CLASS_ALLOCATOR(AnimationPropertyWidgetHandler, AZ::SystemAllocator, 0);
-
- virtual AZ::u32 GetHandlerName(void) const override { return AZ_CRC("Animation", 0x8d5284dc); }
- virtual bool IsDefaultHandler() const override { return true; }
- virtual QWidget* GetFirstInTabOrder(AnimationPropertyCtrl* widget) override { return widget->GetFirstInTabOrder(); }
- virtual QWidget* GetLastInTabOrder(AnimationPropertyCtrl* widget) override { return widget->GetLastInTabOrder(); }
- virtual void UpdateWidgetInternalTabbing(AnimationPropertyCtrl* widget) override { widget->UpdateTabOrder(); }
-
- virtual QWidget* CreateGUI(QWidget* pParent) override;
- virtual void ConsumeAttribute(AnimationPropertyCtrl* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) override;
- virtual void WriteGUIValuesIntoProperty(size_t index, AnimationPropertyCtrl* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
- virtual bool ReadValuesIntoGUI(size_t index, AnimationPropertyCtrl* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
-};
-
-
-#endif // CRYINCLUDE_EDITOR_UTILS_PROPERTYANIMATIONCTRL_H
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/PropertyCtrl.cpp
index 68c4acb95e..50d053ab9e 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyCtrl.cpp
+++ b/Code/Editor/Controls/ReflectedPropertyControl/PropertyCtrl.cpp
@@ -10,7 +10,6 @@
// Editor
#include "PropertyCtrl.h"
-#include "PropertyResourceCtrl.h"
#include "PropertyGenericCtrl.h"
#include "PropertyMiscCtrl.h"
#include "PropertyMotionCtrl.h"
@@ -21,7 +20,6 @@ void RegisterReflectedVarHandlers()
if (!registered)
{
registered = true;
- EBUS_EVENT(AzToolsFramework::PropertyTypeRegistrationMessages::Bus, RegisterPropertyType, aznew FileResourceSelectorWidgetHandler());
EBUS_EVENT(AzToolsFramework::PropertyTypeRegistrationMessages::Bus, RegisterPropertyType, aznew SequencePropertyHandler());
EBUS_EVENT(AzToolsFramework::PropertyTypeRegistrationMessages::Bus, RegisterPropertyType, aznew SequenceIdPropertyHandler());
EBUS_EVENT(AzToolsFramework::PropertyTypeRegistrationMessages::Bus, RegisterPropertyType, aznew LocalStringPropertyHandler());
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp
index 8ff83dd894..9609fb5014 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp
+++ b/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp
@@ -24,7 +24,6 @@
// Editor
#include "SelectLightAnimationDialog.h"
#include "SelectSequenceDialog.h"
-#include "SelectEAXPresetDlg.h"
#include "QtViewPaneManager.h"
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyResourceCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/PropertyResourceCtrl.cpp
deleted file mode 100644
index d26e978ae8..0000000000
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyResourceCtrl.cpp
+++ /dev/null
@@ -1,383 +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
- *
- */
-
-#include "EditorDefs.h"
-
-#include "PropertyResourceCtrl.h"
-
-// Qt
-#include
-#include
-
-// AzToolsFramework
-#include
-#include
-#include
-
-// Editor
-#include "Controls/QToolTipWidget.h"
-#include "Controls/BitmapToolTip.h"
-
-
-BrowseButton::BrowseButton(PropertyType type, QWidget* parent /*= nullptr*/)
- : QToolButton(parent)
- , m_propertyType(type)
-{
- setAutoRaise(true);
- setIcon(QIcon(QStringLiteral(":/stylesheet/img/UI20/browse-edit.svg")));
- connect(this, &QAbstractButton::clicked, this, &BrowseButton::OnClicked);
-}
-
-void BrowseButton::SetPathAndEmit(const QString& path)
-{
- //only emit if path changes. Old property control
- if (path != m_path)
- {
- m_path = path;
- emit PathChanged(m_path);
- }
-}
-
-class FileBrowseButton
- : public BrowseButton
-{
-public:
- AZ_CLASS_ALLOCATOR(FileBrowseButton, AZ::SystemAllocator, 0);
- FileBrowseButton(PropertyType type, QWidget* pParent = nullptr)
- : BrowseButton(type, pParent)
- {
- setToolTip("Browse...");
- }
-
-private:
- void OnClicked() override
- {
- QString tempValue("");
- if (!m_path.isEmpty() && !Path::GetExt(m_path).isEmpty())
- {
- tempValue = m_path;
- }
-
- AssetSelectionModel selection;
-
- if (m_propertyType == ePropertyTexture)
- {
- // Filters for texture.
- selection = AssetSelectionModel::AssetGroupSelection("Texture");
- }
- else
- {
- return;
- }
-
- AzToolsFramework::EditorRequests::Bus::Broadcast(&AzToolsFramework::EditorRequests::BrowseForAssets, selection);
- if (selection.IsValid())
- {
- QString newPath = Path::FullPathToGamePath(selection.GetResult()->GetFullPath().c_str()).c_str();
-
- switch (m_propertyType)
- {
- case ePropertyTexture:
- newPath.replace("\\\\", "/");
- if (newPath.size() > MAX_PATH)
- {
- newPath.resize(MAX_PATH);
- }
- }
-
- SetPathAndEmit(newPath);
- }
- }
-};
-
-class AudioControlSelectorButton
- : public BrowseButton
-{
-public:
- AZ_CLASS_ALLOCATOR(AudioControlSelectorButton, AZ::SystemAllocator, 0);
-
- AudioControlSelectorButton(PropertyType type, QWidget* pParent = nullptr)
- : BrowseButton(type, pParent)
- {
- setToolTip(tr("Select Audio Control"));
- }
-
-private:
- void OnClicked() override
- {
- AZStd::string resourceResult;
- auto ConvertLegacyAudioPropertyType = [](const PropertyType type) -> AzToolsFramework::AudioPropertyType
- {
- switch (type)
- {
- case ePropertyAudioTrigger:
- return AzToolsFramework::AudioPropertyType::Trigger;
- case ePropertyAudioRTPC:
- return AzToolsFramework::AudioPropertyType::Rtpc;
- case ePropertyAudioSwitch:
- return AzToolsFramework::AudioPropertyType::Switch;
- case ePropertyAudioSwitchState:
- return AzToolsFramework::AudioPropertyType::SwitchState;
- case ePropertyAudioEnvironment:
- return AzToolsFramework::AudioPropertyType::Environment;
- case ePropertyAudioPreloadRequest:
- return AzToolsFramework::AudioPropertyType::Preload;
- default:
- return AzToolsFramework::AudioPropertyType::NumTypes;
- }
- };
-
- auto propType = ConvertLegacyAudioPropertyType(m_propertyType);
- if (propType != AzToolsFramework::AudioPropertyType::NumTypes)
- {
- AzToolsFramework::AudioControlSelectorRequestBus::EventResult(
- resourceResult, propType, &AzToolsFramework::AudioControlSelectorRequestBus::Events::SelectResource,
- AZStd::string_view{ m_path.toUtf8().constData() });
- SetPathAndEmit(QString{ resourceResult.c_str() });
- }
- }
-};
-
-class TextureEditButton
- : public BrowseButton
-{
-public:
- AZ_CLASS_ALLOCATOR(TextureEditButton, AZ::SystemAllocator, 0);
- TextureEditButton(QWidget* pParent = nullptr)
- : BrowseButton(ePropertyTexture, pParent)
- {
- setIcon(QIcon(QStringLiteral(":/stylesheet/img/UI20/open-in-internal-app.svg")));
- setToolTip(tr("Launch default editor"));
- }
-
-private:
- void OnClicked() override
- {
- CFileUtil::EditTextureFile(m_path.toUtf8().data(), true);
- }
-};
-
-FileResourceSelectorWidget::FileResourceSelectorWidget(QWidget* pParent /*= nullptr*/)
- : QWidget(pParent)
- , m_propertyType(ePropertyInvalid)
- , m_tooltip(nullptr)
-{
- m_pathEdit = new QLineEdit;
- m_mainLayout = new QHBoxLayout(this);
- m_mainLayout->addWidget(m_pathEdit, 1);
-
- m_mainLayout->setContentsMargins(0, 0, 0, 0);
-
-// KDAB just ported the MFC texture preview tooltip, but looks like Amazon added their own. Not sure which to use.
-// To switch to Amazon QToolTipWidget, remove FileResourceSelectorWidget::event and m_previewTooltip
-#ifdef USE_QTOOLTIPWIDGET
- m_tooltip = new QToolTipWidget(this);
-
- installEventFilter(this);
-#endif
- connect(m_pathEdit, &QLineEdit::editingFinished, this, [this]() { OnPathChanged(m_pathEdit->text()); });
-}
-
-bool FileResourceSelectorWidget::eventFilter([[maybe_unused]] QObject* obj, QEvent* event)
-{
- if (m_propertyType == ePropertyTexture)
- {
- if (event->type() == QEvent::ToolTip)
- {
- QHelpEvent* e = (QHelpEvent*)event;
-
- m_tooltip->AddSpecialContent("TEXTURE", m_path);
- m_tooltip->TryDisplay(e->globalPos(), m_pathEdit, QToolTipWidget::ArrowDirection::ARROW_RIGHT);
-
- return true;
- }
-
- if (event->type() == QEvent::Leave)
- {
- m_tooltip->hide();
- }
- }
-
- return false;
-}
-
-void FileResourceSelectorWidget::SetPropertyType(PropertyType type)
-{
- if (m_propertyType == type)
- {
- return;
- }
-
- //if the property type changed for some reason, delete all the existing widgets
- if (!m_buttons.isEmpty())
- {
- qDeleteAll(m_buttons.begin(), m_buttons.end());
- m_buttons.clear();
- }
-
- m_previewToolTip.reset();
- m_propertyType = type;
-
- switch (type)
- {
- case ePropertyTexture:
- AddButton(new FileBrowseButton(type));
- AddButton(new TextureEditButton);
- m_previewToolTip.reset(new CBitmapToolTip);
- break;
- case ePropertyAudioTrigger:
- case ePropertyAudioSwitch:
- case ePropertyAudioSwitchState:
- case ePropertyAudioRTPC:
- case ePropertyAudioEnvironment:
- case ePropertyAudioPreloadRequest:
- AddButton(new AudioControlSelectorButton(type));
- break;
- default:
- break;
- }
-
- m_mainLayout->invalidate();
-}
-
-void FileResourceSelectorWidget::AddButton(BrowseButton* button)
-{
- m_mainLayout->addWidget(button);
- m_buttons.push_back(button);
- connect(button, &BrowseButton::PathChanged, this, &FileResourceSelectorWidget::OnPathChanged);
-}
-
-void FileResourceSelectorWidget::OnPathChanged(const QString& path)
-{
- bool changed = SetPath(path);
- if (changed)
- {
- emit PathChanged(m_path);
- }
-}
-
-bool FileResourceSelectorWidget::SetPath(const QString& path)
-{
- bool changed = false;
-
- const QString newPath = path.toLower();
- if (m_path != newPath)
- {
- m_path = newPath;
- UpdateWidgets();
-
- changed = true;
- }
-
- return changed;
-}
-
-
-void FileResourceSelectorWidget::UpdateWidgets()
-{
- m_pathEdit->setText(m_path);
-
- foreach(BrowseButton * button, m_buttons)
- {
- button->SetPath(m_path);
- }
-
- if (m_previewToolTip)
- {
- m_previewToolTip->SetTool(this, rect());
- }
-}
-
-QString FileResourceSelectorWidget::GetPath() const
-{
- return m_path;
-}
-
-
-
-QWidget* FileResourceSelectorWidget::GetLastInTabOrder()
-{
- return m_buttons.empty() ? nullptr : m_buttons.last();
-}
-
-QWidget* FileResourceSelectorWidget::GetFirstInTabOrder()
-{
- return m_buttons.empty() ? nullptr : m_buttons.first();
-}
-
-void FileResourceSelectorWidget::UpdateTabOrder()
-{
- if (m_buttons.count() >= 2)
- {
- for (int i = 0; i < m_buttons.count() - 1; ++i)
- {
- setTabOrder(m_buttons[i], m_buttons[i + 1]);
- }
- }
-}
-
-bool FileResourceSelectorWidget::event(QEvent* event)
-{
- if (event->type() == QEvent::ToolTip && m_previewToolTip && !m_previewToolTip->isVisible())
- {
- if (!m_path.isEmpty())
- {
- m_previewToolTip->LoadImage(m_path);
- m_previewToolTip->setVisible(true);
- }
- event->accept();
- return true;
- }
-
- if (event->type() == QEvent::Resize && m_previewToolTip)
- {
- m_previewToolTip->SetTool(this, rect());
- }
-
- return QWidget::event(event);
-}
-
-QWidget* FileResourceSelectorWidgetHandler::CreateGUI(QWidget* pParent)
-{
- FileResourceSelectorWidget* newCtrl = aznew FileResourceSelectorWidget(pParent);
- connect(newCtrl, &FileResourceSelectorWidget::PathChanged, newCtrl, [newCtrl]()
- {
- EBUS_EVENT(AzToolsFramework::PropertyEditorGUIMessages::Bus, RequestWrite, newCtrl);
- });
- return newCtrl;
-}
-
-void FileResourceSelectorWidgetHandler::ConsumeAttribute(FileResourceSelectorWidget* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName)
-{
- Q_UNUSED(GUI);
- Q_UNUSED(attrib);
- Q_UNUSED(attrValue);
- Q_UNUSED(debugName);
-}
-
-void FileResourceSelectorWidgetHandler::WriteGUIValuesIntoProperty(size_t index, FileResourceSelectorWidget* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node)
-{
- Q_UNUSED(index);
- Q_UNUSED(node);
- CReflectedVarResource val = instance;
- val.m_propertyType = GUI->GetPropertyType();
- val.m_path = GUI->GetPath().toUtf8().data();
- instance = static_cast(val);
-}
-
-bool FileResourceSelectorWidgetHandler::ReadValuesIntoGUI(size_t index, FileResourceSelectorWidget* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node)
-{
- Q_UNUSED(index);
- Q_UNUSED(node);
- CReflectedVarResource val = instance;
- GUI->SetPropertyType(val.m_propertyType);
- GUI->SetPath(val.m_path.c_str());
- return false;
-}
-
-#include
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyResourceCtrl.h b/Code/Editor/Controls/ReflectedPropertyControl/PropertyResourceCtrl.h
deleted file mode 100644
index 087ee9f1db..0000000000
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyResourceCtrl.h
+++ /dev/null
@@ -1,118 +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
- *
- */
-
-#ifndef CRYINCLUDE_EDITOR_UTILS_PROPERTYRESOURCECTRL_H
-#define CRYINCLUDE_EDITOR_UTILS_PROPERTYRESOURCECTRL_H
-#pragma once
-
-#if !defined(Q_MOC_RUN)
-#include
-#include
-#include
-#include "ReflectedVar.h"
-#include "Util/VariablePropertyType.h"
-#include
-#include
-#include
-#endif
-
-class QLineEdit;
-class QHBoxLayout;
-class CBitmapToolTip;
-class QToolTipWidget;
-
-class BrowseButton
- : public QToolButton
-{
- Q_OBJECT
-public:
- AZ_CLASS_ALLOCATOR(BrowseButton, AZ::SystemAllocator, 0);
-
- BrowseButton(PropertyType type, QWidget* parent = nullptr);
-
- void SetPath(const QString& path) { m_path = path; }
- QString GetPath() const { return m_path; }
-
- PropertyType GetPropertyType() const {return m_propertyType; }
-
-signals:
- void PathChanged(const QString& path);
-
-protected:
- void SetPathAndEmit(const QString& path);
- virtual void OnClicked() = 0;
-
- PropertyType m_propertyType;
- QString m_path;
-};
-
-class FileResourceSelectorWidget
- : public QWidget
-{
- Q_OBJECT
-public:
- AZ_CLASS_ALLOCATOR(FileResourceSelectorWidget, AZ::SystemAllocator, 0);
- FileResourceSelectorWidget(QWidget* pParent = nullptr);
-
- bool SetPath(const QString& path);
- QString GetPath() const;
- void SetPropertyType(PropertyType type);
- PropertyType GetPropertyType() const { return m_propertyType; }
-
- QWidget* GetFirstInTabOrder();
- QWidget* GetLastInTabOrder();
- void UpdateTabOrder();
-
- bool eventFilter(QObject* obj, QEvent* event) override;
-
-signals:
- void PathChanged(const QString& path);
-
-protected:
- bool event(QEvent* event) override;
-
-private:
- void OnAssignClicked();
- void OnMaterialClicked();
-
- void UpdateWidgets();
- void AddButton(BrowseButton* button);
- void OnPathChanged(const QString& path);
-
-private:
- QLineEdit* m_pathEdit;
- PropertyType m_propertyType;
- QString m_path;
-
- QHBoxLayout* m_mainLayout;
- QVector m_buttons;
- QScopedPointer m_previewToolTip;
- QToolTipWidget* m_tooltip;
-};
-
-class FileResourceSelectorWidgetHandler
- : QObject
- , public AzToolsFramework::PropertyHandler < CReflectedVarResource, FileResourceSelectorWidget >
-{
- Q_OBJECT
-public:
- AZ_CLASS_ALLOCATOR(FileResourceSelectorWidgetHandler, AZ::SystemAllocator, 0);
-
- virtual AZ::u32 GetHandlerName(void) const override { return AZ_CRC("Resource", 0xbc91f416); }
- virtual bool IsDefaultHandler() const override { return true; }
- virtual QWidget* GetFirstInTabOrder(FileResourceSelectorWidget* widget) override { return widget->GetFirstInTabOrder(); }
- virtual QWidget* GetLastInTabOrder(FileResourceSelectorWidget* widget) override { return widget->GetLastInTabOrder(); }
- virtual void UpdateWidgetInternalTabbing(FileResourceSelectorWidget* widget) override { widget->UpdateTabOrder(); }
-
- virtual QWidget* CreateGUI(QWidget* pParent) override;
- virtual void ConsumeAttribute(FileResourceSelectorWidget* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) override;
- virtual void WriteGUIValuesIntoProperty(size_t index, FileResourceSelectorWidget* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
- virtual bool ReadValuesIntoGUI(size_t index, FileResourceSelectorWidget* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
-};
-
-#endif // CRYINCLUDE_EDITOR_UTILS_PROPERTYRESOURCECTRL_H
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp
index af418c6e0d..0fcbac3204 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp
+++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp
@@ -229,28 +229,16 @@ void ReflectedPropertyItem::SetVariable(IVariable *var)
break;
case ePropertyFloat:
case ePropertyAngle:
- //if the Description has a valid global enumDB lookup, edit as an enum, otherwise use normal float editor
- if (desc.m_pEnumDBItem)
- m_reflectedVarAdapter = new ReflectedVarDBEnumAdapter;
- else
- m_reflectedVarAdapter = new ReflectedVarFloatAdapter;
+ m_reflectedVarAdapter = new ReflectedVarFloatAdapter;
break;
case ePropertyInt:
- //if the Description has a valid global enumDB lookup, edit as an enum, otherwise use normal int editor
- if (desc.m_pEnumDBItem)
- m_reflectedVarAdapter = new ReflectedVarDBEnumAdapter;
- else
- m_reflectedVarAdapter = new ReflectedVarIntAdapter;
+ m_reflectedVarAdapter = new ReflectedVarIntAdapter;
break;
case ePropertyBool:
m_reflectedVarAdapter = new ReflectedVarBoolAdapter;
break;
case ePropertyString:
- //if the Description has a valid global enumDB lookup, edit as an enum, otherwise use normal string editor
- if (desc.m_pEnumDBItem)
- m_reflectedVarAdapter = new ReflectedVarDBEnumAdapter;
- else
- m_reflectedVarAdapter = new ReflectedVarStringAdapter;
+ m_reflectedVarAdapter = new ReflectedVarStringAdapter;
break;
case ePropertySelection:
m_reflectedVarAdapter = new ReflectedVarEnumAdapter;
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.cpp b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.cpp
index 263c17a8bb..268faaa335 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.cpp
+++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVar.cpp
@@ -70,12 +70,6 @@ void ReflectedVarInit::setupReflection(AZ::SerializeContext* serializeContext)
AZ::EditContext* ec = serializeContext->GetEditContext();
if (ec)
{
- ec->Class< CReflectedVarResource >("VarResource", "Resource")
- ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
- ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarResource::varName)
- ->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarResource::description)
- ;
-
ec->Class< CReflectedVarUser >("VarUser", "")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarUser::varName)
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp
index 2320938f08..8eefbbc8eb 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp
+++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp
@@ -15,7 +15,6 @@
// Editor
#include "ReflectedPropertyCtrl.h"
-#include "UIEnumsDatabase.h"
namespace {
@@ -254,41 +253,6 @@ void ReflectedVarEnumAdapter::OnVariableChange([[maybe_unused]] IVariable* pVari
}
}
-void ReflectedVarDBEnumAdapter::SetVariable(IVariable *pVariable)
-{
- Prop::Description desc(pVariable);
- m_pEnumDBItem = desc.m_pEnumDBItem;
- m_reflectedVar.reset(new CReflectedVarEnum(pVariable->GetHumanName().toUtf8().data()));
- if (m_pEnumDBItem)
- {
- for (int i = 0; i < m_pEnumDBItem->strings.size(); i++)
- {
- QString name = m_pEnumDBItem->strings[i];
- m_reflectedVar->addEnum( m_pEnumDBItem->NameToValue(name).toUtf8().data(), name.toUtf8().data() );
- }
- }
-}
-
-void ReflectedVarDBEnumAdapter::SyncReflectedVarToIVar(IVariable *pVariable)
-{
- const AZStd::string valueStr = pVariable->GetDisplayValue().toUtf8().data();
- const AZStd::string value = m_pEnumDBItem ? AZStd::string(m_pEnumDBItem->ValueToName(valueStr.c_str()).toUtf8().data()) : valueStr;
- m_reflectedVar->setEnumByName(value);
-
-}
-
-void ReflectedVarDBEnumAdapter::SyncIVarToReflectedVar(IVariable *pVariable)
-{
- QString iVarVal = m_reflectedVar->m_selectedEnumName.c_str();
- if (m_pEnumDBItem)
- {
- iVarVal = m_pEnumDBItem->NameToValue(iVarVal);
- }
- pVariable->SetDisplayValue(iVarVal);
-}
-
-
-
void ReflectedVarVector2Adapter::SetVariable(IVariable *pVariable)
{
m_reflectedVar.reset(new CReflectedVarVector2(pVariable->GetHumanName().toUtf8().data()));
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h
index 4bcd6dcaa3..807413226c 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h
+++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h
@@ -16,7 +16,6 @@
#include
-struct CUIEnumsDatabase_SEnum;
class ReflectedPropertyItem;
// Class to wrap the CReflectedVars and sync them with corresponding IVariable.
@@ -145,22 +144,6 @@ AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
bool m_updatingEnums;
};
-class EDITOR_CORE_API ReflectedVarDBEnumAdapter
- : public ReflectedVarAdapter
-{
-public:
- void SetVariable(IVariable* pVariable) override;
- void SyncReflectedVarToIVar(IVariable* pVariable) override;
- void SyncIVarToReflectedVar(IVariable* pVariable) override;
- CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
-private:
-AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
- QScopedPointer > m_reflectedVar;
-AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
-
- CUIEnumsDatabase_SEnum* m_pEnumDBItem;
-};
-
class EDITOR_CORE_API ReflectedVarVector2Adapter
: public ReflectedVarAdapter
{
diff --git a/Code/Editor/Core/LevelEditorMenuHandler.cpp b/Code/Editor/Core/LevelEditorMenuHandler.cpp
index 05f06c87aa..d359d9ef5d 100644
--- a/Code/Editor/Core/LevelEditorMenuHandler.cpp
+++ b/Code/Editor/Core/LevelEditorMenuHandler.cpp
@@ -588,7 +588,7 @@ QMenu* LevelEditorMenuHandler::CreateGameMenu()
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
// Export to Engine
diff --git a/Code/Editor/Core/QtEditorApplication.h b/Code/Editor/Core/QtEditorApplication.h
index 0d702bf647..28ee8ac14b 100644
--- a/Code/Editor/Core/QtEditorApplication.h
+++ b/Code/Editor/Core/QtEditorApplication.h
@@ -13,7 +13,6 @@
#include
#include
#include
-#include "IEventLoopHook.h"
#include
#include
diff --git a/Code/Editor/CrtDebug.cpp b/Code/Editor/CrtDebug.cpp
deleted file mode 100644
index f9335373da..0000000000
--- a/Code/Editor/CrtDebug.cpp
+++ /dev/null
@@ -1,170 +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
- *
- */
-
-
-#include "EditorDefs.h"
-
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-//#ifdef _CRTDBG_MAP_ALLOC
-#ifdef CRTDBG_MAP_ALLOC
-#pragma pack (push,1)
-#define nNoMansLandSize 4
-typedef struct MyCrtMemBlockHeader
-{
- struct MyCrtMemBlockHeader* pBlockHeaderNext;
- struct MyCrtMemBlockHeader* pBlockHeaderPrev;
- char* szFileName;
- int nLine;
- size_t nDataSize;
- int nBlockUse;
- long lRequest;
- unsigned char gap[nNoMansLandSize];
- /* followed by:
- * unsigned char data[nDataSize];
- * unsigned char anotherGap[nNoMansLandSize];
- */
-} MyCrtMemBlockHeader;
-#pragma pack (pop)
-
-#define pbData(pblock) ((unsigned char*)((MyCrtMemBlockHeader*)pblock + 1))
-#define pHdr(pbData) (((MyCrtMemBlockHeader*)pbData) - 1)
-
-
-void crtdebug(const char* s, ...)
-{
- char str[32768];
- va_list arg_ptr;
- va_start(arg_ptr, s);
- vsprintf(str, s, arg_ptr);
- va_end(arg_ptr);
-
- FILE* l = nullptr;
- azfopen(&l, "crtdump.txt", "a+t");
- if (l)
- {
- fprintf(l, "%s", str);
- fclose(l);
- }
-}
-
-int crtAllocHook(int nAllocType, void* pvData,
- size_t nSize, int nBlockUse, long lRequest,
- const unsigned char* szFileName, int nLine)
-{
- if (nBlockUse == _CRT_BLOCK)
- {
- return TRUE;
- }
-
- static int total_cnt = 0;
- static int total_mem = 0;
- if (nAllocType == _HOOK_ALLOC)
- {
- //total_mem += nSize;
- //total_cnt++;
- //_CrtMemState mem_state;
- //_CrtMemCheckpoint( &mem_state );
- //total_cnt = mem_state.lCounts[_NORMAL_BLOCK];
- //total_mem = mem_state.lTotalCount;
- if ((total_cnt & 0xF) == 0)
- {
- //_CrtCheckMemory();
- }
-
- total_cnt++;
- total_mem += nSize;
-
- //crtdebug( " Alloc %d,size=%d,in: %s %d (total size=%d,num=%d)\n",lRequest,nSize,szFileName,nLine,total_mem,total_cnt );
- crtdebug("Size=%d, [Total=%d,N=%d] [%s:%d]\n", nSize, total_mem, total_cnt, szFileName, nLine);
- }
- else if (nAllocType == _HOOK_FREE)
- {
- MyCrtMemBlockHeader* pHead;
- pHead = pHdr(pvData);
-
- total_cnt--;
- total_mem -= pHead->nDataSize;
-
- crtdebug("Size=%d, [Total=%d,N=%d] [%s:%d]\n", pHead->nDataSize, total_mem, total_cnt, pHead->szFileName, pHead->nLine);
- //crtdebug( " Free size=%d,in: %s %d (total size=%d,num=%d)\n",pHead->nDataSize,pHead->szFileName,pHead->nLine,total_mem,total_cnt );
- //total_mem -= nSize;
- //total_cnt--;
- }
- return TRUE;
-}
-
-int crtReportHook(int nRptType, char* szMsg, int* retVal)
-{
- static int gl_num_asserts = 0;
- if (gl_num_asserts != 0)
- {
- return TRUE;
- }
- gl_num_asserts++;
- switch (nRptType)
- {
- case _CRT_WARN:
- crtdebug(" %s\n", szMsg);
- break;
- case _CRT_ERROR:
- crtdebug(" %s\n", szMsg);
- break;
- case _CRT_ASSERT:
- crtdebug(" %s\n", szMsg);
- break;
- }
- gl_num_asserts--;
- return TRUE;
-}
-
-void InitCrt()
-{
- FILE* l = nullptr;
- azfopen(&l, "crtdump.txt", "w");
- if (l)
- {
- fclose(l);
- }
-
- //_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_DEBUG );
- //_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );
- //_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_DEBUG );
-
- _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW);
- _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
- _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW);
-
- //_CrtSetDbgFlag( _CRTDBG_CHECK_ALWAYS_DF|_CRTDBG_CHECK_CRT_DF|_CRTDBG_LEAK_CHECK_DF|_CRTDBG_DELAY_FREE_MEM_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) );
- //_CrtSetDbgFlag( _CRTDBG_CHECK_CRT_DF|_CRTDBG_LEAK_CHECK_DF/*|_CRTDBG_DELAY_FREE_MEM_DF*/ | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) );
- int flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
- flags &= ~_CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_CRT_DF;
-
- _CrtSetDbgFlag(flags);
-
- _CrtSetAllocHook (crtAllocHook);
- _CrtSetReportHook(crtReportHook);
-}
-
-void DoneCrt()
-{
- //_CrtCheckMemory();
- //_CrtDumpMemoryLeaks();
-}
-
-// Autoinit CRT.
-//struct __autoinit_crt { __autoinit_crt() { InitCrt(); }; ~__autoinit_crt() { DoneCrt(); } } __autoinit_crt_var;
-#endif
-
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp
index 77099761c1..f3c38fdef7 100644
--- a/Code/Editor/CryEdit.cpp
+++ b/Code/Editor/CryEdit.cpp
@@ -36,14 +36,6 @@ AZ_POP_DISABLE_WARNING
#include
#include
-// Aws Native SDK
-#include
-#include
-#include
-#include
-#include
-#include
-
// AzCore
#include
#include
@@ -124,9 +116,6 @@ AZ_POP_DISABLE_WARNING
#include "ScopedVariableSetter.h"
#include "Util/3DConnexionDriver.h"
-
-#include "DimensionsDialog.h"
-
#include "Util/AutoDirectoryRestoreFileDialog.h"
#include "Util/EditorAutoLevelLoadTest.h"
#include "AboutDialog.h"
@@ -147,9 +136,7 @@ AZ_POP_DISABLE_WARNING
#include "Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h"
-// AWSNativeSDK
#include
-#include
#if defined(AZ_PLATFORM_WINDOWS)
@@ -719,7 +706,7 @@ void CCryEditApp::OnFileSave()
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
@@ -1352,8 +1339,27 @@ void CCryEditApp::CompileCriticalAssets() const
}
}
assetsInQueueNotifcation.BusDisconnect();
- CCryEditApp::OutputStartupMessage(QString("Asset Processor is now ready."));
+ // Signal the "CriticalAssetsCompiled" lifecycle event
+ // Also reload the "assetcatalog.xml" if it exists
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
+ {
+ AZ::ComponentApplicationLifecycle::SignalEvent(*settingsRegistry, "CriticalAssetsCompiled", R"({})");
+ // Reload the assetcatalog.xml at this point again
+ // Start Monitoring Asset changes over the network and load the AssetCatalog
+ auto LoadCatalog = [settingsRegistry](AZ::Data::AssetCatalogRequests* assetCatalogRequests)
+ {
+ if (AZ::IO::FixedMaxPath assetCatalogPath;
+ settingsRegistry->Get(assetCatalogPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder))
+ {
+ assetCatalogPath /= "assetcatalog.xml";
+ assetCatalogRequests->LoadCatalog(assetCatalogPath.c_str());
+ }
+ };
+ AZ::Data::AssetCatalogRequestBus::Broadcast(AZStd::move(LoadCatalog));
+ }
+
+ CCryEditApp::OutputStartupMessage(QString("Asset Processor is now ready."));
}
bool CCryEditApp::ConnectToAssetProcessor() const
@@ -1669,7 +1675,7 @@ bool CCryEditApp::InitInstance()
return false;
}
- if (AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get())
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
{
AZ::ComponentApplicationLifecycle::SignalEvent(*settingsRegistry, "LegacySystemInterfaceCreated", R"({})");
}
@@ -1703,7 +1709,6 @@ bool CCryEditApp::InitInstance()
mainWindow->Initialize();
GetIEditor()->GetCommandManager()->RegisterAutoCommands();
- GetIEditor()->AddUIEnums();
mainWindowWrapper->enableSaveRestoreGeometry("O3DE", "O3DE", "mainWindowGeometry");
m_pDocManager->OnFileNew();
@@ -1787,12 +1792,6 @@ bool CCryEditApp::InitInstance()
InitLevel(cmdInfo);
});
-#ifdef USE_WIP_FEATURES_MANAGER
- // load the WIP features file
- CWipFeatureManager::Instance()->EnableManager(!cmdInfo.m_bDeveloperMode);
- CWipFeatureManager::Init();
-#endif
-
if (!m_bConsoleMode && !m_bPreviewMode)
{
GetIEditor()->UpdateViews();
@@ -1820,10 +1819,7 @@ bool CCryEditApp::InitInstance()
if (GetIEditor()->GetCommandManager()->IsRegistered("editor.open_lnm_editor"))
{
CCommand0::SUIInfo uiInfo;
-#if !defined(NDEBUG)
- bool ok =
-#endif
- GetIEditor()->GetCommandManager()->GetUIInfo("editor.open_lnm_editor", uiInfo);
+ [[maybe_unused]] bool ok = GetIEditor()->GetCommandManager()->GetUIInfo("editor.open_lnm_editor", uiInfo);
assert(ok);
}
@@ -1832,34 +1828,6 @@ bool CCryEditApp::InitInstance()
return true;
}
-void CCryEditApp::RegisterEventLoopHook(IEventLoopHook* pHook)
-{
- pHook->pNextHook = m_pEventLoopHook;
- m_pEventLoopHook = pHook;
-}
-
-void CCryEditApp::UnregisterEventLoopHook(IEventLoopHook* pHookToRemove)
-{
- IEventLoopHook* pPrevious = nullptr;
- for (IEventLoopHook* pHook = m_pEventLoopHook; pHook != nullptr; pHook = pHook->pNextHook)
- {
- if (pHook == pHookToRemove)
- {
- if (pPrevious)
- {
- pPrevious->pNextHook = pHookToRemove->pNextHook;
- }
- else
- {
- m_pEventLoopHook = pHookToRemove->pNextHook;
- }
-
- pHookToRemove->pNextHook = nullptr;
- return;
- }
- }
-}
-
//////////////////////////////////////////////////////////////////////////
void CCryEditApp::LoadFile(QString fileName)
{
@@ -2115,21 +2083,12 @@ bool CCryEditApp::FixDanglingSharedMemory(const QString& sharedMemName) const
int CCryEditApp::ExitInstance(int exitCode)
{
- AZ_TracePrintf("Exit", "Called ExitInstance() with exit code: 0x%x", exitCode);
-
if (m_pEditor)
{
m_pEditor->OnBeginShutdownSequence();
}
qobject_cast(qApp)->UnloadSettings();
- #ifdef USE_WIP_FEATURES_MANAGER
- //
- // close wip features manager
- //
- CWipFeatureManager::Shutdown();
- #endif
-
if (IsInRegularEditorMode())
{
if (GetIEditor())
@@ -2405,7 +2364,7 @@ void CCryEditApp::ExportLevel(bool bExportToGame, bool bExportTexture, bool bAut
{
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (usePrefabSystemForLevels)
{
AZ_Assert(false, "Prefab system doesn't require level exports.");
@@ -2446,7 +2405,7 @@ bool CCryEditApp::UserExportToGame(bool bNoMsgBox)
{
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (usePrefabSystemForLevels)
{
AZ_Assert(false, "Export Level should no longer exist.");
@@ -2494,7 +2453,7 @@ void CCryEditApp::ExportToGame(bool bNoMsgBox)
{
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (usePrefabSystemForLevels)
{
AZ_Assert(false, "Prefab system no longer exports levels.");
@@ -3002,7 +2961,7 @@ CCryEditApp::ECreateLevelResult CCryEditApp::CreateLevel(const QString& levelNam
{
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
// If we are creating a new level and we're in simulate mode, then switch it off before we do anything else
if (GetIEditor()->GetGameEngine() && GetIEditor()->GetGameEngine()->GetSimulationMode())
@@ -3148,7 +3107,7 @@ bool CCryEditApp::CreateLevel(bool& wasCreateLevelOperationCancelled)
{
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
QString str = QObject::tr("Level %1 has been changed. Save Level?").arg(GetIEditor()->GetGameEngine()->GetLevelName());
@@ -3360,6 +3319,10 @@ CCryEditDoc* CCryEditApp::OpenDocumentFile(const char* filename, bool addToMostR
return GetIEditor()->GetDocument();
}
+ bool usePrefabSystemForLevels = false;
+ AzFramework::ApplicationRequests::Bus::BroadcastResult(
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
+
// If we are loading and we're in simulate mode, then switch it off before we do anything else
if (GetIEditor()->GetGameEngine() && GetIEditor()->GetGameEngine()->GetSimulationMode())
{
@@ -3367,6 +3330,15 @@ CCryEditDoc* CCryEditApp::OpenDocumentFile(const char* filename, bool addToMostR
bool bIsDocModified = GetIEditor()->GetDocument()->IsModified();
OnSwitchPhysics();
GetIEditor()->GetDocument()->SetModifiedFlag(bIsDocModified);
+
+ if (usePrefabSystemForLevels)
+ {
+ auto* rootSpawnableInterface = AzFramework::RootSpawnableInterface::Get();
+ if (rootSpawnableInterface)
+ {
+ rootSpawnableInterface->ProcessSpawnableQueue();
+ }
+ }
}
// We're about to start loading a level, so start recording errors to display at the end.
diff --git a/Code/Editor/CryEdit.h b/Code/Editor/CryEdit.h
index 97fcde8f34..f472639dcd 100644
--- a/Code/Editor/CryEdit.h
+++ b/Code/Editor/CryEdit.h
@@ -14,7 +14,6 @@
#if !defined(Q_MOC_RUN)
#include
#include
-#include "WipFeatureManager.h"
#include "CryEditDoc.h"
#include "ViewPane.h"
@@ -31,7 +30,6 @@ class CConsoleDialog;
struct mg_connection;
struct mg_request_info;
struct mg_context;
-struct IEventLoopHook;
class QAction;
class MainWindow;
class QSharedMemory;
@@ -154,8 +152,6 @@ public:
int IdleProcessing(bool bBackground);
bool IsWindowInForeground();
void RunInitPythonScript(CEditCommandLineInfo& cmdInfo);
- void RegisterEventLoopHook(IEventLoopHook* pHook);
- void UnregisterEventLoopHook(IEventLoopHook* pHook);
void DisableIdleProcessing() override;
void EnableIdleProcessing() override;
@@ -345,7 +341,6 @@ private:
QString m_lastOpenLevelPath;
CQuickAccessBar* m_pQuickAccessBar = nullptr;
- IEventLoopHook* m_pEventLoopHook = nullptr;
QString m_rootEnginePath;
int m_disableIdleProcessingCounter = 0; //!< Counts requests to disable idle processing. When non-zero, idle processing will be disabled.
diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp
index 3bcba4d5e0..cabb82db89 100644
--- a/Code/Editor/CryEditDoc.cpp
+++ b/Code/Editor/CryEditDoc.cpp
@@ -45,7 +45,6 @@
#include "ActionManager.h"
#include "Include/IObjectManager.h"
#include "ErrorReportDialog.h"
-#include "SurfaceTypeValidator.h"
#include "Util/AutoLogTime.h"
#include "CheckOutDialog.h"
#include "GameExporter.h"
@@ -58,7 +57,6 @@
// LmbrCentral
#include
-#include // for LmbrCentral::EditorLightComponentRequestBus
static const char* kAutoBackupFolder = "_autobackup";
static const char* kHoldFolder = "$tmp_hold"; // conform to the ignored file types $tmp[0-9]*_ regex
@@ -99,8 +97,7 @@ namespace Internal
// CCryEditDoc construction/destruction
CCryEditDoc::CCryEditDoc()
- : doc_validate_surface_types(nullptr)
- , m_modifiedModuleFlags(eModifiedNothing)
+ : m_modifiedModuleFlags(eModifiedNothing)
{
////////////////////////////////////////////////////////////////////////
// Set member variables to initial values
@@ -120,7 +117,6 @@ CCryEditDoc::CCryEditDoc()
GetIEditor()->SetDocument(this);
CLogFile::WriteLine("Document created");
- RegisterConsoleVariables();
MainWindow::instance()->GetActionManager()->RegisterActionHandler(ID_FILE_SAVE_AS, this, &CCryEditDoc::OnFileSaveAs);
bool isPrefabSystemEnabled = false;
@@ -375,7 +371,7 @@ void CCryEditDoc::Load(TDocMultiArchive& arrXmlAr, const QString& szFilename)
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
@@ -459,8 +455,6 @@ void CCryEditDoc::Load(TDocMultiArchive& arrXmlAr, const QString& szFilename)
}
}
- CSurfaceTypeValidator().Validate();
-
LogLoadTime(GetTickCount() - t0);
// Loaded with success, remove event from log file
GetIEditor()->GetSettingsManager()->UnregisterEvent(loadEvent);
@@ -642,7 +636,7 @@ bool CCryEditDoc::SaveModified()
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
QMessageBox saveModifiedMessageBox(AzToolsFramework::GetActiveWindow());
@@ -705,7 +699,7 @@ void CCryEditDoc::OnFileSaveAs()
CCryEditApp::instance()->AddToRecentFileList(levelFileDialog.GetFileName());
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (usePrefabSystemForLevels)
{
AzToolsFramework::Prefab::TemplateId rootPrefabTemplateId =
@@ -734,7 +728,7 @@ bool CCryEditDoc::BeforeOpenDocument(const QString& lpszPathName, TOpenDocContex
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
@@ -1910,25 +1904,6 @@ void CCryEditDoc::SetDocumentReady(bool bReady)
m_bDocumentReady = bReady;
}
-void CCryEditDoc::RegisterConsoleVariables()
-{
- doc_validate_surface_types = gEnv->pConsole->GetCVar("doc_validate_surface_types");
-
- if (!doc_validate_surface_types)
- {
- doc_validate_surface_types = REGISTER_INT_CB("doc_validate_surface_types", 0, 0,
- "Flag indicating whether icons are displayed on the animation graph.\n"
- "Default is 1.\n",
- OnValidateSurfaceTypesChanged);
- }
-}
-
-void CCryEditDoc::OnValidateSurfaceTypesChanged(ICVar*)
-{
- CErrorsRecorder errorsRecorder(GetIEditor());
- CSurfaceTypeValidator().Validate();
-}
-
void CCryEditDoc::OnStartLevelResourceList()
{
// after loading another level we clear the RFOM_Level list, the first time the list should be empty
@@ -2154,52 +2129,13 @@ void CCryEditDoc::ReleaseXmlArchiveArray(TDocMultiArchive& arrXmlAr)
//////////////////////////////////////////////////////////////////////////
// AzToolsFramework::EditorEntityContextNotificationBus interface implementation
-void CCryEditDoc::OnSliceInstantiated(const AZ::Data::AssetId& sliceAssetId, AZ::SliceComponent::SliceInstanceAddress& sliceAddress, const AzFramework::SliceInstantiationTicket& /*ticket*/)
+void CCryEditDoc::OnSliceInstantiated([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] AZ::SliceComponent::SliceInstanceAddress& sliceAddress, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& ticket)
{
- if (m_envProbeSliceAssetId == sliceAssetId)
- {
- const AZ::SliceComponent::EntityList& entities = sliceAddress.GetInstance()->GetInstantiated()->m_entities;
- const AZ::Uuid editorEnvProbeComponentId("{8DBD6035-583E-409F-AFD9-F36829A0655D}");
- AzToolsFramework::EntityIdList entityIds;
- entityIds.reserve(entities.size());
- for (const AZ::Entity* entity : entities)
- {
- if (entity->FindComponent(editorEnvProbeComponentId))
- {
- // Update Probe Area size to cover the whole terrain
- LmbrCentral::EditorLightComponentRequestBus::Event(entity->GetId(), &LmbrCentral::EditorLightComponentRequests::SetProbeAreaDimensions, AZ::Vector3(m_terrainSize, m_terrainSize, m_envProbeHeight));
-
- // Force update the light to apply cubemap
- LmbrCentral::EditorLightComponentRequestBus::Event(entity->GetId(), &LmbrCentral::EditorLightComponentRequests::RefreshLight);
- }
- entityIds.push_back(entity->GetId());
- }
-
- //Detach instantiated env probe entities from engine slice
- AzToolsFramework::SliceEditorEntityOwnershipServiceRequestBus::Broadcast(
- &AzToolsFramework::SliceEditorEntityOwnershipServiceRequests::DetachSliceEntities, entityIds);
-
- sliceAddress.SetInstance(nullptr);
- sliceAddress.SetReference(nullptr);
- SetModifiedFlag(true);
- SetModifiedModules(eModifiedEntities);
-
- AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler::BusDisconnect();
-
- //save after level default slice fully instantiated
- Save();
- }
GetIEditor()->ResumeUndo();
}
-
-void CCryEditDoc::OnSliceInstantiationFailed(const AZ::Data::AssetId& sliceAssetId, const AzFramework::SliceInstantiationTicket& /*ticket*/)
+void CCryEditDoc::OnSliceInstantiationFailed([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& ticket)
{
- if (m_envProbeSliceAssetId == sliceAssetId)
- {
- AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler::BusDisconnect();
- AZ_Warning("Editor", false, "Failed to instantiate default environment probe slice.");
- }
GetIEditor()->ResumeUndo();
}
//////////////////////////////////////////////////////////////////////////
diff --git a/Code/Editor/CryEditDoc.h b/Code/Editor/CryEditDoc.h
index f7e97d308e..3874914396 100644
--- a/Code/Editor/CryEditDoc.h
+++ b/Code/Editor/CryEditDoc.h
@@ -176,9 +176,7 @@ protected:
virtual void OnFileSaveAs();
//! called immediately after saving the level.
void AfterSave();
- void RegisterConsoleVariables();
void OnStartLevelResourceList();
- static void OnValidateSurfaceTypesChanged(ICVar*);
QString GetCryIndexPath(const char* levelFilePath) const;
@@ -194,7 +192,6 @@ protected:
XmlNodeRef m_environmentTemplate;
std::list m_listeners;
bool m_bDocumentReady = false;
- ICVar* doc_validate_surface_types = nullptr;
int m_modifiedModuleFlags;
// On construction, it assumes loaded levels have already been exported. Can be a big fat lie, though.
// The right way would require us to save to the level folder the export status of the level.
@@ -203,7 +200,6 @@ protected:
QString m_pathName;
QString m_slicePathName;
QString m_title;
- AZ::Data::AssetId m_envProbeSliceAssetId;
float m_terrainSize;
const char* m_envProbeSliceRelativePath = "EngineAssets/Slices/DefaultLevelSetup.slice";
const float m_envProbeHeight = 200.0f;
diff --git a/Code/Editor/CryEditLiveCreate.rc b/Code/Editor/CryEditLiveCreate.rc
deleted file mode 100644
index 3dac96d682..0000000000
--- a/Code/Editor/CryEditLiveCreate.rc
+++ /dev/null
@@ -1,213 +0,0 @@
-ÿþ// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "winres.h"
-#include "resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (United States) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""winres.h""\r\n"
- "#include ""resource.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_MENU_LIVECREATE MENU
-BEGIN
- POPUP "&File"
- BEGIN
- MENUITEM "Save settings", ID_FILE_SAVESETTINGS
- MENUITEM "Close", ID_FILE_CLOSE_LIVECREATE_VIEW
- END
- POPUP "&View"
- BEGIN
- MENUITEM "LiveCreate Logger", ID_VIEW_LIVECREATELOGGER, CHECKED
- MENUITEM "LiveCreate Profile Editor", ID_VIEW_LIVECREATEPROFILEEDITOR, CHECKED
- MENUITEM "LiveCreate File Sync Settings", ID_VIEW_LIVECREATEFILESYNCSETTINGS, CHECKED
- END
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_LIVECREATE_PICKER DIALOGEX 0, 0, 316, 259
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Select game build directory"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,200,238,50,14
- PUSHBUTTON "Cancel",IDCANCEL,259,238,50,14
- CONTROL "",IDC_DIRECTORY_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,7,302,227
-END
-
-IDD_LIVECREATE_ADD_TARGETS DIALOGEX 0, 0, 500, 400
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Discover LiveCreate targets"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- PUSHBUTTON "Refresh",IDC_REFRESH,8,8,70,18
- PUSHBUTTON "Add custom...",IDC_BUTTON_ADD_PEER,82,8,70,18
- CONTROL "Use wider search (broadcast)",IDC_CHECK_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,12,200,10
- CONTROL "",IDC_LIST_PEERS,"XTPReport",WS_TABSTOP,8,32,484,342,WS_EX_STATICEDGE
- DEFPUSHBUTTON "Use selected",IDOK,180,379,70,18
- PUSHBUTTON "Cancel",IDCANCEL,259,379,70,18
- PUSHBUTTON "Add by IP...",IDC_BUTTON_ADD_MATERIAL,157,8,70,18
-END
-
-IDD_LIVECREATE_PEER_LIST DIALOGEX 0, 0, 395, 213
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_SYSMENU
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "Peers:",IDC_STATIC,17,27,22,8
- PUSHBUTTON "Add...",IDC_BUTTON_ADD_PEER,56,24,56,16
- PUSHBUTTON "Edit...",IDC_BUTTON_EDIT_PEER,116,24,56,16
- PUSHBUTTON "Remove",IDC_BUTTON_DELETE_PEER,176,24,52,16
- DEFPUSHBUTTON "Start All",IDC_BUTTON_START_ALL,4,4,48,16
- PUSHBUTTON "Reset All",IDC_BUTTON_RESET_ALL,176,4,52,16
- PUSHBUTTON "Force Sync All",IDC_BUTTON_FORCE_SYNC_ALL,56,4,56,16
- PUSHBUTTON "Clean All",IDC_BUTTON_CLEAN_ALL,232,4,52,16
- PUSHBUTTON "Screenshot All",IDC_BUTTON_SCREENSHOT_ALL,116,4,56,16
- CONTROL "",IDC_LIST_PEERS,"XTPReport",WS_TABSTOP,4,44,386,164,WS_EX_STATICEDGE
- CHECKBOX "LiveCreate",IDC_BUTTON_ENABLE_LIVECREATE,288,4,52,36,BS_PUSHLIKE | BS_MULTILINE
- CHECKBOX "Sync\nCamera",IDC_BUTTON_CAMERA_SYNC,345,4,52,36,BS_PUSHLIKE | BS_MULTILINE
- PUSHBUTTON "Discover",IDC_BUTTON_DISCOVER_PEERS,232,24,52,16
-END
-
-IDD_IDD_LIVECREATE_SETTINGS_PANEL DIALOGEX 0, 0, 156, 204
-STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Shell Dlg 2", 400, 0, 0x1
-BEGIN
- PUSHBUTTON "Add targets...",IDC_BUTTON_DISCOVER_PEERS,4,4,80,16
-END
-
-IDD_LIVECREATE_EDIT_CONNECTION DIALOGEX 0, 0, 288, 183
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "LiveCreate host settings"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,158,154,58,20
- PUSHBUTTON "Cancel",IDCANCEL,221,154,58,20
- LTEXT "Name:",IDC_STATIC,16,46,22,8
- EDITTEXT IDC_EDIT_TARGET_NAME,44,44,100,14,ES_AUTOHSCROLL
- LTEXT "IP:",IDC_STATIC,152,46,10,8
- CONTROL "",IDC_TARGET_IPADDRESS,"SysIPAddress32",WS_TABSTOP,168,44,100,15
- LTEXT "Platform:",IDC_STATIC,8,26,30,8
- LTEXT "Build path (automatic):",IDC_STATIC,19,120,74,8
- PUSHBUTTON "Test IP",IDC_BUTTON_TEST_CONNECTION,168,60,100,16
- COMBOBOX IDC_COMBO_PLATFORM,44,24,100,88,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Resovle name to IP",IDC_BUTTON_REFRESH_IP,44,60,100,16
- CONTROL "Enable this peer",IDC_CHECK_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,67,10
- GROUPBOX "Build settings",IDC_STATIC,7,80,272,71
- LTEXT "Build executable:",IDC_STATIC,19,92,56,8
- PUSHBUTTON "...",IDC_BUTTON_PICK_GAME_DIRECTORY,249,104,22,14
- EDITTEXT IDC_EDIT_BUILD_ROOT_PATH,20,104,226,14,ES_AUTOHSCROLL
- EDITTEXT IDC_EDIT_BUILD_EXECUTABLE,20,131,249,14,ES_AUTOHSCROLL
-END
-
-IDD_LIVECREATE_TASK_WAIT DIALOGEX 0, 0, 238, 41
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Dialog"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- PUSHBUTTON "Cancel",IDCANCEL,94,20,50,14
- LTEXT "Static",IDC_TASK_PROGRESS_TEXT,7,7,224,8
-END
-
-IDD_LIVECREATE_ADD_BY_IP DIALOGEX 0, 0, 137, 75
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Add LiveCreate by IP"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,7,48,58,20
- PUSHBUTTON "Cancel",IDCANCEL,71,48,58,20
- LTEXT "IP:",-1,9,12,10,8
- EDITTEXT IDC_TARGET_IPADDRESS,25,10,100,15,WS_TABSTOP
- PUSHBUTTON "Test IP",IDC_BUTTON_TEST_CONNECTION,25,27,100,16
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_LIVECREATE_ADD_TARGETS, DIALOG
- BEGIN
- END
-
- IDD_LIVECREATE_EDIT_CONNECTION, DIALOG
- BEGIN
- END
-
- IDD_LIVECREATE_TASK_WAIT, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 231
- TOPMARGIN, 7
- BOTTOMMARGIN, 34
- END
-
- IDD_LIVECREATE_ADD_BY_IP, DIALOG
- BEGIN
- END
-END
-#endif // APSTUDIO_INVOKED
-
-#endif // English (United States) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
\ No newline at end of file
diff --git a/Code/Editor/CryEditPy.cpp b/Code/Editor/CryEditPy.cpp
index a25a497a4e..5dea57c1ed 100644
--- a/Code/Editor/CryEditPy.cpp
+++ b/Code/Editor/CryEditPy.cpp
@@ -26,7 +26,6 @@
#include "Core/QtEditorApplication.h"
#include "CheckOutDialog.h"
#include "GameEngine.h"
-#include "UndoConfigSpec.h"
#include "ViewManager.h"
#include "EditorViewportCamera.h"
@@ -369,21 +368,6 @@ namespace
inline namespace Commands
{
- void PySetConfigSpec(int spec, int platform)
- {
- CUndo undo("Set Config Spec");
- if (CUndo::IsRecording())
- {
- CUndo::Record(new CUndoConficSpec());
- }
- GetIEditor()->SetEditorConfigSpec((ESystemConfigSpec)spec, (ESystemConfigPlatform)platform);
- }
-
- int PyGetConfigSpec()
- {
- return static_cast(GetIEditor()->GetEditorConfigSpec());
- }
-
int PyGetConfigPlatform()
{
return static_cast(GetIEditor()->GetEditorConfigPlatform());
@@ -434,9 +418,7 @@ namespace AzToolsFramework
addLegacyGeneral(behaviorContext->Method("set_current_view_rotation", PySetCurrentViewRotation, nullptr, "Sets the rotation of the current view as given x, y, z Euler angles in degrees."));
addLegacyGeneral(behaviorContext->Method("export_to_engine", CCryEditApp::Command_ExportToEngine, nullptr, "Exports the current level to the engine."));
- addLegacyGeneral(behaviorContext->Method("set_config_spec", PySetConfigSpec, nullptr, "Sets the system config spec and platform."));
addLegacyGeneral(behaviorContext->Method("get_config_platform", PyGetConfigPlatform, nullptr, "Gets the system config platform."));
- addLegacyGeneral(behaviorContext->Method("get_config_spec", PyGetConfigSpec, nullptr, "Gets the system config spec."));
addLegacyGeneral(behaviorContext->Method("set_result_to_success", PySetResultToSuccess, nullptr, "Sets the result of a script execution to success. Used only for Sandbox AutoTests."));
addLegacyGeneral(behaviorContext->Method("set_result_to_failure", PySetResultToFailure, nullptr, "Sets the result of a script execution to failure. Used only for Sandbox AutoTests."));
@@ -464,17 +446,6 @@ namespace AzToolsFramework
};
addCheckoutDialog(behaviorContext->Method("enable_for_all", PyCheckOutDialogEnableForAll, nullptr, "Enables the 'Apply to all' button in the checkout dialog; useful for allowing the user to apply a decision to check out files to multiple, related operations."));
- behaviorContext->EnumProperty("SystemConfigSpec_Auto")
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);
- behaviorContext->EnumProperty("SystemConfigSpec_Low")
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);
- behaviorContext->EnumProperty("SystemConfigSpec_Medium")
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);
- behaviorContext->EnumProperty("SystemConfigSpec_High")
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);
- behaviorContext->EnumProperty("SystemConfigSpec_VeryHigh")
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);
-
behaviorContext->EnumProperty("SystemConfigPlatform_InvalidPlatform")
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation);
behaviorContext->EnumProperty("SystemConfigPlatform_Pc")
diff --git a/Code/Editor/DimensionsDialog.cpp b/Code/Editor/DimensionsDialog.cpp
deleted file mode 100644
index 6c8e6a616b..0000000000
--- a/Code/Editor/DimensionsDialog.cpp
+++ /dev/null
@@ -1,71 +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
- *
- */
-
-
-#include "EditorDefs.h"
-
-#include "DimensionsDialog.h"
-
-// Qt
-#include
-
-AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
-#include
-AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-CDimensionsDialog::CDimensionsDialog(QWidget* pParent /*=nullptr*/)
- : QDialog(pParent)
- , m_group(new QButtonGroup(this))
- , ui(new Ui::CDimensionsDialog)
-{
- ui->setupUi(this);
-
- setWindowTitle(tr("Generate Terrain Texture"));
-
- m_group->addButton(ui->Dim512, 512);
- m_group->addButton(ui->Dim1024, 1024);
- m_group->addButton(ui->Dim2048, 2048);
- m_group->addButton(ui->Dim4096, 4096);
- m_group->addButton(ui->Dim8192, 8192);
- m_group->addButton(ui->Dim16384, 16384);
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-CDimensionsDialog::~CDimensionsDialog()
-{
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CDimensionsDialog::SetDimensions(unsigned int iWidth)
-{
- ////////////////////////////////////////////////////////////////////////
- // Select a dimension option button in the dialog
- ////////////////////////////////////////////////////////////////////////
-
- QAbstractButton* button = m_group->button(iWidth);
- assert(button);
-
- button->setChecked(true);
-}
-
-UINT CDimensionsDialog::GetDimensions()
-{
- ////////////////////////////////////////////////////////////////////////
- // Get the currently selected dimension option button in the dialog
- ////////////////////////////////////////////////////////////////////////
-
- assert(m_group->checkedId() != -1);
-
- return m_group->checkedId();
-}
-
-#include
diff --git a/Code/Editor/DimensionsDialog.h b/Code/Editor/DimensionsDialog.h
deleted file mode 100644
index b94c58bf95..0000000000
--- a/Code/Editor/DimensionsDialog.h
+++ /dev/null
@@ -1,47 +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
- *
- */
-
-
-#pragma once
-#ifndef CRYINCLUDE_EDITOR_DIMENSIONSDIALOG_H
-#define CRYINCLUDE_EDITOR_DIMENSIONSDIALOG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-
-#include
-#endif
-
-class QButtonGroup;
-
-namespace Ui {
- class CDimensionsDialog;
-}
-
-class CDimensionsDialog
- : public QDialog
-{
- Q_OBJECT
-
-public:
- CDimensionsDialog(QWidget* pParent = nullptr); // standard constructor
- ~CDimensionsDialog();
-
- UINT GetDimensions();
- void SetDimensions(unsigned int iWidth);
-
-protected:
- void UpdateData(bool fromUi = true); // DDX/DDV support
-
-private:
- QButtonGroup* m_group;
-
- QScopedPointer ui;
-};
-
-#endif // CRYINCLUDE_EDITOR_DIMENSIONSDIALOG_H
diff --git a/Code/Editor/DimensionsDialog.ui b/Code/Editor/DimensionsDialog.ui
deleted file mode 100644
index 316a060c92..0000000000
--- a/Code/Editor/DimensionsDialog.ui
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
- CDimensionsDialog
-
-
-
- 0
- 0
- 465
- 237
-
-
-
- Qt::StrongFocus
-
-
- -
-
-
- Texture Dimensions (Texture Dimensions divided by Terrain Size = Texels per meter)
-
-
-
-
-
-
- Qt::StrongFocus
-
-
- 512 x 512
-
-
- true
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 1024 x 1024
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 2048 x 2048
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 4096 x 4096
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 8192 x 8192
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 16384 x 16384
-
-
-
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- QDialogButtonBox::Ok
-
-
-
-
-
-
-
-
- buttonBox
- accepted()
- CDimensionsDialog
- accept()
-
-
- 77
- 294
-
-
- 7
- 296
-
-
-
-
-
diff --git a/Code/Editor/EditorDefs.h b/Code/Editor/EditorDefs.h
index 97c03b2b45..e86f007604 100644
--- a/Code/Editor/EditorDefs.h
+++ b/Code/Editor/EditorDefs.h
@@ -123,9 +123,7 @@
#include "Util/XmlTemplate.h"
// Utility classes.
-#include "Util/bitarray.h"
#include "Util/RefCountBase.h"
-#include "Util/TRefCountBase.h"
#include "Util/MemoryBlock.h"
#include "Util/PathUtil.h"
@@ -168,18 +166,3 @@
#ifdef LoadCursor
#undef LoadCursor
#endif
-
-
-#ifdef _DEBUG
-#if !defined(AZ_PLATFORM_LINUX)
-#ifdef assert
-#undef assert
-#if defined(USE_AZ_ASSERT)
-#define assert(condition) AZ_Assert(condition, "")
-#else
-#define assert CRY_ASSERT
-#endif
-#endif // !defined(AZ_PLATFORM_LINUX)
-#endif
-#endif
-
diff --git a/Code/Editor/EditorPreferencesBus.h b/Code/Editor/EditorPreferencesBus.h
deleted file mode 100644
index d6c9e3ed55..0000000000
--- a/Code/Editor/EditorPreferencesBus.h
+++ /dev/null
@@ -1,24 +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
- *
- */
-
-#pragma once
-
-#include
-
-//! Allows handlers to be notified when settings are changed to refresh accordingly
-class EditorPreferencesNotifications
- : public AZ::EBusTraits
-{
-public:
- static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
- static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
-
- //! Notifies about changes in the Editor Preferences
- virtual void OnEditorPreferencesChanged() {}
-};
-using EditorPreferencesNotificationBus = AZ::EBus;
diff --git a/Code/Editor/EditorPreferencesDialog.cpp b/Code/Editor/EditorPreferencesDialog.cpp
index 665daf52a8..42f7446716 100644
--- a/Code/Editor/EditorPreferencesDialog.cpp
+++ b/Code/Editor/EditorPreferencesDialog.cpp
@@ -112,29 +112,31 @@ void EditorPreferencesDialog::showEvent(QShowEvent* event)
QDialog::showEvent(event);
}
-void WidgetHandleKeyPressEvent(QWidget* widget, QKeyEvent* event)
+bool WidgetConsumesKeyPressEvent(QKeyEvent* event)
{
// If the enter key is pressed during any text input, the dialog box will close
// making it inconvenient to do multiple edits. This routine captures the
// Key_Enter or Key_Return and clears the focus to give a visible cue that
- // editing of that field has finished and then doesn't propogate it.
+ // editing of that field has finished and then doesn't propagate it.
if (event->key() != Qt::Key::Key_Enter && event->key() != Qt::Key::Key_Return)
{
- QApplication::sendEvent(widget, event);
+ return false;
}
- else
+
+ if (QWidget* editWidget = QApplication::focusWidget())
{
- if (QWidget* editWidget = QApplication::focusWidget())
- {
- editWidget->clearFocus();
- }
+ editWidget->clearFocus();
}
-}
+ return true;
+}
void EditorPreferencesDialog::keyPressEvent(QKeyEvent* event)
{
- WidgetHandleKeyPressEvent(this, event);
+ if (!WidgetConsumesKeyPressEvent(event))
+ {
+ QDialog::keyPressEvent(event);
+ }
}
void EditorPreferencesDialog::OnTreeCurrentItemChanged()
diff --git a/Code/Editor/EditorPreferencesDialog.h b/Code/Editor/EditorPreferencesDialog.h
index a3f05ad00d..70a186375b 100644
--- a/Code/Editor/EditorPreferencesDialog.h
+++ b/Code/Editor/EditorPreferencesDialog.h
@@ -19,7 +19,7 @@ namespace Ui
class EditorPreferencesTreeWidgetItem;
-void WidgetHandleKeyPressEvent(QWidget* widget, QKeyEvent* event);
+bool WidgetConsumesKeyPressEvent(QKeyEvent* event);
class EditorPreferencesDialog
: public QDialog
diff --git a/Code/Editor/EditorPreferencesPageAWS.cpp b/Code/Editor/EditorPreferencesPageAWS.cpp
index 9279dce7bc..bb57802e47 100644
--- a/Code/Editor/EditorPreferencesPageAWS.cpp
+++ b/Code/Editor/EditorPreferencesPageAWS.cpp
@@ -101,7 +101,7 @@ void CEditorPreferencesPage_AWS::SaveSettingsRegistryFile()
return;
}
- bool saved{};
+ [[maybe_unused]] bool saved = false;
constexpr auto configurationMode =
AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY;
if (AZ::IO::SystemFile outputFile; outputFile.Open(resolvedPath.data(), configurationMode))
diff --git a/Code/Editor/EditorPreferencesPageGeneral.cpp b/Code/Editor/EditorPreferencesPageGeneral.cpp
index 95b3bc4c50..642b9c37e7 100644
--- a/Code/Editor/EditorPreferencesPageGeneral.cpp
+++ b/Code/Editor/EditorPreferencesPageGeneral.cpp
@@ -30,7 +30,6 @@ void CEditorPreferencesPage_General::Reflect(AZ::SerializeContext& serialize)
serialize.Class()
->Version(3)
->Field("PreviewPanel", &GeneralSettings::m_previewPanel)
- ->Field("ApplyConfigSpec", &GeneralSettings::m_applyConfigSpec)
->Field("EnableSourceControl", &GeneralSettings::m_enableSourceControl)
->Field("ClearConsole", &GeneralSettings::m_clearConsoleOnGameModeStart)
->Field("ConsoleBackgroundColorTheme", &GeneralSettings::m_consoleBackgroundColorTheme)
@@ -81,7 +80,6 @@ void CEditorPreferencesPage_General::Reflect(AZ::SerializeContext& serialize)
{
editContext->Class("General Settings", "General Editor Preferences")
->DataElement(AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_previewPanel, "Show Geometry Preview Panel", "Show Geometry Preview Panel")
- ->DataElement(AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_applyConfigSpec, "Hide objects by config spec", "Hide objects by config spec")
->DataElement(AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_enableSourceControl, "Enable Source Control", "Enable Source Control")
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_clearConsoleOnGameModeStart, "Clear Console at game startup", "Clear Console when game mode starts")
@@ -157,7 +155,6 @@ void CEditorPreferencesPage_General::OnApply()
{
//general settings
gSettings.bPreviewGeometryWindow = m_generalSettings.m_previewPanel;
- gSettings.bApplyConfigSpecInEditor = m_generalSettings.m_applyConfigSpec;
gSettings.enableSourceControl = m_generalSettings.m_enableSourceControl;
gSettings.clearConsoleOnGameModeStart = m_generalSettings.m_clearConsoleOnGameModeStart;
gSettings.consoleBackgroundColorTheme = m_generalSettings.m_consoleBackgroundColorTheme;
@@ -195,7 +192,6 @@ void CEditorPreferencesPage_General::InitializeSettings()
{
//general settings
m_generalSettings.m_previewPanel = gSettings.bPreviewGeometryWindow;
- m_generalSettings.m_applyConfigSpec = gSettings.bApplyConfigSpecInEditor;
m_generalSettings.m_enableSourceControl = gSettings.enableSourceControl;
m_generalSettings.m_clearConsoleOnGameModeStart = gSettings.clearConsoleOnGameModeStart;
m_generalSettings.m_consoleBackgroundColorTheme = gSettings.consoleBackgroundColorTheme;
diff --git a/Code/Editor/EditorPreferencesPageGeneral.h b/Code/Editor/EditorPreferencesPageGeneral.h
index 01700dea88..ff2ebf79f8 100644
--- a/Code/Editor/EditorPreferencesPageGeneral.h
+++ b/Code/Editor/EditorPreferencesPageGeneral.h
@@ -45,7 +45,6 @@ private:
AZ_TYPE_INFO(GeneralSettings, "{C2AE8F6D-7AA6-499E-A3E8-ECCD0AC6F3D2}")
bool m_previewPanel;
- bool m_applyConfigSpec;
bool m_enableSourceControl;
bool m_clearConsoleOnGameModeStart;
AzToolsFramework::ConsoleColorTheme m_consoleBackgroundColorTheme;
diff --git a/Code/Editor/EditorPreferencesPageViewportGeneral.cpp b/Code/Editor/EditorPreferencesPageViewportGeneral.cpp
index 77560e24f8..f33cc3f725 100644
--- a/Code/Editor/EditorPreferencesPageViewportGeneral.cpp
+++ b/Code/Editor/EditorPreferencesPageViewportGeneral.cpp
@@ -41,8 +41,6 @@ void CEditorPreferencesPage_ViewportGeneral::Reflect(AZ::SerializeContext& seria
->Field("ShowBBoxes", &Display::m_showBBoxes)
->Field("DrawEntityLabels", &Display::m_drawEntityLabels)
->Field("ShowTriggerBounds", &Display::m_showTriggerBounds)
- ->Field("ShowIcons", &Display::m_showIcons)
- ->Field("DistanceScaleIcons", &Display::m_distanceScaleIcons)
->Field("ShowFrozenHelpers", &Display::m_showFrozenHelpers)
->Field("FillSelectedShapes", &Display::m_fillSelectedShapes)
->Field("ShowGridGuide", &Display::m_showGridGuide)
@@ -118,10 +116,6 @@ void CEditorPreferencesPage_ViewportGeneral::Reflect(AZ::SerializeContext& seria
AZ::Edit::UIHandlers::CheckBox, &Display::m_drawEntityLabels, "Always Draw Entity Labels", "Always Draw Entity Labels")
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &Display::m_showTriggerBounds, "Always Show Trigger Bounds", "Always Show Trigger Bounds")
- ->DataElement(AZ::Edit::UIHandlers::CheckBox, &Display::m_showIcons, "Show Object Icons", "Show Object Icons")
- ->DataElement(
- AZ::Edit::UIHandlers::CheckBox, &Display::m_distanceScaleIcons, "Scale Object Icons with Distance",
- "Scale Object Icons with Distance")
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &Display::m_showFrozenHelpers, "Show Helpers of Frozen Objects",
"Show Helpers of Frozen Objects")
@@ -244,8 +238,6 @@ void CEditorPreferencesPage_ViewportGeneral::OnApply()
}
gSettings.viewports.bDrawEntityLabels = m_display.m_drawEntityLabels;
gSettings.viewports.bShowTriggerBounds = m_display.m_showTriggerBounds;
- gSettings.viewports.bShowIcons = m_display.m_showIcons;
- gSettings.viewports.bDistanceScaleIcons = m_display.m_distanceScaleIcons;
gSettings.viewports.nShowFrozenHelpers = m_display.m_showFrozenHelpers;
gSettings.viewports.bFillSelectedShapes = m_display.m_fillSelectedShapes;
gSettings.viewports.bShowGridGuide = m_display.m_showGridGuide;
@@ -300,8 +292,6 @@ void CEditorPreferencesPage_ViewportGeneral::InitializeSettings()
m_display.m_showBBoxes = (ds->GetRenderFlags() & RENDER_FLAG_BBOX) == RENDER_FLAG_BBOX;
m_display.m_drawEntityLabels = gSettings.viewports.bDrawEntityLabels;
m_display.m_showTriggerBounds = gSettings.viewports.bShowTriggerBounds;
- m_display.m_showIcons = gSettings.viewports.bShowIcons;
- m_display.m_distanceScaleIcons = gSettings.viewports.bDistanceScaleIcons;
m_display.m_showFrozenHelpers = gSettings.viewports.nShowFrozenHelpers;
m_display.m_fillSelectedShapes = gSettings.viewports.bFillSelectedShapes;
m_display.m_showGridGuide = gSettings.viewports.bShowGridGuide;
diff --git a/Code/Editor/EditorPreferencesPageViewportGeneral.h b/Code/Editor/EditorPreferencesPageViewportGeneral.h
index be89cc6df4..2d2a207d6c 100644
--- a/Code/Editor/EditorPreferencesPageViewportGeneral.h
+++ b/Code/Editor/EditorPreferencesPageViewportGeneral.h
@@ -62,8 +62,6 @@ private:
bool m_showBBoxes;
bool m_drawEntityLabels;
bool m_showTriggerBounds;
- bool m_showIcons;
- bool m_distanceScaleIcons;
bool m_showFrozenHelpers;
bool m_fillSelectedShapes;
bool m_showGridGuide;
diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp
index 754ea84544..7314908580 100644
--- a/Code/Editor/EditorViewportWidget.cpp
+++ b/Code/Editor/EditorViewportWidget.cpp
@@ -89,6 +89,7 @@
#include
// Atom
+#include
#include
#include
#include
@@ -454,9 +455,6 @@ void EditorViewportWidget::Update()
// Render
{
- // TODO: Move out this logic to a controller and refactor to work with Atom
- ProcessRenderLisneters(m_displayContext);
-
m_displayContext.Flush2D();
// Post Render Callback
@@ -585,11 +583,12 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
case eNotify_OnCloseScene:
m_renderViewport->SetScene(nullptr);
- SetDefaultCamera();
break;
- case eNotify_OnEndSceneOpen:
+ case eNotify_OnEndLoad:
+ case eNotify_OnEndCreate:
UpdateScene();
+ SetDefaultCamera();
break;
case eNotify_OnBeginNewScene:
@@ -1030,8 +1029,6 @@ void EditorViewportWidget::OnTitleMenu(QMenu* menu)
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Safe Frame"), &gSettings.viewports.bShowSafeFrame);
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Construction Plane"), &gSettings.snap.constructPlaneDisplay);
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Trigger Bounds"), &gSettings.viewports.bShowTriggerBounds);
- AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Icons"), &gSettings.viewports.bShowIcons, &gSettings.viewports.bShowSizeBasedIcons);
- AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Size-based Icons"), &gSettings.viewports.bShowSizeBasedIcons, &gSettings.viewports.bShowIcons);
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Helpers of Frozen Objects"), &gSettings.viewports.nShowFrozenHelpers);
if (!m_predefinedAspectRatios.IsEmpty())
@@ -2329,7 +2326,26 @@ void EditorViewportWidget::UpdateScene()
{
AZ::RPI::SceneNotificationBus::Handler::BusDisconnect();
m_renderViewport->SetScene(mainScene);
- AZ::RPI::SceneNotificationBus::Handler::BusConnect(m_renderViewport->GetViewportContext()->GetRenderScene()->GetId());
+ auto viewportContext = m_renderViewport->GetViewportContext();
+ AZ::RPI::SceneNotificationBus::Handler::BusConnect(viewportContext->GetRenderScene()->GetId());
+
+ // Don't enable the render pipeline until a level has been loaded
+ // Also show/hide the RenderViewportWidget accordingly so that we get the
+ // expected gradient background when no level is loaded
+ auto renderPipeline = viewportContext->GetCurrentPipeline();
+ if (renderPipeline)
+ {
+ if (GetIEditor()->IsLevelLoaded())
+ {
+ m_renderViewport->show();
+ renderPipeline->AddToRenderTick();
+ }
+ else
+ {
+ m_renderViewport->hide();
+ renderPipeline->RemoveFromRenderTick();
+ }
+ }
}
}
}
diff --git a/Code/Editor/ErrorRecorder.h b/Code/Editor/ErrorRecorder.h
index beacc3f0e5..9a0bad7d91 100644
--- a/Code/Editor/ErrorRecorder.h
+++ b/Code/Editor/ErrorRecorder.h
@@ -14,7 +14,7 @@
#define CRYINCLUDE_EDITOR_CORE_ERRORRECORDER_H
#pragma once
-#include "Include/EditorCoreAPI.h"
+#include
//////////////////////////////////////////////////////////////////////////
//! Automatic class to record and display error.
diff --git a/Code/Editor/ErrorReport.h b/Code/Editor/ErrorReport.h
index 98d230e383..a80bb36404 100644
--- a/Code/Editor/ErrorReport.h
+++ b/Code/Editor/ErrorReport.h
@@ -17,9 +17,6 @@
// forward declarations.
class CParticleItem;
-#include
-#include
-
#include "Objects/BaseObject.h"
#include "Include/EditorCoreAPI.h"
#include "Include/IErrorReport.h"
diff --git a/Code/Editor/GameEngine.cpp b/Code/Editor/GameEngine.cpp
index db4c587f54..200c48ab81 100644
--- a/Code/Editor/GameEngine.cpp
+++ b/Code/Editor/GameEngine.cpp
@@ -18,6 +18,7 @@
// AzCore
#include
#include
+#include
#include
#include
@@ -42,8 +43,6 @@
#include "ViewManager.h"
#include "AnimationContext.h"
-#include "UndoViewPosition.h"
-#include "UndoViewRotation.h"
#include "MainWindow.h"
#include "Include/IObjectManager.h"
#include "ActionManager.h"
@@ -490,7 +489,7 @@ bool CGameEngine::LoadLevel(
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
diff --git a/Code/Editor/GameExporter.cpp b/Code/Editor/GameExporter.cpp
index a768861b90..32429f7f0b 100644
--- a/Code/Editor/GameExporter.cpp
+++ b/Code/Editor/GameExporter.cpp
@@ -100,7 +100,7 @@ bool CGameExporter::Export(unsigned int flags, [[maybe_unused]] EEndian eExportE
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (usePrefabSystemForLevels)
{
@@ -317,8 +317,8 @@ void CGameExporter::ExportLevelInfo(const QString& path)
root->setAttr("Name", levelName.toUtf8().data());
auto terrain = AzFramework::Terrain::TerrainDataRequestBus::FindFirstHandler();
const AZ::Aabb terrainAabb = terrain ? terrain->GetTerrainAabb() : AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero());
- const AZ::Vector2 terrainGridResolution = terrain ? terrain->GetTerrainHeightQueryResolution() : AZ::Vector2::CreateOne();
- const int compiledHeightmapSize = static_cast(terrainAabb.GetXExtent() / terrainGridResolution.GetX());
+ const float terrainGridResolution = terrain ? terrain->GetTerrainHeightQueryResolution() : 1.0f;
+ const int compiledHeightmapSize = static_cast(terrainAabb.GetXExtent() / terrainGridResolution);
root->setAttr("HeightmapSize", compiledHeightmapSize);
//////////////////////////////////////////////////////////////////////////
diff --git a/Code/Editor/GameExporter.h b/Code/Editor/GameExporter.h
index ee4e8df3d9..1ecd2403f2 100644
--- a/Code/Editor/GameExporter.h
+++ b/Code/Editor/GameExporter.h
@@ -70,7 +70,7 @@ private:
{
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (usePrefabSystemForLevels)
{
AZ_Assert(false, "Level.pak should no longer be used when prefabs are used for levels.");
diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h
index c91ca62c5e..0de08445b4 100644
--- a/Code/Editor/IEditor.h
+++ b/Code/Editor/IEditor.h
@@ -19,8 +19,6 @@
#include "Util/UndoUtil.h"
#include
-#include
-
#include
#include
@@ -48,11 +46,9 @@ class ICommandManager;
class CEditorCommandManager;
class CHyperGraphManager;
class CConsoleSynchronization;
-class CUIEnumsDatabase;
struct ISourceControl;
struct IEditorClassFactory;
struct ITransformManipulator;
-class IFacialEditor;
class CDialog;
#if defined(AZ_PLATFORM_WINDOWS)
class C3DConnexionDriver;
@@ -67,15 +63,9 @@ struct SEditorSettings;
class CGameExporter;
class IAWSResourceManager;
-namespace WinWidget
-{
- class WinWidgetManager;
-}
-
struct ISystem;
struct IRenderer;
struct AABB;
-struct IEventLoopHook;
struct IErrorReport; // Vladimir@conffx
struct IFileUtil; // Vladimir@conffx
struct IEditorLog; // Vladimir@conffx
@@ -324,17 +314,6 @@ enum MouseCallbackFlags
MK_CALLBACK_FLAGS = 0x100
};
-//! Types of database items
-enum EDataBaseItemType
-{
- EDB_TYPE_MATERIAL,
- EDB_TYPE_PARTICLE,
- EDB_TYPE_MUSIC,
- EDB_TYPE_EAXPRESET,
- EDB_TYPE_SOUNDMOOD,
- EDB_TYPE_FLARE
-};
-
enum EEditorPathName
{
EDITOR_PATH_OBJECTS,
@@ -529,11 +508,6 @@ struct IEditor
virtual void SetActiveView(CViewport* viewport) = 0;
virtual struct IEditorFileMonitor* GetFileMonitor() = 0;
- // These are needed for Qt integration:
- virtual void RegisterEventLoopHook(IEventLoopHook* pHook) = 0;
- virtual void UnregisterEventLoopHook(IEventLoopHook* pHook) = 0;
- // ^^^
-
//! QMimeData is used by the Qt clipboard.
//! IMPORTANT: Any QMimeData allocated for the clipboard will be deleted
//! when the editor exists. If a QMimeData is allocated by a different
@@ -598,10 +572,6 @@ struct IEditor
virtual bool SetViewFocus(const char* sViewClassName) = 0;
virtual void CloseView(const GUID& classId) = 0; // close ALL panels related to classId, used when unloading plugins.
- // We want to open a view object but not wrap it in a view pane)
- virtual QWidget* OpenWinWidget(WinWidgetId openId) = 0;
- virtual WinWidget::WinWidgetManager* GetWinWidgetManager() const = 0;
-
//! Opens standard color selection dialog.
//! Initialized with the color specified in color parameter.
//! Returns true if selection is made and false if selection is canceled.
@@ -683,15 +653,10 @@ struct IEditor
//! Only returns true if source control is both available AND currently connected and functioning
virtual bool IsSourceControlConnected() = 0;
- virtual CUIEnumsDatabase* GetUIEnumsDatabase() = 0;
- virtual void AddUIEnums() = 0;
virtual void ReduceMemory() = 0;
//! Export manager for exporting objects and a terrain from the game to DCC tools
virtual IExportManager* GetExportManager() = 0;
- //! Set current configuration spec of the editor.
- virtual void SetEditorConfigSpec(ESystemConfigSpec spec, ESystemConfigPlatform platform) = 0;
- virtual ESystemConfigSpec GetEditorConfigSpec() const = 0;
virtual ESystemConfigPlatform GetEditorConfigPlatform() const = 0;
virtual void ReloadTemplates() = 0;
virtual void ShowStatusText(bool bEnable) = 0;
diff --git a/Code/Editor/IEditorImpl.cpp b/Code/Editor/IEditorImpl.cpp
index 38006c6fca..b6a4209948 100644
--- a/Code/Editor/IEditorImpl.cpp
+++ b/Code/Editor/IEditorImpl.cpp
@@ -12,16 +12,11 @@
#include "EditorDefs.h"
#include "IEditorImpl.h"
+#include
// Qt
#include
-// AWS Native SDK
-AZ_PUSH_DISABLE_WARNING(4251 4355 4996, "-Wunknown-warning-option")
-#include
-#include
-AZ_POP_DISABLE_WARNING
-
// AzCore
#include
#include
@@ -56,7 +51,6 @@ AZ_POP_DISABLE_WARNING
#include "GameEngine.h"
#include "ToolBox.h"
#include "MainWindow.h"
-#include "UIEnumsDatabase.h"
#include "RenderHelpers/AxisHelper.h"
#include "Settings.h"
#include "Include/IObjectManager.h"
@@ -75,12 +69,6 @@ AZ_POP_DISABLE_WARNING
#include "Editor/AzAssetBrowser/AzAssetBrowserRequestHandler.h"
#include "Editor/AssetEditor/AssetEditorRequestsHandler.h"
-// EditorCommon
-#include
-
-// AWSNativeSDK
-#include
-
#include "Core/QtEditorApplication.h" // for Editor::EditorQtApplication
static CCryEditDoc * theDocument;
@@ -127,12 +115,10 @@ CEditorImpl::CEditorImpl()
, m_pErrorsDlg(nullptr)
, m_pSourceControl(nullptr)
, m_pSelectionTreeManager(nullptr)
- , m_pUIEnumsDatabase(nullptr)
, m_pConsoleSync(nullptr)
, m_pSettingsManager(nullptr)
, m_pLevelIndependentFileMan(nullptr)
, m_pExportManager(nullptr)
- , m_awsResourceManager(nullptr)
, m_bMatEditMode(false)
, m_bShowStatusText(true)
, m_bInitialized(false)
@@ -158,7 +144,6 @@ CEditorImpl::CEditorImpl()
regCtx.pCommandManager = m_pCommandManager;
regCtx.pClassFactory = m_pClassFactory;
m_pEditorFileMonitor.reset(new CEditorFileMonitor());
- m_pUIEnumsDatabase = new CUIEnumsDatabase;
m_pDisplaySettings = new CDisplaySettings;
m_pDisplaySettings->LoadRegistry();
m_pPluginManager = new CPluginManager;
@@ -177,8 +162,6 @@ CEditorImpl::CEditorImpl()
DetectVersion();
RegisterTools();
- m_winWidgetManager.reset(new WinWidget::WinWidgetManager);
-
m_pAssetDatabaseLocationListener = nullptr;
m_pAssetBrowserRequestHandler = nullptr;
m_assetEditorRequestsHandler = nullptr;
@@ -312,7 +295,6 @@ CEditorImpl::~CEditorImpl()
SAFE_DELETE(m_pCommandManager)
SAFE_DELETE(m_pClassFactory)
SAFE_DELETE(m_pLasLoadedLevelErrorReport)
- SAFE_DELETE(m_pUIEnumsDatabase)
SAFE_DELETE(m_pSettingsManager);
@@ -807,16 +789,6 @@ IEditorFileMonitor* CEditorImpl::GetFileMonitor()
return m_pEditorFileMonitor.get();
}
-void CEditorImpl::RegisterEventLoopHook(IEventLoopHook* pHook)
-{
- CCryEditApp::instance()->RegisterEventLoopHook(pHook);
-}
-
-void CEditorImpl::UnregisterEventLoopHook(IEventLoopHook* pHook)
-{
- CCryEditApp::instance()->UnregisterEventLoopHook(pHook);
-}
-
float CEditorImpl::GetTerrainElevation(float x, float y)
{
float terrainElevation = AzFramework::Terrain::TerrainDataRequests::GetDefaultTerrainHeight();
@@ -847,20 +819,6 @@ const QtViewPane* CEditorImpl::OpenView(QString sViewClassName, bool reuseOpened
return QtViewPaneManager::instance()->OpenPane(sViewClassName, openMode);
}
-QWidget* CEditorImpl::OpenWinWidget(WinWidgetId openId)
-{
- if (m_winWidgetManager)
- {
- return m_winWidgetManager->OpenWinWidget(openId);
- }
- return nullptr;
-}
-
-WinWidget::WinWidgetManager* CEditorImpl::GetWinWidgetManager() const
-{
- return m_winWidgetManager.get();
-}
-
QWidget* CEditorImpl::FindView(QString viewClassName)
{
return QtViewPaneManager::instance()->GetView(viewClassName);
@@ -1501,48 +1459,6 @@ IExportManager* CEditorImpl::GetExportManager()
return m_pExportManager;
}
-void CEditorImpl::AddUIEnums()
-{
- // Spec settings for shadow casting lights
- AZStd::string SpecString[4];
- QStringList types;
- types.push_back("Never=0");
- SpecString[0] = AZStd::string::format("VeryHigh Spec=%d", CONFIG_VERYHIGH_SPEC);
- types.push_back(SpecString[0].c_str());
- SpecString[1] = AZStd::string::format("High Spec=%d", CONFIG_HIGH_SPEC);
- types.push_back(SpecString[1].c_str());
- SpecString[2] = AZStd::string::format("Medium Spec=%d", CONFIG_MEDIUM_SPEC);
- types.push_back(SpecString[2].c_str());
- SpecString[3] = AZStd::string::format("Low Spec=%d", CONFIG_LOW_SPEC);
- types.push_back(SpecString[3].c_str());
- m_pUIEnumsDatabase->SetEnumStrings("CastShadows", types);
-
- // Power-of-two percentages
- AZStd::string percentStringPOT[5];
- types.clear();
- percentStringPOT[0] = AZStd::string::format("Default=%d", 0);
- types.push_back(percentStringPOT[0].c_str());
- percentStringPOT[1] = AZStd::string::format("12.5=%d", 1);
- types.push_back(percentStringPOT[1].c_str());
- percentStringPOT[2] = AZStd::string::format("25=%d", 2);
- types.push_back(percentStringPOT[2].c_str());
- percentStringPOT[3] = AZStd::string::format("50=%d", 3);
- types.push_back(percentStringPOT[3].c_str());
- percentStringPOT[4] = AZStd::string::format("100=%d", 4);
- types.push_back(percentStringPOT[4].c_str());
- m_pUIEnumsDatabase->SetEnumStrings("ShadowMinResPercent", types);
-}
-
-void CEditorImpl::SetEditorConfigSpec(ESystemConfigSpec spec, [[maybe_unused]]ESystemConfigPlatform platform)
-{
- gSettings.editorConfigSpec = spec;
-}
-
-ESystemConfigSpec CEditorImpl::GetEditorConfigSpec() const
-{
- return (ESystemConfigSpec)gSettings.editorConfigSpec;
-}
-
ESystemConfigPlatform CEditorImpl::GetEditorConfigPlatform() const
{
return m_pSystem->GetConfigPlatform();
diff --git a/Code/Editor/IEditorImpl.h b/Code/Editor/IEditorImpl.h
index 7867912941..73fcec917d 100644
--- a/Code/Editor/IEditorImpl.h
+++ b/Code/Editor/IEditorImpl.h
@@ -53,11 +53,6 @@ namespace Editor
class EditorQtApplication;
}
-namespace WinWidget
-{
- class WinWidgetManager;
-}
-
namespace AssetDatabase
{
class AssetDatabaseLocationListener;
@@ -160,8 +155,6 @@ public:
CMusicManager* GetMusicManager() override { return m_pMusicManager; };
IEditorFileMonitor* GetFileMonitor() override;
- void RegisterEventLoopHook(IEventLoopHook* pHook) override;
- void UnregisterEventLoopHook(IEventLoopHook* pHook) override;
IIconManager* GetIconManager() override;
float GetTerrainElevation(float x, float y) override;
Editor::EditorQtApplication* GetEditorQtApplication() override { return m_QtApplication; }
@@ -221,9 +214,6 @@ public:
bool CloseView(const char* sViewClassName) override;
bool SetViewFocus(const char* sViewClassName) override;
- QWidget* OpenWinWidget(WinWidgetId openId) override;
- WinWidget::WinWidgetManager* GetWinWidgetManager() const override;
-
// close ALL panels related to classId, used when unloading plugins.
void CloseView(const GUID& classId) override;
bool SelectColor(QColor &color, QWidget *parent = 0) override;
@@ -276,14 +266,9 @@ public:
bool IsSourceControlConnected() override;
//! Setup Material Editor mode
void SetMatEditMode(bool bIsMatEditMode);
- CUIEnumsDatabase* GetUIEnumsDatabase() override { return m_pUIEnumsDatabase; };
- void AddUIEnums() override;
void ReduceMemory() override;
// Get Export manager
IExportManager* GetExportManager() override;
- // Set current configuration spec of the editor.
- void SetEditorConfigSpec(ESystemConfigSpec spec, ESystemConfigPlatform platform) override;
- ESystemConfigSpec GetEditorConfigSpec() const override;
ESystemConfigPlatform GetEditorConfigPlatform() const override;
void ReloadTemplates() override;
void AddErrorMessage(const QString& text, const QString& caption);
@@ -355,7 +340,6 @@ protected:
CSelectionTreeManager* m_pSelectionTreeManager;
- CUIEnumsDatabase* m_pUIEnumsDatabase;
//! CConsole Synchronization
CConsoleSynchronization* m_pConsoleSync;
//! Editor Settings Manager
@@ -369,8 +353,6 @@ protected:
QString m_selectFileBuffer;
QString m_levelNameBuffer;
- IAWSResourceManager* m_awsResourceManager;
- std::unique_ptr m_winWidgetManager;
//! True if the editor is in material edit mode. Fast preview of materials.
//! In this mode only very limited functionality is available.
diff --git a/Code/Editor/IObservable.h b/Code/Editor/IObservable.h
deleted file mode 100644
index 9de78a7bc1..0000000000
--- a/Code/Editor/IObservable.h
+++ /dev/null
@@ -1,20 +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
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_IOBSERVABLE_H
-#define CRYINCLUDE_EDITOR_IOBSERVABLE_H
-#pragma once
-
-//! Observable macro to be used in pure interfaces
-#define DEFINE_OBSERVABLE_PURE_METHODS(observerClassName) \
- virtual bool RegisterObserver(observerClassName * pObserver) = 0; \
- virtual bool UnregisterObserver(observerClassName * pObserver) = 0; \
- virtual void UnregisterAllObservers() = 0;
-
-#endif // CRYINCLUDE_EDITOR_IOBSERVABLE_H
diff --git a/Code/Editor/Include/IConsoleConnectivity.h b/Code/Editor/Include/IConsoleConnectivity.h
deleted file mode 100644
index 0f5e9bf35c..0000000000
--- a/Code/Editor/Include/IConsoleConnectivity.h
+++ /dev/null
@@ -1,85 +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
- *
- */
-
-
-// Description : Standard interface for console connectivity plugins.
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_ICONSOLECONNECTIVITY_H
-#define CRYINCLUDE_EDITOR_INCLUDE_ICONSOLECONNECTIVITY_H
-#pragma once
-
-
-//////////////////////////////////////////////////////////////////////////
-// Description
-// This interface provide access to the console connectivity
-// functionality.
-//////////////////////////////////////////////////////////////////////////
-struct IConsoleConnectivity
- : public IUnknown
-{
- DEFINE_UUID(0x4DAA85E1, 0x8498, 0x402f, 0x9B, 0x85, 0x7F, 0x62, 0x9D, 0x76, 0x79, 0x8A);
-
- //////////////////////////////////////////////////////////////////////////
- //TODO: Must add the useful interface here.
- //////////////////////////////////////////////////////////////////////////
-
- // Description:
- // Checks if a development console is connected to the development PC.
- // See Also:
- // Arguments:
- // Nothing
- // Return:
- // bool - true if it is connected, false otherwise.
- virtual bool IsConnectedToConsole() = 0;
-
- // Description:
- // Send a file from the specified local filename to the console platform creating the full path
- // as required so it can copy to the remote filename.
- // See Also:
- // Nothing
- // Arguments:
- // szLocalFileName - is the local filename from which you want to copy the file.
- // szRemoteFilename - is the full path and filename to where you want to copy the file.
- // Return:
- // bool - true if the copy succeeded, false otherwise.
- virtual bool SendFile(const char* szLocalFileName, const char* szRemoteFilename) = 0;
-
- // Description:
- // Notifies to the console that a file has been changed, typically uploaded.
- // This will be usually called after a SendFile (see above) call, so that the
- // system running on the console may decide what to do with this new file.
- // Typically the system will have to load or reloads this new file.
- // See Also:
- // SendFile
- // Arguments:
- // szRemoteFilename - is the full path and filename in the console of the changed
- // file.
- // Return:
- // bool - true if succeeded sending the notification, false otherwise.
- virtual bool NotifyFileChange(const char* szRemoteFilename) = 0;
-
-
- // Description:
- // Gets the the title IP for the connected console .
- // Arguments:
- // dwConsoleAddressPlaceholder - is the pointer to the placeholder of the variable
- // which will contain the title IP of the console.
- // Return:
- // bool - true if dwConsoleAddressPlaceholder now contains the IP address, else false.
- virtual bool GetConsoleAddress(DWORD* dwConsoleAddressPlaceholder) = 0;
- //////////////////////////////////////////////////////////////////////////
- // IUnknown
- //////////////////////////////////////////////////////////////////////////
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) { return E_NOINTERFACE; };
- virtual ULONG STDMETHODCALLTYPE AddRef() { return 0; };
- virtual ULONG STDMETHODCALLTYPE Release() { return 0; };
- //////////////////////////////////////////////////////////////////////////
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_ICONSOLECONNECTIVITY_H
diff --git a/Code/Editor/Include/IEditorClassFactory.h b/Code/Editor/Include/IEditorClassFactory.h
index 6c85192436..82422799cf 100644
--- a/Code/Editor/Include/IEditorClassFactory.h
+++ b/Code/Editor/Include/IEditorClassFactory.h
@@ -135,9 +135,6 @@ struct IClassDesc
//////////////////////////////////////////////////////////////////////////
};
-
-struct IViewPaneClass;
-
struct CRYEDIT_API IEditorClassFactory
{
public:
@@ -149,7 +146,6 @@ public:
virtual IClassDesc* FindClass(const char* pClassName) const = 0;
//! Find class in the factory by class id
virtual IClassDesc* FindClass(const GUID& rClassID) const = 0;
- virtual IViewPaneClass* FindViewPaneClassByTitle(const char* pPaneTitle) const = 0;
virtual void UnregisterClass(const char* pClassName) = 0;
virtual void UnregisterClass(const GUID& rClassID) = 0;
//! Get classes that matching specific requirements.
diff --git a/Code/Editor/Include/IEventLoopHook.h b/Code/Editor/Include/IEventLoopHook.h
deleted file mode 100644
index eaf7bf2d62..0000000000
--- a/Code/Editor/Include/IEventLoopHook.h
+++ /dev/null
@@ -1,24 +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
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IEVENTLOOPHOOK_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IEVENTLOOPHOOK_H
-#pragma once
-
-struct IEventLoopHook
-{
- IEventLoopHook* pNextHook;
-
- IEventLoopHook()
- : pNextHook(0) {}
-
- virtual bool PrePumpMessage() { return false; }
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IEVENTLOOPHOOK_H
diff --git a/Code/Editor/Include/IFacialEditor.h b/Code/Editor/Include/IFacialEditor.h
deleted file mode 100644
index 5dfa9ab03f..0000000000
--- a/Code/Editor/Include/IFacialEditor.h
+++ /dev/null
@@ -1,43 +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
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IFACIALEDITOR_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IFACIALEDITOR_H
-#pragma once
-
-
-class IFacialEditor
-{
-public:
- enum EyeType
- {
- EYE_LEFT,
- EYE_RIGHT
- };
-
- virtual int GetNumMorphTargets() const = 0;
- virtual const char* GetMorphTargetName(int index) const = 0;
- virtual void PreviewEffector(int index, float value) = 0;
- virtual void ClearAllPreviewEffectors() = 0;
- virtual void SetForcedNeckRotation(const Quat& rotation) = 0;
- virtual void SetForcedEyeRotation(const Quat& rotation, EyeType eye) = 0;
- virtual int GetJoystickCount() const = 0;
- virtual const char* GetJoystickName(int joystickIndex) const = 0;
- virtual void SetJoystickPosition(int joystickIndex, float x, float y) = 0;
- virtual void GetJoystickPosition(int joystickIndex, float& x, float& y) const = 0;
- virtual void LoadJoystickFile(const char* filename) = 0;
- virtual void LoadCharacter(const char* filename) = 0;
- virtual void LoadSequence(const char* filename) = 0;
- virtual void SetVideoFrameResolution(int width, int height, int bpp) = 0;
- virtual int GetVideoFramePitch() = 0;
- virtual void* GetVideoFrameBits() = 0;
- virtual void ShowVideoFramePane() = 0;
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IFACIALEDITOR_H
diff --git a/Code/Editor/Include/IRenderListener.h b/Code/Editor/Include/IRenderListener.h
deleted file mode 100644
index 892a42b701..0000000000
--- a/Code/Editor/Include/IRenderListener.h
+++ /dev/null
@@ -1,29 +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
- *
- */
-
-
-// Description : Interface for rendering custom 3D elements in the main
-// render viewport. Particularly usefull for debug geometries.
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IRENDERLISTENER_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IRENDERLISTENER_H
-#pragma once
-
-
-struct DisplayContext;
-
-struct IRenderListener
- : public IUnknown
-{
- DEFINE_UUID(0x8D52F857, 0x1027, 0x4346, 0xAC, 0x7B, 0xF6, 0x20, 0xDA, 0x7C, 0xCE, 0x42)
-
- virtual void Render(DisplayContext& rDisplayContext) = 0;
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IRENDERLISTENER_H
diff --git a/Code/Editor/Include/ITextureDatabaseUpdater.h b/Code/Editor/Include/ITextureDatabaseUpdater.h
deleted file mode 100644
index 4482135b47..0000000000
--- a/Code/Editor/Include/ITextureDatabaseUpdater.h
+++ /dev/null
@@ -1,38 +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
- *
- */
-
-
-// Description : This file declares the interface used by the texture viewer
-// and (implemented first implemented by the Texture Database Creator) to
-// syncronize their threads. A thread interace could be useful there.
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_ITEXTUREDATABASEUPDATER_H
-#define CRYINCLUDE_EDITOR_INCLUDE_ITEXTUREDATABASEUPDATER_H
-#pragma once
-
-
-class CTextureDatabaseItem;
-
-struct ITextureDatabaseUpdater
-{
-public:
- //////////////////////////////////////////////////////////////////////////
- // Thread control
- virtual void NotifyShutDown() = 0;
- virtual void Lock() = 0;
- virtual void Unlock() = 0;
- virtual void WaitForThread() = 0;
- //////////////////////////////////////////////////////////////////////////
-
- //////////////////////////////////////////////////////////////////////////
- // Data access
- virtual CTextureDatabaseItem* GetItem(const char* szAddItem) = 0;
- //////////////////////////////////////////////////////////////////////////
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_ITEXTUREDATABASEUPDATER_H
diff --git a/Code/Editor/Include/IViewPane.h b/Code/Editor/Include/IViewPane.h
deleted file mode 100644
index f2425fb954..0000000000
--- a/Code/Editor/Include/IViewPane.h
+++ /dev/null
@@ -1,74 +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
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IVIEWPANE_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IVIEWPANE_H
-#pragma once
-
-#include "IEditorClassFactory.h"
-
-#include
-
-class QWidget;
-class QRect;
-
-struct IViewPaneClass
- : public IClassDesc
-{
- DEFINE_UUID(0x7E13EC7C, 0xF621, 0x4aeb, 0xB6, 0x42, 0x67, 0xD7, 0x8E, 0xD4, 0x68, 0xF8)
-
- enum EDockingDirection
- {
- DOCK_TOP,
- DOCK_LEFT,
- DOCK_RIGHT,
- DOCK_BOTTOM,
- DOCK_FLOAT,
- };
-
- virtual ~IViewPaneClass() = default;
-
- // Return text for view pane title.
- virtual QString GetPaneTitle() = 0;
-
- // Return the string resource ID for the title's text.
- virtual unsigned int GetPaneTitleID() const = 0;
-
- // Return preferable initial docking position for pane.
- virtual EDockingDirection GetDockingDirection() = 0;
-
- // Initial pane size.
- virtual QRect GetPaneRect() = 0;
-
- // Get Minimal view size
- virtual QSize GetMinSize() { return QSize(0, 0); }
-
- // Return true if only one pane at a time of time view class can be created.
- virtual bool SinglePane() = 0;
-
- // Return true if the view window wants to get ID_IDLE_UPDATE commands.
- virtual bool WantIdleUpdate() = 0;
-
- //////////////////////////////////////////////////////////////////////////
- // IUnknown
- //////////////////////////////////////////////////////////////////////////
- HRESULT STDMETHODCALLTYPE QueryInterface(const IID& riid, void** ppvObj)
- {
- if (riid == __az_uuidof(IViewPaneClass))
- {
- *ppvObj = this;
- return S_OK;
- }
- return E_NOINTERFACE;
- }
- //////////////////////////////////////////////////////////////////////////
-
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IVIEWPANE_H
diff --git a/Code/Editor/Include/SandboxAPI.h b/Code/Editor/Include/SandboxAPI.h
index 4e0cafea4a..757b799837 100644
--- a/Code/Editor/Include/SandboxAPI.h
+++ b/Code/Editor/Include/SandboxAPI.h
@@ -21,7 +21,7 @@
#endif
#if defined(SANDBOX_IMPORTS) && defined(SANDBOX_EXPORTS)
-#error SANDBOX_EXPORTS and SANDBOX_IMPORTS can't be defined at the same time
+#error SANDBOX_EXPORTS and SANDBOX_IMPORTS cannot be defined at the same time
#endif
#if defined(SANDBOX_EXPORTS)
diff --git a/Code/Editor/Launcher/editor_launcher.rc b/Code/Editor/Launcher/editor_launcher.rc
deleted file mode 100644
index 26dad7a3da..0000000000
--- a/Code/Editor/Launcher/editor_launcher.rc
+++ /dev/null
@@ -1,2 +0,0 @@
-IDI_ICON1 ICON DISCARDABLE "..\\res\\lyeditor.ico"
-
diff --git a/Code/Editor/Lib/Tests/IEditorMock.h b/Code/Editor/Lib/Tests/IEditorMock.h
index aaee34c2c6..780362cb30 100644
--- a/Code/Editor/Lib/Tests/IEditorMock.h
+++ b/Code/Editor/Lib/Tests/IEditorMock.h
@@ -97,8 +97,6 @@ public:
MOCK_METHOD0(GetActiveView, class CViewport* ());
MOCK_METHOD1(SetActiveView, void(CViewport*));
MOCK_METHOD0(GetFileMonitor, struct IEditorFileMonitor* ());
- MOCK_METHOD1(RegisterEventLoopHook, void(IEventLoopHook* ));
- MOCK_METHOD1(UnregisterEventLoopHook, void(IEventLoopHook* ));
MOCK_CONST_METHOD0(CreateQMimeData, QMimeData* ());
MOCK_CONST_METHOD1(DestroyQMimeData, void(QMimeData*));
MOCK_METHOD0(GetLevelIndependentFileMan, class CLevelIndependentFileMan* ());
@@ -128,8 +126,6 @@ public:
MOCK_METHOD1(CloseView, bool(const char* ));
MOCK_METHOD1(SetViewFocus, bool(const char* ));
MOCK_METHOD1(CloseView, void(const GUID& ));
- MOCK_METHOD1(OpenWinWidget, QWidget* (WinWidgetId ));
- MOCK_CONST_METHOD0(GetWinWidgetManager, WinWidget::WinWidgetManager* ());
MOCK_METHOD2(SelectColor, bool(QColor &, QWidget *));
MOCK_METHOD0(GetUndoManager, class CUndoManager* ());
MOCK_METHOD0(BeginUndo, void());
@@ -167,12 +163,8 @@ public:
MOCK_METHOD0(GetSourceControl, ISourceControl* ());
MOCK_METHOD0(IsSourceControlAvailable, bool());
MOCK_METHOD0(IsSourceControlConnected, bool());
- MOCK_METHOD0(GetUIEnumsDatabase, CUIEnumsDatabase* ());
- MOCK_METHOD0(AddUIEnums, void());
MOCK_METHOD0(ReduceMemory, void());
MOCK_METHOD0(GetExportManager, IExportManager* ());
- MOCK_METHOD2(SetEditorConfigSpec, void(ESystemConfigSpec , ESystemConfigPlatform ));
- MOCK_CONST_METHOD0(GetEditorConfigSpec, ESystemConfigSpec());
MOCK_CONST_METHOD0(GetEditorConfigPlatform, ESystemConfigPlatform());
MOCK_METHOD0(ReloadTemplates, void());
MOCK_METHOD1(ShowStatusText, void(bool ));
diff --git a/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp b/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp
index 5246fcdee5..1d9b26dbbc 100644
--- a/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp
+++ b/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp
@@ -66,9 +66,7 @@ namespace CryEditPythonBindingsUnitTests
EXPECT_TRUE(behaviorContext->m_methods.find("set_current_view_position") != behaviorContext->m_methods.end());
EXPECT_TRUE(behaviorContext->m_methods.find("set_current_view_rotation") != behaviorContext->m_methods.end());
EXPECT_TRUE(behaviorContext->m_methods.find("export_to_engine") != behaviorContext->m_methods.end());
- EXPECT_TRUE(behaviorContext->m_methods.find("set_config_spec") != behaviorContext->m_methods.end());
EXPECT_TRUE(behaviorContext->m_methods.find("get_config_platform") != behaviorContext->m_methods.end());
- EXPECT_TRUE(behaviorContext->m_methods.find("get_config_spec") != behaviorContext->m_methods.end());
EXPECT_TRUE(behaviorContext->m_methods.find("set_result_to_success") != behaviorContext->m_methods.end());
EXPECT_TRUE(behaviorContext->m_methods.find("set_result_to_failure") != behaviorContext->m_methods.end());
EXPECT_TRUE(behaviorContext->m_methods.find("idle_enable") != behaviorContext->m_methods.end());
diff --git a/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp b/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp
index fd65634d4e..b73cb039ea 100644
--- a/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp
+++ b/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp
@@ -35,6 +35,11 @@ namespace DisplaySettingsPythonBindingsUnitTests
m_app.Start(appDesc);
m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsPythonFuncsHandler::CreateDescriptor());
+
+ // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
+ // in the unit tests.
+ AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
}
void TearDown() override
diff --git a/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp b/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp
index 49b65f7ffc..0c5e221d21 100644
--- a/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp
+++ b/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp
@@ -25,7 +25,6 @@
#include
#include
#include
-#include
#include
#include "IEditorMock.h"
diff --git a/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp b/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp
index 67d89ad967..5009c626e2 100644
--- a/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp
+++ b/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp
@@ -47,12 +47,12 @@ namespace UnitTest
void ViewportMouseCursorRequestImpl::BeginCursorCapture()
{
- m_inputChannelMapper->SetCursorCaptureEnabled(true);
+ m_inputChannelMapper->SetCursorMode(AzToolsFramework::CursorInputMode::CursorModeCaptured);
}
void ViewportMouseCursorRequestImpl::EndCursorCapture()
{
- m_inputChannelMapper->SetCursorCaptureEnabled(false);
+ m_inputChannelMapper->SetCursorMode(AzToolsFramework::CursorInputMode::CursorModeNone);
}
bool ViewportMouseCursorRequestImpl::IsMouseOver() const
diff --git a/Code/Editor/MainWindow.cpp b/Code/Editor/MainWindow.cpp
index bbebac96a3..a1f054b57f 100644
--- a/Code/Editor/MainWindow.cpp
+++ b/Code/Editor/MainWindow.cpp
@@ -11,11 +11,6 @@
#include
-// AWs Native SDK
-AZ_PUSH_DISABLE_WARNING(4251 4355 4996, "-Wunknown-warning-option")
-#include
-AZ_POP_DISABLE_WARNING
-
// Qt
#include
#include
@@ -77,7 +72,6 @@ AZ_POP_DISABLE_WARNING
#include "ToolbarManager.h"
#include "Core/QtEditorApplication.h"
#include "UndoDropDown.h"
-#include "CVarMenu.h"
#include "EditorViewportSettings.h"
#include "KeyboardCustomizationSettings.h"
@@ -665,7 +659,7 @@ void MainWindow::InitActions()
bool usePrefabSystemForLevels = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
- usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
+ usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (!usePrefabSystemForLevels)
{
am->AddAction(ID_FILE_EXPORTTOGAMENOSURFACETEXTURE, tr("&Export to Engine"))
diff --git a/Code/Editor/MainWindow.h b/Code/Editor/MainWindow.h
index 1e375b08f2..9759dadade 100644
--- a/Code/Editor/MainWindow.h
+++ b/Code/Editor/MainWindow.h
@@ -49,7 +49,6 @@ class ToolbarCustomizationDialog;
class QWidgetAction;
class ActionManager;
class ShortcutDispatcher;
-class CVarMenu;
namespace AzQtComponents
{
@@ -64,11 +63,11 @@ namespace AzToolsFramework
//! @name Reverse URLs.
//! Used to identify common actions and override them when necessary.
//@{
- constexpr inline AZ::Crc32 EditModeMove = AZ_CRC_CE("com.o3de.action.editor.editmode.move");
- constexpr inline AZ::Crc32 EditModeRotate = AZ_CRC_CE("com.o3de.action.editor.editmode.rotate");
- constexpr inline AZ::Crc32 EditModeScale = AZ_CRC_CE("com.o3de.action.editor.editmode.scale");
- constexpr inline AZ::Crc32 SnapToGrid = AZ_CRC_CE("com.o3de.action.editor.snaptogrid");
- constexpr inline AZ::Crc32 SnapAngle = AZ_CRC_CE("com.o3de.action.editor.snapangle");
+ constexpr inline AZ::Crc32 EditModeMove = AZ_CRC_CE("org.o3de.action.editor.editmode.move");
+ constexpr inline AZ::Crc32 EditModeRotate = AZ_CRC_CE("org.o3de.action.editor.editmode.rotate");
+ constexpr inline AZ::Crc32 EditModeScale = AZ_CRC_CE("org.o3de.action.editor.editmode.scale");
+ constexpr inline AZ::Crc32 SnapToGrid = AZ_CRC_CE("org.o3de.action.editor.snaptogrid");
+ constexpr inline AZ::Crc32 SnapAngle = AZ_CRC_CE("org.o3de.action.editor.snapangle");
//@}
}
diff --git a/Code/Editor/MainWindow.qrc b/Code/Editor/MainWindow.qrc
index 4506a4a2a8..57afc596bb 100644
--- a/Code/Editor/MainWindow.qrc
+++ b/Code/Editor/MainWindow.qrc
@@ -154,37 +154,6 @@
res/error_report_warning.svg
res/error_report_comment.svg
res/error_report_helper.svg
- particles_tree_00.png
- particles_tree_01.png
- particles_tree_02.png
- particles_tree_03.png
- particles_tree_04.png
- particles_tree_05.png
- particles_tree_06.png
- particles_tree_07.png
- arhitype_tree_00.png
- arhitype_tree_01.png
- arhitype_tree_02.png
- arhitype_tree_03.png
- water.png
- bmp00005_00.png
- bmp00005_01.png
- bmp00005_02.png
- bmp00005_03.png
- bmp00005_04.png
- bmp00005_05.png
- bmp00005_06.png
- bmp00005_07.png
- bmp00005_08.png
- bmp00005_09.png
- bmp00006_00.png
- bmp00006_01.png
- bmp00006_02.png
- bmp00006_03.png
- bmp00006_04.png
- bmp00006_05.png
- bmp00006_06.png
- bmp00006_07.png
res/arr_addkey.cur
diff --git a/Code/Editor/NewLevelDialog.cpp b/Code/Editor/NewLevelDialog.cpp
index c773acdb6f..b22d9dbaf3 100644
--- a/Code/Editor/NewLevelDialog.cpp
+++ b/Code/Editor/NewLevelDialog.cpp
@@ -18,9 +18,6 @@
#include
#include
-// Editor
-#include "NewTerrainDialog.h"
-
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
#include
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
@@ -115,7 +112,6 @@ CNewLevelDialog::~CNewLevelDialog()
void CNewLevelDialog::OnStartup()
{
UpdateData(false);
- setFocus();
}
void CNewLevelDialog::UpdateData(bool fromUi)
diff --git a/Code/Editor/NewLevelDialog.ui b/Code/Editor/NewLevelDialog.ui
index 14227fbb53..93a88dc897 100644
--- a/Code/Editor/NewLevelDialog.ui
+++ b/Code/Editor/NewLevelDialog.ui
@@ -133,6 +133,9 @@
1
+
+ LEVEL
+
diff --git a/Code/Editor/NewTerrainDialog.cpp b/Code/Editor/NewTerrainDialog.cpp
deleted file mode 100644
index 0e66482eb4..0000000000
--- a/Code/Editor/NewTerrainDialog.cpp
+++ /dev/null
@@ -1,168 +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
- *
- */
-// NewTerrainDialog.cpp : implementation file
-//
-
-#include "EditorDefs.h"
-
-#include "NewTerrainDialog.h"
-
-
-AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option")
-#include
-AZ_POP_DISABLE_WARNING
-
-
-
-CNewTerrainDialog::CNewTerrainDialog(QWidget* pParent /*=nullptr*/)
- : QDialog(pParent)
- , m_terrainResolutionIndex(0)
- , m_terrainUnitsIndex(0)
- , m_bUpdate(false)
- , ui(new Ui::CNewTerrainDialog)
- , m_initialized(false)
-{
- ui->setupUi(this);
-
- setWindowTitle(tr("Terrain options"));
-
- // Default is 1024x1024, and m_terrainResolution holds an index to the combo box
- m_terrainResolutionIndex = 3;
-
- connect(ui->TERRAIN_RESOLUTION, SIGNAL(activated(int)), this, SLOT(OnComboBoxSelectionTerrainResolution()));
- connect(ui->TERRAIN_UNITS, SIGNAL(activated(int)), this, SLOT(OnComboBoxSelectionTerrainUnits()));
-}
-
-
-CNewTerrainDialog::~CNewTerrainDialog()
-{
-}
-
-
-void CNewTerrainDialog::UpdateData(bool fromUi)
-{
- if (fromUi)
- {
- m_terrainResolutionIndex = ui->TERRAIN_RESOLUTION->currentIndex();
- m_terrainUnitsIndex = ui->TERRAIN_UNITS->currentIndex();
- }
- else
- {
- ui->TERRAIN_RESOLUTION->setCurrentIndex(m_terrainResolutionIndex);
- ui->TERRAIN_UNITS->setCurrentIndex(m_terrainUnitsIndex);
- }
-}
-
-
-void CNewTerrainDialog::OnInitDialog()
-{
- // Initialize terrain values.
- int resolution = Ui::START_TERRAIN_RESOLUTION;
-
- // Fill terrain resolution combo box
- for (int i = 0; i < 6; i++)
- {
- ui->TERRAIN_RESOLUTION->addItem(QString("%1x%1").arg(resolution));
- resolution *= 2;
- }
-
- UpdateTerrainUnits();
- UpdateTerrainInfo();
-
- // Save data.
- UpdateData(false);
-}
-
-
-void CNewTerrainDialog::UpdateTerrainUnits()
-{
- uint32 terrainRes = GetTerrainResolution();
- int size = terrainRes * GetTerrainUnits();
- int maxUnit = IntegerLog2(Ui::MAXIMUM_TERRAIN_RESOLUTION / terrainRes);
- int units = Ui::START_TERRAIN_UNITS;
-
- ui->TERRAIN_UNITS->clear();
- for (int i = 0; i <= maxUnit; i++)
- {
- ui->TERRAIN_UNITS->addItem(QString::number(units));
- units *= 2;
- }
- if (size > Ui::MAXIMUM_TERRAIN_RESOLUTION)
- {
- m_terrainUnitsIndex = 0;
- }
- ui->TERRAIN_UNITS->setCurrentText(QString::number(m_terrainUnitsIndex));
-}
-
-
-void CNewTerrainDialog::UpdateTerrainInfo()
-{
- int sizeX = GetTerrainResolution() * GetTerrainUnits();
- int sizeY = GetTerrainResolution() * GetTerrainUnits();
-
- QString str;
- if (sizeX >= 1000)
- {
- str = tr("Terrain Size: %1 x %2 Kilometers").arg((float)sizeX / 1000.0f, 0, 'f', 3).arg((float)sizeY / 1000.0f, 0, 'f', 3);
- }
- else if (sizeX > 0)
- {
- str = tr("Terrain Size: %1 x %2 Meters").arg(sizeX).arg(sizeY);
- }
- else
- {
- str = tr("Level will have no terrain");
- }
-
- ui->TERRAIN_INFO->setText(str);
-}
-
-
-int CNewTerrainDialog::GetTerrainResolution() const
-{
- // convert combo box index into resolution value
- return Ui::START_TERRAIN_RESOLUTION * (1 << m_terrainResolutionIndex);
-}
-
-
-int CNewTerrainDialog::GetTerrainUnits() const
-{
- // convert combo box index into units value
- return Ui::START_TERRAIN_UNITS * (1 << m_terrainUnitsIndex);
-}
-
-
-void CNewTerrainDialog::OnComboBoxSelectionTerrainResolution()
-{
- UpdateData();
-
- UpdateTerrainUnits();
-
- UpdateTerrainInfo();
-}
-
-
-void CNewTerrainDialog::OnComboBoxSelectionTerrainUnits()
-{
- UpdateData();
-
- UpdateTerrainInfo();
-}
-
-
-void CNewTerrainDialog::showEvent(QShowEvent* event)
-{
- if (!m_initialized)
- {
- OnInitDialog();
- m_initialized = true;
- }
- QDialog::showEvent(event);
-}
-
-#include
diff --git a/Code/Editor/NewTerrainDialog.h b/Code/Editor/NewTerrainDialog.h
deleted file mode 100644
index 8905a8c123..0000000000
--- a/Code/Editor/NewTerrainDialog.h
+++ /dev/null
@@ -1,71 +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
- *
- */
-#pragma once
-#ifndef CRYINCLUDE_EDITOR_NEWTERRAINDIALOG_H
-#define CRYINCLUDE_EDITOR_NEWTERRAINDIALOG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-
-#include
-
-#include
-#endif
-
-namespace Ui
-{
- class CNewTerrainDialog;
-
- enum TerrainDialogConstants
- {
- START_TERRAIN_RESOLUTION_POWER_OF_TWO = 7,
- START_TERRAIN_RESOLUTION = 1 << START_TERRAIN_RESOLUTION_POWER_OF_TWO,
- MAXIMUM_TERRAIN_POWER_OF_TWO = 16,
- MAXIMUM_TERRAIN_RESOLUTION = 1 << MAXIMUM_TERRAIN_POWER_OF_TWO,
- POWER_OFFSET = (MAXIMUM_TERRAIN_POWER_OF_TWO - START_TERRAIN_RESOLUTION_POWER_OF_TWO),
- START_TERRAIN_UNITS = 1
- };
-}
-
-class CNewTerrainDialog
- : public QDialog
-{
- Q_OBJECT
-
-public:
- CNewTerrainDialog(QWidget* pParent = nullptr); // standard constructor
- ~CNewTerrainDialog();
-
- int GetTerrainResolution() const;
- int GetTerrainUnits() const;
-
- void IsResize(bool bIsResize);
-
-
-protected:
- void UpdateData(bool fromUi = true);
- void OnInitDialog();
-
- void UpdateTerrainUnits();
- void UpdateTerrainInfo();
-
- void showEvent(QShowEvent* event) override;
-
-protected slots:
- void OnComboBoxSelectionTerrainResolution();
- void OnComboBoxSelectionTerrainUnits();
-
-public:
- int m_terrainResolutionIndex;
- int m_terrainUnitsIndex;
- bool m_bUpdate;
-
- QScopedPointer ui;
- bool m_initialized;
-};
-#endif // CRYINCLUDE_EDITOR_NEWTERRAINDIALOG_H
diff --git a/Code/Editor/NewTerrainDialog.ui b/Code/Editor/NewTerrainDialog.ui
deleted file mode 100644
index 977db11918..0000000000
--- a/Code/Editor/NewTerrainDialog.ui
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
- CNewTerrainDialog
-
-
-
- 0
- 0
- 292
- 160
-
-
-
- false
-
-
- -
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
- -
-
-
-
- QFormLayout::AllNonFixedFieldsGrow
-
-
-
-
-
- Heightmap Resolution:
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
- TERRAIN_RESOLUTION
-
-
-
- -
-
-
- -
-
-
- Meters Per Texel:
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
- TERRAIN_UNITS
-
-
-
- -
-
-
- -
-
-
- Terrain Size: 32x32 Km
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
-
-
-
-
-
-
-
-
- buttonBox
- accepted()
- CNewTerrainDialog
- accept()
-
-
- 164
- 176
-
-
- 169
- 1
-
-
-
-
- buttonBox
- rejected()
- CNewTerrainDialog
- reject()
-
-
- 245
- 172
-
-
- 247
- -1
-
-
-
-
-
diff --git a/Code/Editor/Objects/BaseObject.cpp b/Code/Editor/Objects/BaseObject.cpp
index 86840789dd..1497f2440a 100644
--- a/Code/Editor/Objects/BaseObject.cpp
+++ b/Code/Editor/Objects/BaseObject.cpp
@@ -36,12 +36,6 @@
// To use the Andrew's algorithm in order to make convex hull from the points, this header is needed.
#include "Util/GeometryUtil.h"
-namespace {
- QColor kLinkColorParent = QColor(0, 255, 255);
- QColor kLinkColorChild = QColor(0, 0, 255);
- QColor kLinkColorGray = QColor(128, 128, 128);
-}
-
extern CObjectManager* g_pObjectManager;
//////////////////////////////////////////////////////////////////////////
@@ -68,7 +62,7 @@ protected:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
-//! Undo object for CBaseObject that only stores its transform, color, area and minSpec
+//! Undo object for CBaseObject that only stores its transform, color, area
class CUndoBaseObjectMinimal
: public IUndoObject
{
@@ -90,7 +84,6 @@ private:
Vec3 scale;
QColor color;
float area;
- int minSpec;
};
void SetTransformsFromState(CBaseObject* pObject, const StateStruct& state, bool bUndo);
@@ -259,7 +252,6 @@ CUndoBaseObjectMinimal::CUndoBaseObjectMinimal(CBaseObject* pObj, [[maybe_unused
m_undoState.scale = pObj->GetScale();
m_undoState.color = pObj->GetColor();
m_undoState.area = pObj->GetArea();
- m_undoState.minSpec = pObj->GetMinSpec();
}
//////////////////////////////////////////////////////////////////////////
@@ -290,14 +282,12 @@ void CUndoBaseObjectMinimal::Undo(bool bUndo)
m_redoState.rotate = pObject->GetRotation();
m_redoState.color = pObject->GetColor();
m_redoState.area = pObject->GetArea();
- m_redoState.minSpec = pObject->GetMinSpec();
}
SetTransformsFromState(pObject, m_undoState, bUndo);
pObject->ChangeColor(m_undoState.color);
pObject->SetArea(m_undoState.area);
- pObject->SetMinSpec(m_undoState.minSpec, false);
using namespace AzToolsFramework;
ComponentEntityObjectRequestBus::Event(pObject, &ComponentEntityObjectRequestBus::Events::UpdatePreemptiveUndoCache);
@@ -316,7 +306,6 @@ void CUndoBaseObjectMinimal::Redo()
pObject->ChangeColor(m_redoState.color);
pObject->SetArea(m_redoState.area);
- pObject->SetMinSpec(m_redoState.minSpec, false);
using namespace AzToolsFramework;
ComponentEntityObjectRequestBus::Event(pObject, &ComponentEntityObjectRequestBus::Events::UpdatePreemptiveUndoCache);
@@ -388,7 +377,6 @@ CBaseObject::CBaseObject()
, m_bMatrixInWorldSpace(false)
, m_bMatrixValid(false)
, m_bWorldBoxValid(false)
- , m_nMinSpec(0)
, m_vDrawIconPos(0, 0, 0)
, m_nIconFlags(0)
{
@@ -419,7 +407,6 @@ bool CBaseObject::Init([[maybe_unused]] IEditor* ie, CBaseObject* prev, [[maybe_
SetLocalTM(prev->GetPos(), prev->GetRotation(), prev->GetScale());
SetArea(prev->GetArea());
SetColor(prev->GetColor());
- SetMinSpec(prev->GetMinSpec(), false);
// Copy all basic variables.
EnableUpdateCallbacks(false);
@@ -761,72 +748,6 @@ void CBaseObject::SetModified(bool)
{
}
-void CBaseObject::DrawDefault(DisplayContext& dc, const QColor& labelColor)
-{
- Vec3 wp = GetWorldPos();
-
- bool bDisplaySelectionHelper = false;
- if (!CanBeDrawn(dc, bDisplaySelectionHelper))
- {
- return;
- }
-
- // Draw link between parent and child.
- if (dc.flags & DISPLAY_LINKS)
- {
- if (GetParent())
- {
- dc.DrawLine(GetParentAttachPointWorldTM().GetTranslation(), wp, IsFrozen() ? kLinkColorGray : kLinkColorParent, IsFrozen() ? kLinkColorGray : kLinkColorChild);
- }
- size_t nChildCount = GetChildCount();
- for (size_t i = 0; i < nChildCount; ++i)
- {
- const CBaseObject* pChild = GetChild(i);
- dc.DrawLine(pChild->GetParentAttachPointWorldTM().GetTranslation(), pChild->GetWorldPos(), pChild->IsFrozen() ? kLinkColorGray : kLinkColorParent, pChild->IsFrozen() ? kLinkColorGray : kLinkColorChild);
- }
- }
-
- // Draw Bounding box
- if (dc.flags & DISPLAY_BBOX)
- {
- AABB box;
- GetBoundBox(box);
- dc.SetColor(Vec3(1, 1, 1));
- dc.DrawWireBox(box.min, box.max);
- }
-
- if (IsHighlighted())
- {
- DrawHighlight(dc);
- }
-
- if (IsSelected())
- {
- DrawArea(dc);
-
- CSelectionGroup* pSelection = GetObjectManager()->GetSelection();
-
- // If the number of selected object is over 2, the merged boundbox should be used to render the measurement axis.
- if (!pSelection || (pSelection && pSelection->GetCount() == 1))
- {
- DrawDimensions(dc);
- }
- }
-
- if (bDisplaySelectionHelper)
- {
- DrawSelectionHelper(dc, wp, labelColor, 1.0f);
- }
- else if (!(dc.flags & DISPLAY_HIDENAMES))
- {
- DrawLabel(dc, wp, labelColor);
- }
-
- SetDrawTextureIconProperties(dc, wp);
- DrawTextureIcon(dc, wp);
- DrawWarningIcons(dc, wp);
-}
-
//////////////////////////////////////////////////////////////////////////
void CBaseObject::DrawDimensions(DisplayContext&, AABB*)
{
@@ -850,91 +771,6 @@ void CBaseObject::DrawSelectionHelper(DisplayContext& dc, const Vec3& pos, const
dc.SetState(nPrevState);
}
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::SetDrawTextureIconProperties(DisplayContext& dc, const Vec3& pos, float alpha, int texIconFlags)
-{
- if (gSettings.viewports.bShowIcons || gSettings.viewports.bShowSizeBasedIcons)
- {
- if (IsHighlighted())
- {
- dc.SetColor(QColor(255, 120, 0), 0.8f * alpha);
- }
- else if (IsSelected())
- {
- dc.SetSelectedColor(alpha);
- }
- else if (IsFrozen())
- {
- dc.SetFreezeColor();
- }
- else
- {
- dc.SetColor(QColor(255, 255, 255), alpha);
- }
-
- m_vDrawIconPos = pos;
-
- int nIconFlags = texIconFlags;
- if (CheckFlags(OBJFLAG_SHOW_ICONONTOP))
- {
- Vec3 objectPos = GetWorldPos();
-
- AABB box;
- GetBoundBox(box);
- m_vDrawIconPos.z = (m_vDrawIconPos.z - objectPos.z) + box.max.z;
- nIconFlags |= DisplayContext::TEXICON_ALIGN_BOTTOM;
- }
- m_nIconFlags = nIconFlags;
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::DrawTextureIcon(DisplayContext& dc, [[maybe_unused]] const Vec3& pos, [[maybe_unused]] float alpha)
-{
- if (m_nTextureIcon && (gSettings.viewports.bShowIcons || gSettings.viewports.bShowSizeBasedIcons))
- {
- dc.DrawTextureLabel(GetTextureIconDrawPos(), OBJECT_TEXTURE_ICON_SIZEX, OBJECT_TEXTURE_ICON_SIZEY, GetTextureIcon(), GetTextureIconFlags());
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::DrawWarningIcons(DisplayContext& dc, const Vec3&)
-{
- if (gSettings.viewports.bShowIcons || gSettings.viewports.bShowSizeBasedIcons)
- {
- const int warningIconSizeX = OBJECT_TEXTURE_ICON_SIZEX / 2;
- const int warningIconSizeY = OBJECT_TEXTURE_ICON_SIZEY / 2;
-
- const int iconOffsetX = m_nTextureIcon ? (-OBJECT_TEXTURE_ICON_SIZEX / 2) : 0;
- const int iconOffsetY = m_nTextureIcon ? (-OBJECT_TEXTURE_ICON_SIZEY / 2) : 0;
-
- if (gSettings.viewports.bShowScaleWarnings)
- {
- const EScaleWarningLevel scaleWarningLevel = GetScaleWarningLevel();
-
- if (scaleWarningLevel != eScaleWarningLevel_None)
- {
- dc.SetColor(QColor(255, scaleWarningLevel == eScaleWarningLevel_RescaledNonUniform ? 50 : 255, 50), 1.0f);
- dc.DrawTextureLabel(GetTextureIconDrawPos(), warningIconSizeX, warningIconSizeY,
- GetIEditor()->GetIconManager()->GetIconTexture(eIcon_ScaleWarning), GetTextureIconFlags(),
- -warningIconSizeX / 2, iconOffsetX - (warningIconSizeY / 2));
- }
- }
-
- if (gSettings.viewports.bShowRotationWarnings)
- {
- const ERotationWarningLevel rotationWarningLevel = GetRotationWarningLevel();
- if (rotationWarningLevel != eRotationWarningLevel_None)
- {
- dc.SetColor(QColor(255, rotationWarningLevel == eRotationWarningLevel_RotatedNonRectangular ? 50 : 255, 50), 1.0f);
- dc.DrawTextureLabel(GetTextureIconDrawPos(), warningIconSizeX, warningIconSizeY,
- GetIEditor()->GetIconManager()->GetIconTexture(eIcon_RotationWarning), GetTextureIconFlags(),
- warningIconSizeX / 2, iconOffsetY - (warningIconSizeY / 2));
- }
- }
- }
-}
-
//////////////////////////////////////////////////////////////////////////
void CBaseObject::DrawLabel(DisplayContext& dc, const Vec3& pos, const QColor& lC, float alpha, float size)
{
@@ -1210,17 +1046,6 @@ void CBaseObject::SetSelected(bool bSelect)
}
}
-//////////////////////////////////////////////////////////////////////////
-bool CBaseObject::IsHiddenBySpec() const
-{
- if (!gSettings.bApplyConfigSpecInEditor)
- {
- return false;
- }
-
- return (m_nMinSpec != 0 && gSettings.editorConfigSpec != 0 && m_nMinSpec > static_cast(gSettings.editorConfigSpec));
-}
-
//////////////////////////////////////////////////////////////////////////
//! Returns true if object hidden.
bool CBaseObject::IsHidden() const
@@ -1264,7 +1089,6 @@ void CBaseObject::Serialize(CObjectArchive& ar)
Vec3 scale = m_scale;
Quat quat = m_rotate;
Ang3 angles(0, 0, 0);
- uint32 nMinSpec = m_nMinSpec;
QColor color = m_color;
float flattenArea = m_flattenArea;
@@ -1292,12 +1116,6 @@ void CBaseObject::Serialize(CObjectArchive& ar)
xmlNode->getAttr("Parent", parentId);
xmlNode->getAttr("LookAt", lookatId);
xmlNode->getAttr("Material", mtlName);
- xmlNode->getAttr("MinSpec", nMinSpec);
-
- if (nMinSpec <= CONFIG_VERYHIGH_SPEC) // Ignore invalid values.
- {
- m_nMinSpec = nMinSpec;
- }
bool bHidden = flags & OBJFLAG_HIDDEN;
bool bFrozen = flags & OBJFLAG_FROZEN;
@@ -1402,11 +1220,6 @@ void CBaseObject::Serialize(CObjectArchive& ar)
{
xmlNode->setAttr("Flags", flags);
}
-
- if (m_nMinSpec != 0)
- {
- xmlNode->setAttr("MinSpec", (uint32)m_nMinSpec);
- }
}
// Serialize variables after default entity parameters.
@@ -1457,11 +1270,6 @@ XmlNodeRef CBaseObject::Export([[maybe_unused]] const QString& levelPath, XmlNod
objNode->setAttr("Scale", scale);
}
- if (m_nMinSpec != 0)
- {
- objNode->setAttr("MinSpec", (uint32)m_nMinSpec);
- }
-
// Save variables.
CVarObject::Serialize(objNode, false);
@@ -2291,22 +2099,6 @@ bool CBaseObject::IsSimilarObject(CBaseObject* pObject)
return false;
}
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::SetMinSpec(uint32 nSpec, bool bSetChildren)
-{
- m_nMinSpec = nSpec;
- UpdateVisibility(!IsHidden());
-
- // Set min spec for all childs.
- if (bSetChildren)
- {
- for (int i = static_cast(m_childs.size()) - 1; i >= 0; --i)
- {
- m_childs[i]->SetMinSpec(nSpec, true);
- }
- }
-}
-
//////////////////////////////////////////////////////////////////////////
EScaleWarningLevel CBaseObject::GetScaleWarningLevel() const
{
diff --git a/Code/Editor/Objects/BaseObject.h b/Code/Editor/Objects/BaseObject.h
index f78755e81d..aa748bade4 100644
--- a/Code/Editor/Objects/BaseObject.h
+++ b/Code/Editor/Objects/BaseObject.h
@@ -31,7 +31,6 @@ class CUndoBaseObject;
class CObjectManager;
class CGizmo;
class CObjectArchive;
-struct SSubObjSelectionModifyContext;
struct SRayHitInfo;
class CPopupMenuItem;
class QMenu;
@@ -257,8 +256,6 @@ public:
//! Returns true if object hidden.
bool IsHidden() const;
- //! Check against min spec.
- bool IsHiddenBySpec() const;
//! Returns true if object frozen.
virtual bool IsFrozen() const;
//! Returns true if object is shared between missions.
@@ -398,9 +395,6 @@ public:
// Interface to be implemented in plugins.
//////////////////////////////////////////////////////////////////////////
- //! Draw object to specified viewport.
- virtual void Display([[maybe_unused]] DisplayContext& disp) {}
-
//! Perform intersection testing of this object.
//! Return true if was hit.
virtual bool HitTest([[maybe_unused]] HitContext& hc) { return false; };
@@ -469,12 +463,6 @@ public:
//! Check if specified object is very similar to this one.
virtual bool IsSimilarObject(CBaseObject* pObject);
- //////////////////////////////////////////////////////////////////////////
- // Object minimal usage spec (All/Low/Medium/High)
- //////////////////////////////////////////////////////////////////////////
- uint32 GetMinSpec() const { return m_nMinSpec; }
- virtual void SetMinSpec(uint32 nSpec, bool bSetChildren = true);
-
//! In This function variables of the object must be initialized.
virtual void InitVariables() {};
@@ -529,8 +517,6 @@ protected:
void ResolveParent(CBaseObject* object);
void SetColor(const QColor& color);
- //! Draw default object items.
- virtual void DrawDefault(DisplayContext& dc, const QColor& labelColor = QColor(255, 255, 255));
//! Draw object label.
void DrawLabel(DisplayContext& dc, const Vec3& pos, const QColor& labelColor = QColor(255, 255, 255), float alpha = 1.0f, float size = 1.f);
//! Draw 3D Axis at object position.
@@ -539,10 +525,6 @@ protected:
void DrawArea(DisplayContext& dc);
//! Draw selection helper.
void DrawSelectionHelper(DisplayContext& dc, const Vec3& pos, const QColor& labelColor = QColor(255, 255, 255), float alpha = 1.0f);
- //! Draw helper icon.
- virtual void DrawTextureIcon(DisplayContext& dc, const Vec3& pos, float alpha = 1.0f);
- //! Draw warning icons
- virtual void DrawWarningIcons(DisplayContext& dc, const Vec3& pos);
//! Check if dimension's figures can be displayed before draw them.
virtual void DrawDimensions(DisplayContext& dc, AABB* pMergedBoundBox = nullptr);
@@ -575,7 +557,6 @@ protected:
//! Only used by ObjectManager.
bool IsPotentiallyVisible() const;
- void SetDrawTextureIconProperties(DisplayContext& dc, const Vec3& pos, float alpha = 1.0f, int texIconFlags = 0);
const Vec3& GetTextureIconDrawPos(){ return m_vDrawIconPos; };
int GetTextureIconFlags(){ return m_nIconFlags; };
@@ -679,7 +660,6 @@ private:
mutable uint32 m_bMatrixValid : 1;
mutable uint32 m_bWorldBoxValid : 1;
uint32 m_bInSelectionBox : 1;
- uint32 m_nMinSpec : 8;
Vec3 m_vDrawIconPos;
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
diff --git a/Code/Editor/Objects/EntityObject.cpp b/Code/Editor/Objects/EntityObject.cpp
index 86512377c6..0d70d47d7d 100644
--- a/Code/Editor/Objects/EntityObject.cpp
+++ b/Code/Editor/Objects/EntityObject.cpp
@@ -200,7 +200,6 @@ CEntityObject::CEntityObject()
// Init Variables.
mv_castShadow = true;
- mv_castShadowMinSpec = CONFIG_LOW_SPEC;
mv_outdoor = false;
mv_recvWind = false;
mv_renderNearest = false;
@@ -249,18 +248,10 @@ CEntityObject::~CEntityObject()
//////////////////////////////////////////////////////////////////////////
void CEntityObject::InitVariables()
{
- mv_castShadowMinSpec.AddEnumItem("Never", END_CONFIG_SPEC_ENUM);
- mv_castShadowMinSpec.AddEnumItem("Low", CONFIG_LOW_SPEC);
- mv_castShadowMinSpec.AddEnumItem("Medium", CONFIG_MEDIUM_SPEC);
- mv_castShadowMinSpec.AddEnumItem("High", CONFIG_HIGH_SPEC);
- mv_castShadowMinSpec.AddEnumItem("VeryHigh", CONFIG_VERYHIGH_SPEC);
-
mv_castShadow.SetFlags(mv_castShadow.GetFlags() | IVariable::UI_INVISIBLE);
- mv_castShadowMinSpec->SetFlags(mv_castShadowMinSpec->GetFlags() | IVariable::UI_UNSORTED);
AddVariable(mv_outdoor, "OutdoorOnly", tr("Outdoor Only"));
AddVariable(mv_castShadow, "CastShadow", tr("Cast Shadow"));
- AddVariable(mv_castShadowMinSpec, "CastShadowMinspec", tr("Cast Shadow MinSpec"));
AddVariable(mv_ratioLOD, "LodRatio");
AddVariable(mv_viewDistanceMultiplier, "ViewDistanceMultiplier");
@@ -361,7 +352,6 @@ bool CEntityObject::ConvertFromObject(CBaseObject* object)
CEntityObject* pObject = ( CEntityObject* )object;
mv_outdoor = pObject->mv_outdoor;
- mv_castShadowMinSpec = pObject->mv_castShadowMinSpec;
mv_ratioLOD = pObject->mv_ratioLOD;
mv_viewDistanceMultiplier = pObject->mv_viewDistanceMultiplier;
mv_hiddenInGame = pObject->mv_hiddenInGame;
@@ -509,34 +499,16 @@ void CEntityObject::AdjustLightProperties(CVarBlockPtr& properties, const char*
pAreaLight->SetHumanName("PlanarLight");
}
- bool bCastShadowLegacy = false; // Backward compatibility for existing shadow casting lights
if (IVariable* pCastShadowVarLegacy = FindVariableInSubBlock(properties, pSubBlockVar, "bCastShadow"))
{
pCastShadowVarLegacy->SetFlags(pCastShadowVarLegacy->GetFlags() | IVariable::UI_INVISIBLE);
const QString zeroPrefix("0");
if (!pCastShadowVarLegacy->GetDisplayValue().startsWith(zeroPrefix))
{
- bCastShadowLegacy = true;
pCastShadowVarLegacy->SetDisplayValue(zeroPrefix);
}
}
- if (IVariable* pCastShadowVar = FindVariableInSubBlock(properties, pSubBlockVar, "nCastShadows"))
- {
- if (bCastShadowLegacy)
- {
- pCastShadowVar->SetDisplayValue("1");
- }
- pCastShadowVar->SetDataType(IVariable::DT_UIENUM);
- pCastShadowVar->SetFlags(pCastShadowVar->GetFlags() | IVariable::UI_UNSORTED);
- }
-
- if (IVariable* pShadowMinRes = FindVariableInSubBlock(properties, pSubBlockVar, "nShadowMinResPercent"))
- {
- pShadowMinRes->SetDataType(IVariable::DT_UIENUM);
- pShadowMinRes->SetFlags(pShadowMinRes->GetFlags() | IVariable::UI_UNSORTED);
- }
-
if (IVariable* pFade = FindVariableInSubBlock(properties, pSubBlockVar, "vFadeDimensionsLeft"))
{
pFade->SetFlags(pFade->GetFlags() | IVariable::UI_INVISIBLE);
@@ -873,12 +845,6 @@ void CEntityObject::Serialize(CObjectArchive& ar)
RemoveAllEntityLinks();
PostLoad(ar);
}
-
- if ((mv_castShadowMinSpec == CONFIG_LOW_SPEC) && !mv_castShadow) // backwards compatibility check
- {
- mv_castShadowMinSpec = END_CONFIG_SPEC_ENUM;
- mv_castShadow = true;
- }
}
else
{
@@ -1033,8 +999,6 @@ XmlNodeRef CEntityObject::Export([[maybe_unused]] const QString& levelPath, XmlN
objNode->setAttr("ViewDistanceMultiplier", mv_viewDistanceMultiplier);
}
- objNode->setAttr("CastShadowMinSpec", mv_castShadowMinSpec);
-
if (mv_recvWind)
{
objNode->setAttr("RecvWind", true);
@@ -1050,11 +1014,6 @@ XmlNodeRef CEntityObject::Export([[maybe_unused]] const QString& levelPath, XmlN
objNode->setAttr("OutdoorOnly", true);
}
- if (GetMinSpec() != 0)
- {
- objNode->setAttr("MinSpec", ( uint32 )GetMinSpec());
- }
-
if (mv_hiddenInGame)
{
objNode->setAttr("HiddenInGame", true);
@@ -1163,7 +1122,7 @@ void CEntityObject::UpdateVisibility(bool bVisible)
{
CBaseObject::UpdateVisibility(bVisible);
- bool bVisibleWithSpec = bVisible && !IsHiddenBySpec();
+ bool bVisibleWithSpec = bVisible;
if (bVisibleWithSpec != static_cast(m_bVisible))
{
m_bVisible = bVisibleWithSpec;
diff --git a/Code/Editor/Objects/EntityObject.h b/Code/Editor/Objects/EntityObject.h
index c6b7e4ce2d..2e8aeeabc7 100644
--- a/Code/Editor/Objects/EntityObject.h
+++ b/Code/Editor/Objects/EntityObject.h
@@ -174,8 +174,6 @@ public:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
- int GetCastShadowMinSpec() const { return mv_castShadowMinSpec; }
-
float GetRatioLod() const { return static_cast(mv_ratioLOD); };
float GetViewDistanceMultiplier() const { return mv_viewDistanceMultiplier; }
@@ -306,7 +304,6 @@ protected:
//////////////////////////////////////////////////////////////////////////
CVariable mv_outdoor;
CVariable mv_castShadow; // Legacy, required for backwards compatibility
- CSmartVariableEnum mv_castShadowMinSpec;
CVariable mv_ratioLOD;
CVariable mv_viewDistanceMultiplier;
CVariable mv_hiddenInGame; // Entity is hidden in game (on start).
diff --git a/Code/Editor/Objects/SubObjSelection.cpp b/Code/Editor/Objects/SubObjSelection.cpp
deleted file mode 100644
index 3a67b8dfb7..0000000000
--- a/Code/Editor/Objects/SubObjSelection.cpp
+++ /dev/null
@@ -1,62 +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
- *
- */
-
-
-#include "EditorDefs.h"
-
-#include "SubObjSelection.h"
-
-SSubObjSelOptions g_SubObjSelOptions;
-
-/*
-
-//////////////////////////////////////////////////////////////////////////
-bool CSubObjSelContext::IsEmpty() const
-{
- if (GetCount() == 0)
- return false;
- for (int i = 0; i < GetCount(); i++)
- {
- CSubObjectSelection *pSel = GetSelection(i);
- if (!pSel->IsEmpty())
- return true;
- }
- return false;
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CSubObjSelContext::ModifySelection( SSubObjSelectionModifyContext &modCtx )
-{
- for (int n = 0; n < GetCount(); n++)
- {
- CSubObjectSelection *pSel = GetSelection(n);
- if (pSel->IsEmpty())
- continue;
- modCtx.pSubObjSelection = pSel;
- pSel->pGeometry->SubObjSelectionModify( modCtx );
- }
- if (modCtx.type == SO_MODIFY_MOVE)
- {
- OnSelectionChange();
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CSubObjSelContext::AcceptModifySelection()
-{
- for (int n = 0; n < GetCount(); n++)
- {
- CSubObjectSelection *pSel = GetSelection(n);
- if (pSel->IsEmpty())
- continue;
- if (pSel->pGeometry)
- pSel->pGeometry->Update();
- }
-}
-
-*/
diff --git a/Code/Editor/Objects/SubObjSelection.h b/Code/Editor/Objects/SubObjSelection.h
deleted file mode 100644
index 9e07bdc203..0000000000
--- a/Code/Editor/Objects/SubObjSelection.h
+++ /dev/null
@@ -1,91 +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
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_OBJECTS_SUBOBJSELECTION_H
-#define CRYINCLUDE_EDITOR_OBJECTS_SUBOBJSELECTION_H
-#pragma once
-
-//////////////////////////////////////////////////////////////////////////
-// Sub Object element type.
-//////////////////////////////////////////////////////////////////////////
-enum ESubObjElementType
-{
- SO_ELEM_NONE = 0,
- SO_ELEM_VERTEX,
- SO_ELEM_EDGE,
- SO_ELEM_FACE,
- SO_ELEM_POLYGON,
- SO_ELEM_UV,
-};
-
-//////////////////////////////////////////////////////////////////////////
-enum ESubObjDisplayType
-{
- SO_DISPLAY_WIREFRAME,
- SO_DISPLAY_FLAT,
- SO_DISPLAY_GEOMETRY,
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Options for sub-object selection.
-//////////////////////////////////////////////////////////////////////////
-struct SSubObjSelOptions
-{
- bool bSelectByVertex;
- bool bIgnoreBackfacing;
- int nMatID;
-
- bool bSoftSelection;
- float fSoftSelFalloff;
-
- // Display options.
- bool bDisplayBackfacing;
- bool bDisplayNormals;
- float fNormalsLength;
- ESubObjDisplayType displayType;
-
- SSubObjSelOptions()
- {
- bSelectByVertex = false;
- bIgnoreBackfacing = false;
- bSoftSelection = false;
- nMatID = 0;
- fSoftSelFalloff = 1;
-
- bDisplayBackfacing = true;
- bDisplayNormals = false;
- displayType = SO_DISPLAY_FLAT;
- fNormalsLength = 0.4f;
- }
-};
-
-extern SSubObjSelOptions g_SubObjSelOptions;
-
-
-//////////////////////////////////////////////////////////////////////////
-enum ESubObjSelectionModifyType
-{
- SO_MODIFY_UNSELECT,
- SO_MODIFY_MOVE,
- SO_MODIFY_ROTATE,
- SO_MODIFY_SCALE,
-};
-
-//////////////////////////////////////////////////////////////////////////
-// This structure is passed when user is dragging sub object selection.
-//////////////////////////////////////////////////////////////////////////
-struct SSubObjSelectionModifyContext
-{
- CViewport* view;
- ESubObjSelectionModifyType type;
- Vec3 vValue;
- Matrix34 worldRefFrame;
-};
-
-#endif // CRYINCLUDE_EDITOR_OBJECTS_SUBOBJSELECTION_H
diff --git a/Code/Editor/PakManagerDlg.qrc b/Code/Editor/PakManagerDlg.qrc
deleted file mode 100644
index bea8f8aafd..0000000000
--- a/Code/Editor/PakManagerDlg.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- res/pakmanager_file.png
- res/pakmanager_folder.png
-
-
diff --git a/Code/Editor/PakManagerDlg.ui b/Code/Editor/PakManagerDlg.ui
deleted file mode 100644
index 087e5379da..0000000000
--- a/Code/Editor/PakManagerDlg.ui
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
- CPakManagerDlg
-
-
-
- 0
- 0
- 661
- 494
-
-
-
- -
-
-
-
-
-
-
- 0
- 45
-
-
-
- Open PAK...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Create PAK...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Add files...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Add folder...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Extract...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Delete entries
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- &Close
-
-
-
-
-
- -
-
-
-
-
-
- Path:
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- QFrame::Panel
-
-
- QFrame::Sunken
-
-
- <none>
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
-
-
- -
-
-
- QFrame::Box
-
-
- Qt::ScrollBarAlwaysOn
-
-
- QAbstractItemView::NoEditTriggers
-
-
- QAbstractItemView::SelectItems
-
-
- 120
-
-
- false
-
-
-
- Filename
-
-
-
-
- Size
-
-
-
-
- Modified
-
-
-
-
- -
-
-
- Ready
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
- -
-
-
- Qt::AlignCenter
-
-
-
-
-
-
-
-
-
-
diff --git a/Code/Editor/Platform/Common/GCC/editor_lib_gcc.cmake b/Code/Editor/Platform/Common/GCC/editor_lib_gcc.cmake
new file mode 100644
index 0000000000..bc945f55c9
--- /dev/null
+++ b/Code/Editor/Platform/Common/GCC/editor_lib_gcc.cmake
@@ -0,0 +1,9 @@
+#
+# 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
+#
+#
+
+set(LY_COMPILE_OPTIONS PRIVATE -fexceptions)
diff --git a/Code/Editor/Plugin.cpp b/Code/Editor/Plugin.cpp
index 16c386e31c..fd70cc282d 100644
--- a/Code/Editor/Plugin.cpp
+++ b/Code/Editor/Plugin.cpp
@@ -11,9 +11,6 @@
#include "Plugin.h"
-// Editor
-#include "Include/IViewPane.h"
-
#include
CClassFactory* CClassFactory::s_pInstance = nullptr;
@@ -149,23 +146,6 @@ IClassDesc* CClassFactory::FindClass(const GUID& rClassID) const
return pClassDesc;
}
-IViewPaneClass* CClassFactory::FindViewPaneClassByTitle(const char* pPaneTitle) const
-{
- for (size_t i = 0; i < m_classes.size(); i++)
- {
- IViewPaneClass* viewPane = nullptr;
- IClassDesc* desc = m_classes[i];
- if (SUCCEEDED(desc->QueryInterface(__az_uuidof(IViewPaneClass), (void**)&viewPane)))
- {
- if (QString::compare(viewPane->GetPaneTitle(), pPaneTitle) == 0)
- {
- return viewPane;
- }
- }
- }
- return nullptr;
-}
-
void CClassFactory::UnregisterClass(const char* pClassName)
{
IClassDesc* pClassDesc = FindClass(pClassName);
diff --git a/Code/Editor/Plugin.h b/Code/Editor/Plugin.h
index 5fa45ac140..151586070e 100644
--- a/Code/Editor/Plugin.h
+++ b/Code/Editor/Plugin.h
@@ -15,45 +15,6 @@
#include "Util/GuidUtil.h"
#include