Explorar o código

Merging dev latest. Will this fix Jenkins test fails?

Signed-off-by: AMZN-Gene <[email protected]>
AMZN-Gene hai 9 meses
pai
achega
e6535cba67
Modificáronse 100 ficheiros con 1146 adicións e 1771 borrados
  1. 91 0
      .github/ISSUE_TEMPLATE/24.09-bug-report.yml
  2. 19 3
      Assets/Editor/Scripts/TrackView/example.py
  3. 5 3
      AutomatedTesting/Gem/PythonTests/Multiplayer/TestSuite_Main.py
  4. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_arch.material
  5. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_background.material
  6. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_bricks.material
  7. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_ceiling.material
  8. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_chain.material
  9. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_columna.material
  10. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_columnb.material
  11. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_columnc.material
  12. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_curtainblue.material
  13. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_curtaingreen.material
  14. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_curtainred.material
  15. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_details.material
  16. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_fabricblue.material
  17. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_fabricgreen.material
  18. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_fabricred.material
  19. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_flagpole.material
  20. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_floor.material
  21. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_leaf.material
  22. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_lion.material
  23. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_vase.material
  24. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_vasehanging.material
  25. 1 0
      AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_vaseround.material
  26. 62 1
      AutomatedTesting/Levels/Graphics/SilhouetteTest/SilhouetteTest.prefab
  27. 626 0
      AutomatedTesting/ScriptCanvas/Silhouette.scriptcanvas
  28. 4 0
      AutomatedTesting/ShaderLib/scenesrg.srgi
  29. 4 0
      AutomatedTesting/ShaderLib/viewsrg.srgi
  30. 15 0
      Code/Editor/AnimationContext.cpp
  31. 5 3
      Code/Editor/AnimationContext.h
  32. 1 1
      Code/Editor/CMakeLists.txt
  33. 12 0
      Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp
  34. 1 1
      Code/Editor/Controls/SplineCtrlEx.cpp
  35. 6 4
      Code/Editor/Controls/SplineCtrlEx.h
  36. 0 31
      Code/Editor/Core/EditorActionsHandler.cpp
  37. 2 19
      Code/Editor/CryEdit.cpp
  38. 0 10
      Code/Editor/CryEdit.h
  39. 4 0
      Code/Editor/GameEngine.cpp
  40. 1 56
      Code/Editor/IEditor.h
  41. 1 91
      Code/Editor/IEditorImpl.cpp
  42. 0 27
      Code/Editor/IEditorImpl.h
  43. 0 65
      Code/Editor/Include/IImageUtil.h
  44. 0 33
      Code/Editor/Include/ILogFile.h
  45. 1 16
      Code/Editor/Lib/Tests/IEditorMock.h
  46. 0 54
      Code/Editor/LogFileImpl.cpp
  47. 0 34
      Code/Editor/LogFileImpl.h
  48. 0 74
      Code/Editor/LogFile_mac.mm
  49. 0 1
      Code/Editor/Platform/Mac/platform_mac_files.cmake
  50. 1 0
      Code/Editor/Resource.h
  51. 0 6
      Code/Editor/Settings.h
  52. 1 1
      Code/Editor/TrackView/2DBezierKeyUIControls.cpp
  53. 1 1
      Code/Editor/TrackView/AssetBlendKeyUIControls.cpp
  54. 4 4
      Code/Editor/TrackView/AtomOutputFrameCapture.cpp
  55. 1 1
      Code/Editor/TrackView/CaptureKeyUIControls.cpp
  56. 1 1
      Code/Editor/TrackView/CommentKeyUIControls.cpp
  57. 1 1
      Code/Editor/TrackView/ConsoleKeyUIControls.cpp
  58. 1 1
      Code/Editor/TrackView/EventKeyUIControls.cpp
  59. 1 1
      Code/Editor/TrackView/GotoKeyUIControls.cpp
  60. 13 13
      Code/Editor/TrackView/KeyUIControls.h
  61. 1 1
      Code/Editor/TrackView/ScreenFaderKeyUIControls.cpp
  62. 1 1
      Code/Editor/TrackView/SelectKeyUIControls.cpp
  63. 1 1
      Code/Editor/TrackView/SequenceKeyUIControls.cpp
  64. 1 1
      Code/Editor/TrackView/SoundKeyUIControls.cpp
  65. 1 1
      Code/Editor/TrackView/TimeRangeKeyUIControls.cpp
  66. 1 1
      Code/Editor/TrackView/TrackEventKeyUIControls.cpp
  67. 6 2
      Code/Editor/TrackView/TrackViewAnimNode.cpp
  68. 3 3
      Code/Editor/TrackView/TrackViewAnimNode.h
  69. 4 4
      Code/Editor/TrackView/TrackViewDialog.cpp
  70. 10 10
      Code/Editor/TrackView/TrackViewDopeSheetBase.cpp
  71. 30 26
      Code/Editor/TrackView/TrackViewKeyPropertiesDlg.cpp
  72. 4 5
      Code/Editor/TrackView/TrackViewKeyPropertiesDlg.h
  73. 5 3
      Code/Editor/TrackView/TrackViewNode.cpp
  74. 1 1
      Code/Editor/TrackView/TrackViewNode.h
  75. 4 12
      Code/Editor/TrackView/TrackViewNodes.cpp
  76. 9 9
      Code/Editor/TrackView/TrackViewPythonFuncs.cpp
  77. 5 5
      Code/Editor/TrackView/TrackViewSequence.cpp
  78. 2 2
      Code/Editor/TrackView/TrackViewSequence.h
  79. 5 1
      Code/Editor/TrackView/TrackViewSequenceManager.cpp
  80. 2 2
      Code/Editor/TrackView/TrackViewTrack.cpp
  81. 4 4
      Code/Editor/TrackView/TrackViewTrack.h
  82. 85 30
      Code/Editor/TrackViewNewSequenceDialog.cpp
  83. 11 7
      Code/Editor/TrackViewNewSequenceDialog.h
  84. 4 5
      Code/Editor/Undo/Undo.cpp
  85. 1 0
      Code/Editor/Undo/Undo.h
  86. 0 526
      Code/Editor/Util/ImageUtil.cpp
  87. 0 78
      Code/Editor/Util/ImageUtil.h
  88. 0 83
      Code/Editor/Util/ImageUtil_impl.cpp
  89. 0 68
      Code/Editor/Util/ImageUtil_impl.h
  90. 2 3
      Code/Editor/Util/MemoryBlock.cpp
  91. 1 270
      Code/Editor/Viewport.cpp
  92. 0 36
      Code/Editor/Viewport.h
  93. 0 1
      Code/Editor/editor_core_files.cmake
  94. 0 7
      Code/Editor/editor_lib_files.cmake
  95. 2 2
      Code/Editor/splashscreen_background.png
  96. 12 0
      Code/Framework/AzAndroid/CMakeLists.txt
  97. 6 2
      Code/Framework/AzCore/AzCore/Component/Entity.cpp
  98. 4 0
      Code/Framework/AzCore/AzCore/Console/Console.cpp
  99. 10 0
      Code/Framework/AzCore/AzCore/Console/ConsoleTypeHelpers.inl
  100. 1 1
      Code/Framework/AzCore/AzCore/IO/Streamer/FullFileDecompressor.cpp

+ 91 - 0
.github/ISSUE_TEMPLATE/24.09-bug-report.yml

@@ -0,0 +1,91 @@
+name: 24.09 Release Bug Report
+description: Template for submitting a bug for the 24.09 O3DE Release
+title: '24.09 Release - BUG NAME'
+labels: "kind/bug-2409,needs-triage,needs-sig"
+assignees:
+  - Ulrick28
+body:
+- type: textarea
+  id: bug-description
+  attributes:
+    label: Bug Description
+    description: "A clear and concise description of what the bug is. Try to isolate the issue to help 
+    the community to reproduce it easily and increase chances for a fast fix."
+  validations:
+    required: true
+- type: textarea
+  id: assets-required
+  attributes:
+    label: Assets-Required
+    description: "Please provide sample assets needed to reproduce the issue, either as an 
+    [attachment](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/attaching-files) 
+    or as a link to a public asset in Github."
+  validations:
+    required: true
+- type: textarea
+  id: steps-to-reproduce
+  attributes:
+    label: Steps to Reproduce
+    description: "Steps to reproduce the behavior:
+    1. Go to '...'
+    2. Click on '...'
+    3. Select attached asset '...'
+    4. Scroll down to '...'
+    5. See error"
+  validations:
+    required: true
+- type: textarea
+  id: expected-behavior
+  attributes:
+    label: Expected Behavior
+    description: "A clear and concise description of what you expected to happen."
+  validations:
+    required: true
+- type: textarea
+  id: actual-behavior
+  attributes:
+    label: Actual Behavior
+    description: "A clear and concise description of what actually happened."
+  validations:
+    required: true
+- type: textarea
+  id: screenshots-videos
+  attributes:
+    label: Screenshots/Videos
+    description: "If applicable, add screenshots and/or a video to help explain your problem."
+  validations:
+    required: true
+- type: textarea
+  id: found-in-branch
+  attributes:
+    label: Found In Branch
+    description: "Name of or link to the branch where the issue occurs."
+  validations:
+    required: true
+- type: textarea
+  id: commit-ID-from
+  attributes:
+    label: Commit ID From
+    description: "Please provide the SHA/hash that identifies the latest commit from the o3de/o3de 
+    repository if the issue is reproducible in the development or other official branches. You can get 
+    the commit ID by running the `git rev-parse HEAD` command on your current branch."
+  validations:
+    required: true
+- type: textarea
+  id: desktop-device
+  attributes:
+    label: Desktop/Device
+    description: "Desktop/Device: Please please complete the following information
+     - Device: [e.g. PC, Mac, iPhone, Samsung] 
+     - OS: [e.g. Windows, macOS, iOS, Android]
+     - Version [e.g. 10, Monterey, Oreo]
+     - CPU [e.g. Intel I9-9900k , Ryzen 5900x, ]
+     - GPU [AMD 6800 XT, NVidia RTX 3090]
+     - Memory [e.g. 16GB]"
+  validations:
+    required: true
+- type: textarea
+  id: additional-context
+  attributes:
+    label: Additional Context
+    description: "Add any other context about the problem here."

+ 19 - 3
Assets/Editor/Scripts/TrackView/example.py

@@ -9,7 +9,23 @@
 This example script prints info of all TrackView sequences
 This example script prints info of all TrackView sequences
 '''
 '''
 
 
-numTracks = trackview.get_num_sequences()
+import azlmbr.bus as bus
+import azlmbr.track_view as track_view
 
 
-for i in range(numTracks):
-    print "Sequence '", trackview.get_sequence_name(i), "':"
+test_sequence_name = 'Test Sequence 01'
+
+num_sequences = track_view.EditorLayerTrackViewRequestBus(bus.Broadcast, 'GetNumSequences')
+
+if num_sequences > 0:
+    print(f"Found {num_sequences} sequences")
+else:
+    track_view.EditorLayerTrackViewRequestBus(bus.Broadcast, 'NewSequence', test_sequence_name, 1)
+    print(f"Created new sequence {test_sequence_name}")
+
+num_sequences = track_view.EditorLayerTrackViewRequestBus(bus.Broadcast, 'GetNumSequences')
+print(f"Number of Sequences: {num_sequences}")
+
+for i in range(0, num_sequences):
+    returned_name = track_view.EditorLayerTrackViewRequestBus(bus.Broadcast, 'GetSequenceName', i)
+    time_range = track_view.EditorLayerTrackViewRequestBus(bus.Broadcast, 'GetSequenceTimeRange', returned_name)
+    print(f"Sequence {i}: {returned_name} | Start: {time_range.start} End: {time_range.end}")

+ 5 - 3
AutomatedTesting/Gem/PythonTests/Multiplayer/TestSuite_Main.py

@@ -37,11 +37,12 @@ def save_multiplayer_level_cache_folder_artifact(workspace, multiplayer_level):
 class TestAutomation(EditorTestSuite):
 class TestAutomation(EditorTestSuite):
     class test_Multiplayer_BasicConnectivity_Connects(EditorSingleTest):
     class test_Multiplayer_BasicConnectivity_Connects(EditorSingleTest):
         from .tests import Multiplayer_BasicConnectivity_Connects as test_module
         from .tests import Multiplayer_BasicConnectivity_Connects as test_module
+        
+        timeout = 60.0 * 15.0 # increase timeout to ~15 minutes to accommodate for slow server startup
 
 
         def __init__(self):
         def __init__(self):
             super(test_Multiplayer_BasicConnectivity_Connects, self).__init__()
             super(test_Multiplayer_BasicConnectivity_Connects, self).__init__()
-            self.timeout = 60.0 * 15.0 # increase timeout to ~15 minutes to accommodate for slow server startup
-        
+
         @classmethod
         @classmethod
         def setup(cls, instance, request, workspace):
         def setup(cls, instance, request, workspace):
             save_multiplayer_level_cache_folder_artifact(workspace, "basicconnectivity_connects")
             save_multiplayer_level_cache_folder_artifact(workspace, "basicconnectivity_connects")
@@ -49,6 +50,7 @@ class TestAutomation(EditorTestSuite):
     class test_Multiplayer_BasicConnectivity_Connects_ClientServer(EditorSingleTest):
     class test_Multiplayer_BasicConnectivity_Connects_ClientServer(EditorSingleTest):
         from .tests import Multiplayer_BasicConnectivity_Connects_ClientServer as test_module
         from .tests import Multiplayer_BasicConnectivity_Connects_ClientServer as test_module
 
 
+        timeout = 60.0 * 15.0 # increase timeout to ~15 minutes to accommodate for slow server startup
+
         def __init__(self):
         def __init__(self):
             super(test_Multiplayer_BasicConnectivity_Connects_ClientServer, self).__init__()
             super(test_Multiplayer_BasicConnectivity_Connects_ClientServer, self).__init__()
-            self.timeout = 60.0 * 15.0 # increase timeout to ~15 minutes to accommodate for slow server startup

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_arch.material

@@ -11,6 +11,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/arch_1k_normal.jpg",
         "normal.textureMap": "../Textures/arch_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/arch_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/arch_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.050999999046325684,
         "parallax.factor": 0.050999999046325684,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_background.material

@@ -14,6 +14,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/background_1k_normal.jpg",
         "normal.textureMap": "../Textures/background_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/background_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/background_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.03099999949336052,
         "parallax.factor": 0.03099999949336052,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_bricks.material

@@ -14,6 +14,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/bricks_1k_normal.jpg",
         "normal.textureMap": "../Textures/bricks_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/bricks_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/bricks_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.algorithm": "ContactRefinement",
         "parallax.algorithm": "ContactRefinement",

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_ceiling.material

@@ -16,6 +16,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/ceiling_1k_normal.png",
         "normal.textureMap": "../Textures/ceiling_1k_normal.png",
+        "normal.flipY": true,
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/ceiling_1k_roughness.png"
         "roughness.textureMap": "../Textures/ceiling_1k_roughness.png"
     }
     }

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_chain.material

@@ -13,6 +13,7 @@
         "general.doubleSided": true,
         "general.doubleSided": true,
         "metallic.factor": 0.8899999856948853,
         "metallic.factor": 0.8899999856948853,
         "normal.textureMap": "../Textures/chain_normal.jpg",
         "normal.textureMap": "../Textures/chain_normal.jpg",
+        "normal.flipY": true,
         "opacity.alphaSource": "Split",
         "opacity.alphaSource": "Split",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "opacity.mode": "Cutout",
         "opacity.mode": "Cutout",

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_columna.material

@@ -14,6 +14,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/columnA_1k_normal.jpg",
         "normal.textureMap": "../Textures/columnA_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/columnA_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/columnA_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.017000000923871994,
         "parallax.factor": 0.017000000923871994,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_columnb.material

@@ -14,6 +14,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/columnB_1k_normal.jpg",
         "normal.textureMap": "../Textures/columnB_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/columnB_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/columnB_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.020999999716877937,
         "parallax.factor": 0.020999999716877937,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_columnc.material

@@ -14,6 +14,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/columnC_1k_normal.jpg",
         "normal.textureMap": "../Textures/columnC_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/columnC_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/columnC_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.014000000432133675,
         "parallax.factor": 0.014000000432133675,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_curtainblue.material

@@ -13,6 +13,7 @@
         "metallic.textureMap": "../Textures/curtain_metallic.png",
         "metallic.textureMap": "../Textures/curtain_metallic.png",
         "normal.factor": 0.5,
         "normal.factor": 0.5,
         "normal.textureMap": "../Textures/curtain_normal.jpg",
         "normal.textureMap": "../Textures/curtain_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/curtain_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/curtain_ao.png",
         "roughness.textureMap": "../Textures/curtain_roughness.png",
         "roughness.textureMap": "../Textures/curtain_roughness.png",
         "specularF0.enableMultiScatterCompensation": true
         "specularF0.enableMultiScatterCompensation": true

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_curtaingreen.material

@@ -13,6 +13,7 @@
         "metallic.textureMap": "../Textures/curtain_metallic.png",
         "metallic.textureMap": "../Textures/curtain_metallic.png",
         "normal.factor": 0.5,
         "normal.factor": 0.5,
         "normal.textureMap": "../Textures/curtain_normal.jpg",
         "normal.textureMap": "../Textures/curtain_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/curtain_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/curtain_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/curtain_roughness.png"
         "roughness.textureMap": "../Textures/curtain_roughness.png"

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_curtainred.material

@@ -12,6 +12,7 @@
         ],
         ],
         "metallic.textureMap": "../Textures/curtain_metallic.png",
         "metallic.textureMap": "../Textures/curtain_metallic.png",
         "normal.textureMap": "../Textures/curtain_normal.jpg",
         "normal.textureMap": "../Textures/curtain_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/curtain_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/curtain_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/curtain_roughness.png",
         "roughness.textureMap": "../Textures/curtain_roughness.png",

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_details.material

@@ -9,6 +9,7 @@
         "general.applySpecularAA": true,
         "general.applySpecularAA": true,
         "metallic.textureMap": "../Textures/details_1k_metallic.png",
         "metallic.textureMap": "../Textures/details_1k_metallic.png",
         "normal.textureMap": "../Textures/details_1k_normal.png",
         "normal.textureMap": "../Textures/details_1k_normal.png",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/details_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/details_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.02500000037252903,
         "parallax.factor": 0.02500000037252903,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_fabricblue.material

@@ -14,6 +14,7 @@
         "metallic.textureMap": "../Textures/fabric_metallic.png",
         "metallic.textureMap": "../Textures/fabric_metallic.png",
         "normal.factor": 0.5,
         "normal.factor": 0.5,
         "normal.textureMap": "../Textures/fabric_normal.jpg",
         "normal.textureMap": "../Textures/fabric_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/fabric_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/fabric_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/fabric_roughness.png"
         "roughness.textureMap": "../Textures/fabric_roughness.png"

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_fabricgreen.material

@@ -14,6 +14,7 @@
         "metallic.textureMap": "../Textures/fabric_metallic.png",
         "metallic.textureMap": "../Textures/fabric_metallic.png",
         "normal.factor": 0.5,
         "normal.factor": 0.5,
         "normal.textureMap": "../Textures/fabric_normal.jpg",
         "normal.textureMap": "../Textures/fabric_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/fabric_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/fabric_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/fabric_roughness.png"
         "roughness.textureMap": "../Textures/fabric_roughness.png"

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_fabricred.material

@@ -14,6 +14,7 @@
         "metallic.textureMap": "../Textures/fabric_metallic.png",
         "metallic.textureMap": "../Textures/fabric_metallic.png",
         "normal.factor": 0.5,
         "normal.factor": 0.5,
         "normal.textureMap": "../Textures/fabric_normal.jpg",
         "normal.textureMap": "../Textures/fabric_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/fabric_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/fabric_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/fabric_roughness.png"
         "roughness.textureMap": "../Textures/fabric_roughness.png"

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_flagpole.material

@@ -12,6 +12,7 @@
         ],
         ],
         "metallic.textureMap": "../Textures/flagpole_1k_metallic.png",
         "metallic.textureMap": "../Textures/flagpole_1k_metallic.png",
         "normal.textureMap": "../Textures/flagpole_1k_normal.png",
         "normal.textureMap": "../Textures/flagpole_1k_normal.png",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/flagpole_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/flagpole_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.014000000432133675,
         "parallax.factor": 0.014000000432133675,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_floor.material

@@ -14,6 +14,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/floor_1k_normal.png",
         "normal.textureMap": "../Textures/floor_1k_normal.png",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/floor_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/floor_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.012000000104308128,
         "parallax.factor": 0.012000000104308128,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_leaf.material

@@ -15,6 +15,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/thorn_normal.jpg",
         "normal.textureMap": "../Textures/thorn_normal.jpg",
+        "normal.flipY": true,
         "opacity.alphaSource": "Split",
         "opacity.alphaSource": "Split",
         "opacity.factor": 0.20000000298023224,
         "opacity.factor": 0.20000000298023224,
         "opacity.mode": "Cutout",
         "opacity.mode": "Cutout",

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_lion.material

@@ -16,6 +16,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/lion_1k_normal.jpg",
         "normal.textureMap": "../Textures/lion_1k_normal.jpg",
+        "normal.flipY": true,
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "roughness.textureMap": "../Textures/lion_1k_roughness.png"
         "roughness.textureMap": "../Textures/lion_1k_roughness.png"
     }
     }

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_vase.material

@@ -12,6 +12,7 @@
         ],
         ],
         "metallic.textureMap": "../Textures/vase_1k_metallic.png",
         "metallic.textureMap": "../Textures/vase_1k_metallic.png",
         "normal.textureMap": "../Textures/vase_1k_normal.jpg",
         "normal.textureMap": "../Textures/vase_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/vase_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/vase_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.027000000700354576,
         "parallax.factor": 0.027000000700354576,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_vasehanging.material

@@ -12,6 +12,7 @@
         ],
         ],
         "metallic.textureMap": "../Textures/vaseHanging_1k_metallic.png",
         "metallic.textureMap": "../Textures/vaseHanging_1k_metallic.png",
         "normal.textureMap": "../Textures/vaseHanging_1k_normal.png",
         "normal.textureMap": "../Textures/vaseHanging_1k_normal.png",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/vaseHanging_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/vaseHanging_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.04600000008940697,
         "parallax.factor": 0.04600000008940697,

+ 1 - 0
AutomatedTesting/Gem/Sponza/Assets/objects/sponza_mat_vaseround.material

@@ -15,6 +15,7 @@
             1.0
             1.0
         ],
         ],
         "normal.textureMap": "../Textures/vaseRound_1k_normal.jpg",
         "normal.textureMap": "../Textures/vaseRound_1k_normal.jpg",
+        "normal.flipY": true,
         "occlusion.diffuseTextureMap": "../Textures/vaseRound_1k_ao.png",
         "occlusion.diffuseTextureMap": "../Textures/vaseRound_1k_ao.png",
         "opacity.factor": 1.0,
         "opacity.factor": 1.0,
         "parallax.factor": 0.019999999552965164,
         "parallax.factor": 0.019999999552965164,

+ 62 - 1
AutomatedTesting/Levels/Graphics/SilhouetteTest/SilhouetteTest.prefab

@@ -26,7 +26,8 @@
                     "Entity_[6289932813408]",
                     "Entity_[6289932813408]",
                     "Entity_[6010759939168]",
                     "Entity_[6010759939168]",
                     "Entity_[4195937910594]",
                     "Entity_[4195937910594]",
-                    "Entity_[1014068446616]"
+                    "Entity_[1014068446616]",
+                    "Entity_[500470478144]"
                 ]
                 ]
             },
             },
             "Component_[15230859088967841193]": {
             "Component_[15230859088967841193]": {
@@ -651,6 +652,66 @@
                 }
                 }
             }
             }
         },
         },
+        "Entity_[500470478144]": {
+            "Id": "Entity_[500470478144]",
+            "Name": "SilhouetteCVAR",
+            "Components": {
+                "EditorDisabledCompositionComponent": {
+                    "$type": "EditorDisabledCompositionComponent",
+                    "Id": 9117092890701956949
+                },
+                "EditorEntityIconComponent": {
+                    "$type": "EditorEntityIconComponent",
+                    "Id": 7579579611351949855
+                },
+                "EditorEntitySortComponent": {
+                    "$type": "EditorEntitySortComponent",
+                    "Id": 15290678515227949929
+                },
+                "EditorInspectorComponent": {
+                    "$type": "EditorInspectorComponent",
+                    "Id": 13610854406190871550
+                },
+                "EditorLockComponent": {
+                    "$type": "EditorLockComponent",
+                    "Id": 3717411995798002536
+                },
+                "EditorOnlyEntityComponent": {
+                    "$type": "EditorOnlyEntityComponent",
+                    "Id": 13680329333075483739
+                },
+                "EditorPendingCompositionComponent": {
+                    "$type": "EditorPendingCompositionComponent",
+                    "Id": 2975523452465594470
+                },
+                "EditorScriptCanvasComponent": {
+                    "$type": "EditorScriptCanvasComponent",
+                    "Id": 13629354981518808831,
+                    "configuration": {
+                        "sourceHandle": {
+                            "id": "{1C739A69-B4B6-5055-A2F7-8F3C8F6FA040}",
+                            "path": "ScriptCanvas/Silhouette.scriptcanvas"
+                        },
+                        "sourceName": "Silhouette.scriptcanvas",
+                        "propertyOverrides": {
+                            "source": {
+                                "id": "{1C739A69-B4B6-5055-A2F7-8F3C8F6FA040}",
+                                "path": "ScriptCanvas/Silhouette.scriptcanvas"
+                            }
+                        }
+                    }
+                },
+                "EditorVisibilityComponent": {
+                    "$type": "EditorVisibilityComponent",
+                    "Id": 13963243713210499304
+                },
+                "TransformComponent": {
+                    "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+                    "Id": 15981358364288810544,
+                    "Parent Entity": "Entity_[1146574390643]"
+                }
+            }
+        },
         "Entity_[515852240280]": {
         "Entity_[515852240280]": {
             "Id": "Entity_[515852240280]",
             "Id": "Entity_[515852240280]",
             "Name": "Shader Ball (Visible)",
             "Name": "Shader Ball (Visible)",

+ 626 - 0
AutomatedTesting/ScriptCanvas/Silhouette.scriptcanvas

@@ -0,0 +1,626 @@
+{
+    "Type": "JsonSerialization",
+    "Version": 1,
+    "ClassName": "ScriptCanvasData",
+    "ClassData": {
+        "m_scriptCanvas": {
+            "Id": {
+                "id": 655089300800
+            },
+            "Name": "Script Canvas Graph",
+            "Components": {
+                "Component_[12884397704112171065]": {
+                    "$type": "EditorGraph",
+                    "Id": 12884397704112171065,
+                    "m_graphData": {
+                        "m_nodes": [
+                            {
+                                "Id": {
+                                    "id": 5495517443392
+                                },
+                                "Name": "SC-Node(ExecuteConsoleCommand)",
+                                "Components": {
+                                    "Component_[16978772701306804442]": {
+                                        "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method",
+                                        "Id": 16978772701306804442,
+                                        "Slots": [
+                                            {
+                                                "id": {
+                                                    "m_id": "{191CEB6C-0A98-4D3F-A78D-F46E699CE287}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "String",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 2
+                                                },
+                                                "DataType": 1
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{656CC550-632A-4BB4-851D-C376358B5A3F}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "In",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{B7CD92CE-BE03-4818-B75D-E5C178390262}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Out",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            }
+                                        ],
+                                        "Datums": [
+                                            {
+                                                "isOverloadedStorage": false,
+                                                "scriptCanvasType": {
+                                                    "m_type": 5
+                                                },
+                                                "isNullPointer": false,
+                                                "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+                                                "value": "r_silhouette 0",
+                                                "label": "Command"
+                                            }
+                                        ],
+                                        "methodType": 0,
+                                        "methodName": "ExecuteConsoleCommand",
+                                        "className": "ConsoleRequestBus",
+                                        "inputSlots": [
+                                            {
+                                                "m_id": "{191CEB6C-0A98-4D3F-A78D-F46E699CE287}"
+                                            }
+                                        ],
+                                        "prettyClassName": "ConsoleRequestBus"
+                                    }
+                                }
+                            },
+                            {
+                                "Id": {
+                                    "id": 16769806595392
+                                },
+                                "Name": "EBusEventHandler",
+                                "Components": {
+                                    "Component_[2956567096039969287]": {
+                                        "$type": "EBusEventHandler",
+                                        "Id": 2956567096039969287,
+                                        "Slots": [
+                                            {
+                                                "id": {
+                                                    "m_id": "{366F0012-CAB6-4FD1-A660-C15D69D95B65}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Connect",
+                                                "toolTip": "Connect this event handler to the specified entity.",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{B70E4A19-A39E-4176-890B-FFAF53D959F2}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Disconnect",
+                                                "toolTip": "Disconnect this event handler.",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{41A4A51E-60A8-4A5F-AB00-E8E2BBBFA0DF}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "OnConnected",
+                                                "toolTip": "Signaled when a connection has taken place.",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{DAD77787-1391-4200-B68C-32E400BC4683}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "OnDisconnected",
+                                                "toolTip": "Signaled when this event handler is disconnected.",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{E182A1D8-16D7-40E1-9FAC-172EA4AC93BB}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "OnFailure",
+                                                "toolTip": "Signaled when it is not possible to connect this handler.",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{F2B6C70F-C6FC-4CB2-ABB8-82AD7879E6EF}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Source",
+                                                "toolTip": "ID used to connect on a specific Event address (Type: EntityId)",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 2
+                                                },
+                                                "DataType": 1
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{5293BB09-79D0-4CE7-AFD6-27545A74ECDC}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "EntityId",
+                                                "DisplayDataType": {
+                                                    "m_type": 1
+                                                },
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 2
+                                                },
+                                                "DataType": 1
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{93008807-7799-4E9C-9E1D-DDBB455B87F4}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "ExecutionSlot:OnEntityActivated",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                },
+                                                "IsLatent": true
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{2644B100-E433-41B4-80A0-00FEBE570792}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "EntityId",
+                                                "DisplayDataType": {
+                                                    "m_type": 1
+                                                },
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 2
+                                                },
+                                                "DataType": 1
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{E0BAF21D-FE72-4119-A150-1EE9CAF18CB6}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "ExecutionSlot:OnEntityDeactivated",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                },
+                                                "IsLatent": true
+                                            }
+                                        ],
+                                        "Datums": [
+                                            {
+                                                "isOverloadedStorage": false,
+                                                "scriptCanvasType": {
+                                                    "m_type": 1
+                                                },
+                                                "isNullPointer": false,
+                                                "$type": "EntityId",
+                                                "value": {
+                                                    "id": 2901262558
+                                                }
+                                            }
+                                        ],
+                                        "Id": 2956567096039969287,
+                                        "m_eventMap": [
+                                            {
+                                                "Key": {
+                                                    "Value": 245425936
+                                                },
+                                                "Value": {
+                                                    "m_eventName": "OnEntityActivated",
+                                                    "m_eventId": {
+                                                        "Value": 245425936
+                                                    },
+                                                    "m_eventSlotId": {
+                                                        "m_id": "{93008807-7799-4E9C-9E1D-DDBB455B87F4}"
+                                                    },
+                                                    "m_parameterSlotIds": [
+                                                        {
+                                                            "m_id": "{5293BB09-79D0-4CE7-AFD6-27545A74ECDC}"
+                                                        }
+                                                    ],
+                                                    "m_numExpectedArguments": 1
+                                                }
+                                            },
+                                            {
+                                                "Key": {
+                                                    "Value": 4273369222
+                                                },
+                                                "Value": {
+                                                    "m_eventName": "OnEntityDeactivated",
+                                                    "m_eventId": {
+                                                        "Value": 4273369222
+                                                    },
+                                                    "m_eventSlotId": {
+                                                        "m_id": "{E0BAF21D-FE72-4119-A150-1EE9CAF18CB6}"
+                                                    },
+                                                    "m_parameterSlotIds": [
+                                                        {
+                                                            "m_id": "{2644B100-E433-41B4-80A0-00FEBE570792}"
+                                                        }
+                                                    ],
+                                                    "m_numExpectedArguments": 1
+                                                }
+                                            }
+                                        ],
+                                        "m_ebusName": "EntityBus",
+                                        "m_busId": {
+                                            "Value": 3358774020
+                                        }
+                                    }
+                                }
+                            },
+                            {
+                                "Id": {
+                                    "id": 3296494187840
+                                },
+                                "Name": "SC-Node(ExecuteConsoleCommand)",
+                                "Components": {
+                                    "Component_[4104562768843824295]": {
+                                        "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method",
+                                        "Id": 4104562768843824295,
+                                        "Slots": [
+                                            {
+                                                "id": {
+                                                    "m_id": "{CB50526B-6071-4675-9195-2E65841C0EB7}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "String",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 2
+                                                },
+                                                "DataType": 1
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{A65F464C-8276-43AF-BE4D-6123338795A0}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "In",
+                                                "Descriptor": {
+                                                    "ConnectionType": 1,
+                                                    "SlotType": 1
+                                                }
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{773813E9-2272-4430-ACBF-3F22F6D5AAD2}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "Out",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                }
+                                            }
+                                        ],
+                                        "Datums": [
+                                            {
+                                                "isOverloadedStorage": false,
+                                                "scriptCanvasType": {
+                                                    "m_type": 5
+                                                },
+                                                "isNullPointer": false,
+                                                "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string",
+                                                "value": "r_silhouette 1",
+                                                "label": "Command"
+                                            }
+                                        ],
+                                        "methodType": 0,
+                                        "methodName": "ExecuteConsoleCommand",
+                                        "className": "ConsoleRequestBus",
+                                        "inputSlots": [
+                                            {
+                                                "m_id": "{CB50526B-6071-4675-9195-2E65841C0EB7}"
+                                            }
+                                        ],
+                                        "prettyClassName": "ConsoleRequestBus"
+                                    }
+                                }
+                            }
+                        ],
+                        "m_connections": [
+                            {
+                                "Id": {
+                                    "id": 19329607103808
+                                },
+                                "Name": "srcEndpoint=(EntityBus Handler: ExecutionSlot:OnEntityActivated), destEndpoint=(ExecuteConsoleCommand: In)",
+                                "Components": {
+                                    "Component_[3460867018602754265]": {
+                                        "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+                                        "Id": 3460867018602754265,
+                                        "sourceEndpoint": {
+                                            "nodeId": {
+                                                "id": 16769806595392
+                                            },
+                                            "slotId": {
+                                                "m_id": "{93008807-7799-4E9C-9E1D-DDBB455B87F4}"
+                                            }
+                                        },
+                                        "targetEndpoint": {
+                                            "nodeId": {
+                                                "id": 3296494187840
+                                            },
+                                            "slotId": {
+                                                "m_id": "{A65F464C-8276-43AF-BE4D-6123338795A0}"
+                                            }
+                                        }
+                                    }
+                                }
+                            },
+                            {
+                                "Id": {
+                                    "id": 20446298600768
+                                },
+                                "Name": "srcEndpoint=(EntityBus Handler: ExecutionSlot:OnEntityDeactivated), destEndpoint=(ExecuteConsoleCommand: In)",
+                                "Components": {
+                                    "Component_[9498010169431111038]": {
+                                        "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection",
+                                        "Id": 9498010169431111038,
+                                        "sourceEndpoint": {
+                                            "nodeId": {
+                                                "id": 16769806595392
+                                            },
+                                            "slotId": {
+                                                "m_id": "{E0BAF21D-FE72-4119-A150-1EE9CAF18CB6}"
+                                            }
+                                        },
+                                        "targetEndpoint": {
+                                            "nodeId": {
+                                                "id": 5495517443392
+                                            },
+                                            "slotId": {
+                                                "m_id": "{656CC550-632A-4BB4-851D-C376358B5A3F}"
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        ]
+                    },
+                    "versionData": {
+                        "_grammarVersion": 1,
+                        "_runtimeVersion": 1,
+                        "_fileVersion": 1
+                    },
+                    "GraphCanvasData": [
+                        {
+                            "Key": {
+                                "id": 655089300800
+                            },
+                            "Value": {
+                                "ComponentData": {
+                                    "{5F84B500-8C45-40D1-8EFC-A5306B241444}": {
+                                        "$type": "SceneComponentSaveData",
+                                        "ViewParams": {
+                                            "AnchorX": 13.0,
+                                            "AnchorY": -5.0
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        {
+                            "Key": {
+                                "id": 3296494187840
+                            },
+                            "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": [
+                                            620.0,
+                                            180.0
+                                        ]
+                                    },
+                                    "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+                                        "$type": "StylingComponentSaveData",
+                                        "SubStyle": ".method"
+                                    },
+                                    "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+                                        "$type": "PersistentIdComponentSaveData",
+                                        "PersistentId": "{E0A0CF0F-E6FC-4C90-B167-3CB2C399C9A1}"
+                                    }
+                                }
+                            }
+                        },
+                        {
+                            "Key": {
+                                "id": 5495517443392
+                            },
+                            "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": [
+                                            640.0,
+                                            460.0
+                                        ]
+                                    },
+                                    "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+                                        "$type": "StylingComponentSaveData",
+                                        "SubStyle": ".method"
+                                    },
+                                    "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+                                        "$type": "PersistentIdComponentSaveData",
+                                        "PersistentId": "{56393B3E-DD52-4094-B9A3-008377CFFDC9}"
+                                    }
+                                }
+                            }
+                        },
+                        {
+                            "Key": {
+                                "id": 16769806595392
+                            },
+                            "Value": {
+                                "ComponentData": {
+                                    "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
+                                        "$type": "NodeSaveData"
+                                    },
+                                    "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
+                                        "$type": "GeometrySaveData",
+                                        "Position": [
+                                            180.0,
+                                            160.0
+                                        ]
+                                    },
+                                    "{9E81C95F-89C0-4476-8E82-63CCC4E52E04}": {
+                                        "$type": "EBusHandlerNodeDescriptorSaveData",
+                                        "EventIds": [
+                                            {
+                                                "Value": 245425936
+                                            },
+                                            {
+                                                "Value": 4273369222
+                                            }
+                                        ]
+                                    },
+                                    "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
+                                        "$type": "StylingComponentSaveData"
+                                    },
+                                    "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
+                                        "$type": "PersistentIdComponentSaveData",
+                                        "PersistentId": "{EA05E2BE-62ED-454D-A7A2-8D359AA3A4E2}"
+                                    }
+                                }
+                            }
+                        }
+                    ],
+                    "StatisticsHelper": {
+                        "InstanceCounter": [
+                            {
+                                "Key": 5842116757075334384,
+                                "Value": 1
+                            },
+                            {
+                                "Key": 5842116761103598202,
+                                "Value": 1
+                            },
+                            {
+                                "Key": 13774516393157610292,
+                                "Value": 2
+                            }
+                        ]
+                    }
+                },
+                "Component_[5601587301036697695]": {
+                    "$type": "EditorGraphVariableManagerComponent",
+                    "Id": 5601587301036697695
+                }
+            }
+        }
+    }
+}

+ 4 - 0
AutomatedTesting/ShaderLib/scenesrg.srgi

@@ -14,6 +14,10 @@
 
 
 #include <Atom/Features/SrgSemantics.azsli>
 #include <Atom/Features/SrgSemantics.azsli>
 
 
+#define AZ_COLLECTING_PARTIAL_SRG_INCLUDES
+#include <Atom/Feature/Common/Assets/ShaderResourceGroups/ViewSrgIncludesAll.azsli>
+#undef AZ_COLLECTING_PARTIAL_SRG_INCLUDES
+
 partial ShaderResourceGroup SceneSrg : SRG_PerScene
 partial ShaderResourceGroup SceneSrg : SRG_PerScene
 {
 {
 /* Intentionally Empty. Helps define the SrgSemantic for SceneSrg once.*/
 /* Intentionally Empty. Helps define the SrgSemantic for SceneSrg once.*/

+ 4 - 0
AutomatedTesting/ShaderLib/viewsrg.srgi

@@ -14,6 +14,10 @@
 
 
 #include <Atom/Features/SrgSemantics.azsli>
 #include <Atom/Features/SrgSemantics.azsli>
 
 
+#define AZ_COLLECTING_PARTIAL_SRG_INCLUDES
+#include <Atom/Feature/Common/Assets/ShaderResourceGroups/SceneSrgIncludesAll.azsli>
+#undef AZ_COLLECTING_PARTIAL_SRG_INCLUDES
+
 partial ShaderResourceGroup ViewSrg : SRG_PerView
 partial ShaderResourceGroup ViewSrg : SRG_PerView
 {
 {
 /* Intentionally Empty. Helps define the SrgSemantic for ViewSrg once.*/
 /* Intentionally Empty. Helps define the SrgSemantic for ViewSrg once.*/

+ 15 - 0
Code/Editor/AnimationContext.cpp

@@ -18,6 +18,7 @@
 #include "TrackView/TrackViewDialog.h"
 #include "TrackView/TrackViewDialog.h"
 #include "ViewManager.h"
 #include "ViewManager.h"
 
 
+#include <AzCore/Serialization/Locale.h>
 #include <AzCore/Time/ITime.h>
 #include <AzCore/Time/ITime.h>
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -112,11 +113,13 @@ CAnimationContext::CAnimationContext()
     GetIEditor()->GetUndoManager()->AddListener(this);
     GetIEditor()->GetUndoManager()->AddListener(this);
     GetIEditor()->GetSequenceManager()->AddListener(this);
     GetIEditor()->GetSequenceManager()->AddListener(this);
     GetIEditor()->RegisterNotifyListener(this);
     GetIEditor()->RegisterNotifyListener(this);
+    AzToolsFramework::Prefab::PrefabPublicNotificationBus::Handler::BusConnect();
 }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 CAnimationContext::~CAnimationContext()
 CAnimationContext::~CAnimationContext()
 {
 {
+    AzToolsFramework::Prefab::PrefabPublicNotificationBus::Handler::BusDisconnect();
     GetIEditor()->GetSequenceManager()->RemoveListener(this);
     GetIEditor()->GetSequenceManager()->RemoveListener(this);
     GetIEditor()->GetUndoManager()->RemoveListener(this);
     GetIEditor()->GetUndoManager()->RemoveListener(this);
     GetIEditor()->UnregisterNotifyListener(this);
     GetIEditor()->UnregisterNotifyListener(this);
@@ -601,7 +604,11 @@ void CAnimationContext::GoToFrameCmd(IConsoleCmdArgs* pArgs)
         return;
         return;
     }
     }
 
 
+    // console commands are in the invariant locale, for atof()
+    AZ::Locale::ScopedSerializationLocale scopedLocale;
     float targetFrame = (float)atof(pArgs->GetArg(1));
     float targetFrame = (float)atof(pArgs->GetArg(1));
+    scopedLocale.Deactivate();
+
     if (pSeq->GetTimeRange().start > targetFrame || targetFrame > pSeq->GetTimeRange().end)
     if (pSeq->GetTimeRange().start > targetFrame || targetFrame > pSeq->GetTimeRange().end)
     {
     {
         gEnv->pLog->LogError("GoToFrame: requested time %f is outside the range of sequence %s (%f, %f)", targetFrame, pSeq->GetName().c_str(), pSeq->GetTimeRange().start, pSeq->GetTimeRange().end);
         gEnv->pLog->LogError("GoToFrame: requested time %f is outside the range of sequence %s (%f, %f)", targetFrame, pSeq->GetName().c_str(), pSeq->GetTimeRange().start, pSeq->GetTimeRange().end);
@@ -647,6 +654,14 @@ void CAnimationContext::EndUndoTransaction()
     SetRecordingInternal(m_bSavedRecordingState);
     SetRecordingInternal(m_bSavedRecordingState);
 }
 }
 
 
+void CAnimationContext::OnPrefabInstancePropagationEnd()
+{
+    if (m_pSequence)
+    {
+        m_pSequence->BindToEditorObjects();
+    }
+}
+
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 void CAnimationContext::TogglePlay()
 void CAnimationContext::TogglePlay()
 {
 {

+ 5 - 3
Code/Editor/AnimationContext.h

@@ -16,6 +16,7 @@
 #include "TrackView/TrackViewSequenceManager.h"
 #include "TrackView/TrackViewSequenceManager.h"
 #include <Range.h>
 #include <Range.h>
 #include <IMovieSystem.h>
 #include <IMovieSystem.h>
+#include <AzToolsFramework/Prefab/PrefabPublicNotificationBus.h>
 
 
 class CTrackViewSequence;
 class CTrackViewSequence;
 
 
@@ -27,17 +28,16 @@ struct IAnimationContextListener
     virtual void OnTimeChanged([[maybe_unused]] float newTime) {}
     virtual void OnTimeChanged([[maybe_unused]] float newTime) {}
 };
 };
 
 
-AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING
 /** CAnimationContext stores information about current editable animation sequence.
 /** CAnimationContext stores information about current editable animation sequence.
         Stores information about whenever animation is being recorded know,
         Stores information about whenever animation is being recorded know,
         current sequence, current time in sequence etc.
         current sequence, current time in sequence etc.
 */
 */
-class SANDBOX_API CAnimationContext
+class CAnimationContext
     : public IEditorNotifyListener
     : public IEditorNotifyListener
     , public IUndoManagerListener
     , public IUndoManagerListener
     , public ITrackViewSequenceManagerListener
     , public ITrackViewSequenceManagerListener
+    , public AzToolsFramework::Prefab::PrefabPublicNotificationBus::Handler
 {
 {
-    AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING
 public:
 public:
     //////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////
     // Constructors.
     // Constructors.
@@ -192,6 +192,8 @@ private:
     virtual void BeginUndoTransaction() override;
     virtual void BeginUndoTransaction() override;
     virtual void EndUndoTransaction() override;
     virtual void EndUndoTransaction() override;
 
 
+    void OnPrefabInstancePropagationEnd() override;
+
     virtual void OnSequenceRemoved(CTrackViewSequence* pSequence) override;
     virtual void OnSequenceRemoved(CTrackViewSequence* pSequence) override;
 
 
     virtual void OnEditorNotifyEvent(EEditorNotifyEvent event) override;
     virtual void OnEditorNotifyEvent(EEditorNotifyEvent event) override;

+ 1 - 1
Code/Editor/CMakeLists.txt

@@ -111,7 +111,7 @@ ly_add_target(
             AZ::AtomCore
             AZ::AtomCore
             Gem::Atom_RPI.Edit
             Gem::Atom_RPI.Edit
             Gem::Atom_RPI.Public
             Gem::Atom_RPI.Public
-            Gem::Atom_Feature_Common.Static
+            Gem::Atom_Feature_Common.Public
             Gem::AtomToolsFramework.Static
             Gem::AtomToolsFramework.Static
             Gem::AtomViewportDisplayInfo
             Gem::AtomViewportDisplayInfo
             Gem::EditorModeFeedback.Editor.Static
             Gem::EditorModeFeedback.Editor.Static

+ 12 - 0
Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp

@@ -18,6 +18,8 @@
 #include "ReflectedPropertyCtrl.h"
 #include "ReflectedPropertyCtrl.h"
 #include "Undo/UndoVariableChange.h"
 #include "Undo/UndoVariableChange.h"
 
 
+#include <AzCore/Serialization/Locale.h>
+
 // default number of increments to cover the range of a property - determined experimentally by feel
 // default number of increments to cover the range of a property - determined experimentally by feel
 const float ReflectedPropertyItem::s_DefaultNumStepIncrements = 500.0f;
 const float ReflectedPropertyItem::s_DefaultNumStepIncrements = 500.0f;
 
 
@@ -32,6 +34,16 @@ const float ReflectedPropertyItem::s_DefaultNumStepIncrements = 500.0f;
 
 
 static ColorF StringToColor(const QString &value)
 static ColorF StringToColor(const QString &value)
 {
 {
+    // note that converting back and forth between these values is happening in 2 cases
+    // one is when its being read from the UI and the other is when it is being read from XML
+    // XML is always in "C" locale, and the GUI is ultimately using @ref type_convertor in Variable.h
+    // which itself uses QString::number, which is always in the "C" locale (invariant culture).
+    // for example, color is converted using the following line
+    // void operator()(const Vec4& value, QString& to) const { to = QString::fromLatin1("%1,%2,%3,%4").arg(value.x).arg(value.y).arg(value.z).arg(value.w); }
+    // qstring::arg uses the "C" Locale unless explicitly using the notation %L1, %L2, etc, so the input will be invariant.
+
+    AZ::Locale::ScopedSerializationLocale localeScope;
+
     ColorF color;
     ColorF color;
     float r, g, b, a;
     float r, g, b, a;
     int res = azsscanf(value.toUtf8().data(), "%f,%f,%f,%f", &r, &g, &b, &a);
     int res = azsscanf(value.toUtf8().data(), "%f,%f,%f,%f", &r, &g, &b, &a);

+ 1 - 1
Code/Editor/Controls/SplineCtrlEx.cpp

@@ -2667,7 +2667,7 @@ void AbstractSplineWidget::SelectAll()
 }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-void SplineWidget::SendNotifyEvent(int nEvent)
+void SplineWidget::SendNotifyEvent(const uint32_t nEvent)
 {
 {
     if (nEvent == SPLN_BEFORE_CHANGE)
     if (nEvent == SPLN_BEFORE_CHANGE)
     {
     {

+ 6 - 4
Code/Editor/Controls/SplineCtrlEx.h

@@ -37,8 +37,10 @@
 #define SPLN_KEY_SELECTION_CHANGE (0x0005)
 #define SPLN_KEY_SELECTION_CHANGE (0x0005)
 
 
 #ifndef NM_CLICK
 #ifndef NM_CLICK
-#define NM_CLICK (-2)
-#define NM_RCLICK (-5)
+// from commctrl.h
+#define NM_FIRST (0U - 0U)
+#define NM_CLICK (NM_FIRST - 2)
+#define NM_RCLICK (NM_FIRST - 5)
 #endif
 #endif
 
 
 #ifdef LoadCursor
 #ifdef LoadCursor
@@ -233,7 +235,7 @@ protected:
 
 
     void SetHorizontalExtent(int min, int max);
     void SetHorizontalExtent(int min, int max);
 
 
-    virtual void SendNotifyEvent(int nEvent) = 0;
+    virtual void SendNotifyEvent(const uint32_t nEvent) = 0;
 
 
     virtual void SelectRectangle(const QRect& rc, bool bSelect);
     virtual void SelectRectangle(const QRect& rc, bool bSelect);
     //////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////
@@ -403,7 +405,7 @@ protected:
 
 
     void DrawTangentHandle(QPainter* pDC, int nSpline, int nKey, int nDimension);
     void DrawTangentHandle(QPainter* pDC, int nSpline, int nKey, int nDimension);
 
 
-    void SendNotifyEvent(int nEvent) override;
+    void SendNotifyEvent(const uint32_t nEvent) override;
 
 
     void captureMouseImpl() override { grabMouse(); }
     void captureMouseImpl() override { grabMouse(); }
     void releaseMouseImpl() override { releaseMouse(); }
     void releaseMouseImpl() override { releaseMouse(); }

+ 0 - 31
Code/Editor/Core/EditorActionsHandler.cpp

@@ -1417,21 +1417,6 @@ void EditorActionsHandler::OnActionRegistrationHook()
         );
         );
     }
     }
 
 
-    // GameLift Documentation
-    {
-        AzToolsFramework::ActionProperties actionProperties;
-        actionProperties.m_name = "GameLift Documentation";
-        actionProperties.m_category = "Help";
-
-        m_actionManagerInterface->RegisterAction(
-            EditorIdentifiers::MainWindowActionContextIdentifier, "o3de.action.help.documentation.gamelift", actionProperties,
-            [cryEdit = m_cryEditApp]
-            {
-                cryEdit->OnDocumentationGamelift();
-            }
-        );
-    }
-
     // Release Notes
     // Release Notes
     {
     {
         AzToolsFramework::ActionProperties actionProperties;
         AzToolsFramework::ActionProperties actionProperties;
@@ -1477,21 +1462,6 @@ void EditorActionsHandler::OnActionRegistrationHook()
         );
         );
     }
     }
 
 
-    // AWS Support
-    {
-        AzToolsFramework::ActionProperties actionProperties;
-        actionProperties.m_name = "AWS Support";
-        actionProperties.m_category = "Help";
-
-        m_actionManagerInterface->RegisterAction(
-            EditorIdentifiers::MainWindowActionContextIdentifier, "o3de.action.help.resources.awssupport", actionProperties,
-            [cryEdit = m_cryEditApp]
-            {
-                cryEdit->OnDocumentationAWSSupport();
-            }
-        );
-    }
-
     // About O3DE
     // About O3DE
     {
     {
         AzToolsFramework::ActionProperties actionProperties;
         AzToolsFramework::ActionProperties actionProperties;
@@ -1967,7 +1937,6 @@ void EditorActionsHandler::OnMenuBindingHook()
         {
         {
             m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpGameDevResourcesMenuIdentifier, "o3de.action.help.resources.gamedevblog", 100);
             m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpGameDevResourcesMenuIdentifier, "o3de.action.help.resources.gamedevblog", 100);
             m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpGameDevResourcesMenuIdentifier, "o3de.action.help.resources.forums", 200);
             m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpGameDevResourcesMenuIdentifier, "o3de.action.help.resources.forums", 200);
-            m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpGameDevResourcesMenuIdentifier, "o3de.action.help.resources.awssupport", 300);
         }
         }
         m_menuManagerInterface->AddSeparatorToMenu(EditorIdentifiers::HelpMenuIdentifier, 500);
         m_menuManagerInterface->AddSeparatorToMenu(EditorIdentifiers::HelpMenuIdentifier, 500);
         m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpMenuIdentifier, "o3de.action.help.abouto3de", 600);
         m_menuManagerInterface->AddActionToMenu(EditorIdentifiers::HelpMenuIdentifier, "o3de.action.help.abouto3de", 600);

+ 2 - 19
Code/Editor/CryEdit.cpp

@@ -1962,12 +1962,6 @@ void CCryEditApp::OnDocumentationO3DE()
     QDesktopServices::openUrl(QUrl(webLink));
     QDesktopServices::openUrl(QUrl(webLink));
 }
 }
 
 
-void CCryEditApp::OnDocumentationGamelift()
-{
-    QString webLink = tr("https://docs.aws.amazon.com/gamelift/");
-    QDesktopServices::openUrl(QUrl(webLink));
-}
-
 void CCryEditApp::OnDocumentationReleaseNotes()
 void CCryEditApp::OnDocumentationReleaseNotes()
 {
 {
     QString webLink = tr("https://o3de.org/docs/release-notes/");
     QString webLink = tr("https://o3de.org/docs/release-notes/");
@@ -1976,19 +1970,13 @@ void CCryEditApp::OnDocumentationReleaseNotes()
 
 
 void CCryEditApp::OnDocumentationGameDevBlog()
 void CCryEditApp::OnDocumentationGameDevBlog()
 {
 {
-    QString webLink = tr("https://aws.amazon.com/blogs/gamedev");
+    QString webLink = tr("https://o3de.org/news-blogs/");
     QDesktopServices::openUrl(QUrl(webLink));
     QDesktopServices::openUrl(QUrl(webLink));
 }
 }
 
 
 void CCryEditApp::OnDocumentationForums()
 void CCryEditApp::OnDocumentationForums()
 {
 {
-    QString webLink = tr("https://o3de.org/community/");
-    QDesktopServices::openUrl(QUrl(webLink));
-}
-
-void CCryEditApp::OnDocumentationAWSSupport()
-{
-    QString webLink = tr("https://aws.amazon.com/contact-us");
+    QString webLink = tr("https://discord.com/invite/o3de");
     QDesktopServices::openUrl(QUrl(webLink));
     QDesktopServices::openUrl(QUrl(webLink));
 }
 }
 
 
@@ -3318,11 +3306,6 @@ void CCryEditApp::PrintAlways(const AZStd::string& output)
     m_stdoutRedirection.WriteBypassingRedirect(output.c_str(), static_cast<unsigned int>(output.size()));
     m_stdoutRedirection.WriteBypassingRedirect(output.c_str(), static_cast<unsigned int>(output.size()));
 }
 }
 
 
-QString CCryEditApp::GetRootEnginePath() const
-{
-    return m_rootEnginePath;
-}
-
 void CCryEditApp::RedirectStdoutToNull()
 void CCryEditApp::RedirectStdoutToNull()
 {
 {
     m_stdoutRedirection.RedirectTo(AZ::IO::SystemFile::GetNullFilename());
     m_stdoutRedirection.RedirectTo(AZ::IO::SystemFile::GetNullFilename());

+ 0 - 10
Code/Editor/CryEdit.h

@@ -109,7 +109,6 @@ public:
 
 
     static CCryEditApp* instance();
     static CCryEditApp* instance();
 
 
-    bool GetRootEnginePath(QDir& rootEnginePath) const;
     bool CreateLevel(bool& wasCreateLevelOperationCancelled);
     bool CreateLevel(bool& wasCreateLevelOperationCancelled);
     void LoadFile(QString fileName);
     void LoadFile(QString fileName);
     void ForceNextIdleProcessing() { m_bForceProcessIdle = true; }
     void ForceNextIdleProcessing() { m_bForceProcessIdle = true; }
@@ -170,8 +169,6 @@ public:
 
 
     CCryDocManager* GetDocManager() { return m_pDocManager; }
     CCryDocManager* GetDocManager() { return m_pDocManager; }
 
 
-    void RegisterActionHandlers();
-
     // Implementation
     // Implementation
     void OnCreateLevel();
     void OnCreateLevel();
     void OnOpenLevel();
     void OnOpenLevel();
@@ -181,23 +178,17 @@ public:
     void OnDocumentationTutorials();
     void OnDocumentationTutorials();
     void OnDocumentationGlossary();
     void OnDocumentationGlossary();
     void OnDocumentationO3DE();
     void OnDocumentationO3DE();
-    void OnDocumentationGamelift();
     void OnDocumentationReleaseNotes();
     void OnDocumentationReleaseNotes();
     void OnDocumentationGameDevBlog();
     void OnDocumentationGameDevBlog();
     void OnDocumentationForums();
     void OnDocumentationForums();
-    void OnDocumentationAWSSupport();
-    void OnCommercePublish();
-    void OnCommerceMerch();
     void OnEditHold();
     void OnEditHold();
     void OnEditFetch();
     void OnEditFetch();
     void OnFileExportToGameNoSurfaceTexture();
     void OnFileExportToGameNoSurfaceTexture();
     void OnViewSwitchToGame();
     void OnViewSwitchToGame();
     void OnViewSwitchToGameFullScreen();
     void OnViewSwitchToGameFullScreen();
-    void OnViewDeploy();
     void OnMoveObject();
     void OnMoveObject();
     void OnRenameObj();
     void OnRenameObj();
     void OnUndo();
     void OnUndo();
-    void OnOpenAssetImporter();
     void OnEditLevelData();
     void OnEditLevelData();
     void OnFileEditLogFile();
     void OnFileEditLogFile();
     void OnFileEditEditorini();
     void OnFileEditEditorini();
@@ -359,7 +350,6 @@ private:
     void OnViewConfigureLayout();
     void OnViewConfigureLayout();
 
 
     void OnCustomizeKeyboard();
     void OnCustomizeKeyboard();
-    void OnToolsConfiguretools();
     void OnToolsScriptHelp();
     void OnToolsScriptHelp();
     void OnViewCycle2dviewport();
     void OnViewCycle2dviewport();
     void OnDisplayGotoPosition();
     void OnDisplayGotoPosition();

+ 4 - 0
Code/Editor/GameEngine.cpp

@@ -19,6 +19,7 @@
 #include <AzCore/Component/ComponentApplication.h>
 #include <AzCore/Component/ComponentApplication.h>
 #include <AzCore/IO/IStreamer.h>
 #include <AzCore/IO/IStreamer.h>
 #include <AzCore/IO/Streamer/FileRequest.h>
 #include <AzCore/IO/Streamer/FileRequest.h>
+#include <AzCore/Serialization/Locale.h>
 #include <AzCore/std/parallel/binary_semaphore.h>
 #include <AzCore/std/parallel/binary_semaphore.h>
 #include <AzCore/Console/IConsole.h>
 #include <AzCore/Console/IConsole.h>
 
 
@@ -277,6 +278,9 @@ void KillMemory(IConsoleCmdArgs* /* pArgs */)
 
 
 static void CmdGotoEditor(IConsoleCmdArgs* pArgs)
 static void CmdGotoEditor(IConsoleCmdArgs* pArgs)
 {
 {
+    // Console commands are assumed to be in the culture invariant locale since they can come from data files.
+    AZ::Locale::ScopedSerializationLocale scopedLocale;
+
     // feature is mostly useful for QA purposes, this works with the game "goto" command
     // feature is mostly useful for QA purposes, this works with the game "goto" command
     // this console command actually is used by the game command, the editor command shouldn't be used by the user
     // this console command actually is used by the game command, the editor command shouldn't be used by the user
     int iArgCount = pArgs->GetArgCount();
     int iArgCount = pArgs->GetArgCount();

+ 1 - 56
Code/Editor/IEditor.h

@@ -60,9 +60,7 @@ struct AABB;
 struct IErrorReport; // Vladimir@conffx
 struct IErrorReport; // Vladimir@conffx
 struct IFileUtil;  // Vladimir@conffx
 struct IFileUtil;  // Vladimir@conffx
 struct IEditorLog;  // Vladimir@conffx
 struct IEditorLog;  // Vladimir@conffx
-struct IImageUtil;  // Vladimir@conffx
 struct IEditorParticleUtils;  // Leroy@conffx
 struct IEditorParticleUtils;  // Leroy@conffx
-struct ILogFile; // Vladimir@conffx
 
 
 // Qt
 // Qt
 
 
@@ -230,17 +228,6 @@ enum AxisConstrains
     AXIS_TERRAIN,
     AXIS_TERRAIN,
 };
 };
 
 
-//! Reference coordinate system values
-enum RefCoordSys
-{ // Don't change this order. Should be in the same order as MainWindow::CreateRefCoordComboBox()
-    COORDS_VIEW = 0,
-    COORDS_LOCAL,
-    COORDS_PARENT,
-    COORDS_WORLD,
-    COORDS_USERDEFINED,
-    LAST_COORD_SYSTEM, // Must always be the last member
-};
-
 // Insert locations for menu items
 // Insert locations for menu items
 enum EMenuInsertLocation
 enum EMenuInsertLocation
 {
 {
@@ -256,14 +243,6 @@ enum EMenuInsertLocation
     eMenuHelp
     eMenuHelp
 };
 };
 
 
-//! Global editor operation mode
-enum EOperationMode
-{
-    eOperationModeNone = 0, // None
-    eCompositingMode, // Normal operation mode where objects are composited in the scene
-    eModellingMode // Geometry modeling mode
-};
-
 //! Mouse events that viewport can send
 //! Mouse events that viewport can send
 enum EMouseEvent
 enum EMouseEvent
 {
 {
@@ -457,15 +436,6 @@ struct IEditor
     virtual void SetActiveView(CViewport* viewport) = 0;
     virtual void SetActiveView(CViewport* viewport) = 0;
     virtual struct IEditorFileMonitor* GetFileMonitor() = 0;
     virtual struct IEditorFileMonitor* GetFileMonitor() = 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
-    //! memory allocator (for example, in a different DLL) than the one used
-    //! by the main editor, a crash will occur on exit, if data is left in
-    //! the clipboard. The solution is to enfore all allocations of QMimeData
-    //! using CreateQMimeData().
-    virtual QMimeData* CreateQMimeData() const = 0;
-    virtual void DestroyQMimeData(QMimeData* data) const = 0;
 
 
     //////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////
     // Access for CLevelIndependentFileMan
     // Access for CLevelIndependentFileMan
@@ -478,33 +448,16 @@ struct IEditor
     virtual void ResetViews() = 0;
     virtual void ResetViews() = 0;
     //! Update information in track view dialog.
     //! Update information in track view dialog.
     virtual void ReloadTrackView() = 0;
     virtual void ReloadTrackView() = 0;
-    //! Current position marker
-    virtual Vec3 GetMarkerPosition() = 0;
-    //! Set current position marker.
-    virtual void    SetMarkerPosition(const Vec3& pos) = 0;
-    //! Set current selected region.
-    virtual void    SetSelectedRegion(const AABB& box) = 0;
-    //! Get currently selected region.
-    virtual void    GetSelectedRegion(AABB& box) = 0;
-
-    virtual void SetOperationMode(EOperationMode mode) = 0;
-    virtual EOperationMode GetOperationMode() = 0;
+
     //! Set constrain on specified axis for objects construction and modifications.
     //! Set constrain on specified axis for objects construction and modifications.
     //! @param axis one of AxisConstrains enumerations.
     //! @param axis one of AxisConstrains enumerations.
     virtual void SetAxisConstraints(AxisConstrains axis) = 0;
     virtual void SetAxisConstraints(AxisConstrains axis) = 0;
     //! Get axis constrain for objects construction and modifications.
     //! Get axis constrain for objects construction and modifications.
     virtual AxisConstrains GetAxisConstrains() = 0;
     virtual AxisConstrains GetAxisConstrains() = 0;
-    //! Set whether axes are forced to the same value when they are changed (x = y = z).
-    virtual void SetAxisVectorLock(bool bAxisVectorLock) = 0;
-    //! Get whether axes are forced to the same value when they are changed (x = y = z).
-    virtual bool IsAxisVectorLocked() = 0;
     //! If set, when axis terrain constrain is selected, snapping only to terrain.
     //! If set, when axis terrain constrain is selected, snapping only to terrain.
     virtual void SetTerrainAxisIgnoreObjects(bool bIgnore) = 0;
     virtual void SetTerrainAxisIgnoreObjects(bool bIgnore) = 0;
     virtual bool IsTerrainAxisIgnoreObjects() = 0;
     virtual bool IsTerrainAxisIgnoreObjects() = 0;
-    //! Set current reference coordinate system used when constructing/modifying objects.
-    virtual void SetReferenceCoordSys(RefCoordSys refCoords) = 0;
     //! Get current reference coordinate system used when constructing/modifying objects.
     //! Get current reference coordinate system used when constructing/modifying objects.
-    virtual RefCoordSys GetReferenceCoordSys() = 0;
     virtual XmlNodeRef FindTemplate(const QString& templateName) = 0;
     virtual XmlNodeRef FindTemplate(const QString& templateName) = 0;
     virtual void AddTemplate(const QString& templateName, XmlNodeRef& tmpl) = 0;
     virtual void AddTemplate(const QString& templateName, XmlNodeRef& tmpl) = 0;
 
 
@@ -583,10 +536,6 @@ struct IEditor
     virtual void RegisterNotifyListener(IEditorNotifyListener* listener) = 0;
     virtual void RegisterNotifyListener(IEditorNotifyListener* listener) = 0;
     //! Unregister Editor notifications listener.
     //! Unregister Editor notifications listener.
     virtual void UnregisterNotifyListener(IEditorNotifyListener* listener) = 0;
     virtual void UnregisterNotifyListener(IEditorNotifyListener* listener) = 0;
-    //! Register document notifications listener.
-    virtual void RegisterDocListener(IDocListener* listener) = 0;
-    //! Unregister document notifications listener.
-    virtual void UnregisterDocListener(IDocListener* listener) = 0;
 
 
     virtual void ReduceMemory() = 0;
     virtual void ReduceMemory() = 0;
 
 
@@ -594,13 +543,9 @@ struct IEditor
     virtual void ReloadTemplates() = 0;
     virtual void ReloadTemplates() = 0;
     virtual void ShowStatusText(bool bEnable) = 0;
     virtual void ShowStatusText(bool bEnable) = 0;
 
 
-
     virtual SSystemGlobalEnvironment* GetEnv() = 0;
     virtual SSystemGlobalEnvironment* GetEnv() = 0;
-    virtual IImageUtil* GetImageUtil() = 0;  // Vladimir@conffx
     virtual SEditorSettings* GetEditorSettings() = 0;
     virtual SEditorSettings* GetEditorSettings() = 0;
 
 
-    virtual ILogFile* GetLogFile() = 0;  // Vladimir@conffx
-
     // unload all plugins
     // unload all plugins
     virtual void UnloadPlugins() = 0;
     virtual void UnloadPlugins() = 0;
 
 

+ 1 - 91
Code/Editor/IEditorImpl.cpp

@@ -55,8 +55,6 @@
 #include "MainStatusBar.h"
 #include "MainStatusBar.h"
 
 
 #include "Util/FileUtil_impl.h"
 #include "Util/FileUtil_impl.h"
-#include "Util/ImageUtil_impl.h"
-#include "LogFileImpl.h"
 
 
 #include "Editor/AssetDatabase/AssetDatabaseLocationListener.h"
 #include "Editor/AssetDatabase/AssetDatabaseLocationListener.h"
 #include "Editor/AzAssetBrowser/AzAssetBrowserRequestHandler.h"
 #include "Editor/AzAssetBrowser/AzAssetBrowserRequestHandler.h"
@@ -79,17 +77,13 @@ static CCryEditDoc * theDocument;
 const char* CEditorImpl::m_crashLogFileName = "SessionStatus/editor_statuses.json";
 const char* CEditorImpl::m_crashLogFileName = "SessionStatus/editor_statuses.json";
 
 
 CEditorImpl::CEditorImpl()
 CEditorImpl::CEditorImpl()
-    : m_operationMode(eOperationModeNone)
-    , m_pSystem(nullptr)
+    : m_pSystem(nullptr)
     , m_pFileUtil(nullptr)
     , m_pFileUtil(nullptr)
     , m_pCommandManager(nullptr)
     , m_pCommandManager(nullptr)
     , m_pPluginManager(nullptr)
     , m_pPluginManager(nullptr)
     , m_pViewManager(nullptr)
     , m_pViewManager(nullptr)
     , m_pUndoManager(nullptr)
     , m_pUndoManager(nullptr)
-    , m_marker(0, 0, 0)
     , m_selectedAxis(AXIS_TERRAIN)
     , m_selectedAxis(AXIS_TERRAIN)
-    , m_refCoordsSys(COORDS_LOCAL)
-    , m_bAxisVectorLock(false)
     , m_bUpdates(true)
     , m_bUpdates(true)
     , m_bTerrainAxisIgnoreObjects(false)
     , m_bTerrainAxisIgnoreObjects(false)
     , m_pDisplaySettings(nullptr)
     , m_pDisplaySettings(nullptr)
@@ -109,15 +103,12 @@ CEditorImpl::CEditorImpl()
     , m_bInitialized(false)
     , m_bInitialized(false)
     , m_bExiting(false)
     , m_bExiting(false)
     , m_QtApplication(static_cast<Editor::EditorQtApplication*>(qApp))
     , m_QtApplication(static_cast<Editor::EditorQtApplication*>(qApp))
-    , m_pImageUtil(nullptr)
-    , m_pLogFile(nullptr)
 {
 {
     // note that this is a call into EditorCore.dll, which stores the g_pEditorPointer for all shared modules that share EditorCore.dll
     // note that this is a call into EditorCore.dll, which stores the g_pEditorPointer for all shared modules that share EditorCore.dll
     // this means that they don't need to do SetIEditor(...) themselves and its available immediately
     // this means that they don't need to do SetIEditor(...) themselves and its available immediately
     SetIEditor(this);
     SetIEditor(this);
 
 
     m_pFileUtil = new CFileUtil_impl();
     m_pFileUtil = new CFileUtil_impl();
-    m_pLogFile = new CLogFileImpl();
     m_pLevelIndependentFileMan = new CLevelIndependentFileMan;
     m_pLevelIndependentFileMan = new CLevelIndependentFileMan;
     SetPrimaryCDFolder();
     SetPrimaryCDFolder();
     gSettings.Load();
     gSettings.Load();
@@ -135,9 +126,6 @@ CEditorImpl::CEditorImpl()
     m_pSequenceManager = new CTrackViewSequenceManager;
     m_pSequenceManager = new CTrackViewSequenceManager;
     m_pAnimationContext = new CAnimationContext;
     m_pAnimationContext = new CAnimationContext;
 
 
-    m_pImageUtil = new CImageUtil_impl();
-    m_selectedRegion.min = Vec3(0, 0, 0);
-    m_selectedRegion.max = Vec3(0, 0, 0);
     DetectVersion();
     DetectVersion();
     RegisterTools();
     RegisterTools();
 
 
@@ -280,8 +268,6 @@ CEditorImpl::~CEditorImpl()
     SAFE_DELETE(m_pErrorReport);
     SAFE_DELETE(m_pErrorReport);
 
 
     SAFE_DELETE(m_pFileUtil); // Vladimir@Conffx
     SAFE_DELETE(m_pFileUtil); // Vladimir@Conffx
-    SAFE_DELETE(m_pImageUtil); // Vladimir@Conffx
-    SAFE_DELETE(m_pLogFile); // Vladimir@Conffx
 }
 }
 
 
 void CEditorImpl::SetPrimaryCDFolder()
 void CEditorImpl::SetPrimaryCDFolder()
@@ -482,17 +468,6 @@ IMainStatusBar* CEditorImpl::GetMainStatusBar()
     return MainWindow::instance()->StatusBar();
     return MainWindow::instance()->StatusBar();
 }
 }
 
 
-void CEditorImpl::SetOperationMode(EOperationMode mode)
-{
-    m_operationMode = mode;
-    gSettings.operationMode = mode;
-}
-
-EOperationMode CEditorImpl::GetOperationMode()
-{
-    return m_operationMode;
-}
-
 void CEditorImpl::SetAxisConstraints(AxisConstrains axisFlags)
 void CEditorImpl::SetAxisConstraints(AxisConstrains axisFlags)
 {
 {
     m_selectedAxis = axisFlags;
     m_selectedAxis = axisFlags;
@@ -518,29 +493,6 @@ bool CEditorImpl::IsTerrainAxisIgnoreObjects()
     return m_bTerrainAxisIgnoreObjects;
     return m_bTerrainAxisIgnoreObjects;
 }
 }
 
 
-void CEditorImpl::SetReferenceCoordSys(RefCoordSys refCoords)
-{
-    m_refCoordsSys = refCoords;
-
-    // Update all views.
-    UpdateViews(eUpdateObjects, nullptr);
-
-    // Update the construction plane infos.
-    CViewport* pViewport = GetActiveView();
-    if (pViewport)
-    {
-        pViewport->MakeConstructionPlane(GetIEditor()->GetAxisConstrains());
-    }
-
-    Notify(eNotify_OnRefCoordSysChange);
-}
-
-RefCoordSys CEditorImpl::GetReferenceCoordSys()
-{
-    return m_refCoordsSys;
-}
-
-
 CSettingsManager* CEditorImpl::GetSettingsManager()
 CSettingsManager* CEditorImpl::GetSettingsManager()
 {
 {
     // Do not go any further before XML class is ready to use
     // Do not go any further before XML class is ready to use
@@ -631,16 +583,6 @@ const QColor& CEditorImpl::GetColorByName(const QString& name)
     return m_QtApplication->GetColorByName(name);
     return m_QtApplication->GetColorByName(name);
 }
 }
 
 
-void CEditorImpl::SetSelectedRegion(const AABB& box)
-{
-    m_selectedRegion = box;
-}
-
-void CEditorImpl::GetSelectedRegion(AABB& box)
-{
-    box = m_selectedRegion;
-}
-
 const QtViewPane* CEditorImpl::OpenView(QString sViewClassName, bool reuseOpened)
 const QtViewPane* CEditorImpl::OpenView(QString sViewClassName, bool reuseOpened)
 {
 {
     auto openMode = reuseOpened ? QtViewPane::OpenMode::None : QtViewPane::OpenMode::MultiplePanes;
     auto openMode = reuseOpened ? QtViewPane::OpenMode::None : QtViewPane::OpenMode::MultiplePanes;
@@ -1092,24 +1034,6 @@ ITrackViewSequenceManager* CEditorImpl::GetSequenceManagerInterface()
     return GetSequenceManager();
     return GetSequenceManager();
 }
 }
 
 
-void CEditorImpl::RegisterDocListener(IDocListener* listener)
-{
-    CCryEditDoc* doc = GetDocument();
-    if (doc)
-    {
-        doc->RegisterListener(listener);
-    }
-}
-
-void CEditorImpl::UnregisterDocListener(IDocListener* listener)
-{
-    CCryEditDoc* doc = GetDocument();
-    if (doc)
-    {
-        doc->UnregisterListener(listener);
-    }
-}
-
 void CEditorImpl::StartLevelErrorReportRecording()
 void CEditorImpl::StartLevelErrorReportRecording()
 {
 {
     IErrorReport* errorReport = GetErrorReport();
     IErrorReport* errorReport = GetErrorReport();
@@ -1241,17 +1165,3 @@ SEditorSettings* CEditorImpl::GetEditorSettings()
     return &gSettings;
     return &gSettings;
 }
 }
 
 
-IImageUtil* CEditorImpl::GetImageUtil()
-{
-    return m_pImageUtil;
-}
-
-QMimeData* CEditorImpl::CreateQMimeData() const
-{
-    return new QMimeData();
-}
-
-void CEditorImpl::DestroyQMimeData(QMimeData* data) const
-{
-    delete data;
-}

+ 0 - 27
Code/Editor/IEditorImpl.h

@@ -161,23 +161,13 @@ public:
     void UpdateViews(int flags, const AABB* updateRegion) override;
     void UpdateViews(int flags, const AABB* updateRegion) override;
     void ResetViews() override;
     void ResetViews() override;
     void ReloadTrackView() override;
     void ReloadTrackView() override;
-    Vec3 GetMarkerPosition() override { return m_marker; };
-    void SetMarkerPosition(const Vec3& pos) override { m_marker = pos; };
-    void    SetSelectedRegion(const AABB& box) override;
-    void    GetSelectedRegion(AABB& box) override;
     bool AddToolbarItem(uint8 iId, IUIEvent* pIHandler);
     bool AddToolbarItem(uint8 iId, IUIEvent* pIHandler);
     void SetDataModified() override;
     void SetDataModified() override;
-    void SetOperationMode(EOperationMode mode) override;
-    EOperationMode GetOperationMode() override;
 
 
     void SetAxisConstraints(AxisConstrains axis) override;
     void SetAxisConstraints(AxisConstrains axis) override;
     AxisConstrains GetAxisConstrains() override;
     AxisConstrains GetAxisConstrains() override;
-    void SetAxisVectorLock(bool bAxisVectorLock) override { m_bAxisVectorLock = bAxisVectorLock; }
-    bool IsAxisVectorLocked() override { return m_bAxisVectorLock; }
     void SetTerrainAxisIgnoreObjects(bool bIgnore) override;
     void SetTerrainAxisIgnoreObjects(bool bIgnore) override;
     bool IsTerrainAxisIgnoreObjects() override;
     bool IsTerrainAxisIgnoreObjects() override;
-    void SetReferenceCoordSys(RefCoordSys refCoords) override;
-    RefCoordSys GetReferenceCoordSys() override;
     XmlNodeRef FindTemplate(const QString& templateName) override;
     XmlNodeRef FindTemplate(const QString& templateName) override;
     void AddTemplate(const QString& templateName, XmlNodeRef& tmpl) override;
     void AddTemplate(const QString& templateName, XmlNodeRef& tmpl) override;
 
 
@@ -231,10 +221,6 @@ public:
     void NotifyExcept(EEditorNotifyEvent event, IEditorNotifyListener* listener) override;
     void NotifyExcept(EEditorNotifyEvent event, IEditorNotifyListener* listener) override;
     void RegisterNotifyListener(IEditorNotifyListener* listener) override;
     void RegisterNotifyListener(IEditorNotifyListener* listener) override;
     void UnregisterNotifyListener(IEditorNotifyListener* listener) override;
     void UnregisterNotifyListener(IEditorNotifyListener* listener) override;
-    //! Register document notifications listener.
-    void RegisterDocListener(IDocListener* listener) override;
-    //! Unregister document notifications listener.
-    void UnregisterDocListener(IDocListener* listener) override;
 
 
     void ReduceMemory() override;
     void ReduceMemory() override;
     ESystemConfigPlatform GetEditorConfigPlatform() const override;
     ESystemConfigPlatform GetEditorConfigPlatform() const override;
@@ -242,16 +228,11 @@ public:
     void ShowStatusText(bool bEnable) override;
     void ShowStatusText(bool bEnable) override;
 
 
     SSystemGlobalEnvironment* GetEnv() override;
     SSystemGlobalEnvironment* GetEnv() override;
-    IImageUtil* GetImageUtil() override;  // Vladimir@conffx
     SEditorSettings* GetEditorSettings() override;
     SEditorSettings* GetEditorSettings() override;
-    ILogFile* GetLogFile() override { return m_pLogFile; }
 
 
     void UnloadPlugins() override;
     void UnloadPlugins() override;
     void LoadPlugins() override;
     void LoadPlugins() override;
 
 
-    QMimeData* CreateQMimeData() const override;
-    void DestroyQMimeData(QMimeData* data) const override;
-
 protected:
 protected:
 
 
     AZStd::string LoadProjectIdFromProjectData();
     AZStd::string LoadProjectIdFromProjectData();
@@ -263,18 +244,13 @@ protected:
     //! List of all notify listeners.
     //! List of all notify listeners.
     std::list<IEditorNotifyListener*> m_listeners;
     std::list<IEditorNotifyListener*> m_listeners;
 
 
-    EOperationMode m_operationMode;
     ISystem* m_pSystem;
     ISystem* m_pSystem;
     IFileUtil* m_pFileUtil;
     IFileUtil* m_pFileUtil;
     CEditorCommandManager* m_pCommandManager;
     CEditorCommandManager* m_pCommandManager;
     CPluginManager* m_pPluginManager;
     CPluginManager* m_pPluginManager;
     CViewManager*   m_pViewManager;
     CViewManager*   m_pViewManager;
     CUndoManager* m_pUndoManager;
     CUndoManager* m_pUndoManager;
-    Vec3 m_marker;
-    AABB m_selectedRegion;
     AxisConstrains m_selectedAxis;
     AxisConstrains m_selectedAxis;
-    RefCoordSys m_refCoordsSys;
-    bool m_bAxisVectorLock;
     bool m_bUpdates;
     bool m_bUpdates;
     bool m_bTerrainAxisIgnoreObjects;
     bool m_bTerrainAxisIgnoreObjects;
     SFileVersion m_fileVersion;
     SFileVersion m_fileVersion;
@@ -318,9 +294,6 @@ protected:
     AzAssetBrowserRequestHandler* m_pAssetBrowserRequestHandler;
     AzAssetBrowserRequestHandler* m_pAssetBrowserRequestHandler;
     AssetEditorRequestsHandler* m_assetEditorRequestsHandler;
     AssetEditorRequestsHandler* m_assetEditorRequestsHandler;
 
 
-    IImageUtil* m_pImageUtil;  // Vladimir@conffx
-    ILogFile* m_pLogFile;  // Vladimir@conffx
-
     AZStd::mutex m_pluginMutex; // protect any pointers that come from plugins, such as the source control cached pointer.
     AZStd::mutex m_pluginMutex; // protect any pointers that come from plugins, such as the source control cached pointer.
     static const char* m_crashLogFileName;
     static const char* m_crashLogFileName;
 };
 };

+ 0 - 65
Code/Editor/Include/IImageUtil.h

@@ -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
- *
- */
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IIMAGEUTIL_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IIMAGEUTIL_H
-#pragma once
-
-#include "Util/Image.h"
-class CAlphaBitmap;
-
-struct IImageUtil
-{
-    virtual ~IImageUtil() = default;
-    
-    //! Load image, detect image type by file extension.
-    // Arguments:
-    //   pQualityLoss - 0 if info is not needed, pointer to the result otherwise - not need to preinitialize
-    virtual bool LoadImage(const QString& fileName, CImageEx& image, bool* pQualityLoss = 0) = 0;
-
-    //! Save image, detect image type by file extension.
-    virtual bool SaveImage(const QString& fileName, CImageEx& image) = 0;
-
-    // General image fucntions
-    virtual bool LoadJPEG(const QString& strFileName, CImageEx& image) = 0;
-
-    virtual bool SaveJPEG(const QString& strFileName, CImageEx& image) = 0;
-
-    virtual bool SaveBitmap(const QString& szFileName, CImageEx& image) = 0;
-
-    virtual bool LoadBmp(const QString& file, CImageEx& image) = 0;
-
-    virtual bool SavePGM(const QString& fileName, const CImageEx& image) = 0;
-
-    virtual bool LoadPGM(const QString& fileName, CImageEx& image) = 0;
-
-    //! Scale source image to fit size of target image.
-    virtual void ScaleToFit(const CByteImage& srcImage, CByteImage& trgImage) = 0;
-
-    //! Scale source image to fit size of target image.
-    virtual void ScaleToFit(const CImageEx& srcImage, CImageEx& trgImage) = 0;
-
-    //! Scale source image to fit twice side by side in target image.
-    virtual void ScaleToDoubleFit(const CImageEx& srcImage, CImageEx& trgImage) = 0;
-
-    //! Scale source image twice down image with filering
-    enum _EAddrMode
-    {
-        WRAP, CLAMP
-    };
-    virtual void DownScaleSquareTextureTwice(const CImageEx& srcImage, CImageEx& trgImage, _EAddrMode eAddressingMode = WRAP) = 0;
-
-    //! Smooth image.
-    virtual void SmoothImage(CByteImage& image, int numSteps) = 0;
-
-    //! behavior outside of the texture is not defined
-    //! \param iniX in fix point 24.8
-    //! \param iniY in fix point 24.8
-    //! \return 0..255
-    virtual unsigned char GetBilinearFilteredAt(const int iniX256, const int iniY256, const CByteImage& image) = 0;
-};
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IIMAGEUTIL_H

+ 0 - 33
Code/Editor/Include/ILogFile.h

@@ -1,33 +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_EDITORCORE_INCLUDE_ILOGFILE_H
-#define CRYINCLUDE_EDITORCORE_INCLUDE_ILOGFILE_H
-
-#pragma once
-
-struct ILogFile
-{
-    virtual ~ILogFile() = default;
-    
-    virtual const char* GetLogFileName() = 0;
-
-    //! Write to log spanpshot of current process memory usage.
-    virtual QString GetMemUsage() = 0;
-
-    virtual void WriteString(const char* pszString) = 0;
-    virtual void WriteLine(const char* pszLine) = 0;
-    virtual void FormatLine(const char* pszMessage, ...) = 0;
-
-    // logs some useful information
-    // should be called after CryLog() is available
-    virtual void AboutSystem() = 0;
-
-    virtual void Warning(const char* format, ...) = 0;
-};
-
-#endif // CRYINCLUDE_EDITORCORE_INCLUDE_ILOGFILE_H

+ 1 - 16
Code/Editor/Lib/Tests/IEditorMock.h

@@ -81,26 +81,15 @@ public:
     MOCK_METHOD0(GetActiveView, class CViewport* ());
     MOCK_METHOD0(GetActiveView, class CViewport* ());
     MOCK_METHOD1(SetActiveView, void(CViewport*));
     MOCK_METHOD1(SetActiveView, void(CViewport*));
     MOCK_METHOD0(GetFileMonitor, struct IEditorFileMonitor* ());
     MOCK_METHOD0(GetFileMonitor, struct IEditorFileMonitor* ());
-    MOCK_CONST_METHOD0(CreateQMimeData, QMimeData* ());
-    MOCK_CONST_METHOD1(DestroyQMimeData, void(QMimeData*));
     MOCK_METHOD0(GetLevelIndependentFileMan, class CLevelIndependentFileMan* ());
     MOCK_METHOD0(GetLevelIndependentFileMan, class CLevelIndependentFileMan* ());
     MOCK_METHOD2(UpdateViews, void(int , const AABB* ));
     MOCK_METHOD2(UpdateViews, void(int , const AABB* ));
     MOCK_METHOD0(ResetViews, void());
     MOCK_METHOD0(ResetViews, void());
     MOCK_METHOD0(ReloadTrackView, void());
     MOCK_METHOD0(ReloadTrackView, void());
-    MOCK_METHOD0(GetMarkerPosition, Vec3());
-    MOCK_METHOD1(SetMarkerPosition, void(const Vec3&));
-    MOCK_METHOD1(SetSelectedRegion, void(const AABB& box));
-    MOCK_METHOD1(GetSelectedRegion, void(AABB& box));
-    MOCK_METHOD1(SetOperationMode, void(EOperationMode ));
-    MOCK_METHOD0(GetOperationMode, EOperationMode());
+
     MOCK_METHOD1(SetAxisConstraints, void(AxisConstrains ));
     MOCK_METHOD1(SetAxisConstraints, void(AxisConstrains ));
     MOCK_METHOD0(GetAxisConstrains, AxisConstrains());
     MOCK_METHOD0(GetAxisConstrains, AxisConstrains());
-    MOCK_METHOD1(SetAxisVectorLock, void(bool));
-    MOCK_METHOD0(IsAxisVectorLocked, bool());
     MOCK_METHOD1(SetTerrainAxisIgnoreObjects, void(bool));
     MOCK_METHOD1(SetTerrainAxisIgnoreObjects, void(bool));
     MOCK_METHOD0(IsTerrainAxisIgnoreObjects, bool());
     MOCK_METHOD0(IsTerrainAxisIgnoreObjects, bool());
-    MOCK_METHOD1(SetReferenceCoordSys, void(RefCoordSys ));
-    MOCK_METHOD0(GetReferenceCoordSys, RefCoordSys());
     MOCK_METHOD1(FindTemplate, XmlNodeRef(const QString& ));
     MOCK_METHOD1(FindTemplate, XmlNodeRef(const QString& ));
     MOCK_METHOD2(AddTemplate, void(const QString& , XmlNodeRef& ));
     MOCK_METHOD2(AddTemplate, void(const QString& , XmlNodeRef& ));
     MOCK_METHOD2(OpenView, const QtViewPane* (QString , bool ));
     MOCK_METHOD2(OpenView, const QtViewPane* (QString , bool ));
@@ -140,16 +129,12 @@ public:
     MOCK_METHOD2(NotifyExcept, void(EEditorNotifyEvent , IEditorNotifyListener* ));
     MOCK_METHOD2(NotifyExcept, void(EEditorNotifyEvent , IEditorNotifyListener* ));
     MOCK_METHOD1(RegisterNotifyListener, void(IEditorNotifyListener* ));
     MOCK_METHOD1(RegisterNotifyListener, void(IEditorNotifyListener* ));
     MOCK_METHOD1(UnregisterNotifyListener, void(IEditorNotifyListener* ));
     MOCK_METHOD1(UnregisterNotifyListener, void(IEditorNotifyListener* ));
-    MOCK_METHOD1(RegisterDocListener, void(IDocListener* ));
-    MOCK_METHOD1(UnregisterDocListener, void(IDocListener* ));
     MOCK_METHOD0(ReduceMemory, void());
     MOCK_METHOD0(ReduceMemory, void());
     MOCK_CONST_METHOD0(GetEditorConfigPlatform, ESystemConfigPlatform());
     MOCK_CONST_METHOD0(GetEditorConfigPlatform, ESystemConfigPlatform());
     MOCK_METHOD0(ReloadTemplates, void());
     MOCK_METHOD0(ReloadTemplates, void());
     MOCK_METHOD1(ShowStatusText, void(bool ));
     MOCK_METHOD1(ShowStatusText, void(bool ));
     MOCK_METHOD0(GetEnv, SSystemGlobalEnvironment* ());
     MOCK_METHOD0(GetEnv, SSystemGlobalEnvironment* ());
-    MOCK_METHOD0(GetImageUtil, IImageUtil* ());
     MOCK_METHOD0(GetEditorSettings, SEditorSettings* ());
     MOCK_METHOD0(GetEditorSettings, SEditorSettings* ());
-    MOCK_METHOD0(GetLogFile, ILogFile* ());
     MOCK_METHOD0(UnloadPlugins, void());
     MOCK_METHOD0(UnloadPlugins, void());
     MOCK_METHOD0(LoadPlugins, void());
     MOCK_METHOD0(LoadPlugins, void());
     MOCK_METHOD1(GetSearchPath, QString(EEditorPathName));
     MOCK_METHOD1(GetSearchPath, QString(EEditorPathName));

+ 0 - 54
Code/Editor/LogFileImpl.cpp

@@ -1,54 +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 "LogFileImpl.h"
-
-// Interface which we expose via GetIEditor()
-#include "LogFile.h"
-
-const char* CLogFileImpl::GetLogFileName()
-{
-    return CLogFile::GetLogFileName();
-}
-
-QString CLogFileImpl::GetMemUsage()
-{
-    return CLogFile::GetMemUsage();
-}
-
-void CLogFileImpl::WriteString(const char* pszString)
-{
-    CLogFile::WriteString(pszString);
-}
-
-void CLogFileImpl::WriteLine(const char* pszLine)
-{
-    CLogFile::WriteLine(pszLine);
-}
-
-void CLogFileImpl::FormatLine(const char* pszMessage, ...)
-{
-    va_list ArgList;
-    va_start(ArgList, pszMessage);
-    CLogFile::FormatLineV(pszMessage, ArgList);
-    va_end(ArgList);
-}
-
-void CLogFileImpl::AboutSystem()
-{
-    CLogFile::AboutSystem();
-}
-
-void CLogFileImpl::Warning(const char* format, ...)
-{
-    va_list ArgList;
-    va_start(ArgList, format);
-    ::WarningV(format, ArgList);
-    va_end(ArgList);
-}

+ 0 - 34
Code/Editor/LogFileImpl.h

@@ -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
- *
- */
-#ifndef CRYINCLUDE_EDITOR_LOGFILEIMPL_H
-#define CRYINCLUDE_EDITOR_LOGFILEIMPL_H
-#pragma once
-
-#include <Include/ILogFile.h>
-
-class CLogFileImpl
-    : public ILogFile
-{
-public:
-    virtual const char* GetLogFileName() override;
-
-    //! Write to log spanpshot of current process memory usage.
-    virtual QString GetMemUsage() override;
-
-    virtual void WriteString(const char* pszString) override;
-    virtual void WriteLine(const char* pszLine) override;
-    virtual void FormatLine(const char* pszMessage, ...) override;
-
-    // logs some useful information
-    // should be called after CryLog() is available
-    virtual void AboutSystem() override;
-
-    virtual void Warning(const char* format, ...) override;
-};
-
-#endif // CRYINCLUDE_EDITOR_LOGFILEIMPL_H

+ 0 - 74
Code/Editor/LogFile_mac.mm

@@ -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
- *
- */
-
-#import <Cocoa/Cocoa.h>
-
-#include <QString>
-
-QString operatingSystemVersionString()
-{
-    NSString* operatingSystemVersionString = [[NSProcessInfo processInfo] operatingSystemVersionString];
-    return QString::fromNSString(operatingSystemVersionString);
-}
-
-QString graphicsCardName()
-{
-    QString name;
-
-    // Get dictionary of all the PCI Devicces
-    CFMutableDictionaryRef matchDict = IOServiceMatching("IOPCIDevice");
-
-    // Create an iterator
-    io_iterator_t iterator;
-
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 120000 // Needs to be 120000 instead of __MAC_12_0 because that will not be defined in earlier versions on the SDK.
-    if (IOServiceGetMatchingServices(kIOMainPortDefault,matchDict,
-                                     &iterator) == kIOReturnSuccess)
-#else
-    if (IOServiceGetMatchingServices(kIOMasterPortDefault,matchDict,
-                                     &iterator) == kIOReturnSuccess)
-#endif
-    {
-        // Iterator for devices found
-        io_registry_entry_t regEntry;
-
-        while ((regEntry = IOIteratorNext(iterator))) {
-            // Put this services object into a dictionary object.
-            CFMutableDictionaryRef serviceDictionary;
-            if (IORegistryEntryCreateCFProperties(regEntry,
-                                                  &serviceDictionary,
-                                                  kCFAllocatorDefault,
-                                                  kNilOptions) != kIOReturnSuccess)
-            {
-                // Service dictionary creation failed.
-                IOObjectRelease(regEntry);
-                continue;
-            }
-            const void *GPUModel = CFDictionaryGetValue(serviceDictionary, @"model");
-
-            if (GPUModel != nil) {
-                if (CFGetTypeID(GPUModel) == CFDataGetTypeID()) {
-                    // Create a string from the CFDataRef.
-                    NSString *modelName = [[NSString alloc] initWithData:
-                                           (NSData *)GPUModel encoding:NSASCIIStringEncoding];
-
-                    name = QString::fromNSString(modelName);
-                    [modelName release];
-                }
-            }
-            // Release the dictionary
-            CFRelease(serviceDictionary);
-            // Release the serviceObject
-            IOObjectRelease(regEntry);
-        }
-        // Release the iterator
-        IOObjectRelease(iterator);
-    }
-
-    return name;
-}

+ 0 - 1
Code/Editor/Platform/Mac/platform_mac_files.cmake

@@ -8,7 +8,6 @@
 
 
 set(FILES
 set(FILES
     Editor/Core/QtEditorApplication_mac.mm
     Editor/Core/QtEditorApplication_mac.mm
-    ../../LogFile_mac.mm
     ../../WindowObserver_mac.h
     ../../WindowObserver_mac.h
     ../../WindowObserver_mac.mm
     ../../WindowObserver_mac.mm
     ../../MainWindow_mac.mm
     ../../MainWindow_mac.mm

+ 1 - 0
Code/Editor/Resource.h

@@ -173,6 +173,7 @@
 #define ID_SWITCHCAMERA_SEQUENCECAMERA             33701
 #define ID_SWITCHCAMERA_SEQUENCECAMERA             33701
 #define ID_SWITCHCAMERA_SELECTEDCAMERA             33702
 #define ID_SWITCHCAMERA_SELECTEDCAMERA             33702
 #define ID_TV_RECORD_AUTO                          33703
 #define ID_TV_RECORD_AUTO                          33703
+#define ID_TV_STOP_HARD_RESET                      33704
 #define ID_VIEW_OPENVIEWPANE                       33709
 #define ID_VIEW_OPENVIEWPANE                       33709
 #define ID_VIEW_OPENPANE_FIRST          33712
 #define ID_VIEW_OPENPANE_FIRST          33712
 #define ID_VIEW_OPENPANE_LAST           33811
 #define ID_VIEW_OPENPANE_LAST           33811

+ 0 - 6
Code/Editor/Settings.h

@@ -361,12 +361,6 @@ AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING
 
 
     SGUI_Settings gui;
     SGUI_Settings gui;
 
 
-    // Read only parameter.
-    // Refects the status of GetIEditor()->GetOperationMode
-    // To change current operation mode use GetIEditor()->SetOperationMode
-    // see EOperationMode
-    int operationMode;
-
     // For the texture browser configurations.
     // For the texture browser configurations.
     STextureBrowserSettings sTextureBrowserSettings;
     STextureBrowserSettings sTextureBrowserSettings;
 
 

+ 1 - 1
Code/Editor/TrackView/2DBezierKeyUIControls.cpp

@@ -15,7 +15,7 @@
 #include "Controls/ReflectedPropertyControl/ReflectedPropertyItem.h"
 #include "Controls/ReflectedPropertyControl/ReflectedPropertyItem.h"
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool C2DBezierKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool C2DBezierKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/AssetBlendKeyUIControls.cpp

@@ -34,7 +34,7 @@ void CAssetBlendKeyUIControls::ResetStartEndLimits(float assetBlendKeyDuration)
     mv_blendOutTime.GetVar()->SetLimits(time_zero, assetBlendKeyDuration, step, true, true);
     mv_blendOutTime.GetVar()->SetLimits(time_zero, assetBlendKeyDuration, step, true, true);
 }
 }
 
 
-bool CAssetBlendKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CAssetBlendKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 4 - 4
Code/Editor/TrackView/AtomOutputFrameCapture.cpp

@@ -13,7 +13,7 @@
 #include <Atom/RPI.Public/Scene.h>
 #include <Atom/RPI.Public/Scene.h>
 #include <Atom/RPI.Public/View.h>
 #include <Atom/RPI.Public/View.h>
 #include <Atom/RPI.Reflect/System/RenderPipelineDescriptor.h>
 #include <Atom/RPI.Reflect/System/RenderPipelineDescriptor.h>
-#include <PostProcess/PostProcessFeatureProcessor.h>
+#include <Atom/Feature/PostProcess/PostProcessFeatureProcessorInterface.h>
 #include <AzCore/Component/TransformBus.h>
 #include <AzCore/Component/TransformBus.h>
 #include <AzCore/Math/MatrixUtils.h>
 #include <AzCore/Math/MatrixUtils.h>
 #include <AzCore/Name/Name.h>
 #include <AzCore/Name/Name.h>
@@ -49,7 +49,7 @@ namespace TrackView
         m_view = AZ::RPI::View::CreateView(viewName, AZ::RPI::View::UsageCamera);
         m_view = AZ::RPI::View::CreateView(viewName, AZ::RPI::View::UsageCamera);
         m_renderPipeline->SetDefaultView(m_view);
         m_renderPipeline->SetDefaultView(m_view);
         m_targetView = scene.GetDefaultRenderPipeline()->GetDefaultView();
         m_targetView = scene.GetDefaultRenderPipeline()->GetDefaultView();
-        if (AZ::Render::PostProcessFeatureProcessor* fp = scene.GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessor>())
+        if (auto* fp = scene.GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>())
         {
         {
             // This will be set again to mimic the active camera in UpdateView
             // This will be set again to mimic the active camera in UpdateView
             fp->SetViewAlias(m_view, m_targetView);
             fp->SetViewAlias(m_view, m_targetView);
@@ -58,7 +58,7 @@ namespace TrackView
 
 
     void AtomOutputFrameCapture::DestroyPipeline(AZ::RPI::Scene& scene)
     void AtomOutputFrameCapture::DestroyPipeline(AZ::RPI::Scene& scene)
     {
     {
-        if (AZ::Render::PostProcessFeatureProcessor* fp = scene.GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessor>())
+        if (auto* fp = scene.GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>())
         {
         {
             // Remove view alias introduced in CreatePipeline and UpdateView
             // Remove view alias introduced in CreatePipeline and UpdateView
             fp->RemoveViewAlias(m_view);
             fp->RemoveViewAlias(m_view);
@@ -76,7 +76,7 @@ namespace TrackView
         {
         {
             if (AZ::RPI::Scene* scene = SceneFromGameEntityContext())
             if (AZ::RPI::Scene* scene = SceneFromGameEntityContext())
             {
             {
-                if (AZ::Render::PostProcessFeatureProcessor* fp = scene->GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessor>())
+                if (auto* fp = scene->GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>())
                 {
                 {
                     fp->SetViewAlias(m_view, targetView);
                     fp->SetViewAlias(m_view, targetView);
                     m_targetView = targetView;
                     m_targetView = targetView;

+ 1 - 1
Code/Editor/TrackView/CaptureKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewKeyPropertiesDlg.h"
 #include "TrackViewKeyPropertiesDlg.h"
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CCaptureKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CCaptureKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/CommentKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewKeyPropertiesDlg.h"
 #include "TrackViewKeyPropertiesDlg.h"
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CCommentKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CCommentKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/ConsoleKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewKeyPropertiesDlg.h"  // for CTrackViewKeyUIControls
 #include "TrackViewKeyPropertiesDlg.h"  // for CTrackViewKeyUIControls
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CConsoleKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CConsoleKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/EventKeyUIControls.cpp

@@ -15,7 +15,7 @@
 #include <CryCommon/Maestro/Types/AnimParamType.h>  // AnimParamType
 #include <CryCommon/Maestro/Types/AnimParamType.h>  // AnimParamType
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CEventKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CEventKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/GotoKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewKeyPropertiesDlg.h"
 #include "TrackViewKeyPropertiesDlg.h"
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CGotoKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CGotoKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 13 - 13
Code/Editor/TrackView/KeyUIControls.h

@@ -36,7 +36,7 @@ public:
     {
     {
         return trackType == eAnimCurveType_BezierFloat;
         return trackType == eAnimCurveType_BezierFloat;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 0; }
     unsigned int GetPriority() const override { return 0; }
@@ -98,7 +98,7 @@ public:
         return valueType == AnimValueType::AssetBlend;
         return valueType == AnimValueType::AssetBlend;
     }
     }
 
 
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -145,7 +145,7 @@ public:
     {
     {
         return paramType == AnimParamType::Capture;
         return paramType == AnimParamType::Capture;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -207,7 +207,7 @@ public:
     {
     {
         return paramType == AnimParamType::CommentText;
         return paramType == AnimParamType::CommentText;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -240,7 +240,7 @@ public:
     {
     {
         return paramType == AnimParamType::Console;
         return paramType == AnimParamType::Console;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -282,7 +282,7 @@ public:
     {
     {
         return paramType == AnimParamType::Event;
         return paramType == AnimParamType::Event;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -324,7 +324,7 @@ public:
             return false;
             return false;
         }
         }
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -390,7 +390,7 @@ public:
 
 
     //-----------------------------------------------------------------------------
     //-----------------------------------------------------------------------------
     //!
     //!
-    bool OnKeySelectionChange(CTrackViewKeyBundle& keys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& keys) override;
 
 
     //-----------------------------------------------------------------------------
     //-----------------------------------------------------------------------------
     //!
     //!
@@ -437,7 +437,7 @@ public:
     {
     {
         return valueType == AnimValueType::Select;
         return valueType == AnimValueType::Select;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -490,7 +490,7 @@ public:
     {
     {
         return paramType == AnimParamType::Sequence;
         return paramType == AnimParamType::Sequence;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -535,7 +535,7 @@ public:
     {
     {
         return paramType == AnimParamType::Sound;
         return paramType == AnimParamType::Sound;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -575,7 +575,7 @@ public:
     {
     {
         return paramType == AnimParamType::TimeRanges;
         return paramType == AnimParamType::TimeRanges;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }
@@ -610,7 +610,7 @@ public:
     {
     {
         return paramType == AnimParamType::TrackEvent;
         return paramType == AnimParamType::TrackEvent;
     }
     }
-    bool OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys) override;
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
     void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& selectedKeys) override;
 
 
     unsigned int GetPriority() const override { return 1; }
     unsigned int GetPriority() const override { return 1; }

+ 1 - 1
Code/Editor/TrackView/ScreenFaderKeyUIControls.cpp

@@ -18,7 +18,7 @@
 #include "TrackViewKeyPropertiesDlg.h"
 #include "TrackViewKeyPropertiesDlg.h"
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-bool CScreenFaderKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& keys)
+bool CScreenFaderKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& keys)
 {
 {
     if (!keys.AreAllKeysOfSameType())
     if (!keys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/SelectKeyUIControls.cpp

@@ -23,7 +23,7 @@ CSelectKeyUIControls::~CSelectKeyUIControls()
 }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CSelectKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CSelectKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/SequenceKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewDialog.h"
 #include "TrackViewDialog.h"
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CSequenceKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CSequenceKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/SoundKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewKeyPropertiesDlg.h"  // for CTrackViewKeyUIControls
 #include "TrackViewKeyPropertiesDlg.h"  // for CTrackViewKeyUIControls
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CSoundKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CSoundKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/TimeRangeKeyUIControls.cpp

@@ -17,7 +17,7 @@
 #include "TrackViewKeyPropertiesDlg.h"              // for CTrackViewKeyUIControls// Editor
 #include "TrackViewKeyPropertiesDlg.h"              // for CTrackViewKeyUIControls// Editor
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CTimeRangeKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CTimeRangeKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 1 - 1
Code/Editor/TrackView/TrackEventKeyUIControls.cpp

@@ -18,7 +18,7 @@
 #include "TVEventsDialog.h"
 #include "TVEventsDialog.h"
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CTrackEventKeyUIControls::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CTrackEventKeyUIControls::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     if (!selectedKeys.AreAllKeysOfSameType())
     if (!selectedKeys.AreAllKeysOfSameType())
     {
     {

+ 6 - 2
Code/Editor/TrackView/TrackViewAnimNode.cpp

@@ -293,8 +293,12 @@ void CTrackViewAnimNode::BindToEditorObjects()
         if (const AZ::EntityId entityId = GetNodeEntityId();
         if (const AZ::EntityId entityId = GetNodeEntityId();
             entityId.IsValid())
             entityId.IsValid())
         {
         {
-            RegisterEditorObjectListeners(entityId);
-            SetNodeEntityId(entityId);
+            const auto entity = AzToolsFramework::GetEntityById(entityId);
+            if (entity)
+            {
+                RegisterEditorObjectListeners(entityId);
+                SetNodeEntityId(entityId);
+            }
         }
         }
 
 
         if (ownerChanged)
         if (ownerChanged)

+ 3 - 3
Code/Editor/TrackView/TrackViewAnimNode.h

@@ -151,9 +151,9 @@ public:
     virtual CTrackViewTrackBundle GetTracksByParam(const CAnimParamType& paramType) const;
     virtual CTrackViewTrackBundle GetTracksByParam(const CAnimParamType& paramType) const;
 
 
     // Key getters
     // Key getters
-    virtual CTrackViewKeyBundle GetAllKeys() override;
-    virtual CTrackViewKeyBundle GetSelectedKeys() override;
-    virtual CTrackViewKeyBundle GetKeysInTimeRange(const float t0, const float t1) override;
+    CTrackViewKeyBundle GetAllKeys() override;
+    CTrackViewKeyBundle GetSelectedKeys() override;
+    CTrackViewKeyBundle GetKeysInTimeRange(const float t0, const float t1) override;
 
 
     // Type getters
     // Type getters
     AnimNodeType GetType() const;
     AnimNodeType GetType() const;

+ 4 - 4
Code/Editor/TrackView/TrackViewDialog.cpp

@@ -451,11 +451,11 @@ void CTrackViewDialog::InitToolbar()
     {
     {
         QMenu* buttonMenu = new QMenu(this);
         QMenu* buttonMenu = new QMenu(this);
         toolButton->setMenu(buttonMenu);
         toolButton->setMenu(buttonMenu);
-        qaction = buttonMenu->addAction("Stop");
-        connect(qaction, &QAction::triggered, this, &CTrackViewDialog::OnStop);
-        toolButton->addAction(qaction);
+
+        buttonMenu->addAction(qaction);
         qaction = buttonMenu->addAction("Stop with Hard Reset");
         qaction = buttonMenu->addAction("Stop with Hard Reset");
-        qaction->setData(true);
+        qaction->setData(ID_TV_STOP_HARD_RESET);
+        m_actions[ID_TV_STOP_HARD_RESET] = qaction;
         connect(qaction, &QAction::triggered, this, &CTrackViewDialog::OnStopHardReset);
         connect(qaction, &QAction::triggered, this, &CTrackViewDialog::OnStopHardReset);
     }
     }
     m_playToolBar->addWidget(toolButton);
     m_playToolBar->addWidget(toolButton);

+ 10 - 10
Code/Editor/TrackView/TrackViewDopeSheetBase.cpp

@@ -1996,13 +1996,13 @@ void CTrackViewDopeSheetBase::ChangeSequenceTrackSelection(CTrackViewSequence* s
 bool CTrackViewDopeSheetBase::CreateColorKey(CTrackViewTrack* pTrack, float keyTime)
 bool CTrackViewDopeSheetBase::CreateColorKey(CTrackViewTrack* pTrack, float keyTime)
 {
 {
     bool keyCreated = false;
     bool keyCreated = false;
-    Vec3 vColor(0, 0, 0);
+    AZ::Vector3 vColor(0, 0, 0);
     pTrack->GetValue(keyTime, vColor);
     pTrack->GetValue(keyTime, vColor);
 
 
     const AZ::Color defaultColor(
     const AZ::Color defaultColor(
-        clamp_tpl<AZ::u8>(static_cast<AZ::u8>(FloatToIntRet(vColor.x)), 0, 255),
-        clamp_tpl<AZ::u8>(static_cast<AZ::u8>(FloatToIntRet(vColor.y)), 0, 255),
-        clamp_tpl<AZ::u8>(static_cast<AZ::u8>(FloatToIntRet(vColor.z)), 0, 255),
+        clamp_tpl<AZ::u8>(static_cast<AZ::u8>(FloatToIntRet(vColor.GetX())), 0, 255),
+        clamp_tpl<AZ::u8>(static_cast<AZ::u8>(FloatToIntRet(vColor.GetY())), 0, 255),
+        clamp_tpl<AZ::u8>(static_cast<AZ::u8>(FloatToIntRet(vColor.GetZ())), 0, 255),
         255);
         255);
     AzQtComponents::ColorPicker dlg(AzQtComponents::ColorPicker::Configuration::RGB, QString(), this);
     AzQtComponents::ColorPicker dlg(AzQtComponents::ColorPicker::Configuration::RGB, QString(), this);
     dlg.setWindowTitle(tr("Select Color"));
     dlg.setWindowTitle(tr("Select Color"));
@@ -2114,13 +2114,13 @@ void CTrackViewDopeSheetBase::EditSelectedColorKey(CTrackViewTrack* pTrack)
             // init with the first selected key color
             // init with the first selected key color
             m_colorUpdateKeyTime = selectedKeyBundle.GetKey(0).GetTime();
             m_colorUpdateKeyTime = selectedKeyBundle.GetKey(0).GetTime();
 
 
-            Vec3  color;
+            AZ::Vector3  color;
             pTrack->GetValue(m_colorUpdateKeyTime, color);
             pTrack->GetValue(m_colorUpdateKeyTime, color);
 
 
             const AZ::Color defaultColor(
             const AZ::Color defaultColor(
-                clamp_tpl(static_cast<AZ::u8>(FloatToIntRet(color.x)), AZ::u8(0), AZ::u8(255)),
-                clamp_tpl(static_cast<AZ::u8>(FloatToIntRet(color.y)), AZ::u8(0), AZ::u8(255)),
-                clamp_tpl(static_cast<AZ::u8>(FloatToIntRet(color.z)), AZ::u8(0), AZ::u8(255)),
+                clamp_tpl(static_cast<AZ::u8>(FloatToIntRet(color.GetX())), AZ::u8(0), AZ::u8(255)),
+                clamp_tpl(static_cast<AZ::u8>(FloatToIntRet(color.GetY())), AZ::u8(0), AZ::u8(255)),
+                clamp_tpl(static_cast<AZ::u8>(FloatToIntRet(color.GetZ())), AZ::u8(0), AZ::u8(255)),
                 255);
                 255);
 
 
             AzQtComponents::ColorPicker picker(AzQtComponents::ColorPicker::Configuration::RGB);
             AzQtComponents::ColorPicker picker(AzQtComponents::ColorPicker::Configuration::RGB);
@@ -3584,10 +3584,10 @@ void CTrackViewDopeSheetBase::DrawColorGradient(QPainter* painter, const QRect&
     for (int x = rc.left(); x < rc.right(); ++x)
     for (int x = rc.left(); x < rc.right(); ++x)
     {
     {
         // This is really slow. Is there a better way?
         // This is really slow. Is there a better way?
-        Vec3 vColor(0, 0, 0);
+        AZ::Vector3 vColor(0, 0, 0);
         pTrack->GetValue(TimeFromPointUnsnapped(QPoint(x, rc.top())), vColor);
         pTrack->GetValue(TimeFromPointUnsnapped(QPoint(x, rc.top())), vColor);
 
 
-        painter->setPen(ColorLinearToGamma(vColor / 255.0f));
+        painter->setPen(ColorToQColor(AZ::Color(vColor).ToU32LinearToGamma()));
         painter->drawLine(x, rc.top(), x, rc.bottom());
         painter->drawLine(x, rc.top(), x, rc.bottom());
     }
     }
     painter->setPen(pOldPen);
     painter->setPen(pOldPen);

+ 30 - 26
Code/Editor/TrackView/TrackViewKeyPropertiesDlg.cpp

@@ -15,6 +15,9 @@
 // Qt
 // Qt
 #include <QMessageBox>
 #include <QMessageBox>
 
 
+// AzCore
+#include <AzCore/std/sort.h>
+
 // CryCommon
 // CryCommon
 #include <CryCommon/Maestro/Types/AnimValueType.h>
 #include <CryCommon/Maestro/Types/AnimValueType.h>
 
 
@@ -75,7 +78,7 @@ CTrackViewKeyPropertiesDlg::CTrackViewKeyPropertiesDlg(QWidget* hParentWnd)
     m_keyControls.push_back(new CTrackEventKeyUIControls());
     m_keyControls.push_back(new CTrackEventKeyUIControls());
 
 
     // Sort key controls by descending priority
     // Sort key controls by descending priority
-    std::stable_sort(m_keyControls.begin(), m_keyControls.end(),
+    AZStd::stable_sort(m_keyControls.begin(), m_keyControls.end(),
         [](const _smart_ptr<CTrackViewKeyUIControls>& a, const _smart_ptr<CTrackViewKeyUIControls>& b)
         [](const _smart_ptr<CTrackViewKeyUIControls>& a, const _smart_ptr<CTrackViewKeyUIControls>& b)
         {
         {
             return a->GetPriority() > b->GetPriority();
             return a->GetPriority() > b->GetPriority();
@@ -99,10 +102,10 @@ void CTrackViewKeyPropertiesDlg::OnVarChange(IVariable* pVar)
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 void CTrackViewKeyPropertiesDlg::CreateAllVars()
 void CTrackViewKeyPropertiesDlg::CreateAllVars()
 {
 {
-    for (int i = 0; i < (int)m_keyControls.size(); i++)
+    for (const auto& keyControl : m_keyControls)
     {
     {
-        m_keyControls[i]->SetKeyPropertiesDlg(this);
-        m_keyControls[i]->OnCreateVars();
+        keyControl->SetKeyPropertiesDlg(this);
+        keyControl->OnCreateVars();
     }
     }
 }
 }
 
 
@@ -132,21 +135,21 @@ void CTrackViewKeyPropertiesDlg::PopulateVariables(ReflectedPropertyControl* pro
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 void CTrackViewKeyPropertiesDlg::OnKeysChanged(CTrackViewSequence* pSequence)
 void CTrackViewKeyPropertiesDlg::OnKeysChanged(CTrackViewSequence* pSequence)
 {
 {
-    CTrackViewKeyBundle selectedKeys = pSequence->GetSelectedKeys();
+    const CTrackViewKeyBundle& selectedKeys = pSequence->GetSelectedKeys();
 
 
     if (selectedKeys.GetKeyCount() > 0 && selectedKeys.AreAllKeysOfSameType())
     if (selectedKeys.GetKeyCount() > 0 && selectedKeys.AreAllKeysOfSameType())
     {
     {
-        CTrackViewTrack* pTrack = selectedKeys.GetKey(0).GetTrack();
+        const CTrackViewTrack* pTrack = selectedKeys.GetKey(0).GetTrack();
 
 
-        CAnimParamType paramType = pTrack->GetParameterType();
-        EAnimCurveType trackType = pTrack->GetCurveType();
-        AnimValueType valueType = pTrack->GetValueType();
+        const CAnimParamType paramType = pTrack->GetParameterType();
+        const EAnimCurveType trackType = pTrack->GetCurveType();
+        const AnimValueType valueType = pTrack->GetValueType();
 
 
-        for (int i = 0; i < (int)m_keyControls.size(); i++)
+        for (const auto& keyControl : m_keyControls)
         {
         {
-            if (m_keyControls[i]->SupportTrackType(paramType, trackType, valueType))
+            if (keyControl->SupportTrackType(paramType, trackType, valueType))
             {
             {
-                m_keyControls[i]->OnKeySelectionChange(selectedKeys);
+                keyControl->OnKeySelectionChange(selectedKeys);
                 break;
                 break;
             }
             }
         }
         }
@@ -167,11 +170,11 @@ void CTrackViewKeyPropertiesDlg::OnKeySelectionChanged(CTrackViewSequence* seque
         return;
         return;
     }
     }
 
 
-    CTrackViewKeyBundle selectedKeys = sequence->GetSelectedKeys();
+    const CTrackViewKeyBundle& selectedKeys = sequence->GetSelectedKeys();
 
 
     m_wndTrackProps->OnKeySelectionChange(selectedKeys);
     m_wndTrackProps->OnKeySelectionChange(selectedKeys);
 
 
-    bool bSelectChangedInSameTrack
+    const bool bSelectChangedInSameTrack
         = m_pLastTrackSelected
         = m_pLastTrackSelected
             && selectedKeys.GetKeyCount() == 1
             && selectedKeys.GetKeyCount() == 1
             && selectedKeys.GetKey(0).GetTrack() == m_pLastTrackSelected;
             && selectedKeys.GetKey(0).GetTrack() == m_pLastTrackSelected;
@@ -179,7 +182,7 @@ void CTrackViewKeyPropertiesDlg::OnKeySelectionChanged(CTrackViewSequence* seque
     // Every Key in an Asset Blend track can have different min/max values on the float sliders
     // Every Key in an Asset Blend track can have different min/max values on the float sliders
     // because it's based on the duration of the motion that is set. So don't try to
     // because it's based on the duration of the motion that is set. So don't try to
     // reuse the controls when the selection changes, otherwise the tooltips may be wrong.
     // reuse the controls when the selection changes, otherwise the tooltips may be wrong.
-    bool reuseControls = bSelectChangedInSameTrack && m_pLastTrackSelected && (m_pLastTrackSelected->GetValueType() != AnimValueType::AssetBlend);
+    const bool reuseControls = bSelectChangedInSameTrack && m_pLastTrackSelected && (m_pLastTrackSelected->GetValueType() != AnimValueType::AssetBlend);
 
 
     if (selectedKeys.GetKeyCount() == 1)
     if (selectedKeys.GetKeyCount() == 1)
     {
     {
@@ -203,21 +206,21 @@ void CTrackViewKeyPropertiesDlg::OnKeySelectionChanged(CTrackViewSequence* seque
     m_wndTrackProps->setEnabled(false);
     m_wndTrackProps->setEnabled(false);
     if (selectedKeys.GetKeyCount() > 0 && selectedKeys.AreAllKeysOfSameType())
     if (selectedKeys.GetKeyCount() > 0 && selectedKeys.AreAllKeysOfSameType())
     {
     {
-        CTrackViewTrack* pTrack = selectedKeys.GetKey(0).GetTrack();
+        if (!reuseControls)
+        {
+            const CTrackViewTrack* pTrack = selectedKeys.GetKey(0).GetTrack();
 
 
-        CAnimParamType paramType = pTrack->GetParameterType();
-        EAnimCurveType trackType = pTrack->GetCurveType();
-        AnimValueType valueType = pTrack->GetValueType();
+            const CAnimParamType paramType = pTrack->GetParameterType();
+            const EAnimCurveType trackType = pTrack->GetCurveType();
+            const AnimValueType valueType = pTrack->GetValueType();
 
 
-        for (int i = 0; i < (int)m_keyControls.size(); i++)
-        {
-            if (m_keyControls[i]->SupportTrackType(paramType, trackType, valueType))
+            for (const auto& keyControl : m_keyControls)
             {
             {
-                if (!reuseControls)
+                if (keyControl->SupportTrackType(paramType, trackType, valueType))
                 {
                 {
-                    AddVars(m_keyControls[i]);
+                    AddVars(keyControl);
+                    break;
                 }
                 }
-                break;
             }
             }
         }
         }
 
 
@@ -238,6 +241,7 @@ void CTrackViewKeyPropertiesDlg::OnKeySelectionChanged(CTrackViewSequence* seque
     {
     {
         PopulateVariables();
         PopulateVariables();
     }
     }
+    OnKeysChanged(sequence);
 }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -301,7 +305,7 @@ void CTrackViewTrackPropsDlg::OnSequenceChanged()
 
 
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-bool CTrackViewTrackPropsDlg::OnKeySelectionChange(CTrackViewKeyBundle& selectedKeys)
+bool CTrackViewTrackPropsDlg::OnKeySelectionChange(const CTrackViewKeyBundle& selectedKeys)
 {
 {
     m_keyHandle = CTrackViewKeyHandle();
     m_keyHandle = CTrackViewKeyHandle();
 
 

+ 4 - 5
Code/Editor/TrackView/TrackViewKeyPropertiesDlg.h

@@ -58,7 +58,7 @@ public:
 
 
     // Called when user changes selected keys.
     // Called when user changes selected keys.
     // Return true if control update UI values
     // Return true if control update UI values
-    virtual bool OnKeySelectionChange(CTrackViewKeyBundle& keys) = 0;
+    virtual bool OnKeySelectionChange(const CTrackViewKeyBundle& keys) = 0;
 
 
     // Called when UI variable changes.
     // Called when UI variable changes.
     virtual void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& keys) = 0;
     virtual void OnUIChange(IVariable* pVar, CTrackViewKeyBundle& keys) = 0;
@@ -127,8 +127,7 @@ public:
     ~CTrackViewTrackPropsDlg();
     ~CTrackViewTrackPropsDlg();
 
 
     void OnSequenceChanged();
     void OnSequenceChanged();
-    bool OnKeySelectionChange(CTrackViewKeyBundle& keys);
-    void ReloadKey();
+    bool OnKeySelectionChange(const CTrackViewKeyBundle& keys);
 
 
 protected slots:
 protected slots:
     void OnUpdateTime();
     void OnUpdateTime();
@@ -163,8 +162,8 @@ public:
     void PopulateVariables(ReflectedPropertyControl* propCtrl);
     void PopulateVariables(ReflectedPropertyControl* propCtrl);
 
 
     // ITrackViewSequenceListener
     // ITrackViewSequenceListener
-    virtual void OnKeysChanged(CTrackViewSequence* pSequence) override;
-    virtual void OnKeySelectionChanged(CTrackViewSequence* pSequence) override;
+    void OnKeysChanged(CTrackViewSequence* pSequence) override;
+    void OnKeySelectionChanged(CTrackViewSequence* pSequence) override;
 
 
 protected:
 protected:
     //////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////

+ 5 - 3
Code/Editor/TrackView/TrackViewNode.cpp

@@ -14,6 +14,9 @@
 // CryCommon
 // CryCommon
 #include <CryCommon/Maestro/Types/AnimNodeType.h>
 #include <CryCommon/Maestro/Types/AnimNodeType.h>
 
 
+// AzCore
+#include <AzCore/std/sort.h>
+
 // Editor
 // Editor
 #include "TrackView/TrackViewTrack.h"
 #include "TrackView/TrackViewTrack.h"
 #include "TrackView/TrackViewSequence.h"
 #include "TrackView/TrackViewSequence.h"
@@ -555,7 +558,7 @@ void CTrackViewNode::AddNode(CTrackViewNode* pNode)
 void CTrackViewNode::SortNodes()
 void CTrackViewNode::SortNodes()
 {
 {
     // Sort with operator<
     // Sort with operator<
-    std::stable_sort(m_childNodes.begin(), m_childNodes.end(),
+    AZStd::stable_sort(m_childNodes.begin(), m_childNodes.end(),
         [&](const std::unique_ptr<CTrackViewNode>& a, const std::unique_ptr<CTrackViewNode>& b) -> bool
         [&](const std::unique_ptr<CTrackViewNode>& a, const std::unique_ptr<CTrackViewNode>& b) -> bool
         {
         {
             const CTrackViewNode* pA = a.get();
             const CTrackViewNode* pA = a.get();
@@ -588,8 +591,7 @@ namespace
         nodeOrder[static_cast<int>(AnimNodeType::ScreenFader)] = 15;
         nodeOrder[static_cast<int>(AnimNodeType::ScreenFader)] = 15;
         nodeOrder[static_cast<int>(AnimNodeType::Light)] = 16;
         nodeOrder[static_cast<int>(AnimNodeType::Light)] = 16;
         nodeOrder[static_cast<int>(AnimNodeType::ShadowSetup)] = 17;
         nodeOrder[static_cast<int>(AnimNodeType::ShadowSetup)] = 17;
-        nodeOrder[static_cast<int>(AnimNodeType::Environment)] = 18;
-        nodeOrder[static_cast<int>(AnimNodeType::Group)] = 19;
+        nodeOrder[static_cast<int>(AnimNodeType::Group)] = 18;
 
 
         return nodeOrder[static_cast<int>(nodeType)];
         return nodeOrder[static_cast<int>(nodeType)];
     }
     }

+ 1 - 1
Code/Editor/TrackView/TrackViewNode.h

@@ -111,7 +111,7 @@ public:
     bool AreAllKeysOfSameType() const { return m_bAllOfSameType; }
     bool AreAllKeysOfSameType() const { return m_bAllOfSameType; }
 
 
     unsigned int GetKeyCount() const { return static_cast<unsigned int>(m_keys.size()); }
     unsigned int GetKeyCount() const { return static_cast<unsigned int>(m_keys.size()); }
-    CTrackViewKeyHandle GetKey(unsigned int index) { return m_keys[index]; }
+    CTrackViewKeyHandle GetKey(unsigned int index) const { return m_keys[index]; }
 
 
     void SelectKeys(const bool bSelected);
     void SelectKeys(const bool bSelected);
 
 

+ 4 - 12
Code/Editor/TrackView/TrackViewNodes.cpp

@@ -326,7 +326,6 @@ enum EMenuItem
     eMI_AddDOF = 510,
     eMI_AddDOF = 510,
     eMI_AddScreenfader = 511,
     eMI_AddScreenfader = 511,
     eMI_AddShadowSetup = 513,
     eMI_AddShadowSetup = 513,
-    eMI_AddEnvironment = 514,
     eMI_EditEvents = 550,
     eMI_EditEvents = 550,
     eMI_SaveToFBX = 12,
     eMI_SaveToFBX = 12,
     eMI_ImportFromFBX = 14,
     eMI_ImportFromFBX = 14,
@@ -653,6 +652,10 @@ void CTrackViewNodesCtrl::UpdateAnimNodeRecord(CRecord* record, CTrackViewAnimNo
             // In case of a missing entity, color it red.
             // In case of a missing entity, color it red.
             record->setForeground(0, TextColorForMissingEntity);
             record->setForeground(0, TextColorForMissingEntity);
         }
         }
+        else
+        {
+            record->setData(0, Qt::ForegroundRole, QPalette::ColorRole::NoRole);
+        }
     }
     }
 
 
     // Mark the active director and other directors properly.
     // Mark the active director and other directors properly.
@@ -966,12 +969,6 @@ void CTrackViewNodesCtrl::OnNMRclick(QPoint point)
                 groupNode->CreateSubNode("ShadowsSetup", AnimNodeType::ShadowSetup);
                 groupNode->CreateSubNode("ShadowsSetup", AnimNodeType::ShadowSetup);
                 undoBatch.MarkEntityDirty(groupNode->GetSequence()->GetSequenceComponentEntityId());
                 undoBatch.MarkEntityDirty(groupNode->GetSequence()->GetSequenceComponentEntityId());
             }
             }
-            else if (cmd == eMI_AddEnvironment)
-            {
-                AzToolsFramework::ScopedUndoBatch undoBatch("Add Track View Environment Node");
-                groupNode->CreateSubNode("Environment", AnimNodeType::Environment);
-                undoBatch.MarkEntityDirty(groupNode->GetSequence()->GetSequenceComponentEntityId());
-            }
             else if (cmd == eMI_AddDirectorNode)
             else if (cmd == eMI_AddDirectorNode)
             {
             {
                 QString name = groupNode->GetAvailableNodeNameStartingWith("Director");
                 QString name = groupNode->GetAvailableNodeNameStartingWith("Director");
@@ -1397,11 +1394,6 @@ void CTrackViewNodesCtrl::AddGroupNodeAddItems(SContextMenu& contextMenu, CTrack
         contextMenu.main.addAction("Add Shadows Setup Node")->setData(eMI_AddShadowSetup);
         contextMenu.main.addAction("Add Shadows Setup Node")->setData(eMI_AddShadowSetup);
     }
     }
 
 
-    if (pDirector->GetAnimNodesByType(AnimNodeType::Environment).GetCount() == 0)
-    {
-        contextMenu.main.addAction("Add Environment Node")->setData(eMI_AddEnvironment);
-    }
-
     // A director node cannot have another director node as a child.
     // A director node cannot have another director node as a child.
     if (animNode->GetType() != AnimNodeType::Director)
     if (animNode->GetType() != AnimNodeType::Director)
     {
     {

+ 9 - 9
Code/Editor/TrackView/TrackViewPythonFuncs.cpp

@@ -456,30 +456,30 @@ namespace
         break;
         break;
         case AnimValueType::Quat:
         case AnimValueType::Quat:
         {
         {
-            Quat value;
+            AZ::Quaternion value;
             pTrack->GetValue(time, value);
             pTrack->GetValue(time, value);
-            Ang3 rotation(value);
-            return AZStd::make_any<AZ::Vector3>(rotation.x, rotation.y, rotation.z);
+            const AZ::Vector3 rotation = value.GetEulerDegrees();
+            return AZStd::make_any<AZ::Vector3>(rotation);
         }
         }
         case AnimValueType::Vector:
         case AnimValueType::Vector:
         {
         {
-            Vec3 value;
+            AZ::Vector3 value;
             pTrack->GetValue(time, value);
             pTrack->GetValue(time, value);
-            return AZStd::make_any<AZ::Vector3>(value.x, value.y, value.z);
+            return AZStd::make_any<AZ::Vector3>(value);
         }
         }
         break;
         break;
         case AnimValueType::Vector4:
         case AnimValueType::Vector4:
         {
         {
-            Vec4 value;
+            AZ::Vector4 value;
             pTrack->GetValue(time, value);
             pTrack->GetValue(time, value);
-            return AZStd::make_any<AZ::Vector4>(value.x, value.y, value.z, value.w);
+            return AZStd::make_any<AZ::Vector4>(value);
         }
         }
         break;
         break;
         case AnimValueType::RGB:
         case AnimValueType::RGB:
         {
         {
-            Vec3 value;
+            AZ::Vector3 value;
             pTrack->GetValue(time, value);
             pTrack->GetValue(time, value);
-            return AZStd::make_any<AZ::Color>(value.x, value.y, value.z, 0.0f);
+            return AZStd::make_any<AZ::Color>(value.GetX(), value.GetY(), value.GetZ(), 0.0f);
         }
         }
         break;
         break;
         default:
         default:

+ 5 - 5
Code/Editor/TrackView/TrackViewSequence.cpp

@@ -604,14 +604,14 @@ void CTrackViewSequence::DequeueNotifications()
 }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
-void CTrackViewSequence::SubmitPendingNotifcations(bool force)
+void CTrackViewSequence::SubmitPendingNotifications(bool force)
 {
 {
     if (force)
     if (force)
     {
     {
         m_selectionRecursionLevel = 1;
         m_selectionRecursionLevel = 1;
     }
     }
 
 
-    AZ_Assert(m_selectionRecursionLevel > 0, "Dangling SubmitPendingNotifcations()");
+    AZ_Assert(m_selectionRecursionLevel > 0, "Dangling SubmitPendingNotifications()");
     if (m_selectionRecursionLevel > 0)
     if (m_selectionRecursionLevel > 0)
     {
     {
         --m_selectionRecursionLevel;
         --m_selectionRecursionLevel;
@@ -656,7 +656,7 @@ void CTrackViewSequence::OnSequenceRemoved(CTrackViewSequence* removedSequence)
         // submit any queued notifications before removing
         // submit any queued notifications before removing
         if (m_bQueueNotifications)
         if (m_bQueueNotifications)
         {
         {
-            SubmitPendingNotifcations(true);
+            SubmitPendingNotifications(true);
         }
         }
 
 
         // remove ourselves as listeners from the undo manager
         // remove ourselves as listeners from the undo manager
@@ -1443,7 +1443,7 @@ void CTrackViewSequence::EndUndoTransaction()
     // if we're queued
     // if we're queued
     if (m_bQueueNotifications)
     if (m_bQueueNotifications)
     {
     {
-        SubmitPendingNotifcations();
+        SubmitPendingNotifications();
     }
     }
 }
 }
 
 
@@ -1461,7 +1461,7 @@ void CTrackViewSequence::EndRestoreTransaction()
     // if we're queued
     // if we're queued
     if (m_bQueueNotifications)
     if (m_bQueueNotifications)
     {
     {
-        SubmitPendingNotifcations();
+        SubmitPendingNotifications();
     }
     }
 }
 }
 
 

+ 2 - 2
Code/Editor/TrackView/TrackViewSequence.h

@@ -293,7 +293,7 @@ private:
     void QueueNotifications();
     void QueueNotifications();
     // Used to cancel a previously queued notification.
     // Used to cancel a previously queued notification.
     void DequeueNotifications();
     void DequeueNotifications();
-    void SubmitPendingNotifcations(bool force = false);
+    void SubmitPendingNotifications(bool force = false);
 
 
     /////////////////////////////////////////////////////////////////////////
     /////////////////////////////////////////////////////////////////////////
     // overrides for ITrackViewSequenceManagerListener
     // overrides for ITrackViewSequenceManagerListener
@@ -356,7 +356,7 @@ public:
     {
     {
         if (m_pSequence)
         if (m_pSequence)
         {
         {
-            m_pSequence->SubmitPendingNotifcations();
+            m_pSequence->SubmitPendingNotifications();
         }
         }
     }
     }
 
 

+ 5 - 1
Code/Editor/TrackView/TrackViewSequenceManager.cpp

@@ -19,6 +19,10 @@
 #include <CryCommon/Maestro/Bus/EditorSequenceComponentBus.h>
 #include <CryCommon/Maestro/Bus/EditorSequenceComponentBus.h>
 #include <CryCommon/Maestro/Types/SequenceType.h>
 #include <CryCommon/Maestro/Types/SequenceType.h>
 
 
+// AzCore
+#include <AzCore/std/sort.h>
+
+
 // Editor
 // Editor
 #include "AnimationContext.h"
 #include "AnimationContext.h"
 #include "GameEngine.h"
 #include "GameEngine.h"
@@ -380,7 +384,7 @@ void CTrackViewSequenceManager::OnDeleteSequenceEntity(const AZ::EntityId& entit
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 void CTrackViewSequenceManager::SortSequences()
 void CTrackViewSequenceManager::SortSequences()
 {
 {
-    std::stable_sort(m_sequences.begin(), m_sequences.end(),
+    AZStd::stable_sort(m_sequences.begin(), m_sequences.end(),
         [](const std::unique_ptr<CTrackViewSequence>& a, const std::unique_ptr<CTrackViewSequence>& b) -> bool
         [](const std::unique_ptr<CTrackViewSequence>& a, const std::unique_ptr<CTrackViewSequence>& b) -> bool
         {
         {
             QString aName = QString::fromUtf8(a.get()->GetName().c_str());
             QString aName = QString::fromUtf8(a.get()->GetName().c_str());

+ 2 - 2
Code/Editor/TrackView/TrackViewTrack.cpp

@@ -268,7 +268,7 @@ CTrackViewKeyBundle CTrackViewTrack::GetKeys(const bool bOnlySelected, const flo
         const float keyTime = m_pAnimTrack->GetKeyTime(keyIndex);
         const float keyTime = m_pAnimTrack->GetKeyTime(keyIndex);
         const bool timeRangeOk = (t0 <= keyTime && keyTime <= t1);
         const bool timeRangeOk = (t0 <= keyTime && keyTime <= t1);
 
 
-        if ((!bOnlySelected || IsKeySelected(keyIndex)) && timeRangeOk)
+        if (timeRangeOk && (!bOnlySelected || IsKeySelected(keyIndex)))
         {
         {
             CTrackViewKeyHandle keyHandle(this, keyIndex);
             CTrackViewKeyHandle keyHandle(this, keyIndex);
             bundle.AppendKey(keyHandle);
             bundle.AppendKey(keyHandle);
@@ -612,7 +612,7 @@ void CTrackViewTrack::SelectKeys(const bool bSelected)
         }
         }
     }
     }
 
 
-    m_pTrackAnimNode->GetSequence()->SubmitPendingNotifcations();
+    m_pTrackAnimNode->GetSequence()->SubmitPendingNotifications();
 }
 }
 
 
 
 

+ 4 - 4
Code/Editor/TrackView/TrackViewTrack.h

@@ -107,9 +107,9 @@ public:
     virtual CTrackViewKeyHandle GetKeyByTime(const float time);
     virtual CTrackViewKeyHandle GetKeyByTime(const float time);
     virtual CTrackViewKeyHandle GetNearestKeyByTime(const float time);
     virtual CTrackViewKeyHandle GetNearestKeyByTime(const float time);
 
 
-    virtual CTrackViewKeyBundle GetSelectedKeys() override;
-    virtual CTrackViewKeyBundle GetAllKeys() override;
-    virtual CTrackViewKeyBundle GetKeysInTimeRange(const float t0, const float t1) override;
+    CTrackViewKeyBundle GetSelectedKeys() override;
+    CTrackViewKeyBundle GetAllKeys() override;
+    CTrackViewKeyBundle GetKeysInTimeRange(const float t0, const float t1) override;
 
 
     // Key modifications
     // Key modifications
     virtual CTrackViewKeyHandle CreateKey(const float time);
     virtual CTrackViewKeyHandle CreateKey(const float time);
@@ -219,7 +219,7 @@ private:
     CTrackViewKeyHandle GetSubTrackKeyHandle(unsigned int index) const;
     CTrackViewKeyHandle GetSubTrackKeyHandle(unsigned int index) const;
 
 
     // Copy selected keys to XML representation for clipboard
     // Copy selected keys to XML representation for clipboard
-    virtual void CopyKeysToClipboard(XmlNodeRef& xmlNode, const bool bOnlySelectedKeys, const bool bOnlyFromSelectedTracks) override;
+    void CopyKeysToClipboard(XmlNodeRef& xmlNode, const bool bOnlySelectedKeys, const bool bOnlyFromSelectedTracks) override;
 
 
     bool m_bIsCompoundTrack;
     bool m_bIsCompoundTrack;
     bool m_bIsSubTrack;
     bool m_bIsSubTrack;

+ 85 - 30
Code/Editor/TrackViewNewSequenceDialog.cpp

@@ -12,7 +12,8 @@
 #include "TrackViewNewSequenceDialog.h"
 #include "TrackViewNewSequenceDialog.h"
 
 
 // Qt
 // Qt
-#include <QMessageBox>
+#include <QValidator>
+#include <QPushButton>
 
 
 // CryCommon
 // CryCommon
 #include <CryCommon/Maestro/Types/SequenceType.h>
 #include <CryCommon/Maestro/Types/SequenceType.h>
@@ -34,15 +35,98 @@ namespace
     };
     };
 }
 }
 
 
+class CTVNewSequenceDialogValidator : public QValidator
+{
+    public:
+        CTVNewSequenceDialogValidator(QObject* parent)
+            : QValidator(parent)
+        {
+            m_parentDialog = qobject_cast<CTVNewSequenceDialog*>(parent);
+        }
+
+        QValidator::State validate(QString& input, [[maybe_unused]] int& pos) const override
+        {
+            constexpr int MaxInputLength = 160;
+
+            if (input.isEmpty())
+            {
+                SetEnabled(false);
+                return QValidator::Acceptable;
+            }
+
+            bool isValid = false;
+            SetEnabled(true);
+            if (input.contains('/'))
+            {
+                SetToolTip("A sequence name cannot contain a '/' character");
+            }
+            if (input.length() > MaxInputLength)
+            {
+                SetToolTip(QString("A sequence name cannot exceed %1 characters").arg(MaxInputLength).toStdString().c_str());
+            }
+            else if (input == LIGHT_ANIMATION_SET_NAME)
+            {
+                SetToolTip("The sequence name " LIGHT_ANIMATION_SET_NAME " is reserved.\nPlease choose a different name");
+            }
+            else
+            {
+                bool isNewName = true;
+                for (unsigned int k = 0; k < GetIEditor()->GetSequenceManager()->GetCount(); ++k)
+                {
+                    CTrackViewSequence* pSequence = GetIEditor()->GetSequenceManager()->GetSequenceByIndex(k);
+                    const QString fullname = QString::fromUtf8(pSequence->GetName().c_str());
+
+                    if (fullname.compare(input, Qt::CaseInsensitive) == 0)
+                    {
+                        isNewName = false;
+                        break;
+                    }
+                }
+                if (!isNewName)
+                {
+                    SetToolTip("Sequence with this name already exists");
+                }
+                else
+                {
+                    isValid = true;
+                }
+            }
+
+            if (isValid)
+            {
+                SetToolTip("");
+                return QValidator::Acceptable;
+            }
+
+            return QValidator::Invalid;
+        }
+
+    private:
+
+        void SetEnabled(bool enable) const
+        {
+            m_parentDialog->ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enable);
+        }
+
+        void SetToolTip(const char* toolTipText) const
+        {
+            m_parentDialog->ui->NAME->setToolTip(toolTipText);
+        }
+
+        const CTVNewSequenceDialog* m_parentDialog;
+};
+
 // TrackViewNewSequenceDialog dialog
 // TrackViewNewSequenceDialog dialog
 CTVNewSequenceDialog::CTVNewSequenceDialog(QWidget* parent)
 CTVNewSequenceDialog::CTVNewSequenceDialog(QWidget* parent)
     : QDialog(parent)
     : QDialog(parent)
     , ui(new Ui::CTVNewSequenceDialog)
     , ui(new Ui::CTVNewSequenceDialog)
     , m_inputFocusSet(false)
     , m_inputFocusSet(false)
+    , m_validator(new CTVNewSequenceDialogValidator(this))
 {
 {
     ui->setupUi(this);
     ui->setupUi(this);
     connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &CTVNewSequenceDialog::OnOK);
     connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &CTVNewSequenceDialog::OnOK);
     connect(ui->NAME, &QLineEdit::returnPressed, this, &CTVNewSequenceDialog::OnOK);
     connect(ui->NAME, &QLineEdit::returnPressed, this, &CTVNewSequenceDialog::OnOK);
+    ui->NAME->setValidator(m_validator);
     setWindowTitle("Add New Sequence");
     setWindowTitle("Add New Sequence");
 
 
     OnInitDialog();
     OnInitDialog();
@@ -59,37 +143,8 @@ void CTVNewSequenceDialog::OnInitDialog()
 void CTVNewSequenceDialog::OnOK()
 void CTVNewSequenceDialog::OnOK()
 {
 {
     m_sequenceType = SequenceType::SequenceComponent;
     m_sequenceType = SequenceType::SequenceComponent;
-
     m_sequenceName = ui->NAME->text();
     m_sequenceName = ui->NAME->text();
 
 
-    if (m_sequenceName.isEmpty())
-    {
-        QMessageBox::warning(this, "New Sequence", "A sequence name cannot be empty!");
-        return;
-    }
-    else if (m_sequenceName.contains('/'))
-    {
-        QMessageBox::warning(this, "New Sequence", "A sequence name cannot contain a '/' character!");
-        return;
-    }
-    else if (m_sequenceName == LIGHT_ANIMATION_SET_NAME)
-    {
-        QMessageBox::warning(this, "New Sequence", QString("The sequence name '%1' is reserved.\n\nPlease choose a different name.").arg(LIGHT_ANIMATION_SET_NAME));
-        return;
-    }
-
-    for (unsigned int k = 0; k < GetIEditor()->GetSequenceManager()->GetCount(); ++k)
-    {
-        CTrackViewSequence* pSequence = GetIEditor()->GetSequenceManager()->GetSequenceByIndex(k);
-        QString fullname = QString::fromUtf8(pSequence->GetName().c_str());
-
-        if (fullname.compare(m_sequenceName, Qt::CaseInsensitive) == 0)
-        {
-            QMessageBox::warning(this, "New Sequence", "Sequence with this name already exists!");
-            return;
-        }
-    }
-
     accept();
     accept();
 }
 }
 
 

+ 11 - 7
Code/Editor/TrackViewNewSequenceDialog.h

@@ -6,20 +6,23 @@
  *
  *
  */
  */
 
 
-
-#ifndef CRYINCLUDE_EDITOR_TRACKVIEWNEWSEQUENCEDIALOG_H
-#define CRYINCLUDE_EDITOR_TRACKVIEWNEWSEQUENCEDIALOG_H
 #pragma once
 #pragma once
 
 
+// Qt
 #if !defined(Q_MOC_RUN)
 #if !defined(Q_MOC_RUN)
 #include <QScopedPointer>
 #include <QScopedPointer>
 #include <QDialog>
 #include <QDialog>
 #endif
 #endif
 
 
+// CryCommon
+#include <CryCommon/Maestro/Types/SequenceType.h>
+
 namespace Ui {
 namespace Ui {
     class CTVNewSequenceDialog;
     class CTVNewSequenceDialog;
+    class CTVNewSequenceDialogValidator;
 }
 }
 
 
+class QValidator;
 
 
 class CTVNewSequenceDialog
 class CTVNewSequenceDialog
     : public QDialog
     : public QDialog
@@ -29,11 +32,13 @@ public:
     CTVNewSequenceDialog(QWidget* pParent = 0);
     CTVNewSequenceDialog(QWidget* pParent = 0);
     virtual ~CTVNewSequenceDialog();
     virtual ~CTVNewSequenceDialog();
 
 
-    const QString& GetSequenceName() const { return m_sequenceName; };
-    SequenceType   GetSequenceType() const { return m_sequenceType; };
+    const QString& GetSequenceName() const { return m_sequenceName; }
+    SequenceType   GetSequenceType() const { return m_sequenceType; }
 
 
     void showEvent(QShowEvent* event) override;
     void showEvent(QShowEvent* event) override;
 
 
+    friend class CTVNewSequenceDialogValidator;
+
 protected:
 protected:
     virtual void OnOK();
     virtual void OnOK();
     void OnInitDialog();
     void OnInitDialog();
@@ -43,6 +48,5 @@ private:
     SequenceType   m_sequenceType;
     SequenceType   m_sequenceType;
     QScopedPointer<Ui::CTVNewSequenceDialog> ui;
     QScopedPointer<Ui::CTVNewSequenceDialog> ui;
     bool           m_inputFocusSet;
     bool           m_inputFocusSet;
+    QValidator*    m_validator;
 };
 };
-
-#endif // CRYINCLUDE_EDITOR_TRACKVIEWNEWSEQUENCEDIALOG_H

+ 4 - 5
Code/Editor/Undo/Undo.cpp

@@ -13,7 +13,6 @@
 
 
 #include "Settings.h"
 #include "Settings.h"
 #include "IUndoManagerListener.h"
 #include "IUndoManagerListener.h"
-#include <Include/ILogFile.h>
 #include <list>
 #include <list>
 
 
 #include <QString>
 #include <QString>
@@ -307,7 +306,7 @@ void CUndoManager::Redo(int numSteps)
 
 
     if (m_bRecording || m_bSuperRecording)
     if (m_bRecording || m_bSuperRecording)
     {
     {
-        GetIEditor()->GetLogFile()->FormatLine("Cannot Redo while Recording");
+        AZ_Warning("CUndoManager", false, "Cannot Redo while Recording");
         return;
         return;
     }
     }
 
 
@@ -324,7 +323,7 @@ void CUndoManager::Redo(int numSteps)
             CUndoStep* redo = m_redoStack.back();
             CUndoStep* redo = m_redoStack.back();
             redo->Redo();
             redo->Redo();
 
 
-            GetIEditor()->GetLogFile()->FormatLine(
+            AZ_Printf("CUndoManager",
                 "(Undo: %d, Redo: %d) - Redo last operation: '%s'",
                 "(Undo: %d, Redo: %d) - Redo last operation: '%s'",
                 m_undoStack.size(),
                 m_undoStack.size(),
                 m_redoStack.size(),
                 m_redoStack.size(),
@@ -367,7 +366,7 @@ void CUndoManager::Undo(int numSteps)
 
 
     if (m_bRecording || m_bSuperRecording)
     if (m_bRecording || m_bSuperRecording)
     {
     {
-        GetIEditor()->GetLogFile()->FormatLine("Cannot Undo while Recording");
+        AZ_Warning("CUndoManager", false, "Cannot Undo while Recording");
         return;
         return;
     }
     }
 
 
@@ -384,7 +383,7 @@ void CUndoManager::Undo(int numSteps)
             CUndoStep* undo = m_undoStack.back();
             CUndoStep* undo = m_undoStack.back();
             undo->Undo(true);
             undo->Undo(true);
 
 
-            GetIEditor()->GetLogFile()->FormatLine(
+            AZ_Printf("CUndoManager",
                 "(Undo: %d, Redo: %d) - Undo last operation: '%s'",
                 "(Undo: %d, Redo: %d) - Undo last operation: '%s'",
                 m_undoStack.size(),
                 m_undoStack.size(),
                 m_redoStack.size(),
                 m_redoStack.size(),

+ 1 - 0
Code/Editor/Undo/Undo.h

@@ -138,6 +138,7 @@ private: // ------------------------------------------------------
 AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING
 AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING
 /*!
 /*!
  *  CUndoManager is keeping and operating on CUndo class instances.
  *  CUndoManager is keeping and operating on CUndo class instances.
+ *  TODO: this class is superseded by AzToolsFramework::UndoSystem
  */
  */
 class EDITOR_CORE_API CUndoManager
 class EDITOR_CORE_API CUndoManager
 {
 {

+ 0 - 526
Code/Editor/Util/ImageUtil.cpp

@@ -1,526 +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 : Image utilities implementation.
-
-
-#include "EditorDefs.h"
-
-#include "ImageUtil.h"
-
-// Editor
-#include "Util/ImageGif.h"
-#include "Util/ImageTIF.h"
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::Save(const QString& strFileName, CImageEx& inImage)
-{
-    QImage imgBitmap;
-
-    ImageToQImage(inImage, imgBitmap);
-
-    // Explicitly set the pixels per meter in our images to a consistent default.
-    // The normal default is 96 pixels per inch, or 3780 pixels per meter.
-    // However, the Windows scaling display setting can cause these numbers to vary
-    // on different machines, producing output files that have slightly different
-    // headers from machine to machine, which often isn't desirable.
-    const int defaultPixelsPerMeter = 3780;
-    imgBitmap.setDotsPerMeterX(defaultPixelsPerMeter);
-    imgBitmap.setDotsPerMeterY(defaultPixelsPerMeter);
-    
-    return imgBitmap.save(strFileName);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::SaveBitmap(const QString& szFileName, CImageEx& inImage)
-{
-    return Save(szFileName, inImage);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::SaveJPEG(const QString& strFileName, CImageEx& inImage)
-{
-    return Save(strFileName, inImage);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::Load(const QString& fileName, CImageEx& image)
-{
-    QImage imgBitmap(fileName);
-
-    if (imgBitmap.isNull())
-    {
-        CLogFile::FormatLine("Invalid file:  %s", fileName.toUtf8().data());
-        return false;
-    }
-
-    return QImageToImage(imgBitmap, image);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::LoadJPEG(const QString& strFileName, CImageEx& outImage)
-{
-    return CImageUtil::Load(strFileName, outImage);
-}
-
-//===========================================================================
-bool CImageUtil::LoadBmp(const QString& fileName, CImageEx& image)
-{
-    return CImageUtil::Load(fileName, image);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::SavePGM(const QString& fileName, const CImageEx& image)
-{
-    // There are two types of PGM ("Portable Grey Map") files - "raw" (binary) and "plain" (ASCII).  This function supports the "plain PGM"  format.
-    // See http://netpbm.sourceforge.net/doc/pgm.html or https://en.wikipedia.org/wiki/Netpbm_format for the definition.
-
-    uint32 width = image.GetWidth();
-    uint32 height = image.GetHeight();
-    uint32* pixels = image.GetData();
-
-    // Create the file header.
-    AZStd::string fileHeader = AZStd::string::format(
-        // P2 = PGM header for ASCII output.  (P5 is PGM header for binary output)
-        "P2\n"
-        // width and height of the image
-        "%d %d\n"
-        // The maximum grey value in the file.  (i.e. the max value for any given pixel below)
-        "65535\n"
-        , width, height);
-
-    FILE* file = nullptr;
-    azfopen(&file, fileName.toUtf8().data(), "wt");
-    if (!file)
-    {
-        return false;
-    }
-
-    // First print the file header
-    fprintf(file, "%s", fileHeader.c_str());
-
-    // Then print all the pixels.
-    for (uint32 y = 0; y < height; y++)
-    {
-        for (uint32 x = 0; x < width; x++)
-        {
-            fprintf(file, "%d ", pixels[x + (y * width)]);
-        }
-        fprintf(file, "\n");
-    }
-
-    fclose(file);
-    return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::LoadPGM(const QString& fileName, CImageEx& image)
-{
-    FILE* file = nullptr;
-    azfopen(&file, fileName.toUtf8().data(), "rt");
-    if (!file)
-    {
-        return false;
-    }
-
-    const char seps[] = " \n\t\r";
-    char* token;
-
-
-    int32 width = 0;
-    int32 height = 0;
-    int32 numColors = 1;
-
-
-    fseek(file, 0, SEEK_END);
-    int fileSize = static_cast<int>(ftell(file));
-    fseek(file, 0, SEEK_SET);
-
-    char* str = new char[fileSize];
-
-    [[maybe_unused]] auto bytesRead = fread(str, fileSize, 1, file);
-
-    [[maybe_unused]] char* nextToken = nullptr;
-    token = azstrtok(str, 0, seps, &nextToken);
-
-    while (token != nullptr && token[0] == '#')
-    {
-        if (token != nullptr && token[0] == '#')
-        {
-            azstrtok(nullptr, 0, "\n", &nextToken);
-        }
-        token = azstrtok(nullptr, 0, seps, &nextToken);
-    }
-    if (azstricmp(token, "P2") != 0)
-    {
-        // Bad file. not supported pgm.
-        delete[]str;
-        fclose(file);
-        return false;
-    }
-
-    do
-    {
-        token = azstrtok(nullptr, 0, seps, &nextToken);
-        if (token != nullptr && token[0] == '#')
-        {
-            azstrtok(nullptr, 0, "\n", &nextToken);
-        }
-    } while (token != nullptr && token[0] == '#');
-    width = atoi(token);
-
-    do
-    {
-        token = azstrtok(nullptr, 0, seps, &nextToken);
-        if (token != nullptr && token[0] == '#')
-        {
-            azstrtok(nullptr, 0, "\n", &nextToken);
-        }
-    } while (token != nullptr && token[0] == '#');
-    height = atoi(token);
-
-    do
-    {
-        token = azstrtok(nullptr, 0, seps, &nextToken);
-        if (token != nullptr && token[0] == '#')
-        {
-            azstrtok(nullptr, 0, "\n", &nextToken);
-        }
-    } while (token != nullptr && token[0] == '#');
-    numColors = atoi(token);
-
-    image.Allocate(width, height);
-
-    uint32* p = image.GetData();
-    int size = width * height;
-    int i = 0;
-    while (token != nullptr && i < size)
-    {
-        do
-        {
-            token = azstrtok(nullptr, 0, seps, &nextToken);
-        } while (token != nullptr && token[0] == '#');
-        *p++ = atoi(token);
-        i++;
-    }
-
-    delete[]str;
-
-    fclose(file);
-
-    // If we have 16-bit greyscale values that we're storing into 32-bit pixels, denote it with an appropriate texture type.
-    if (numColors > 255)
-    {
-        image.SetFormat(eTF_R16G16);
-    }
-
-    return true;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::LoadImage(const QString& fileName, CImageEx& image, bool* pQualityLoss)
-{
-    char drive[_MAX_DRIVE];
-    char dir[_MAX_DIR];
-    char fname[_MAX_FNAME];
-    char ext[_MAX_EXT];
-
-    if (pQualityLoss)
-    {
-        *pQualityLoss = false;
-    }
-
-    _splitpath_s(fileName.toUtf8().data(), drive, dir, fname, ext);
-
-    // Only DDS has explicit sRGB flag - we'll assume by default all formats are stored in gamma space
-    image.SetSRGB(true);
-
-    if (azstricmp(ext, ".bmp") == 0)
-    {
-        return LoadBmp(fileName, image);
-    }
-    else if (azstricmp(ext, ".tif") == 0)
-    {
-        return CImageTIF().Load(fileName, image);
-    }
-    else if (azstricmp(ext, ".jpg") == 0)
-    {
-        if (pQualityLoss)
-        {
-            *pQualityLoss = true;     // we assume JPG has quality loss
-        }
-        return LoadJPEG(fileName, image);
-    }
-    else if (azstricmp(ext, ".gif") == 0)
-    {
-        return CImageGif().Load(fileName, image);
-    }
-    else if (azstricmp(ext, ".pgm") == 0)
-    {
-        return LoadPGM(fileName, image);
-    }
-    else if (azstricmp(ext, ".png") == 0)
-    {
-        return CImageUtil::Load(fileName, image);
-    }
-    else
-    {
-        return CImageUtil::Load(fileName, image);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CImageUtil::SaveImage(const QString& fileName, CImageEx& image)
-{
-    char drive[_MAX_DRIVE];
-    char dir[_MAX_DIR];
-    char fname[_MAX_FNAME];
-    char ext[_MAX_EXT];
-
-    // Remove the read-only attribute so the file can be overwritten.
-    QFile(fileName).setPermissions(QFile::ReadUser | QFile::WriteUser);
-
-    _splitpath_s(fileName.toUtf8().data(), drive, dir, fname, ext);
-    if (azstricmp(ext, ".bmp") == 0)
-    {
-        return SaveBitmap(fileName, image);
-    }
-    else if (azstricmp(ext, ".jpg") == 0)
-    {
-        return SaveJPEG(fileName, image);
-    }
-    else if (azstricmp(ext, ".pgm") == 0)
-    {
-        return SavePGM(fileName, image);
-    }
-    else
-    {
-        return Save(fileName, image);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CImageUtil::ScaleToFit(const CByteImage& srcImage, CByteImage& trgImage)
-{
-    trgImage.ScaleToFit(srcImage);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CImageUtil::DownScaleSquareTextureTwice(const CImageEx& srcImage, CImageEx& trgImage, IImageUtil::_EAddrMode eAddressingMode)
-{
-    uint32* pSrcData = srcImage.GetData();
-    int nSrcWidth = srcImage.GetWidth();
-    int nSrcHeight = srcImage.GetHeight();
-    int nTrgWidth = srcImage.GetWidth() >> 1;
-    int nTrgHeight = srcImage.GetHeight() >> 1;
-
-    // reallocate target
-    trgImage.Release();
-    trgImage.Allocate(nTrgWidth, nTrgHeight);
-    uint32* pDstData = trgImage.GetData();
-
-    // values in this filter are the log2 of the actual multiplicative values .. see DXCFILTER_BLUR3X3 for the used 3x3 filter
-    static int filter[3][3] =
-    {
-        {0, 1, 0},
-        {1, 2, 1},
-        {0, 1, 0}
-    };
-
-    for (int i = 0; i < nTrgHeight; i++)
-    {
-        for (int j = 0; j < nTrgWidth; j++)
-        {
-            // filter3x3
-            int x = j << 1;
-            int y = i << 1;
-
-            int r, g, b, a;
-            r = b = g = a = 0;
-            uint32 col;
-
-            if (eAddressingMode == IImageUtil::WRAP) // TODO: this condition could be compile-time static by making it a template arg
-            {
-                for (int ii = 0; ii < 3; ii++)
-                {
-                    for (int jj = 0; jj < 3; jj++)
-                    {
-                        col = pSrcData[((y + nSrcHeight + ii - 1) % nSrcHeight) * nSrcWidth + ((x + nSrcWidth + jj - 1) % nSrcWidth)];
-
-                        r += (col        & 0xff) << filter[ii][jj];
-                        g += ((col >> 8)  & 0xff) << filter[ii][jj];
-                        b += ((col >> 16) & 0xff) << filter[ii][jj];
-                        a += ((col >> 24) & 0xff) << filter[ii][jj];
-                    }
-                }
-            }
-            else
-            {
-                assert(eAddressingMode == IImageUtil::CLAMP);
-                for (int ii = 0; ii < 3; ii++)
-                {
-                    for (int jj = 0; jj < 3; jj++)
-                    {
-                        int x1 = clamp_tpl<int>((x + jj), 0, nSrcWidth - 1);
-                        int y1 = clamp_tpl<int>((y + ii), 0, nSrcHeight - 1);
-                        col = pSrcData[ y1 * nSrcWidth + x1];
-
-                        r += (col        & 0xff) << filter[ii][jj];
-                        g += ((col >> 8)  & 0xff) << filter[ii][jj];
-                        b += ((col >> 16) & 0xff) << filter[ii][jj];
-                        a += ((col >> 24) & 0xff) << filter[ii][jj];
-                    }
-                }
-            }
-
-            // the sum of the multiplicative values here is 16 so we shift by 4 bits
-            r >>= 4;
-            g >>= 4;
-            b >>= 4;
-            a >>= 4;
-
-            uint32 res = r + (g << 8) + (b << 16) + (a << 24);
-
-            *pDstData++ = res;
-        }
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CImageUtil::ScaleToFit(const CImageEx& srcImage, CImageEx& trgImage)
-{
-    trgImage.ScaleToFit(srcImage);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CImageUtil::ScaleToDoubleFit(const CImageEx& srcImage, CImageEx& trgImage)
-{
-    uint32 x, y, u, v;
-    unsigned int* destRow, * dest, * src, * sourceRow;
-
-    uint32 srcW = srcImage.GetWidth();
-    uint32 srcH = srcImage.GetHeight();
-
-    uint32 trgHalfW = trgImage.GetWidth() / 2;
-    uint32 trgH = trgImage.GetHeight();
-
-    uint32 xratio = trgHalfW > 0 ? (srcW << 16) / trgHalfW : 1;
-    uint32 yratio = trgH > 0 ? (srcH << 16) / trgH : 1;
-
-    src = srcImage.GetData();
-    destRow = trgImage.GetData();
-
-    v = 0;
-    for (y = 0; y < trgH; y++)
-    {
-        u = 0;
-        sourceRow = src + (v >> 16) * srcW;
-        dest = destRow;
-        for (x = 0; x < trgHalfW; x++)
-        {
-            *(dest + trgHalfW) = sourceRow[u >> 16];
-            *dest++ = sourceRow[u >> 16];
-            u += xratio;
-        }
-        v += yratio;
-        destRow += trgHalfW * 2;
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CImageUtil::SmoothImage(CByteImage& image, int numSteps)
-{
-    assert(numSteps > 0);
-    uint8* buf = image.GetData();
-    int w = image.GetWidth();
-    int h = image.GetHeight();
-
-    for (int steps = 0; steps < numSteps; steps++)
-    {
-        // Smooth the image.
-        for (int y = 1; y < h - 1; y++)
-        {
-            // Precalculate for better speed
-            uint8* ptr = &buf[y * w + 1];
-
-            for (int x = 1; x < w - 1; x++)
-            {
-                // Smooth it out
-                *ptr =
-                    (
-                        (uint32)ptr[1] +
-                        ptr[w] +
-                        ptr[-1] +
-                        ptr[-w] +
-                        ptr[w + 1] +
-                        ptr[w - 1] +
-                        ptr[-w + 1] +
-                        ptr[-w - 1]
-                    ) >> 3;
-
-                // Next pixel
-                ptr++;
-            }
-        }
-    }
-}
-
-unsigned char CImageUtil::GetBilinearFilteredAt(const int iniX256, const int iniY256, const CByteImage& image)
-{
-    //  assert(image.IsValid());        if(!image.IsValid())return(0);      // this shouldn't be
-
-    DWORD x = (DWORD)(iniX256) >> 8;
-    DWORD y = (DWORD)(iniY256) >> 8;
-
-    if (x >= static_cast<DWORD>(image.GetWidth() - 1) || y >= static_cast<DWORD>(image.GetHeight() - 1))
-    {
-        return image.ValueAt(x, y);                                                          // border is not filtered, 255 to get in range 0..1
-    }
-    DWORD rx = (DWORD)(iniX256) & 0xff;       // fractional aprt
-    DWORD ry = (DWORD)(iniY256) & 0xff;       // fractional aprt
-
-    DWORD top = (DWORD)image.ValueAt((int)x, (int)y) * (256 - rx)                      // left top
-        + (DWORD)image.ValueAt((int)x + 1, (int)y) * rx;                                            // right top
-
-    DWORD bottom = (DWORD)image.ValueAt((int)x, (int)y + 1) * (256 - rx)              // left bottom
-        + (DWORD)image.ValueAt((int)x + 1, (int)y + 1) * rx;                                        // right bottom
-
-    return (unsigned char)((top * (256 - ry) + bottom * ry) >> 16);
-}
-
-bool CImageUtil::QImageToImage(const QImage& bitmap, CImageEx& image)
-{
-
-    QImage convertedBitmap;
-    const QImage *srcBitmap = &bitmap;
-    
-    if (bitmap.format() != QImage::Format_RGBA8888)
-    {
-        convertedBitmap = bitmap.convertToFormat(QImage::Format_RGBA8888);
-        srcBitmap = &convertedBitmap;
-    }
-
-    if (image.Allocate(srcBitmap->width(), srcBitmap->height()) == false)
-    {
-        return false;
-    }
-
-    AZStd::copy(srcBitmap->bits(), srcBitmap->bits() + (srcBitmap->width() * srcBitmap->height() * sizeof(uint32)), reinterpret_cast<uint8*>(image.GetData()));
-
-    return true;
-}
-
-bool CImageUtil::ImageToQImage(const CImageEx& image, QImage& bitmapObj)
-{
-    bitmapObj = QImage(image.GetWidth(), image.GetHeight(), QImage::Format_RGBA8888);
-    AZStd::copy(image.GetData(), image.GetData() + image.GetWidth() * image.GetHeight(), reinterpret_cast<uint32*>(bitmapObj.bits()));
-
-    return true;
-}

+ 0 - 78
Code/Editor/Util/ImageUtil.h

@@ -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
- *
- */
-
-
-// Description : Image utilities.
-
-
-#pragma once
-
-#include <Include/IImageUtil.h>
-
-/*!
- *  Utility Class to manipulate images.
- */
-class SANDBOX_API CImageUtil
-{
-public:
-    //////////////////////////////////////////////////////////////////////////
-    // Image loading.
-    //////////////////////////////////////////////////////////////////////////
-    //! Load image, detect image type by file extension.
-    // Arguments:
-    //   pQualityLoss - 0 if info is not needed, pointer to the result otherwise - not need to preinitialize
-    static bool LoadImage(const QString& fileName, CImageEx& image, bool* pQualityLoss = 0);
-    //! Save image, detect image type by file extension.
-    static bool SaveImage(const QString& fileName, CImageEx& image);
-
-    // General image fucntions
-    static bool LoadJPEG(const QString& strFileName, CImageEx& image);
-    static bool SaveJPEG(const QString& strFileName, CImageEx& image);
-
-    static bool SaveBitmap(const QString& szFileName, CImageEx& image);
-    static bool LoadBmp(const QString& file, CImageEx& image);
-
-    //! Save image in PGM format.
-    static bool SavePGM(const QString& fileName, const CImageEx& image);
-    //! Load image in PGM format.
-    static bool LoadPGM(const QString& fileName, CImageEx& image);
-
-    //////////////////////////////////////////////////////////////////////////
-    // Image scaling.
-    //////////////////////////////////////////////////////////////////////////
-    //! Scale source image to fit size of target image.
-    static void ScaleToFit(const CByteImage& srcImage, CByteImage& trgImage);
-    //! Scale source image to fit size of target image.
-    static void ScaleToFit(const CImageEx& srcImage, CImageEx& trgImage);
-    //! Scale source image to fit twice side by side in target image.
-    static void ScaleToDoubleFit(const CImageEx& srcImage, CImageEx& trgImage);
-    //! Scale source image twice down image with filering
-
-    static void DownScaleSquareTextureTwice(const CImageEx& srcImage, CImageEx& trgImage, IImageUtil::_EAddrMode eAddressingMode = IImageUtil::WRAP);
-
-    //! Smooth image.
-    static void SmoothImage(CByteImage& image, int numSteps);
-
-    //////////////////////////////////////////////////////////////////////////
-    // filtered lookup
-    //////////////////////////////////////////////////////////////////////////
-
-    //! behaviour outside of the texture is not defined
-    //! \param iniX in fix point 24.8
-    //! \param iniY in fix point 24.8
-    //! \return 0..255
-    static unsigned char GetBilinearFilteredAt(const int iniX256, const int iniY256, const CByteImage& image);
-
-    static bool QImageToImage(const QImage& bitmap, CImageEx& image);
-    static bool ImageToQImage(const CImageEx& image, QImage& bitmapObj);
-
-private:
-    static bool Load(const QString& fileName, CImageEx& image);
-    static bool Save(const QString& strFileName, CImageEx& inImage);
-};
-

+ 0 - 83
Code/Editor/Util/ImageUtil_impl.cpp

@@ -1,83 +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 "ImageUtil_impl.h"
-
-// Editor
-#include "Util/ImageUtil.h"
-
-bool CImageUtil_impl::LoadImage(const QString& fileName, CImageEx& image, bool* pQualityLoss)
-{
-    return CImageUtil::LoadImage(fileName, image, pQualityLoss);
-}
-
-bool CImageUtil_impl::SaveImage(const QString& fileName, CImageEx& image)
-{
-    return CImageUtil::SaveImage(fileName, image);
-}
-
-bool CImageUtil_impl::LoadJPEG(const QString& strFileName, CImageEx& image)
-{
-    return CImageUtil::LoadJPEG(strFileName, image);
-}
-
-bool CImageUtil_impl::SaveJPEG(const QString& strFileName, CImageEx& image)
-{
-    return CImageUtil::SaveJPEG(strFileName, image);
-}
-
-bool CImageUtil_impl::SaveBitmap(const QString& szFileName, CImageEx& image)
-{
-    return CImageUtil::SaveBitmap(szFileName, image);
-}
-
-bool CImageUtil_impl::LoadBmp(const QString& file, CImageEx& image)
-{
-    return CImageUtil::LoadBmp(file, image);
-}
-
-bool CImageUtil_impl::SavePGM(const QString& fileName, const CImageEx& image)
-{
-    return CImageUtil::SavePGM(fileName, image);
-}
-
-bool CImageUtil_impl::LoadPGM(const QString& fileName, CImageEx& image)
-{
-    return CImageUtil::LoadPGM(fileName, image);
-}
-
-void CImageUtil_impl::ScaleToFit(const CByteImage& srcImage, CByteImage& trgImage)
-{
-    CImageUtil::ScaleToFit(srcImage, trgImage);
-}
-
-void CImageUtil_impl::ScaleToFit(const CImageEx& srcImage, CImageEx& trgImage)
-{
-    CImageUtil::ScaleToFit(srcImage, trgImage);
-}
-
-void CImageUtil_impl::ScaleToDoubleFit(const CImageEx& srcImage, CImageEx& trgImage)
-{
-    CImageUtil::ScaleToDoubleFit(srcImage, trgImage);
-}
-
-void CImageUtil_impl::DownScaleSquareTextureTwice(const CImageEx& srcImage, CImageEx& trgImage, IImageUtil::_EAddrMode eAddressingMode)
-{
-    CImageUtil::DownScaleSquareTextureTwice(srcImage, trgImage, eAddressingMode);
-}
-
-void CImageUtil_impl::SmoothImage(CByteImage& image, int numSteps)
-{
-    CImageUtil::SmoothImage(image, numSteps);
-}
-
-unsigned char CImageUtil_impl::GetBilinearFilteredAt(const int iniX256, const int iniY256, const CByteImage& image)
-{
-    return CImageUtil::GetBilinearFilteredAt(iniX256, iniY256, image);
-}

+ 0 - 68
Code/Editor/Util/ImageUtil_impl.h

@@ -1,68 +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_UTILIMAGEUTIL_IMPL_H
-#define CRYINCLUDE_EDITOR_UTILIMAGEUTIL_IMPL_H
-#pragma once
-
-#include "Include/IImageUtil.h"
-
-class CImageUtil_impl
-    : public IImageUtil
-{
-public:
-    CImageUtil_impl(){}
-    ~CImageUtil_impl(){}
-
-    //! Load image, detect image type by file extension.
-    // Arguments:
-    //   pQualityLoss - 0 if info is not needed, pointer to the result otherwise - not need to preinitialize
-    virtual bool LoadImage(const QString& fileName, CImageEx& image, bool* pQualityLoss = 0) override;
-
-    //! Save image, detect image type by file extension.
-    virtual bool SaveImage(const QString& fileName, CImageEx& image) override;
-
-    // General image fucntions
-    virtual bool LoadJPEG(const QString& strFileName, CImageEx& image) override;
-
-    virtual bool SaveJPEG(const QString& strFileName, CImageEx& image) override;
-
-    virtual bool SaveBitmap(const QString& szFileName, CImageEx& image) override;
-
-    virtual bool LoadBmp(const QString& file, CImageEx& image) override;
-
-    virtual bool SavePGM(const QString& fileName, const CImageEx& image) override;
-
-    virtual bool LoadPGM(const QString& fileName, CImageEx& image) override;
-
-    //! Scale source image to fit size of target image.
-    virtual void ScaleToFit(const CByteImage& srcImage, CByteImage& trgImage) override;
-
-    //! Scale source image to fit size of target image.
-    virtual void ScaleToFit(const CImageEx& srcImage, CImageEx& trgImage) override;
-
-    //! Scale source image to fit twice side by side in target image.
-    virtual void ScaleToDoubleFit(const CImageEx& srcImage, CImageEx& trgImage) override;
-
-    //! Scale source image twice down image with filtering
-    enum _EAddrMode
-    {
-        WRAP, CLAMP
-    };
-    virtual void DownScaleSquareTextureTwice(const CImageEx& srcImage, CImageEx& trgImage,
-        IImageUtil::_EAddrMode eAddressingMode = IImageUtil::WRAP) override;
-
-    //! Smooth image.
-    virtual void SmoothImage(CByteImage& image, int numSteps) override;
-
-    //! behavior outside of the texture is not defined
-    //! \param iniX in fix point 24.8
-    //! \param iniY in fix point 24.8
-    //! \return 0..255
-    virtual unsigned char GetBilinearFilteredAt(const int iniX256, const int iniY256, const CByteImage& image) override;
-};
-#endif // CRYINCLUDE_EDITOR_UTILIMAGEUTIL_IMPL_H

+ 2 - 3
Code/Editor/Util/MemoryBlock.cpp

@@ -10,7 +10,6 @@
 #include "EditorDefs.h"
 #include "EditorDefs.h"
 
 
 #include "MemoryBlock.h"
 #include "MemoryBlock.h"
-#include "Include/ILogFile.h"
 #include <zlib.h>
 #include <zlib.h>
 
 
 #include <QMessageBox>
 #include <QMessageBox>
@@ -92,11 +91,11 @@ bool CMemoryBlock::Allocate(int size, int uncompressedSize)
         }
         }
         if (!m_buffer)
         if (!m_buffer)
         {
         {
-            GetIEditor()->GetLogFile()->Warning("Reducing working memory set failed, Sandbox must quit");
+            AZ_Warning("CMemoryBlock", false, "Reducing working memory set failed, Sandbox must quit");
         }
         }
         else
         else
         {
         {
-            GetIEditor()->GetLogFile()->Warning("Reducing working memory set succeeded\r\nSandbox may become unstable, it is advised to save the level and restart editor.");
+            AZ_Warning("CMemoryBlock", false, "Reducing working memory set succeeded\r\nSandbox may become unstable, it is advised to save the level and restart editor.");
         }
         }
     }
     }
 
 

+ 1 - 270
Code/Editor/Viewport.cpp

@@ -177,19 +177,10 @@ QtViewport::QtViewport(QWidget* parent)
 
 
     m_activeAxis = AXIS_TERRAIN;
     m_activeAxis = AXIS_TERRAIN;
 
 
-    for (int i = 0; i < LAST_COORD_SYSTEM; i++)
-    {
-        m_constructionMatrix[i].SetIdentity();
-    }
     m_screenTM.SetIdentity();
     m_screenTM.SetIdentity();
 
 
-
     m_bAdvancedSelectMode = false;
     m_bAdvancedSelectMode = false;
 
 
-    m_constructionPlane.SetPlane(Vec3_OneZ, Vec3_Zero);
-    m_constructionPlaneAxisX = Vec3_Zero;
-    m_constructionPlaneAxisY = Vec3_Zero;
-
     GetIEditor()->GetViewManager()->RegisterViewport(this);
     GetIEditor()->GetViewManager()->RegisterViewport(this);
 
 
     m_nCurViewportID = MAX_NUM_VIEWPORTS - 1;
     m_nCurViewportID = MAX_NUM_VIEWPORTS - 1;
@@ -541,7 +532,6 @@ void QtViewport::OnSetCursor()
 void QtViewport::ResetSelectionRegion()
 void QtViewport::ResetSelectionRegion()
 {
 {
     AABB box(Vec3(0, 0, 0), Vec3(0, 0, 0));
     AABB box(Vec3(0, 0, 0), Vec3(0, 0, 0));
-    GetIEditor()->SetSelectedRegion(box);
     m_selectedRect = QRect();
     m_selectedRect = QRect();
 }
 }
 
 
@@ -579,7 +569,6 @@ void QtViewport::OnDragSelectRectangle(const QRect& rect, bool bNormalizeRect)
 
 
     box.min.z = -10000;
     box.min.z = -10000;
     box.max.z = 10000;
     box.max.z = 10000;
-    GetIEditor()->SetSelectedRegion(box);
 
 
     // Show marker position in the status bar
     // Show marker position in the status bar
     float w = box.max.x - box.min.x;
     float w = box.max.x - box.min.x;
@@ -628,51 +617,6 @@ void QtViewport::ResetCursor()
     SetCurrentCursor(STD_CURSOR_DEFAULT, QString());
     SetCurrentCursor(STD_CURSOR_DEFAULT, QString());
 }
 }
 
 
-//////////////////////////////////////////////////////////////////////////
-void QtViewport::SetConstructionOrigin(const Vec3& worldPos)
-{
-    Matrix34 tm;
-    tm.SetIdentity();
-    tm.SetTranslation(worldPos);
-    SetConstructionMatrix(COORDS_LOCAL, tm);
-    SetConstructionMatrix(COORDS_PARENT, tm);
-    SetConstructionMatrix(COORDS_USERDEFINED, tm);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void QtViewport::SetConstructionMatrix(RefCoordSys coordSys, const Matrix34& xform)
-{
-    m_constructionMatrix[coordSys] = xform;
-    m_constructionMatrix[coordSys].OrthonormalizeFast(); // Remove scale component from matrix.
-    if (coordSys == COORDS_LOCAL)
-    {
-        m_constructionMatrix[COORDS_VIEW].SetTranslation(xform.GetTranslation());
-        m_constructionMatrix[COORDS_WORLD].SetTranslation(xform.GetTranslation());
-        m_constructionMatrix[COORDS_USERDEFINED].SetIdentity();
-        m_constructionMatrix[COORDS_USERDEFINED].SetTranslation(xform.GetTranslation());
-        m_constructionMatrix[COORDS_PARENT] = xform;
-    }
-    MakeConstructionPlane(GetAxisConstrain());
-}
-
-//////////////////////////////////////////////////////////////////////////
-const Matrix34& QtViewport::GetConstructionMatrix(RefCoordSys coordSys)
-{
-    if (coordSys == COORDS_VIEW)
-    {
-        return m_constructionMatrix[COORDS_WORLD];
-    }
-    return m_constructionMatrix[coordSys];
-}
-
-//////////////////////////////////////////////////////////////////////////
-void QtViewport::AssignConstructionPlane(const Vec3& p1, const Vec3& p2, const Vec3& p3)
-{
-    m_constructionPlane.SetPlane(p1, p2, p3);
-    m_constructionPlaneAxisX = p3 - p1;
-    m_constructionPlaneAxisY = p2 - p1;
-}
-
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 HWND QtViewport::renderOverlayHWND() const
 HWND QtViewport::renderOverlayHWND() const
 {
 {
@@ -690,219 +634,6 @@ bool QtViewport::isRenderOverlayVisible() const
     return m_renderOverlay.isVisible();
     return m_renderOverlay.isVisible();
 }
 }
 
 
-//////////////////////////////////////////////////////////////////////////
-void QtViewport::MakeConstructionPlane(int axis)
-{
-    QPoint cursorPos;
-    if (m_mouseCaptured)
-    {
-        cursorPos = m_cMouseDownPos;
-    }
-    else
-    {
-        cursorPos = QCursor::pos();
-        ScreenToClient(cursorPos);
-    }
-
-    Vec3 raySrc(Vec3_Zero), rayDir(Vec3_OneX);
-    ViewToWorldRay(cursorPos, raySrc, rayDir);
-
-    int coordSys = GetIEditor()->GetReferenceCoordSys();
-
-    Vec3 xAxis(Vec3_OneX);
-    Vec3 yAxis(Vec3_OneY);
-    Vec3 zAxis(Vec3_OneZ);
-
-    xAxis = m_constructionMatrix[coordSys].TransformVector(xAxis);
-    yAxis = m_constructionMatrix[coordSys].TransformVector(yAxis);
-    zAxis = m_constructionMatrix[coordSys].TransformVector(zAxis);
-
-    Vec3 pos = m_constructionMatrix[coordSys].GetTranslation();
-
-    if (axis == AXIS_X)
-    {
-        // X direction.
-        Vec3 n;
-        float d1 = fabs(rayDir.Dot(yAxis));
-        float d2 = fabs(rayDir.Dot(zAxis));
-        if (d1 > d2)
-        {
-            n = yAxis;
-        }
-        else
-        {
-            n = zAxis;
-        }
-        if (rayDir.Dot(n) < 0)
-        {
-            n = -n;                    // face construction plane to the ray.
-        }
-        //Vec3 n = Vec3(0,0,1);
-        Vec3 v1 = n.Cross(xAxis);
-        Vec3 v2 = n.Cross(v1);
-        AssignConstructionPlane(pos, pos + v2, pos + v1);
-    }
-    else if (axis == AXIS_Y)
-    {
-        // Y direction.
-        Vec3 n;
-        float d1 = fabs(rayDir.Dot(xAxis));
-        float d2 = fabs(rayDir.Dot(zAxis));
-        if (d1 > d2)
-        {
-            n = xAxis;
-        }
-        else
-        {
-            n = zAxis;
-        }
-        if (rayDir.Dot(n) < 0)
-        {
-            n = -n;                    // face construction plane to the ray.
-        }
-        Vec3 v1 = n.Cross(yAxis);
-        Vec3 v2 = n.Cross(v1);
-        AssignConstructionPlane(pos, pos + v2, pos + v1);
-    }
-    else if (axis == AXIS_Z)
-    {
-        // Z direction.
-        Vec3 n;
-        float d1 = fabs(rayDir.Dot(xAxis));
-        float d2 = fabs(rayDir.Dot(yAxis));
-        if (d1 > d2)
-        {
-            n = xAxis;
-        }
-        else
-        {
-            n = yAxis;
-        }
-        if (rayDir.Dot(n) < 0)
-        {
-            n = -n;                    // face construction plane to the ray.
-        }
-        Vec3 v1 = n.Cross(zAxis);
-        Vec3 v2 = n.Cross(v1);
-        AssignConstructionPlane(pos, pos + v2, pos + v1);
-    }
-    else if (axis == AXIS_XY)
-    {
-        AssignConstructionPlane(pos, pos + yAxis, pos + xAxis);
-    }
-    else if (axis == AXIS_XZ)
-    {
-        AssignConstructionPlane(pos, pos + zAxis, pos + xAxis);
-    }
-    else if (axis == AXIS_YZ)
-    {
-        AssignConstructionPlane(pos, pos + zAxis, pos + yAxis);
-    }
-    else
-    {
-        AssignConstructionPlane(pos, pos + yAxis, pos + xAxis);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-Vec3 QtViewport::MapViewToCP(const QPoint& point, int axis)
-{
-    AZ_PROFILE_FUNCTION(Editor);
-
-    if (axis == AXIS_TERRAIN)
-    {
-        return SnapToGrid(ViewToWorld(point));
-    }
-
-    MakeConstructionPlane(axis);
-
-    Vec3 raySrc(Vec3_Zero), rayDir(Vec3_OneX);
-    ViewToWorldRay(point, raySrc, rayDir);
-    
-    Vec3 v;
-
-    Ray ray(raySrc, rayDir);
-    if (!Intersect::Ray_Plane(ray, m_constructionPlane, v))
-    {
-        Plane inversePlane = m_constructionPlane;
-        inversePlane.n = -inversePlane.n;
-        inversePlane.d = -inversePlane.d;
-        if (!Intersect::Ray_Plane(ray, inversePlane, v))
-        {
-            v = Vec3_Zero;
-        }
-    }
-
-    // Snap value to grid.
-    v = SnapToGrid(v);
-
-    return v;
-}
-
-//////////////////////////////////////////////////////////////////////////
-Vec3 QtViewport::GetCPVector(const Vec3& p1, const Vec3& p2, int axis)
-{
-    Vec3 v = p2 - p1;
-
-    int coordSys = GetIEditor()->GetReferenceCoordSys();
-
-    Vec3 xAxis(Vec3_OneX);
-    Vec3 yAxis(Vec3_OneY);
-    Vec3 zAxis(Vec3_OneZ);
-
-    // In local coordinate system transform axises by construction matrix.
-    xAxis = m_constructionMatrix[coordSys].TransformVector(xAxis);
-    yAxis = m_constructionMatrix[coordSys].TransformVector(yAxis);
-    zAxis = m_constructionMatrix[coordSys].TransformVector(zAxis);
-
-    if (axis == AXIS_X || axis == AXIS_Y || axis == AXIS_Z)
-    {
-        // Project vector v on transformed axis x,y or z.
-        Vec3 axisVector;
-        if (axis == AXIS_X)
-        {
-            axisVector = xAxis;
-        }
-        if (axis == AXIS_Y)
-        {
-            axisVector = yAxis;
-        }
-        if (axis == AXIS_Z)
-        {
-            axisVector = zAxis;
-        }
-
-        // Project vector on construction plane into the one of axises.
-        v = v.Dot(axisVector) * axisVector;
-    }
-    else if (axis == AXIS_XY)
-    {
-        // Project vector v on transformed plane x/y.
-        Vec3 planeNormal = xAxis.Cross(yAxis);
-        Vec3 projV = v.Dot(planeNormal) * planeNormal;
-        v = v - projV;
-    }
-    else if (axis == AXIS_XZ)
-    {
-        // Project vector v on transformed plane x/y.
-        Vec3 planeNormal = xAxis.Cross(zAxis);
-        Vec3 projV = v.Dot(planeNormal) * planeNormal;
-        v = v - projV;
-    }
-    else if (axis == AXIS_YZ)
-    {
-        // Project vector v on transformed plane x/y.
-        Vec3 planeNormal = yAxis.Cross(zAxis);
-        Vec3 projV = v.Dot(planeNormal) * planeNormal;
-        v = v - projV;
-    }
-    else if (axis == AXIS_TERRAIN)
-    {
-        v.z = 0;
-    }
-    return v;
-}
-
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 void QtViewport::SetAxisConstrain(int axis)
 void QtViewport::SetAxisConstrain(int axis)
 {
 {
@@ -1122,7 +853,7 @@ bool QtViewport::GetAdvancedSelectModeFlag()
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 #if defined(AZ_PLATFORM_WINDOWS)
 #if defined(AZ_PLATFORM_WINDOWS)
 // Note: Both CreateAnglesYPR and CreateOrientationYPR were copied verbatim from Cry_Camera.h which has been removed.
 // Note: Both CreateAnglesYPR and CreateOrientationYPR were copied verbatim from Cry_Camera.h which has been removed.
-// 
+//
 // Description
 // Description
 //   <PRE>
 //   <PRE>
 //   x-YAW
 //   x-YAW

+ 0 - 36
Code/Editor/Viewport.h

@@ -176,8 +176,6 @@ public:
         return m_screenTM;
         return m_screenTM;
     }
     }
 
 
-    virtual Vec3 MapViewToCP(const QPoint& point) = 0;
-
     //! Map viewport position to world space position.
     //! Map viewport position to world space position.
     Vec3        ViewToWorld(const QPoint& vp, bool* pCollideWithTerrain = nullptr, bool onlyTerrain = false, bool bSkipVegetation = false, bool bTestRenderMesh = false, bool* collideWithObject = nullptr) const override = 0;
     Vec3        ViewToWorld(const QPoint& vp, bool* pCollideWithTerrain = nullptr, bool onlyTerrain = false, bool bSkipVegetation = false, bool bTestRenderMesh = false, bool* collideWithObject = nullptr) const override = 0;
     //! Convert point on screen to world ray.
     //! Convert point on screen to world ray.
@@ -185,14 +183,9 @@ public:
     //! Get normal for viewport position
     //! Get normal for viewport position
     virtual Vec3        ViewToWorldNormal(const QPoint& vp, bool onlyTerrain, bool bTestRenderMesh = false) = 0;
     virtual Vec3        ViewToWorldNormal(const QPoint& vp, bool onlyTerrain, bool bTestRenderMesh = false) = 0;
 
 
-    virtual Vec3 GetCPVector(const Vec3& p1, const Vec3& p2, int axis) = 0;
-    virtual Vec3 GetCPVector(const Vec3& p1, const Vec3& p2) { return GetCPVector(p1, p2, GetAxisConstrain()); }
-
     //! Performs hit testing of 2d point in view to find which object hit.
     //! Performs hit testing of 2d point in view to find which object hit.
     virtual bool HitTest(const QPoint& point, HitContext& hitInfo) = 0;
     virtual bool HitTest(const QPoint& point, HitContext& hitInfo) = 0;
 
 
-    virtual void MakeConstructionPlane(int axis) = 0;
-
     // Access to the member m_bAdvancedSelectMode so interested modules can know its value.
     // Access to the member m_bAdvancedSelectMode so interested modules can know its value.
     virtual bool GetAdvancedSelectModeFlag() = 0;
     virtual bool GetAdvancedSelectModeFlag() = 0;
 
 
@@ -224,8 +217,6 @@ public:
         m_dropCallbackCustom = dropCallbackCustom;
         m_dropCallbackCustom = dropCallbackCustom;
     }
     }
 
 
-    virtual void SetConstructionMatrix(RefCoordSys coordSys, const Matrix34& xform) = 0;
-
     virtual void BeginUndo() = 0;
     virtual void BeginUndo() = 0;
     virtual void AcceptUndo(const QString& undoDescription) = 0;
     virtual void AcceptUndo(const QString& undoDescription) = 0;
     virtual void CancelUndo() = 0;
     virtual void CancelUndo() = 0;
@@ -369,14 +360,6 @@ public:
     //! Get normal for viewport position
     //! Get normal for viewport position
     virtual Vec3        ViewToWorldNormal(const QPoint& vp, bool onlyTerrain, bool bTestRenderMesh = false) override;
     virtual Vec3        ViewToWorldNormal(const QPoint& vp, bool onlyTerrain, bool bTestRenderMesh = false) override;
 
 
-    //! Map view point to world space using current construction plane.
-    Vec3 MapViewToCP(const QPoint& point) override { return MapViewToCP(point, GetAxisConstrain()); }
-    virtual Vec3 MapViewToCP(const QPoint& point, int axis);
-
-    //! This method return a vector (p2-p1) in world space alligned to construction plane and restriction axises.
-    //! p1 and p2 must be given in world space and lie on construction plane.
-    using CViewport::GetCPVector;
-    Vec3 GetCPVector(const Vec3& p1, const Vec3& p2, int axis) override;
 
 
     //! Snap any given 3D world position to grid lines if snap is enabled.
     //! Snap any given 3D world position to grid lines if snap is enabled.
     Vec3 SnapToGrid(const Vec3& vec) override;
     Vec3 SnapToGrid(const Vec3& vec) override;
@@ -421,16 +404,6 @@ public:
 
 
     void GetPerpendicularAxis(EAxis* pAxis, bool* pIs2D) const override;
     void GetPerpendicularAxis(EAxis* pAxis, bool* pIs2D) const override;
 
 
-    //////////////////////////////////////////////////////////////////////////
-    //! Set construction plane from given position construction matrix refrence coord system and axis settings.
-    //////////////////////////////////////////////////////////////////////////
-    void MakeConstructionPlane(int axis) override;
-    void SetConstructionMatrix(RefCoordSys coordSys, const Matrix34& xform) override;
-    virtual const Matrix34& GetConstructionMatrix(RefCoordSys coordSys);
-    // Set simple construction plane origin.
-    void SetConstructionOrigin(const Vec3& worldPos);
-    //////////////////////////////////////////////////////////////////////////
-
     void DegradateQuality(bool bEnable);
     void DegradateQuality(bool bEnable);
 
 
     //////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////
@@ -543,13 +516,6 @@ protected:
 
 
     int m_activeAxis;
     int m_activeAxis;
 
 
-    AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
-    //! Current construction plane.
-    ::Plane m_constructionPlane;
-    Vec3 m_constructionPlaneAxisX;
-    Vec3 m_constructionPlaneAxisY;
-    AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
-
     // When true selection helpers will be shown and hit tested against.
     // When true selection helpers will be shown and hit tested against.
     bool m_bAdvancedSelectMode;
     bool m_bAdvancedSelectMode;
 
 
@@ -574,8 +540,6 @@ protected:
     QRect m_rcClient;
     QRect m_rcClient;
 
 
     AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
     AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
-    // Same construction matrix is shared by all viewports.
-    Matrix34 m_constructionMatrix[LAST_COORD_SYSTEM];
 
 
     typedef std::vector<_smart_ptr<IPostRenderer> > PostRenderers;
     typedef std::vector<_smart_ptr<IPostRenderer> > PostRenderers;
     PostRenderers   m_postRenderers;
     PostRenderers   m_postRenderers;

+ 0 - 1
Code/Editor/editor_core_files.cmake

@@ -12,7 +12,6 @@ set(FILES
     Include/IErrorReport.h
     Include/IErrorReport.h
     Include/IFileUtil.h
     Include/IFileUtil.h
     Include/EditorCoreAPI.h
     Include/EditorCoreAPI.h
-    Include/IImageUtil.h
     Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.qrc
     Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.qrc
     Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.cpp
     Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.cpp
     Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h
     Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h

+ 0 - 7
Code/Editor/editor_lib_files.cmake

@@ -260,7 +260,6 @@ set(FILES
     Include/HitContext.h
     Include/HitContext.h
     Include/ICommandManager.h
     Include/ICommandManager.h
     Include/IDisplayViewport.h
     Include/IDisplayViewport.h
-    Include/ILogFile.h
     Include/IKeyTimeSet.h
     Include/IKeyTimeSet.h
     Include/IPlugin.h
     Include/IPlugin.h
     Include/IPreferencesPage.h
     Include/IPreferencesPage.h
@@ -397,8 +396,6 @@ set(FILES
     Util/GeometryUtil.h
     Util/GeometryUtil.h
     LevelIndependentFileMan.cpp
     LevelIndependentFileMan.cpp
     LevelIndependentFileMan.h
     LevelIndependentFileMan.h
-    LogFileImpl.cpp
-    LogFileImpl.h
     PythonEditorFuncs.cpp
     PythonEditorFuncs.cpp
     PythonEditorFuncs.h
     PythonEditorFuncs.h
     QtUI/WaitCursor.h
     QtUI/WaitCursor.h
@@ -561,8 +558,6 @@ set(FILES
     WaitProgress.h
     WaitProgress.h
     Util/FileUtil_impl.h
     Util/FileUtil_impl.h
     Util/FileUtil_impl.cpp
     Util/FileUtil_impl.cpp
-    Util/ImageUtil_impl.h
-    Util/ImageUtil_impl.cpp
     Util/ColumnSortProxyModel.h
     Util/ColumnSortProxyModel.h
     Util/ColumnSortProxyModel.cpp
     Util/ColumnSortProxyModel.cpp
     Util/AbstractGroupProxyModel.h
     Util/AbstractGroupProxyModel.h
@@ -583,8 +578,6 @@ set(FILES
     Util/3DConnexionDriver.h
     Util/3DConnexionDriver.h
     Util/FileChangeMonitor.cpp
     Util/FileChangeMonitor.cpp
     Util/FileChangeMonitor.h
     Util/FileChangeMonitor.h
-    Util/ImageUtil.cpp
-    Util/ImageUtil.h
     Util/ImageGif.cpp
     Util/ImageGif.cpp
     Util/ImageGif.h
     Util/ImageGif.h
     Util/ImageTIF.cpp
     Util/ImageTIF.cpp

+ 2 - 2
Code/Editor/splashscreen_background.png

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:079c6d28fab15dfe624307d2be81d7008cc582de496f486a604186404ca818ab
-size 903037
+oid sha256:5d543f9bfef1a186b2f68c6144320c369ca155a40c6ed81023b14ee1d3e0bfe0
+size 1800167

+ 12 - 0
Code/Framework/AzAndroid/CMakeLists.txt

@@ -0,0 +1,12 @@
+#
+# 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
+#
+#
+
+ly_install_directory(
+    DIRECTORIES
+        java
+)

+ 6 - 2
Code/Framework/AzCore/AzCore/Component/Entity.cpp

@@ -1048,8 +1048,12 @@ namespace AZ
             // different error message for multiple components of the same type
             // different error message for multiple components of the same type
             if (componentProvidingService->m_underlyingTypeId == componentIncompatibleWithService->m_underlyingTypeId)
             if (componentProvidingService->m_underlyingTypeId == componentIncompatibleWithService->m_underlyingTypeId)
             {
             {
-                return AZStd::string::format("Multiple '%s' found, but this component is incompatible with others of the same type.",
-                    componentProvidingService->m_component->RTTI_GetTypeName());
+                return AZStd::string::format(
+                    "Multiple '%s' found, but this component is incompatible with others of the same type. Components with UUID %s "
+                    "and %s are incompatible with each other.",
+                    componentProvidingService->m_component->RTTI_GetTypeName(),
+                    componentProvidingService->m_component->RTTI_GetType().ToString<AZStd::string>().c_str(),
+                    componentIncompatibleWithService->m_component->RTTI_GetType().ToString<AZStd::string>().c_str());
             }
             }
 
 
             return AZStd::string::format("Components '%s' and '%s' are incompatible.",
             return AZStd::string::format("Components '%s' and '%s' are incompatible.",

+ 4 - 0
Code/Framework/AzCore/AzCore/Console/Console.cpp

@@ -10,6 +10,7 @@
 #include <AzCore/Console/ILogger.h>
 #include <AzCore/Console/ILogger.h>
 #include <AzCore/Interface/Interface.h>
 #include <AzCore/Interface/Interface.h>
 #include <AzCore/Serialization/Json/JsonSerializationSettings.h>
 #include <AzCore/Serialization/Json/JsonSerializationSettings.h>
+#include <AzCore/Serialization/Locale.h>
 #include <AzCore/Settings/CommandLine.h>
 #include <AzCore/Settings/CommandLine.h>
 #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
 #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
 #include <AzCore/StringFunc/StringFunc.h>
 #include <AzCore/StringFunc/StringFunc.h>
@@ -438,6 +439,9 @@ namespace AZ
         ConsoleFunctorFlags requiredClear
         ConsoleFunctorFlags requiredClear
     )
     )
     {
     {
+        // incoming commands are assumed to be in the "C" locale as they might be from portable data files
+        AZ::Locale::ScopedSerializationLocale scopedLocale;
+
         bool result = false;
         bool result = false;
         ConsoleFunctorFlags flags = ConsoleFunctorFlags::Null;
         ConsoleFunctorFlags flags = ConsoleFunctorFlags::Null;
 
 

+ 10 - 0
Code/Framework/AzCore/AzCore/Console/ConsoleTypeHelpers.inl

@@ -13,6 +13,7 @@
 #include <AzCore/std/functional.h>
 #include <AzCore/std/functional.h>
 #include <AzCore/std/ranges/ranges_algorithm.h>
 #include <AzCore/std/ranges/ranges_algorithm.h>
 #include <AzCore/std/string/fixed_string.h>
 #include <AzCore/std/string/fixed_string.h>
+#include <AzCore/Serialization/Locale.h>
 #include <AzCore/StringFunc/StringFunc.h>
 #include <AzCore/StringFunc/StringFunc.h>
 #include <AzCore/Math/Vector2.h>
 #include <AzCore/Math/Vector2.h>
 #include <AzCore/Math/Vector3.h>
 #include <AzCore/Math/Vector3.h>
@@ -55,26 +56,31 @@ namespace AZ
 
 
         inline CVarFixedString ValueToString(const AZ::Vector2& value)
         inline CVarFixedString ValueToString(const AZ::Vector2& value)
         {
         {
+            AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret %0.2f as using the "C" locale
             return CVarFixedString::format("%0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()));
             return CVarFixedString::format("%0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()));
         }
         }
 
 
         inline CVarFixedString ValueToString(const AZ::Vector3& value)
         inline CVarFixedString ValueToString(const AZ::Vector3& value)
         {
         {
+            AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret %0.2f as using the "C" locale
             return CVarFixedString::format("%0.2f %0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()), static_cast<float>(value.GetZ()));
             return CVarFixedString::format("%0.2f %0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()), static_cast<float>(value.GetZ()));
         }
         }
 
 
         inline CVarFixedString ValueToString(const AZ::Vector4& value)
         inline CVarFixedString ValueToString(const AZ::Vector4& value)
         {
         {
+            AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret %0.2f as using the "C" locale
             return CVarFixedString::format("%0.2f %0.2f %0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()), static_cast<float>(value.GetZ()), static_cast<float>(value.GetW()));
             return CVarFixedString::format("%0.2f %0.2f %0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()), static_cast<float>(value.GetZ()), static_cast<float>(value.GetW()));
         }
         }
 
 
         inline CVarFixedString ValueToString(const AZ::Quaternion& value)
         inline CVarFixedString ValueToString(const AZ::Quaternion& value)
         {
         {
+            AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret %0.2f as using the "C" locale
             return CVarFixedString::format("%0.2f %0.2f %0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()), static_cast<float>(value.GetZ()), static_cast<float>(value.GetW()));
             return CVarFixedString::format("%0.2f %0.2f %0.2f %0.2f", static_cast<float>(value.GetX()), static_cast<float>(value.GetY()), static_cast<float>(value.GetZ()), static_cast<float>(value.GetW()));
         }
         }
 
 
         inline CVarFixedString ValueToString(const AZ::Color& value)
         inline CVarFixedString ValueToString(const AZ::Color& value)
         {
         {
+            AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret %0.2f as using the "C" locale
             return CVarFixedString::format("%0.2f %0.2f %0.2f %0.2f", static_cast<float>(value.GetR()), static_cast<float>(value.GetG()), static_cast<float>(value.GetB()), static_cast<float>(value.GetA()));
             return CVarFixedString::format("%0.2f %0.2f %0.2f %0.2f", static_cast<float>(value.GetR()), static_cast<float>(value.GetG()), static_cast<float>(value.GetB()), static_cast<float>(value.GetA()));
         }
         }
 
 
@@ -186,6 +192,8 @@ namespace AZ
         {
         {
             if (!arguments.empty())
             if (!arguments.empty())
             {
             {
+                AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret floats using the "C" locale for strod
+
                 AZ::CVarFixedString convertCandidate{ arguments.front() };
                 AZ::CVarFixedString convertCandidate{ arguments.front() };
                 char* endPtr = nullptr;
                 char* endPtr = nullptr;
                 const float converted = static_cast<float>(strtod(convertCandidate.c_str(), &endPtr));
                 const float converted = static_cast<float>(strtod(convertCandidate.c_str(), &endPtr));
@@ -205,6 +213,8 @@ namespace AZ
         {
         {
             if (!arguments.empty())
             if (!arguments.empty())
             {
             {
+                AZ::Locale::ScopedSerializationLocale scopedLocale; // interpret floats using the "C" locale for strod
+
                 AZ::CVarFixedString convertCandidate{ arguments.front() };
                 AZ::CVarFixedString convertCandidate{ arguments.front() };
                 char* endPtr = nullptr;
                 char* endPtr = nullptr;
                 const double converted = strtod(convertCandidate.c_str(), &endPtr);
                 const double converted = strtod(convertCandidate.c_str(), &endPtr);

+ 1 - 1
Code/Framework/AzCore/AzCore/IO/Streamer/FullFileDecompressor.cpp

@@ -61,7 +61,7 @@ namespace AZ::IO
     {
     {
         JobManagerDesc jobDesc;
         JobManagerDesc jobDesc;
             jobDesc.m_jobManagerName = "Full File Decompressor";
             jobDesc.m_jobManagerName = "Full File Decompressor";
-        u32 numThreads = AZ::GetMin(maxNumJobs, AZStd::thread::hardware_concurrency());
+        u32 numThreads = AZ::GetMin(maxNumJobs, jobDesc.GetWorkerThreadCount(AZStd::thread::hardware_concurrency()));
         for (u32 i = 0; i < numThreads; ++i)
         for (u32 i = 0; i < numThreads; ++i)
         {
         {
             jobDesc.m_workerThreads.push_back(JobManagerThreadDesc());
             jobDesc.m_workerThreads.push_back(JobManagerThreadDesc());

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio