diff --git a/.gitignore b/.gitignore
index 9012ec7576..2820d1e1c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,18 +2,14 @@
.vs/
.vscode/
__pycache__
-AssetProcessorTemp/**
[Bb]uild/
[Oo]ut/**
CMakeUserPresets.json
[Cc]ache/
/[Ii]nstall/
-Editor/EditorEventLog.xml
-Editor/EditorLayout.xml
**/*egg-info/**
**/*egg-link
**/[Rr]estricted
-UserSettings.xml
[Uu]ser/
FrameCapture/**
.DS_Store
@@ -22,9 +18,6 @@ client*.cfg
server*.cfg
.mayaSwatches/
_savebackup/
-#Output folder for test results when running Automated Tests
-TestResults/**
*.swatches
/imgui.ini
-/scripts/project_manager/logs/
-/AutomatedTesting/Gem/PythonTests/scripting/TestResults
+
diff --git a/Assets/Editor/Icons/AssetBrowser/Collapse_All.svg b/Assets/Editor/Icons/AssetBrowser/Collapse_All.svg
new file mode 100644
index 0000000000..7c7a7b85bd
--- /dev/null
+++ b/Assets/Editor/Icons/AssetBrowser/Collapse_All.svg
@@ -0,0 +1,14 @@
+
+
diff --git a/AutomatedTesting/CMakeLists.txt b/AutomatedTesting/CMakeLists.txt
index 1c5382ba4b..9621c0accb 100644
--- a/AutomatedTesting/CMakeLists.txt
+++ b/AutomatedTesting/CMakeLists.txt
@@ -27,5 +27,4 @@ else()
set_property(GLOBAL APPEND PROPERTY LY_PROJECTS_TARGET_NAME ${project_target_name})
- add_subdirectory(Gem)
endif()
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/CMakeLists.txt b/AutomatedTesting/Gem/CMakeLists.txt
index 7a411544ec..e3d8a4087a 100644
--- a/AutomatedTesting/Gem/CMakeLists.txt
+++ b/AutomatedTesting/Gem/CMakeLists.txt
@@ -6,6 +6,9 @@
#
#
+set(gem_path ${CMAKE_CURRENT_LIST_DIR})
+set(gem_json ${gem_path}/gem.json)
+o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+
add_subdirectory(Code)
-add_subdirectory(PythonTests)
-add_subdirectory(PythonCoverage)
+add_subdirectory(PythonTests)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/Code/CMakeLists.txt b/AutomatedTesting/Gem/Code/CMakeLists.txt
index 8808507765..1a88d6e69a 100644
--- a/AutomatedTesting/Gem/Code/CMakeLists.txt
+++ b/AutomatedTesting/Gem/Code/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
ly_add_target(
NAME AutomatedTesting ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
diff --git a/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt b/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
index 2bb380fae3..50f9e78c74 100644
--- a/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
@@ -6,4 +6,8 @@
#
#
+set(gem_path ${CMAKE_CURRENT_LIST_DIR})
+set(gem_json ${gem_path}/gem.json)
+o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+
add_subdirectory(Code)
diff --git a/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt b/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
index a865ccc49f..ea6db88c1c 100644
--- a/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${o3de_gem_restricted_path} ${o3de_gem_path} ${o3de_gem_name})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
if(PAL_TRAIT_PYTHONCOVERAGE_SUPPORTED)
diff --git a/AutomatedTesting/Gem/PythonCoverage/gem.json b/AutomatedTesting/Gem/PythonCoverage/gem.json
index b99ce0daad..681696d78e 100644
--- a/AutomatedTesting/Gem/PythonCoverage/gem.json
+++ b/AutomatedTesting/Gem/PythonCoverage/gem.json
@@ -4,6 +4,7 @@
"license": "Apache-2.0 Or MIT",
"license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
"origin": "Open 3D Engine - o3de.org",
+ "origin_url": "https://github.com/o3de/o3de",
"type": "Tool",
"summary": "A tool for generating gem coverage for Python tests.",
"canonical_tags": [
@@ -13,5 +14,8 @@
"PythonCoverage"
],
"icon_path": "preview.png",
- "requirements": ""
+ "requirements": "",
+ "documentation_url": "",
+ "dependencies": [
+ ]
}
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py
index 905722d103..f1e66ac492 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py
@@ -4,10 +4,18 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
+import logging
+import os
import pytest
+import ly_test_tools.environment.file_system as file_system
+import editor_python_test_tools.hydra_test_utils as hydra
+
from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite
+logger = logging.getLogger(__name__)
+TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
+
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@@ -114,3 +122,75 @@ class TestAutomation(EditorTestSuite):
class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest):
from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module
+
+
+@pytest.mark.parametrize("project", ["AutomatedTesting"])
+@pytest.mark.parametrize("launcher_platform", ['windows_generic'])
+class TestMaterialEditorBasicTests(object):
+ @pytest.fixture(autouse=True)
+ def setup_teardown(self, request, workspace, project):
+ def delete_files():
+ file_system.delete(
+ [
+ os.path.join(workspace.paths.project(), "Materials", "test_material.material"),
+ os.path.join(workspace.paths.project(), "Materials", "test_material_1.material"),
+ os.path.join(workspace.paths.project(), "Materials", "test_material_2.material"),
+ ],
+ True,
+ True,
+ )
+ # Cleanup our newly created materials
+ delete_files()
+
+ def teardown():
+ # Cleanup our newly created materials
+ delete_files()
+
+ request.addfinalizer(teardown)
+
+ @pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
+ @pytest.mark.test_case_id("C34448113") # Creating a New Asset.
+ @pytest.mark.test_case_id("C34448114") # Opening an Existing Asset.
+ @pytest.mark.test_case_id("C34448115") # Closing Selected Material.
+ @pytest.mark.test_case_id("C34448116") # Closing All Materials.
+ @pytest.mark.test_case_id("C34448117") # Closing all but Selected Material.
+ @pytest.mark.test_case_id("C34448118") # Saving Material.
+ @pytest.mark.test_case_id("C34448119") # Saving as a New Material.
+ @pytest.mark.test_case_id("C34448120") # Saving as a Child Material.
+ @pytest.mark.test_case_id("C34448121") # Saving all Open Materials.
+ def test_MaterialEditorBasicTests(
+ self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
+
+ expected_lines = [
+ "Material opened: True",
+ "Test asset doesn't exist initially: True",
+ "New asset created: True",
+ "New Material opened: True",
+ "Material closed: True",
+ "All documents closed: True",
+ "Close All Except Selected worked as expected: True",
+ "Actual Document saved with changes: True",
+ "Document saved as copy is saved with changes: True",
+ "Document saved as child is saved with changes: True",
+ "Save All worked as expected: True",
+ "P1: Asset Browser visibility working as expected: True",
+ "P1: Inspector visibility working as expected: True",
+ ]
+ unexpected_lines = [
+ # Including any lines in unexpected_lines will cause the test to run for the duration of the timeout
+ ]
+
+ hydra.launch_and_validate_results(
+ request,
+ TEST_DIRECTORY,
+ generic_launcher,
+ "hydra_AtomMaterialEditor_BasicTests.py",
+ run_python="--runpython",
+ timeout=43,
+ expected_lines=expected_lines,
+ unexpected_lines=unexpected_lines,
+ halt_on_unexpected=True,
+ null_renderer=True,
+ log_file_name="MaterialEditor.log",
+ enable_prefab_system=False,
+ )
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py
index 29f90e6807..bd0477a1db 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py
@@ -9,158 +9,20 @@ import os
import pytest
-import ly_test_tools.environment.file_system as file_system
-import editor_python_test_tools.hydra_test_utils as hydra
from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite
-from Atom.atom_utils.atom_constants import LIGHT_TYPES
logger = logging.getLogger(__name__)
TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("level", ["auto_test"])
-class TestAtomEditorComponentsMain(object):
- """Holds tests for Atom components."""
-
- @pytest.mark.test_case_id("C34525095")
- def test_AtomEditorComponents_LightComponent(
- self, request, editor, workspace, project, launcher_platform, level):
- """
- Please review the hydra script run by this test for more specific test info.
- Tests that the Light component has the expected property options available to it.
- """
- cfg_args = [level]
-
- expected_lines = [
- "light_entity Entity successfully created",
- "Entity has a Light component",
- "light_entity_test: Component added to the entity: True",
- f"light_entity_test: Property value is {LIGHT_TYPES['sphere']} which matches {LIGHT_TYPES['sphere']}",
- "Controller|Configuration|Shadows|Enable shadow set to True",
- "light_entity Controller|Configuration|Shadows|Shadowmap size: SUCCESS",
- "Controller|Configuration|Shadows|Shadow filter method set to 1", # PCF
- "Controller|Configuration|Shadows|Filtering sample count set to 4",
- "Controller|Configuration|Shadows|Filtering sample count set to 64",
- "Controller|Configuration|Shadows|Shadow filter method set to 2", # ESM
- "Controller|Configuration|Shadows|ESM exponent set to 50.0",
- "Controller|Configuration|Shadows|ESM exponent set to 5000.0",
- "Controller|Configuration|Shadows|Shadow filter method set to 3", # ESM+PCF
- f"light_entity_test: Property value is {LIGHT_TYPES['spot_disk']} which matches {LIGHT_TYPES['spot_disk']}",
- f"light_entity_test: Property value is {LIGHT_TYPES['capsule']} which matches {LIGHT_TYPES['capsule']}",
- f"light_entity_test: Property value is {LIGHT_TYPES['quad']} which matches {LIGHT_TYPES['quad']}",
- "light_entity Controller|Configuration|Fast approximation: SUCCESS",
- "light_entity Controller|Configuration|Both directions: SUCCESS",
- f"light_entity_test: Property value is {LIGHT_TYPES['polygon']} which matches {LIGHT_TYPES['polygon']}",
- f"light_entity_test: Property value is {LIGHT_TYPES['simple_point']} "
- f"which matches {LIGHT_TYPES['simple_point']}",
- "Controller|Configuration|Attenuation radius|Mode set to 0",
- "Controller|Configuration|Attenuation radius|Radius set to 100.0",
- f"light_entity_test: Property value is {LIGHT_TYPES['simple_spot']} "
- f"which matches {LIGHT_TYPES['simple_spot']}",
- "Controller|Configuration|Shutters|Outer angle set to 45.0",
- "Controller|Configuration|Shutters|Outer angle set to 90.0",
- "light_entity_test: Component added to the entity: True",
- "Light component test (non-GPU) completed.",
- ]
-
- unexpected_lines = ["Traceback (most recent call last):"]
-
- hydra.launch_and_validate_results(
- request,
- TEST_DIRECTORY,
- editor,
- "hydra_AtomEditorComponents_LightComponent.py",
- timeout=120,
- expected_lines=expected_lines,
- unexpected_lines=unexpected_lines,
- halt_on_unexpected=True,
- null_renderer=True,
- cfg_args=cfg_args,
- enable_prefab_system=False,
- )
-
-
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("launcher_platform", ['windows_generic'])
-@pytest.mark.system
-class TestMaterialEditorBasicTests(object):
- @pytest.fixture(autouse=True)
- def setup_teardown(self, request, workspace, project):
- def delete_files():
- file_system.delete(
- [
- os.path.join(workspace.paths.project(), "Materials", "test_material.material"),
- os.path.join(workspace.paths.project(), "Materials", "test_material_1.material"),
- os.path.join(workspace.paths.project(), "Materials", "test_material_2.material"),
- ],
- True,
- True,
- )
- # Cleanup our newly created materials
- delete_files()
-
- def teardown():
- # Cleanup our newly created materials
- delete_files()
-
- request.addfinalizer(teardown)
-
- @pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
- @pytest.mark.test_case_id("C34448113") # Creating a New Asset.
- @pytest.mark.test_case_id("C34448114") # Opening an Existing Asset.
- @pytest.mark.test_case_id("C34448115") # Closing Selected Material.
- @pytest.mark.test_case_id("C34448116") # Closing All Materials.
- @pytest.mark.test_case_id("C34448117") # Closing all but Selected Material.
- @pytest.mark.test_case_id("C34448118") # Saving Material.
- @pytest.mark.test_case_id("C34448119") # Saving as a New Material.
- @pytest.mark.test_case_id("C34448120") # Saving as a Child Material.
- @pytest.mark.test_case_id("C34448121") # Saving all Open Materials.
- def test_MaterialEditorBasicTests(
- self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
-
- expected_lines = [
- "Material opened: True",
- "Test asset doesn't exist initially: True",
- "New asset created: True",
- "New Material opened: True",
- "Material closed: True",
- "All documents closed: True",
- "Close All Except Selected worked as expected: True",
- "Actual Document saved with changes: True",
- "Document saved as copy is saved with changes: True",
- "Document saved as child is saved with changes: True",
- "Save All worked as expected: True",
- ]
- unexpected_lines = [
- "Traceback (most recent call last):"
- ]
-
- hydra.launch_and_validate_results(
- request,
- TEST_DIRECTORY,
- generic_launcher,
- "hydra_AtomMaterialEditor_BasicTests.py",
- run_python="--runpython",
- timeout=120,
- expected_lines=expected_lines,
- unexpected_lines=unexpected_lines,
- halt_on_unexpected=True,
- null_renderer=True,
- log_file_name="MaterialEditor.log",
- enable_prefab_system=False,
- )
-
-
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
class TestAutomation(EditorTestSuite):
enable_prefab_system = False
- #this test is intermittently timing out without ever having executed. sandboxing while we investigate cause.
+ # this test is intermittently timing out without ever having executed. sandboxing while we investigate cause.
@pytest.mark.test_case_id("C36525660")
class AtomEditorComponents_DisplayMapperAdded(EditorSharedTest):
from Atom.tests import hydra_AtomEditorComponents_DisplayMapperAdded as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
index b21c74de19..96eeb4279e 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py
@@ -125,11 +125,11 @@ def is_pane_visible(pane_name):
"""
:return: bool
"""
- return atomtools.AtomToolsWindowRequestBus(bus.Broadcast, "IsDockWidgetVisible", pane_name)
+ return atomtools.AtomToolsMainWindowRequestBus(bus.Broadcast, "IsDockWidgetVisible", pane_name)
def set_pane_visibility(pane_name, value):
- atomtools.AtomToolsWindowRequestBus(bus.Broadcast, "SetDockWidgetVisible", pane_name, value)
+ atomtools.AtomToolsMainWindowRequestBus(bus.Broadcast, "SetDockWidgetVisible", pane_name, value)
def select_lighting_config(config_name):
@@ -162,6 +162,13 @@ def select_model_config(configname):
azlmbr.materialeditor.MaterialViewportRequestBus(azlmbr.bus.Broadcast, "SelectModelPresetByName", configname)
+def destroy_main_window():
+ """
+ Closes the Material Editor window
+ """
+ azlmbr.atomtools.AtomToolsMainWindowFactoryRequestBus(azlmbr.bus.Broadcast, "DestroyMainWindow")
+
+
def wait_for_condition(function, timeout_in_seconds=1.0):
# type: (function, float) -> bool
"""
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
deleted file mode 100644
index 7ecdc6859b..0000000000
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py
+++ /dev/null
@@ -1,213 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import os
-import sys
-
-import azlmbr.bus as bus
-import azlmbr.editor as editor
-import azlmbr.math as math
-import azlmbr.paths
-import azlmbr.legacy.general as general
-
-sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests"))
-
-import editor_python_test_tools.hydra_editor_utils as hydra
-from Atom.atom_utils.atom_constants import LIGHT_TYPES
-
-LIGHT_TYPE_PROPERTY = 'Controller|Configuration|Light type'
-SPHERE_AND_SPOT_DISK_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Shadows|Enable shadow", True),
- ("Controller|Configuration|Shadows|Shadowmap size", 0), # 256
- ("Controller|Configuration|Shadows|Shadowmap size", 1), # 512
- ("Controller|Configuration|Shadows|Shadowmap size", 2), # 1024
- ("Controller|Configuration|Shadows|Shadowmap size", 3), # 2048
- ("Controller|Configuration|Shadows|Shadow filter method", 1), # PCF
- ("Controller|Configuration|Shadows|Filtering sample count", 4.0),
- ("Controller|Configuration|Shadows|Filtering sample count", 64.0),
- ("Controller|Configuration|Shadows|Shadow filter method", 2), # ECM
- ("Controller|Configuration|Shadows|ESM exponent", 50),
- ("Controller|Configuration|Shadows|ESM exponent", 5000),
- ("Controller|Configuration|Shadows|Shadow filter method", 3), # ESM+PCF
-]
-QUAD_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Both directions", True),
- ("Controller|Configuration|Fast approximation", True),
-]
-SIMPLE_POINT_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Attenuation radius|Mode", 0),
- ("Controller|Configuration|Attenuation radius|Radius", 100.0),
-]
-SIMPLE_SPOT_LIGHT_PROPERTIES = [
- ("Controller|Configuration|Shutters|Inner angle", 45.0),
- ("Controller|Configuration|Shutters|Outer angle", 90.0),
-]
-
-
-def verify_required_component_property_value(entity_name, component, property_path, expected_property_value):
- """
- Compares the property value of component against the expected_property_value.
- :param entity_name: name of the entity to use (for test verification purposes).
- :param component: component to check on a given entity for its current property value.
- :param property_path: the path to the property inside the component.
- :param expected_property_value: The value expected from the value inside property_path.
- :return: None, but prints to general.log() which the test uses to verify against.
- """
- property_value = editor.EditorComponentAPIBus(
- bus.Broadcast, "GetComponentProperty", component, property_path).GetValue()
- general.log(f"{entity_name}_test: Property value is {property_value} "
- f"which matches {expected_property_value}")
-
-
-def run():
- """
- Test Case - Light Component
- 1. Creates a "light_entity" Entity and attaches a "Light" component to it.
- 2. Updates the Light component to each light type option from the LIGHT_TYPES constant.
- 3. The test will check the Editor log to ensure each light type was selected.
- 4. Prints the string "Light component test (non-GPU) completed" after completion.
-
- Tests will fail immediately if any of these log lines are found:
- 1. Trace::Assert
- 2. Trace::Error
- 3. Traceback (most recent call last):
-
- :return: None
- """
- # Create a "light_entity" entity with "Light" component.
- light_entity_name = "light_entity"
- light_component = "Light"
- light_entity = hydra.Entity(light_entity_name)
- light_entity.create_entity(math.Vector3(-1.0, -2.0, 3.0), [light_component])
- general.log(
- f"{light_entity_name}_test: Component added to the entity: "
- f"{hydra.has_components(light_entity.id, [light_component])}")
-
- # Populate the light_component_id_pair value so that it can be used to select all Light component options.
- light_component_id_pair = None
- component_type_id_list = azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast, 'FindComponentTypeIdsByEntityType', [light_component], 0)
- if len(component_type_id_list) < 1:
- general.log(f"ERROR: A component class with name {light_component} doesn't exist")
- light_component_id_pair = None
- elif len(component_type_id_list) > 1:
- general.log(f"ERROR: Found more than one component classes with same name: {light_component}")
- light_component_id_pair = None
- entity_component_id_pair = azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast, 'GetComponentOfType', light_entity.id, component_type_id_list[0])
- if entity_component_id_pair.IsSuccess():
- light_component_id_pair = entity_component_id_pair.GetValue()
-
- # Test each Light component option can be selected and it's properties updated.
- # Point (sphere) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['sphere'],
- light_properties=SPHERE_AND_SPOT_DISK_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Spot (disk) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['spot_disk'],
- light_properties=SPHERE_AND_SPOT_DISK_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Capsule light type checks.
- azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast,
- 'SetComponentProperty',
- light_component_id_pair,
- LIGHT_TYPE_PROPERTY,
- LIGHT_TYPES['capsule']
- )
- verify_required_component_property_value(
- entity_name=light_entity_name,
- component=light_entity.components[0],
- property_path=LIGHT_TYPE_PROPERTY,
- expected_property_value=LIGHT_TYPES['capsule']
- )
-
- # Quad light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['quad'],
- light_properties=QUAD_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Polygon light type checks.
- azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast,
- 'SetComponentProperty',
- light_component_id_pair,
- LIGHT_TYPE_PROPERTY,
- LIGHT_TYPES['polygon']
- )
- verify_required_component_property_value(
- entity_name=light_entity_name,
- component=light_entity.components[0],
- property_path=LIGHT_TYPE_PROPERTY,
- expected_property_value=LIGHT_TYPES['polygon']
- )
-
- # Point (simple punctual) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['simple_point'],
- light_properties=SIMPLE_POINT_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- # Spot (simple punctual) light type checks.
- light_type_property_test(
- light_type=LIGHT_TYPES['simple_spot'],
- light_properties=SIMPLE_SPOT_LIGHT_PROPERTIES,
- light_component_id_pair=light_component_id_pair,
- light_entity_name=light_entity_name,
- light_entity=light_entity
- )
-
- general.log("Light component test (non-GPU) completed.")
-
-
-def light_type_property_test(light_type, light_properties, light_component_id_pair, light_entity_name, light_entity):
- """
- Updates the current light type and modifies its properties, then verifies they are accurate to what was set.
- :param light_type: The type of light to update, must match a value in LIGHT_TYPES
- :param light_properties: List of tuples detailing properties to modify with update values.
- :param light_component_id_pair: Entity + component ID pair for updating the light component on a given entity.
- :param light_entity_name: the name of the Entity holding the light component.
- :param light_entity: the Entity object containing the light component.
- :return: None
- """
- azlmbr.editor.EditorComponentAPIBus(
- azlmbr.bus.Broadcast,
- 'SetComponentProperty',
- light_component_id_pair,
- LIGHT_TYPE_PROPERTY,
- light_type
- )
- verify_required_component_property_value(
- entity_name=light_entity_name,
- component=light_entity.components[0],
- property_path=LIGHT_TYPE_PROPERTY,
- expected_property_value=light_type
- )
-
- for light_property in light_properties:
- light_entity.get_set_test(0, light_property[0], light_property[1])
-
-
-if __name__ == "__main__":
- run()
diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
index 9f8f6c44b2..bd00a84919 100644
--- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
+++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py
@@ -36,6 +36,19 @@ MATERIAL_TYPE_PATH = os.path.join(
CACHE_FILE_EXTENSION = ".azmaterial"
+def verify_pane_visibility(pane_name: str):
+ """
+ print log lines indicating Material Editor pane visibility function
+ :param pane_name: Name of the pane to be tested
+ """
+ initial_value = material_editor.is_pane_visible(pane_name)
+ material_editor.set_pane_visibility(pane_name, not initial_value)
+ result = (material_editor.is_pane_visible(pane_name) is not initial_value)
+ material_editor.set_pane_visibility(pane_name, initial_value)
+ result = result and (initial_value is material_editor.is_pane_visible(pane_name))
+ print(f"P1: {pane_name} visibility working as expected: {result}")
+
+
def run():
"""
Summary:
@@ -49,9 +62,12 @@ def run():
7. Saving as a New Material
8. Saving as a Child Material
9. Saving all Open Materials
+ 10. Verify Asset Browser pane visibility
+ 11. Verify Material Inspector pane visibility
Expected Result:
All the above functions work as expected in Material Editor.
+ Pane visibility functions as expected
:return: None
"""
@@ -187,6 +203,19 @@ def run():
material_editor.save_all()
material_editor.close_all_documents()
+ # 10) Verify Asset Browser pane visibility
+ verify_pane_visibility("Asset Browser")
+
+ # 11) Verify Material Inspector pane visibility
+ verify_pane_visibility("Inspector")
+
+ # Confirm documents closed and exit Material Editor
+ material_editor.wait_for_condition(lambda:
+ (not material_editor.is_open(document1_id)) and
+ (not material_editor.is_open(document2_id)) and
+ (not material_editor.is_open(document3_id)), 2.0)
+ material_editor.destroy_main_window()
+
if __name__ == "__main__":
run()
diff --git a/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt
index aea2562e0b..64effb5b4c 100644
--- a/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/Blast/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_BLAST Traits
diff --git a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
index 800f347359..26c03e78c2 100644
--- a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
@@ -10,7 +10,7 @@
# Automated Tests
################################################################################
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_traits_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py
index 72530325e0..c3398406ab 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py
@@ -8,7 +8,8 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
# Built-in Imports
from __future__ import annotations
from typing import List, Tuple, Union
-
+from enum import Enum
+import warnings
# Open 3D Engine Imports
import azlmbr
@@ -21,14 +22,25 @@ import azlmbr.legacy.general as general
from editor_python_test_tools.utils import Report
+class EditorEntityType(Enum):
+ GAME = azlmbr.entity.EntityType().Game
+ LEVEL = azlmbr.entity.EntityType().Level
+
+
class EditorComponent:
"""
EditorComponent class used to set and get the component property value using path
EditorComponent object is returned from either of
EditorEntity.add_component() or Entity.add_components() or EditorEntity.get_components_of_type()
which also assigns self.id and self.type_id to the EditorComponent object.
+ self.type_id is the UUID for the component type as provided by an ebus call.
"""
+ def __init__(self, type_id: uuid):
+ self.type_id = type_id
+ self.id = None
+ self.property_tree_editor = None
+
def get_component_name(self) -> str:
"""
Used to get name of component
@@ -38,9 +50,9 @@ class EditorComponent:
assert len(type_names) != 0, "Component object does not have type id"
return type_names[0]
- def get_property_tree(self):
+ def get_property_tree(self, force_get: bool = False):
"""
- Used to get the property tree object of component that has following functions associated with it:
+ Used to get and cache the property tree editor of component that has following functions associated with it:
1. prop_tree.is_container(path)
2. prop_tree.get_container_count(path)
3. prop_tree.reset_container(path)
@@ -48,17 +60,161 @@ class EditorComponent:
5. prop_tree.remove_container_item(path, key)
6. prop_tree.update_container_item(path, key, value)
7. prop_tree.get_container_item(path, key)
- :return: Property tree object of a component
+ :param force_get: Force a fresh property tree editor rather than the cached self.property_tree_editor
+ :return: Property tree editor of the component
"""
+ if (not force_get) and (self.property_tree_editor is not None):
+ return self.property_tree_editor
+
build_prop_tree_outcome = editor.EditorComponentAPIBus(
bus.Broadcast, "BuildComponentPropertyTreeEditor", self.id
)
assert (
build_prop_tree_outcome.IsSuccess()
- ), f"Failure: Could not build property tree of component: '{self.get_component_name()}'"
+ ), f"Failure: Could not build property tree editor of component: '{self.get_component_name()}'"
prop_tree = build_prop_tree_outcome.GetValue()
Report.info(prop_tree.build_paths_list())
- return prop_tree
+ self.property_tree_editor = prop_tree
+ return self.property_tree_editor
+
+ def is_property_container(self, component_property_path: str) -> bool:
+ """
+ Used to determine if a component property is a container.
+ Containers are a collection of same typed values that can expand/shrink to contain more or less.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key and are something like a linked list
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :return: Boolean True if the property is a container False if it is not.
+ """
+ if self.property_tree_editor is None:
+ self.get_property_tree()
+ result = self.property_tree_editor.is_container(component_property_path)
+ if not result:
+ Report.info(f"{self.get_component_name()}: '{component_property_path}' is not a container")
+ return result
+
+ def get_container_count(self, component_property_path: str) -> int:
+ """
+ Used to get the count of items in the container.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :return: Count of items in the container as unsigned integer
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ container_count_outcome = self.property_tree_editor.get_container_count(component_property_path)
+ assert (
+ container_count_outcome.IsSuccess()
+ ), f"Failure: get_container_count did not return success for '{component_property_path}'"
+ return container_count_outcome.GetValue()
+
+ def reset_container(self, component_property_path: str):
+ """
+ Used to reset a container to empty
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ reset_outcome = self.property_tree_editor.reset_container(component_property_path)
+ assert (
+ reset_outcome.IsSuccess()
+ ), f"Failure: could not reset_container on '{component_property_path}'"
+
+ def append_container_item(self, component_property_path: str, value: any):
+ """
+ Used to append a value to an indexed container item without providing an index key.
+ Append will fail on an associative container
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param value: Value to be set
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ append_outcome = self.property_tree_editor.append_container_item(component_property_path, value)
+ assert (
+ append_outcome.IsSuccess()
+ ), f"Failure: could not append_container_item to '{component_property_path}'"
+
+ def add_container_item(self, component_property_path: str, key: any, value: any):
+ """
+ Used to add a container item at a specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :param value: Value to be set
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ add_outcome = self.property_tree_editor.add_container_item(component_property_path, key, value)
+ assert (
+ add_outcome.IsSuccess()
+ ), f"Failure: could not add_container_item '{key}' to '{component_property_path}'"
+
+ def get_container_item(self, component_property_path: str, key: any) -> any:
+ """
+ Used to retrieve a container item value at the specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :return: Value stored at the key specified
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ get_outcome = self.property_tree_editor.get_container_item(component_property_path, key)
+ assert (
+ get_outcome.IsSuccess()
+ ), (
+ f"Failure: could not get a value for {self.get_component_name()}: '{component_property_path}' [{key}]. "
+ f"Error returned by get_container_item: {get_outcome.GetError()}")
+ return get_outcome.GetValue()
+
+ def remove_container_item(self, component_property_path: str, key: any):
+ """
+ Used to remove a container item value at the specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ remove_outcome = self.property_tree_editor.remove_container_item(component_property_path, key)
+ assert (
+ remove_outcome.IsSuccess()
+ ), f"Failure: could not remove_container_item '{key}' from '{component_property_path}'"
+
+ def update_container_item(self, component_property_path: str, key: any, value: any):
+ """
+ Used to update a container item at a specified key.
+ There are two types of containers; indexed and associative.
+ Indexed containers use integer key.
+ Associative containers utilize keys of the same type which could be any supported type.
+ :param component_property_path: String of component property. (e.g. 'Settings|Visible')
+ :param key: Zero index integer key or any supported type for associative container
+ :param value: Value to be set
+ :return: None
+ """
+ assert (
+ self.is_property_container(component_property_path)
+ ), f"Failure: '{component_property_path}' is not a property container"
+ update_outcome = self.property_tree_editor.update_container_item(component_property_path, key, value)
+ assert (
+ update_outcome.IsSuccess()
+ ), f"Failure: could not update '{key}' in '{component_property_path}'"
def get_component_property_value(self, component_property_path: str):
"""
@@ -94,23 +250,36 @@ class EditorComponent:
"""
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", self.id)
+ def set_enabled(self, new_state: bool):
+ """
+ Used to set the component enabled state
+ :param new_state: Boolean enabled True, disabled False
+ :return: None
+ """
+ if new_state:
+ editor.EditorComponentAPIBus(bus.Broadcast, "EnableComponents", [self.id])
+ else:
+ editor.EditorComponentAPIBus(bus.Broadcast, "DisableComponents", [self.id])
+
def disable_component(self):
"""
Used to disable the component using its id value.
+ Deprecation warning! Use set_enabled(False) instead as this method is in deprecation
:return: None
"""
+ warnings.warn("disable_component is deprecated, use set_enabled(False) instead.", DeprecationWarning)
editor.EditorComponentAPIBus(bus.Broadcast, "DisableComponents", [self.id])
@staticmethod
- def get_type_ids(component_names: list) -> list:
+ def get_type_ids(component_names: list, entity_type: EditorEntityType = EditorEntityType.GAME) -> list:
"""
Used to get type ids of given components list
- :param: component_names: List of components to get type ids
- :return: List of type ids of given components.
+ :param component_names: List of components to get type ids
+ :param entity_type: Entity_Type enum value Entity_Type.GAME is the default
+ :return: List of type ids of given components. Type id is a UUID as provided by the ebus call
"""
type_ids = editor.EditorComponentAPIBus(
- bus.Broadcast, "FindComponentTypeIdsByEntityType", component_names, azlmbr.entity.EntityType().Game
- )
+ bus.Broadcast, "FindComponentTypeIdsByEntityType", component_names, entity_type.value)
return type_ids
@@ -131,7 +300,7 @@ class EditorEntity:
"""
Entity class is used to create and interact with Editor Entities.
Example: To create Editor Entity, Use the code:
- test_entity = Entity.create_editor_entity("TestEntity")
+ test_entity = EditorEntity.create_editor_entity("TestEntity")
# This creates a python object with 'test_entity' linked to entity name "TestEntity" in Editor.
# To add component, use:
test_entity.add_component()
@@ -276,10 +445,9 @@ class EditorEntity:
:return: List of newly added components to the entity
"""
components = []
- type_ids = EditorComponent.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.GAME)
for type_id in type_ids:
- new_comp = EditorComponent()
- new_comp.type_id = type_id
+ new_comp = EditorComponent(type_id)
add_component_outcome = editor.EditorComponentAPIBus(
bus.Broadcast, "AddComponentsOfType", self.id, [type_id]
)
@@ -291,6 +459,27 @@ class EditorEntity:
self.components.append(new_comp)
return components
+ def remove_component(self, component_name: str) -> None:
+ """
+ Used to remove a component from Entity
+ :param component_name: String of component name to remove
+ :return: None
+ """
+ self.remove_components([component_name])
+
+ def remove_components(self, component_names: list):
+ """
+ Used to remove a list of components from Entity
+ :param component_names: List of component names to remove
+ :return: None
+ """
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.GAME)
+ for type_id in type_ids:
+ remove_outcome = editor.EditorComponentAPIBus(bus.Broadcast, "RemoveComponents", self.id, [type_id])
+ assert (
+ remove_outcome.IsSuccess()
+ ), f"Failure: could not remove component from '{self.get_name()}'"
+
def get_components_of_type(self, component_names: list) -> List[EditorComponent]:
"""
Used to get components of type component_name that already exists on Entity
@@ -298,10 +487,9 @@ class EditorEntity:
:return: List of Entity Component objects of given component name
"""
component_list = []
- type_ids = EditorComponent.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.GAME)
for type_id in type_ids:
- component = EditorComponent()
- component.type_id = type_id
+ component = EditorComponent(type_id)
get_component_of_type_outcome = editor.EditorComponentAPIBus(
bus.Broadcast, "GetComponentOfType", self.id, type_id
)
@@ -319,7 +507,7 @@ class EditorEntity:
:param component_name: Name of component to check for
:return: True, if entity has specified component. Else, False
"""
- type_ids = EditorComponent.get_type_ids([component_name])
+ type_ids = EditorComponent.get_type_ids([component_name], EditorEntityType.GAME)
return editor.EditorComponentAPIBus(bus.Broadcast, "HasComponentOfType", self.id, type_ids[0])
def get_start_status(self) -> int:
@@ -359,6 +547,21 @@ class EditorEntity:
set_status = self.get_start_status()
assert set_status == status_to_set, f"Failed to set start status of {desired_start_status} to {self.get_name}"
+ def is_locked(self) -> bool:
+ """
+ Used to get the locked status of the entity
+ :return: Boolean True if locked False if not locked
+ """
+ return editor.EditorEntityInfoRequestBus(bus.Event, "IsLocked", self.id)
+
+ def set_lock_state(self, is_locked: bool) -> None:
+ """
+ Sets the lock state on the object to locked or not locked.
+ :param is_locked: True for locking, False to unlock.
+ :return: None
+ """
+ editor.EditorEntityAPIBus(bus.Event, "SetLockState", self.id, is_locked)
+
def delete(self) -> None:
"""
Used to delete the Entity.
@@ -488,18 +691,6 @@ class EditorLevelEntity:
EditorLevelComponentAPIBus requests.
"""
- @staticmethod
- def get_type_ids(component_names: list) -> list:
- """
- Used to get type ids of given components list for EntityType Level
- :param: component_names: List of components to get type ids
- :return: List of type ids of given components.
- """
- type_ids = editor.EditorComponentAPIBus(
- bus.Broadcast, "FindComponentTypeIdsByEntityType", component_names, azlmbr.entity.EntityType().Level
- )
- return type_ids
-
@staticmethod
def add_component(component_name: str) -> EditorComponent:
"""
@@ -518,10 +709,9 @@ class EditorLevelEntity:
:return: List of newly added components to the level
"""
components = []
- type_ids = EditorLevelEntity.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.LEVEL)
for type_id in type_ids:
- new_comp = EditorComponent()
- new_comp.type_id = type_id
+ new_comp = EditorComponent(type_id)
add_component_outcome = editor.EditorLevelComponentAPIBus(
bus.Broadcast, "AddComponentsOfType", [type_id]
)
@@ -540,10 +730,9 @@ class EditorLevelEntity:
:return: List of Level Component objects of given component name
"""
component_list = []
- type_ids = EditorLevelEntity.get_type_ids(component_names)
+ type_ids = EditorComponent.get_type_ids(component_names, EditorEntityType.LEVEL)
for type_id in type_ids:
- component = EditorComponent()
- component.type_id = type_id
+ component = EditorComponent(type_id)
get_component_of_type_outcome = editor.EditorLevelComponentAPIBus(
bus.Broadcast, "GetComponentOfType", type_id
)
@@ -562,7 +751,7 @@ class EditorLevelEntity:
:param component_name: Name of component to check for
:return: True, if level has specified component. Else, False
"""
- type_ids = EditorLevelEntity.get_type_ids([component_name])
+ type_ids = EditorComponent.get_type_ids([component_name], EditorEntityType.LEVEL)
return editor.EditorLevelComponentAPIBus(bus.Broadcast, "HasComponentOfType", type_ids[0])
@staticmethod
@@ -572,5 +761,5 @@ class EditorLevelEntity:
:param component_name: Name of component to check for
:return: integer count of occurences of level component attached to level or zero if none are present
"""
- type_ids = EditorLevelEntity.get_type_ids([component_name])
+ type_ids = EditorComponent.get_type_ids([component_name], EditorEntityType.LEVEL)
return editor.EditorLevelComponentAPIBus(bus.Broadcast, "CountComponentsOfType", type_ids[0])
diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py
index 5e3828ad02..36fc6003f7 100644
--- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py
+++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_editor_utils.py
@@ -5,15 +5,22 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
+from typing import List
+from math import isclose
+import collections.abc
+
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
import azlmbr.legacy.general as general
import azlmbr.object
-from typing import List
-from math import isclose
-import collections.abc
+from editor_python_test_tools.utils import TestHelper as helper
+
+
+def open_base_level():
+ helper.init_idle()
+ helper.open_level("Prefab", "Base")
def find_entity_by_name(entity_name):
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
index 2e40c0b557..8e8fccd725 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/collider/Collider_SameCollisionGroupSameCustomLayerCollide.py
@@ -127,7 +127,7 @@ def Collider_SameCollisionGroupSameCustomLayerCollide():
# Main Script
# 1) Load the level
helper.init_idle()
- helper.open_level("physics", "Collider_SameCollisionGroupSameCustomLayerCollide")
+ helper.open_level("Physics", "Collider_SameCollisionGroupSameCustomLayerCollide")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
index 7307f3a2fb..e5f6e236cf 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_MultipleForcesInSameComponentCombineForces.py
@@ -162,7 +162,7 @@ def ForceRegion_MultipleForcesInSameComponentCombineForces():
helper.init_idle()
# 1) Load Level
- helper.open_level("physics", "ForceRegion_MultipleForcesInSameComponentCombineForces")
+ helper.open_level("Physics", "ForceRegion_MultipleForcesInSameComponentCombineForces")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
index 1f8cfae498..41ccc8f2dd 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_after.py
@@ -229,8 +229,8 @@ def Material_DefaultLibraryUpdatedAcrossLevels_after():
for test in test_list:
# 1) Open the correct level is open
helper.open_level(
- "physics",
- f"Material_DefaultLibraryUpdatedAcrossLevels\\{test.level}"
+ "Physics",
+ os.path.join("Material_DefaultLibraryUpdatedAcrossLevels", str(test.level))
)
# 2) Enter Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
index 15db5808e2..d86a016be1 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_DefaultLibraryUpdatedAcrossLevels_before.py
@@ -189,7 +189,7 @@ def Material_DefaultLibraryUpdatedAcrossLevels_before():
# 1) Open the correct level is open
helper.open_level(
"Physics",
- f"Material_DefaultLibraryUpdatedAcrossLevels\\{test.level}"
+ os.path.join("Material_DefaultLibraryUpdatedAcrossLevels", str(test.level))
)
# 2) Enter Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
index 0b647361f6..6eebfe60bc 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/material/Material_LibraryUpdatedAcrossLevels.py
@@ -252,10 +252,8 @@ def Material_LibraryUpdatedAcrossLevels():
for test in test_list:
# 1) Open the correct level for the test
helper.open_level(
- "physics",
- "Material_LibraryUpdatedAcrossLevels\\Material_LibraryUpdatedAcrossLevels_{}".format(
- test.level_index
- ),
+ "Physics",
+ os.path.join("Material_LibraryUpdatedAcrossLevels", str(test.level_index))
)
# 2) Open Game Mode
diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
index 5862b7586b..e6e29063d6 100644
--- a/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
+++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/script_canvas/ScriptCanvas_SpawnEntityWithPhysComponents.py
@@ -106,7 +106,7 @@ def ScriptCanvas_SpawnEntityWithPhysComponents():
# Main Script
helper.init_idle()
# 1) Open Level
- helper.open_level("physics", "ScriptCanvas_SpawnEntityWithPhysComponents")
+ helper.open_level("Physics", "ScriptCanvas_SpawnEntityWithPhysComponents")
# 2) Enter Game Mode
helper.enter_game_mode(Tests.enter_game_mode)
diff --git a/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt
index 733e8edf29..d4554ee84b 100644
--- a/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/WhiteBox/CMakeLists.txt
@@ -6,7 +6,7 @@
#
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${gem_restricted_path} ${gem_path} ${gem_parent_relative_path})
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_WHITEBOX Traits
diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt
index e37a5ed99b..5839093473 100644
--- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/CMakeLists.txt
@@ -93,15 +93,19 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
)
ly_add_pytest(
- NAME AssetPipelineTests.AssetBundler
- PATH ${CMAKE_CURRENT_LIST_DIR}/asset_bundler_batch_tests.py
+ NAME AssetPipelineTests.AssetBuilder
+ PATH ${CMAKE_CURRENT_LIST_DIR}/asset_builder_tests.py
EXCLUDE_TEST_RUN_TARGET_FROM_IDE
TEST_SERIAL
TEST_SUITE periodic
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
- AZ::AssetBundlerBatch
)
+
+ set(SUPPORTED_PLATFORMS "Windows" "Mac")
+ if (NOT "${PAL_PLATFORM_NAME}" IN_LIST SUPPORTED_PLATFORMS)
+ return()
+ endif()
ly_add_pytest(
NAME AssetPipelineTests.BundleMode
@@ -117,16 +121,16 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
)
ly_add_pytest(
- NAME AssetPipelineTests.AssetBuilder
- PATH ${CMAKE_CURRENT_LIST_DIR}/asset_builder_tests.py
+ NAME AssetPipelineTests.AssetBundler
+ PATH ${CMAKE_CURRENT_LIST_DIR}/asset_bundler_batch_tests.py
EXCLUDE_TEST_RUN_TARGET_FROM_IDE
TEST_SERIAL
TEST_SUITE periodic
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
+ AZ::AssetBundlerBatch
)
-
ly_add_pytest(
NAME AssetPipelineTests.MissingDependency
PATH ${CMAKE_CURRENT_LIST_DIR}/missing_dependency_tests.py
@@ -136,5 +140,5 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
RUNTIME_DEPENDENCIES
AZ::AssetProcessorBatch
)
-
+
endif()
diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py
index f5e5642573..f64427f6df 100755
--- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py
+++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/asset_bundler_batch_tests.py
@@ -108,7 +108,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
"""
helper = bundler_batch_helper
seed_list = os.path.join(workspace.paths.engine_root(), "Assets", "Engine", "SeedAssetList.seed") # Engine seed list
- asset = r"levels\testdependencieslevel\level.pak"
+ asset = r"levels\testdependencieslevel\testdependencieslevel.spawnable"
# Create Asset list
helper.call_assetLists(
@@ -191,7 +191,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
"""
helper = bundler_batch_helper
seed_list = os.path.join(workspace.paths.engine_root(), "Assets", "Engine", "SeedAssetList.seed") # Engine seed list
- asset = r"levels\testdependencieslevel\level.pak"
+ asset = r"levels\testdependencieslevel\testdependencieslevel.spawnable"
# Useful bundle locations / names (2 for comparing contents)
# fmt:off
@@ -924,7 +924,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
# Create a seed file
helper.call_seeds(
seedListFile=helper["seed_list_file"],
- addSeed=r"levels\testdependencieslevel\level.pak",
+ addSeed=r"levels\testdependencieslevel\testdependencieslevel.spawnable",
platform="pc",
)
@@ -947,9 +947,9 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
# Specifying platform but not "add" or "remove" should fail
result, _ = helper.call_assetLists(
assetListFile=helper["asset_info_file_request"],
+ allowOverwrites="",
seedListFile=helper["seed_list_file"],
platform="pc",
- allowOverwrites="",
)
assert result, "Overwriting with override threw an error"
@@ -982,7 +982,7 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
request.addfinalizer(lambda: fs.delete([bundle_result_path], True, False))
bundles_folder = os.path.join(workspace.paths.project(), "Bundles")
- level_pak = r"levels\testdependencieslevel\level.pak"
+ level_pak = r"levels\testdependencieslevel\testdependencieslevel.spawnable"
bundle_request_path = os.path.join(bundles_folder, "bundle.pak")
bundle_result_path = os.path.join(bundles_folder,
helper.platform_file_name("bundle.pak", workspace.asset_processor_platform))
diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py
index af92bb1773..b2252567b6 100644
--- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py
+++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/bundle_mode_tests.py
@@ -23,12 +23,11 @@ from ..ap_fixtures.timeout_option_fixture import timeout_option_fixture as timeo
@pytest.mark.SUITE_periodic
@pytest.mark.parametrize('launcher_platform', ['windows_editor'])
@pytest.mark.parametrize('project', ['AutomatedTesting'])
-@pytest.mark.parametrize('level', ['auto_test'])
+@pytest.mark.parametrize('level', ['TestDependenciesLevel'])
class TestBundleMode(object):
def test_bundle_mode_with_levels_mounts_bundles_correctly(self, request, editor, level, launcher_platform,
asset_processor, workspace, bundler_batch_helper):
- level_pak = os.path.join("levels", level, "level.pak")
-
+ level_pak = os.path.join("levels", level, "TestDependenciesLevel.spawnable")
bundles_folder = os.path.join(workspace.paths.project(), "Bundles")
bundle_request_path = os.path.join(bundles_folder, "bundle.pak")
bundle_result_path = os.path.join(bundles_folder,
diff --git a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
index 0441f8a1dc..4db959b23e 100755
--- a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
+++ b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py
@@ -182,7 +182,7 @@ class TestAutomationBase:
@staticmethod
def _kill_ly_processes(include_asset_processor=True):
LY_PROCESSES = [
- 'Editor', 'Profiler', 'RemoteConsole', 'AutomatedTesting.ServerLauncher'
+ 'Editor', 'Profiler', 'RemoteConsole', 'AutomatedTesting.ServerLauncher', 'o3de'
]
AP_PROCESSES = [
'AssetProcessor', 'AssetProcessorBatch', 'AssetBuilder', 'CrySCompileServer',
diff --git a/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt
index 1fc71da972..b3f0d2da8e 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/editor/CMakeLists.txt
@@ -9,10 +9,10 @@
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_FOUNDATION_TEST_SUPPORTED)
ly_add_pytest(
- NAME AutomatedTesting::EditorTests_Main_Optimized
+ NAME AutomatedTesting::EditorTests_Main
TEST_SUITE main
TEST_SERIAL
- PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main.py
PYTEST_MARKS "not REQUIRES_gpu"
RUNTIME_DEPENDENCIES
Legacy::Editor
@@ -27,7 +27,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
TEST_SUITE main
TEST_SERIAL
TEST_REQUIRES gpu
- PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_Optimized.py
+ PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main.py
PYTEST_MARKS "REQUIRES_gpu"
RUNTIME_DEPENDENCIES
Legacy::Editor
@@ -37,17 +37,4 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
Editor
)
- ly_add_pytest(
- NAME AutomatedTesting::EditorTests_Sandbox_Optimized
- TEST_SUITE sandbox
- TEST_SERIAL
- PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Sandbox_Optimized.py
- RUNTIME_DEPENDENCIES
- Legacy::Editor
- AZ::AssetProcessor
- AutomatedTesting.Assets
- COMPONENT
- Editor
- )
-
endif()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py
index b18bf65312..4265dd6fc9 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_SearchFiltering.py
@@ -59,8 +59,8 @@ def AssetBrowser_SearchFiltering():
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
def verify_files_appeared(model, allowed_asset_extensions, parent_index=QtCore.QModelIndex()):
indexes = [parent_index]
@@ -80,8 +80,7 @@ def AssetBrowser_SearchFiltering():
return True
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Open Asset Browser (if not opened already)
editor_window = pyside_utils.get_editor_main_window()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py
index ecc77778cc..52072205b5 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetBrowser_TreeNavigation.py
@@ -53,6 +53,7 @@ def AssetBrowser_TreeNavigation():
import azlmbr.legacy.general as general
import editor_python_test_tools.pyside_utils as pyside_utils
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
@@ -69,8 +70,7 @@ def AssetBrowser_TreeNavigation():
file_path = ("AutomatedTesting", "Assets", "ImageGradients", "image_grad_test_gsi.png")
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Open Asset Browser (if not opened already)
editor_window = pyside_utils.get_editor_main_window()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py
index 59a78c9e5d..047d6edf41 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/AssetPicker_UI_UX.py
@@ -215,8 +215,7 @@ def AssetPicker_UI_UX():
QtTest.QTest.keyClick(tree, Qt.Key_Enter, Qt.NoModifier)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create entity and add Mesh component
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py
index 39cacf9af5..48b7d2b176 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD.py
@@ -56,19 +56,17 @@ def BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD():
06. delete parent entity
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
from editor_python_test_tools.editor_entity_utils import EditorEntity
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
- import azlmbr.legacy.general as general
import azlmbr.object
# 01. load an existing level
- test_level = 'Simple'
- general.open_level_no_prompt(test_level)
- Report.result(Tests.load_level, general.get_current_level_name() == test_level)
+ hydra.open_base_level()
# 02. create parent entity and set name
# Delete any exiting entity and Create a new Entity at the root level
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py
index 9c5880ab1e..f13b924e30 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/BasicEditorWorkflows_LevelEntityComponentCRUD.py
@@ -31,7 +31,7 @@ class Tests:
"Component removed from entity successfully",
"Failed to remove component from entity"
)
- level_saved_and_exported = (
+ saved_and_exported = (
"Level saved and exported successfully",
"Failed to save/export level"
)
@@ -52,8 +52,7 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
- A new entity can be created
- Entity hierarchy can be adjusted
- Components can be added/removed/updated
- - Level can be saved
- - Level can be exported
+ - Level can be saved/exported
Note:
- This test file must be called from the O3DE Editor command terminal
@@ -70,7 +69,7 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
import azlmbr.editor as editor
import azlmbr.entity as entity
import azlmbr.math as math
- import azlmbr.paths
+ import azlmbr.paths as paths
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
@@ -84,7 +83,7 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
return None
# 1) Create a new level
- level = "tmp_level"
+ lvl_name = "tmp_level"
editor_window = pyside_utils.get_editor_main_window()
new_level_action = pyside_utils.get_action_for_menu_path(editor_window, "File", "New Level")
pyside_utils.trigger_action_async(new_level_action)
@@ -95,23 +94,24 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
Report.info("New Level dialog opened")
grp_box = new_level_dlg.findChild(QtWidgets.QGroupBox, "STATIC_GROUP1")
level_name = grp_box.findChild(QtWidgets.QLineEdit, "LEVEL")
- level_name.setText(level)
+ level_name.setText(lvl_name)
button_box = new_level_dlg.findChild(QtWidgets.QDialogButtonBox, "buttonBox")
button_box.button(QtWidgets.QDialogButtonBox.Ok).click()
# Verify new level was created successfully
level_create_success = await pyside_utils.wait_for_condition(lambda: editor.EditorToolsApplicationRequestBus(
- bus.Broadcast, "GetCurrentLevelName") == level, 5.0)
+ bus.Broadcast, "GetCurrentLevelName") == lvl_name, 5.0)
Report.critical_result(Tests.level_created, level_create_success)
# 2) Delete existing entities, and create and manipulate new entities via Entity Inspector
search_filter = azlmbr.entity.SearchFilter()
all_entities = entity.SearchBus(azlmbr.bus.Broadcast, "SearchEntities", search_filter)
editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntities", all_entities)
- entity_outliner_widget = editor_window.findChild(QtWidgets.QWidget, "OutlinerWidgetUI")
+ entity_outliner_widget = editor_window.findChild(QtWidgets.QWidget, "EntityOutlinerWidgetUI")
outliner_object_list = entity_outliner_widget.findChild(QtWidgets.QWidget, "m_objectList_Contents")
outliner_tree = outliner_object_list.findChild(QtWidgets.QWidget, "m_objectTree")
- await pyside_utils.trigger_context_menu_entry(outliner_tree, "Create entity")
+ outliner_viewport = outliner_tree.findChild(QtWidgets.QWidget, "qt_scrollarea_viewport")
+ await pyside_utils.trigger_context_menu_entry(outliner_viewport, "Create entity")
# Find the new entity
parent_entity_id = find_entity_by_name("Entity1")
@@ -153,14 +153,10 @@ def BasicEditorWorkflows_LevelEntityComponentCRUD():
save_level_action = pyside_utils.get_action_for_menu_path(editor_window, "File", "Save")
pyside_utils.trigger_action_async(save_level_action)
- # 5) Export the level
- export_action = pyside_utils.get_action_for_menu_path(editor_window, "Game", "Export to Engine")
- pyside_utils.trigger_action_async(export_action)
- level_pak_file = os.path.join(
- "AutomatedTesting", "Levels", level, "level.pak"
- )
- export_success = await pyside_utils.wait_for_condition(lambda: os.path.exists(level_pak_file), 5.0)
- Report.result(Tests.level_saved_and_exported, export_success)
+ # 5) Verify the save/export of the level
+ level_prefab_path = os.path.join(paths.products, "levels", lvl_name, f"{lvl_name}.spawnable")
+ success = await pyside_utils.wait_for_condition(lambda: os.path.exists(level_prefab_path), 5.0)
+ Report.result(Tests.saved_and_exported, success)
run_test()
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py
index 779f1ef953..6772450405 100755
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/ComponentCRUD_Add_Delete_Components.py
@@ -63,7 +63,7 @@ def ComponentCRUD_Add_Delete_Components():
:return: None
"""
- from PySide2 import QtWidgets, QtTest, QtCore
+ from PySide2 import QtWidgets, QtTest
from PySide2.QtCore import Qt
import azlmbr.legacy.general as general
@@ -74,7 +74,6 @@ def ComponentCRUD_Add_Delete_Components():
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
async def add_component(component_name):
pyside_utils.click_button_async(add_comp_btn)
@@ -88,8 +87,7 @@ def ComponentCRUD_Add_Delete_Components():
QtTest.QTest.keyClick(tree, Qt.Key_Enter, Qt.NoModifier)
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Create entity
entity_position = math.Vector3(125.0, 136.0, 32.0)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py
index 6683fc952a..a5a94f06a5 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Docking_BasicDockedTools.py
@@ -62,12 +62,11 @@ def Docking_BasicDockedTools():
import azlmbr.editor as editor
import azlmbr.entity as entity
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
# Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# Make sure the Entity Outliner, Entity Inspector and Console tools are open
general.open_pane("Entity Outliner (PREVIEW)")
@@ -80,7 +79,7 @@ def Docking_BasicDockedTools():
editor.EditorEntityAPIBus(bus.Event, 'SetName', entity_id, entity_original_name)
editor_window = pyside_utils.get_editor_main_window()
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
# 1) Open the tools and dock them together in a floating tabbed widget.
# We drag/drop it over the viewport since it doesn't allow docking, so this will undock it
@@ -88,15 +87,15 @@ def Docking_BasicDockedTools():
pyside_utils.drag_and_drop(entity_outliner, render_overlay)
# We need to grab a new reference to the Entity Outliner QDockWidget because when it gets moved
- # to the floating window, its parent changes so the wrapped intance we had becomes invalid
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ # to the floating window, its parent changes so the wrapped instance we had becomes invalid
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
# Dock the Entity Inspector tabbed with the floating Entity Outliner
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
pyside_utils.drag_and_drop(entity_inspector, entity_outliner)
# We need to grab a new reference to the Entity Inspector QDockWidget because when it gets moved
- # to the floating window, its parent changes so the wrapped intance we had becomes invalid
+ # to the floating window, its parent changes so the wrapped instance we had becomes invalid
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
# Dock the Console tabbed with the floating Entity Inspector
@@ -106,7 +105,7 @@ def Docking_BasicDockedTools():
# Check to ensure all the tools are parented to the same QStackedWidget
def check_all_panes_tabbed():
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
console = editor_window.findChild(QtWidgets.QDockWidget, "Console")
entity_inspector_parent = entity_inspector.parentWidget()
entity_outliner_parent = entity_outliner.parentWidget()
@@ -122,7 +121,7 @@ def Docking_BasicDockedTools():
# 2.1,2) Select an Entity in the Entity Outliner.
entity_inspector = editor_window.findChild(QtWidgets.QDockWidget, "Entity Inspector")
- entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner (PREVIEW)")
+ entity_outliner = editor_window.findChild(QtWidgets.QDockWidget, "Entity Outliner")
console = editor_window.findChild(QtWidgets.QDockWidget, "Console")
object_tree = entity_outliner.findChild(QtWidgets.QTreeView, "m_objectTree")
test_entity_index = pyside_utils.find_child_by_pattern(object_tree, entity_original_name)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py
index 5fa8130302..fab7984df9 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/EntityOutliner_EntityOrdering.py
@@ -30,11 +30,13 @@ def EntityOutliner_EntityOrdering():
5) Add another new entity, ensure the rest of the order is unchanged
"""
- import editor_python_test_tools.pyside_utils as pyside_utils
+ from PySide2 import QtCore
+
import azlmbr.legacy.general as general
+
+ import editor_python_test_tools.hydra_editor_utils as hydra
+ import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
- from PySide2 import QtCore, QtWidgets, QtGui, QtTest
# Grab the Editor, Entity Outliner, and Outliner Model
editor_window = pyside_utils.get_editor_main_window()
@@ -110,8 +112,7 @@ def EntityOutliner_EntityOrdering():
expected_order = []
# 1) Open the empty Prefab Base level
- helper.init_idle()
- helper.open_level("Prefab", "Base")
+ hydra.open_base_level()
# 2) Add 5 entities to the outliner
ENTITIES_TO_ADD = 5
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py
index f4769dab4d..07c89ff110 100755
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/InputBindings_Add_Remove_Input_Events.py
@@ -69,8 +69,8 @@ def InputBindings_Add_Remove_Input_Events():
import azlmbr.legacy.general as general
+ import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
def open_asset_editor():
general.open_pane("Asset Editor")
@@ -81,8 +81,7 @@ def InputBindings_Add_Remove_Input_Events():
return not general.is_pane_visible("Asset Editor")
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Open Asset Editor
Report.result(Tests.asset_editor_opened, open_asset_editor())
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py
index bd213be293..ce85cf223f 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_EditMenuOptions.py
@@ -26,9 +26,9 @@ def Menus_EditMenuOptions_Work():
:return: None
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
edit_menu_options = [
("Undo",),
@@ -52,19 +52,20 @@ def Menus_EditMenuOptions_Work():
("Editor Settings", "Global Preferences"),
("Editor Settings", "Editor Settings Manager"),
("Editor Settings", "Keyboard Customization", "Customize Keyboard"),
- ("Editor Settings", "Keyboard Customization", "Export Keyboard Settings"),
- ("Editor Settings", "Keyboard Customization", "Import Keyboard Settings"),
+ # The following menu options are temporarily disabled due to https://github.com/o3de/o3de/issues/6746
+ #("Editor Settings", "Keyboard Customization", "Export Keyboard Settings"),
+ #("Editor Settings", "Keyboard Customization", "Import Keyboard Settings"),
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Interact with Edit Menu options
editor_window = pyside_utils.get_editor_main_window()
for option in edit_menu_options:
try:
action = pyside_utils.get_action_for_menu_path(editor_window, "Edit", *option)
+ Report.info(f"Triggering {action.iconText()}")
action.trigger()
action_triggered = True
except Exception as e:
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py
index a3e7611b5e..4fcdc371e7 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_FileMenuOptions.py
@@ -26,35 +26,34 @@ def Menus_FileMenuOptions_Work():
:return: None
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
file_menu_options = [
("New Level",),
- ("Open Level",),
- ("Import",),
+ #("Open Level",), Temporarily disabled due to https://github.com/o3de/o3de/issues/6605
+ #("Import",), Temporarily disabled due to https://github.com/o3de/o3de/issues/6746
("Save",),
- ("Save As",),
+ #("Save As",), Temporarily disabled due to https://github.com/o3de/o3de/issues/6605
("Save Level Statistics",),
("Edit Project Settings",),
- ("Edit Platform Settings",),
+ #("Edit Platform Settings",), Temporarily disabled due to https://github.com/o3de/o3de/issues/6604
("New Project",),
("Open Project",),
("Show Log File",),
- ("Resave All Slices",),
("Exit",),
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Interact with File Menu options
editor_window = pyside_utils.get_editor_main_window()
for option in file_menu_options:
try:
action = pyside_utils.get_action_for_menu_path(editor_window, "File", *option)
+ Report.info(f"Triggering {action.iconText()}")
action.trigger()
action_triggered = True
except Exception as e:
diff --git a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py
index deff2855a0..bb9ff15082 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/EditorScripts/Menus_ViewMenuOptions.py
@@ -26,13 +26,15 @@ def Menus_ViewMenuOptions_Work():
:return: None
"""
+ import editor_python_test_tools.hydra_editor_utils as hydra
import editor_python_test_tools.pyside_utils as pyside_utils
from editor_python_test_tools.utils import Report
- from editor_python_test_tools.utils import TestHelper as helper
view_menu_options = [
("Center on Selection",),
("Show Quick Access Bar",),
+ ("Layouts", "Component Entity Layout",),
+ ("Layouts", "Save Layout",),
("Viewport", "Configure Layout"),
("Viewport", "Go to Position"),
("Viewport", "Center on Selection"),
@@ -45,14 +47,14 @@ def Menus_ViewMenuOptions_Work():
]
# 1) Open an existing simple level
- helper.init_idle()
- helper.open_level("Physics", "Base")
+ hydra.open_base_level()
# 2) Interact with View Menu options
editor_window = pyside_utils.get_editor_main_window()
for option in view_menu_options:
try:
action = pyside_utils.get_action_for_menu_path(editor_window, "View", *option)
+ Report.info(f"Triggering {action.iconText()}")
action.trigger()
action_triggered = True
except Exception as e:
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py
index c9e91687e0..3805ef15dd 100644
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py
+++ b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main.py
@@ -7,48 +7,77 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import os
import pytest
-import sys
import ly_test_tools.environment.file_system as file_system
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.fixture
-def remove_test_level(request, workspace, project):
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- request.addfinalizer(teardown)
+from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
@pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
+class TestAutomationNoAutoTestMode(EditorTestSuite):
- def test_BasicEditorWorkflows_LevelEntityComponentCRUD(self, request, workspace, editor, launcher_platform,
- remove_test_level):
+ # Disable -autotest_mode and -BatchMode. Tests cannot run in -BatchMode due to UI interactions, and these tests
+ # interact with modal dialogs
+ global_extra_cmdline_args = []
+
+ class test_AssetPicker_UI_UX(EditorSharedTest):
+ from .EditorScripts import AssetPicker_UI_UX as test_module
+
+ class test_BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD(EditorSharedTest):
+ from .EditorScripts import BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD as test_module
+
+ class test_BasicEditorWorkflows_LevelEntityComponentCRUD(EditorSingleTest):
+ # Custom teardown to remove level created during test
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
+ True, True)
from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, autotest_mode=False, enable_prefab_system=False)
@pytest.mark.REQUIRES_gpu
- def test_BasicEditorWorkflows_GPU_LevelEntityComponentCRUD(self, request, workspace, editor, launcher_platform,
- remove_test_level):
- from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, autotest_mode=False,
- use_null_renderer=False, enable_prefab_system=False)
+ class test_BasicEditorWorkflows_GPU_LevelEntityComponentCRUD(EditorSingleTest):
+ # Disable null renderer
+ use_null_renderer = False
- def test_EntityOutlienr_EntityOrdering(self, request, workspace, editor, launcher_platform):
+ # Custom teardown to remove level created during test
+ def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
+ file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
+ True, True)
+ from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
+
+ class test_InputBindings_Add_Remove_Input_Events(EditorSharedTest):
+ from .EditorScripts import InputBindings_Add_Remove_Input_Events as test_module
+
+
+@pytest.mark.SUITE_main
+@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
+@pytest.mark.parametrize("project", ["AutomatedTesting"])
+class TestAutomationAutoTestMode(EditorTestSuite):
+
+ # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
+ global_extra_cmdline_args = ["-autotest_mode"]
+
+ class test_AssetBrowser_SearchFiltering(EditorSharedTest):
+ from .EditorScripts import AssetBrowser_SearchFiltering as test_module
+
+ class test_AssetBrowser_TreeNavigation(EditorSharedTest):
+ from .EditorScripts import AssetBrowser_TreeNavigation as test_module
+
+ class test_ComponentCRUD_Add_Delete_Components(EditorSharedTest):
+ from .EditorScripts import ComponentCRUD_Add_Delete_Components as test_module
+
+ @pytest.mark.skip("Passes locally/fails on Jenkins. https://github.com/o3de/o3de/issues/6747")
+ class test_Docking_BasicDockedTools(EditorSharedTest):
+ from .EditorScripts import Docking_BasicDockedTools as test_module
+
+ class test_EntityOutliner_EntityOrdering(EditorSharedTest):
from .EditorScripts import EntityOutliner_EntityOrdering as test_module
- self._run_test(
- request,
- workspace,
- editor,
- test_module,
- batch_mode=False,
- autotest_mode=True,
- )
+
+ class test_Menus_EditMenuOptions_Work(EditorSharedTest):
+ from .EditorScripts import Menus_EditMenuOptions as test_module
+
+ class test_Menus_FileMenuOptions_Work(EditorSharedTest):
+ from .EditorScripts import Menus_FileMenuOptions as test_module
+
+ class test_Menus_ViewMenuOptions_Work(EditorSharedTest):
+ from .EditorScripts import Menus_ViewMenuOptions as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main_Optimized.py
deleted file mode 100644
index d87fd8625b..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Main_Optimized.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import os
-import pytest
-
-import ly_test_tools.environment.file_system as file_system
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomationNoAutoTestMode(EditorTestSuite):
-
- # Disable -autotest_mode and -BatchMode. Tests cannot run in -BatchMode due to UI interactions, and these tests
- # interact with modal dialogs
- global_extra_cmdline_args = []
-
- enable_prefab_system = False
-
- class test_BasicEditorWorkflows_LevelEntityComponentCRUD(EditorSingleTest):
- # Custom teardown to remove slice asset created during test
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
- True, True)
- from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
-
- @pytest.mark.REQUIRES_gpu
- class test_BasicEditorWorkflows_GPU_LevelEntityComponentCRUD(EditorSingleTest):
- # Disable null renderer
- use_null_renderer = False
-
- # Custom teardown to remove slice asset created during test
- def teardown(self, request, workspace, editor, editor_test_results, launcher_platform):
- file_system.delete([os.path.join(workspace.paths.engine_root(), "AutomatedTesting", "Levels", "tmp_level")],
- True, True)
- from .EditorScripts import BasicEditorWorkflows_LevelEntityComponentCRUD as test_module
-
- class test_InputBindings_Add_Remove_Input_Events(EditorSharedTest):
- from .EditorScripts import InputBindings_Add_Remove_Input_Events as test_module
-
- class test_AssetPicker_UI_UX(EditorSharedTest):
- from .EditorScripts import AssetPicker_UI_UX as test_module
-
-
-@pytest.mark.SUITE_main
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomationAutoTestMode(EditorTestSuite):
-
- # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
- global_extra_cmdline_args = ["-autotest_mode"]
-
- enable_prefab_system = False
-
- class test_AssetBrowser_TreeNavigation(EditorSharedTest):
- from .EditorScripts import AssetBrowser_TreeNavigation as test_module
-
- class test_AssetBrowser_SearchFiltering(EditorSharedTest):
- from .EditorScripts import AssetBrowser_SearchFiltering as test_module
-
- class test_ComponentCRUD_Add_Delete_Components(EditorSharedTest):
- from .EditorScripts import ComponentCRUD_Add_Delete_Components as test_module
-
- class test_Menus_ViewMenuOptions_Work(EditorSharedTest):
- from .EditorScripts import Menus_ViewMenuOptions as test_module
-
- @pytest.mark.skip(reason="Times out due to dialogs failing to dismiss: LYN-4208")
- class test_Menus_FileMenuOptions_Work(EditorSharedTest):
- from .EditorScripts import Menus_FileMenuOptions as test_module
-
- class test_BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD(EditorSharedTest):
- from .EditorScripts import BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Periodic.py
deleted file mode 100644
index 1bd1d7f987..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Periodic.py
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import os
-import pytest
-import sys
-
-import ly_test_tools.environment.file_system as file_system
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.fixture
-def remove_test_level(request, workspace, project):
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", "tmp_level")], True, True)
-
- request.addfinalizer(teardown)
-
-
-@pytest.mark.SUITE_periodic
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
-
- def test_AssetBrowser_TreeNavigation(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetBrowser_TreeNavigation as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_AssetBrowser_SearchFiltering(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetBrowser_SearchFiltering as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_AssetPicker_UI_UX(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import AssetPicker_UI_UX as test_module
- self._run_test(request, workspace, editor, test_module, autotest_mode=False, batch_mode=False, enable_prefab_system=False)
-
- def test_ComponentCRUD_Add_Delete_Components(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import ComponentCRUD_Add_Delete_Components as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_InputBindings_Add_Remove_Input_Events(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import InputBindings_Add_Remove_Input_Events as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, autotest_mode=False, enable_prefab_system=False)
-
- def test_Menus_ViewMenuOptions_Work(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Menus_ViewMenuOptions as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- @pytest.mark.skip(reason="Times out due to dialogs failing to dismiss: LYN-4208")
- def test_Menus_FileMenuOptions_Work(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Menus_FileMenuOptions as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox.py
deleted file mode 100644
index 8a56a2dbfd..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import os
-import pytest
-import sys
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
-from base import TestAutomationBase
-
-
-@pytest.mark.SUITE_sandbox
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomation(TestAutomationBase):
-
- def test_Menus_EditMenuOptions_Work(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Menus_EditMenuOptions as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
-
- def test_Docking_BasicDockedTools(self, request, workspace, editor, launcher_platform):
- from .EditorScripts import Docking_BasicDockedTools as test_module
- self._run_test(request, workspace, editor, test_module, batch_mode=False, enable_prefab_system=False)
diff --git a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox_Optimized.py b/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox_Optimized.py
deleted file mode 100644
index ce0d5e43e9..0000000000
--- a/AutomatedTesting/Gem/PythonTests/editor/TestSuite_Sandbox_Optimized.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-"""
-
-import os
-import pytest
-
-from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
-
-
-@pytest.mark.SUITE_sandbox
-@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-class TestAutomationAutoTestMode(EditorTestSuite):
-
- # Enable only -autotest_mode for these tests. Tests cannot run in -BatchMode due to UI interactions
- global_extra_cmdline_args = ["-autotest_mode"]
-
- enable_prefab_system = False
-
- class test_Docking_BasicDockedTools(EditorSharedTest):
- from .EditorScripts import Docking_BasicDockedTools as test_module
-
- class test_Menus_EditMenuOptions_Work(EditorSharedTest):
- from .EditorScripts import Menus_EditMenuOptions as test_module
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
index 86035bfbae..b4650c782e 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py
@@ -110,7 +110,8 @@ def DynamicSliceInstanceSpawner_Embedded_E2E():
general.save_level()
general.export_to_engine()
pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
- Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
+ success = helper.wait_for_condition(lambda: os.path.exists(pak_path), 10.0)
+ Report.result(Tests.saved_and_exported, success)
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
index 2353095849..a5e7e90ce2 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py
@@ -132,7 +132,8 @@ def DynamicSliceInstanceSpawner_External_E2E():
general.save_level()
general.export_to_engine()
pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
- Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
+ success = helper.wait_for_condition(lambda: os.path.exists(pak_path), 10.0)
+ Report.result(Tests.saved_and_exported, success)
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py
index f2c7faae8a..6b5a80ee8e 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py
@@ -156,7 +156,8 @@ def LayerBlender_E2E_Editor():
general.save_level()
general.export_to_engine()
pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak")
- Report.result(Tests.saved_and_exported, os.path.exists(pak_path))
+ success = helper.wait_for_condition(lambda: os.path.exists(pak_path), 10.0)
+ Report.result(Tests.saved_and_exported, success)
if __name__ == "__main__":
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py
index 8f179f7f50..b5c00a53b7 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/ShapeIntersectionFilter_FilterStageToggle.py
@@ -68,7 +68,7 @@ def ShapeIntersectionFilter_FilterStageToggle():
# Create a new entity as a child of the vegetation area entity with Box Shape
box = hydra.Entity("box")
box.create_entity(position, ["Box Shape"])
- box.get_set_test(0, "Box Shape|Box Configuration|Dimensions", math.Vector3(8.0, 8.0, 1.0))
+ box.get_set_test(0, "Box Shape|Box Configuration|Dimensions", math.Vector3(5.0, 5.0, 1.0))
# Create a new entity as a child of the vegetation area entity with Cylinder Shape.
cylinder = hydra.Entity("cylinder")
@@ -80,10 +80,10 @@ def ShapeIntersectionFilter_FilterStageToggle():
# On the Shape Intersection Filter component, click the crosshair button, and add child entities one by one
vegetation.get_set_test(3, "Configuration|Shape Entity Id", box.id)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 8.0, 100), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 49), 2.0)
Report.result(Tests.instance_count_in_box_shape, result)
vegetation.get_set_test(3, "Configuration|Shape Entity Id", cylinder.id)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 100), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 121), 2.0)
Report.result(Tests.instance_count_in_cylinder_shape, result)
# Create a new entity as a child of the area entity with Random Noise Gradient, Gradient Transform Modifier,
@@ -98,12 +98,13 @@ def ShapeIntersectionFilter_FilterStageToggle():
# Pin the Random Noise entity to the Gradient Entity Id field of the Position Modifier's Gradient X
vegetation.get_set_test(4, "Configuration|Position X|Gradient|Gradient Entity Id", random_noise.id)
- # Toggle between PreProcess and PostProcess
+ # Toggle between PreProcess and PostProcess and validate instances. Validate in a 0.3m wider radius due to position
+ # offsets
vegetation.get_set_test(3, "Configuration|Filter Stage", 1)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 117), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.3, 121), 2.0)
Report.result(Tests.preprocess_instance_count, result)
vegetation.get_set_test(3, "Configuration|Filter Stage", 2)
- result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.0, 122), 2.0)
+ result = helper.wait_for_condition(lambda: dynveg.validate_instance_count(position, 5.3, 122), 2.0)
Report.result(Tests.postprocess_instance_count, result)
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py
index c36d1b5bc9..fc55080cec 100644
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/SpawnerSlices_SliceCreationAndVisibilityToggleWorks.py
@@ -73,7 +73,7 @@ def SpawnerSlices_SliceCreationAndVisibilityToggleWorks():
slice.SliceRequestBus(bus.Broadcast, "CreateNewSlice", veg_1.id, slice_path)
# 2.3) Verify if the slice has been created successfully
- spawner_slice_success = helper.wait_for_condition(lambda: path_is_valid_asset(slice_path), 5.0)
+ spawner_slice_success = helper.wait_for_condition(lambda: path_is_valid_asset(slice_path), 10.0)
Report.result(Tests.spawner_slice_created, spawner_slice_success)
# 3) C2627904: Hiding a slice containing the component clears any visuals from the Viewport
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
index 5d0808adb6..69d411536f 100644
--- a/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/smoke/CMakeLists.txt
@@ -31,19 +31,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
Smoke
)
- ly_add_pytest(
- NAME AutomatedTesting::EditorTestWithGPU
- TEST_REQUIRES gpu
- PATH ${CMAKE_CURRENT_LIST_DIR}/test_Editor_NewExistingLevels_Works.py
- TIMEOUT 100
- RUNTIME_DEPENDENCIES
- AZ::AssetProcessor
- AZ::PythonBindingsExample
- Legacy::Editor
- AutomatedTesting.GameLauncher
- AutomatedTesting.Assets
- )
-
ly_add_pytest(
NAME AutomatedTesting::GameLauncherWithGPU
TEST_SUITE sandbox
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/Editor_NewExistingLevels_Works.py b/AutomatedTesting/Gem/PythonTests/smoke/Editor_NewExistingLevels_Works.py
deleted file mode 100644
index 71956488fc..0000000000
--- a/AutomatedTesting/Gem/PythonTests/smoke/Editor_NewExistingLevels_Works.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-
-
-Test Case Title: Create Test for UI apps- Editor
-"""
-
-
-class Tests():
- level_created = ("Level created", "Failed to create level")
- entity_found = ("New Entity created in level", "Failed to create New Entity in level")
- mesh_added = ("Mesh Component added", "Failed to add Mesh Component")
- enter_game_mode = ("Game Mode successfully entered", "Failed to enter in Game Mode")
- exit_game_mode = ("Game Mode successfully exited", "Failed to exit in Game Mode")
- level_opened = ("Level opened successfully", "Failed to open level")
- level_exported = ("Level exported successfully", "Failed to export level")
- mesh_removed = ("Mesh Component removed", "Failed to remove Mesh Component")
- entity_deleted = ("Entity deleted", "Failed to delete Entity")
- level_edits_present = ("Level edits persist after saving", "Failed to save level edits after saving")
-
-
-def Editor_NewExistingLevels_Works():
- """
- Summary: Perform the below operations on Editor
-
- 1) Launch & Close editor
- 2) Create new level
- 3) Saving and loading levels
- 4) Level edits persist after saving
- 5) Export Level
- 6) Can switch to play mode (ctrl+g) and exit that
- 7) Run editor python bindings test
- 8) Create an Entity
- 9) Delete an Entity
- 10) Add a component to an Entity
-
- Expected Behavior:
- All operations succeed and do not cause a crash
-
- Test Steps:
- 1) Launch editor and Create a new level
- 2) Create a new entity
- 3) Add Mesh component
- 4) Verify enter/exit game mode
- 5) Save, Load and Export level
- 6) Remove Mesh component
- 7) Delete entity
- 8) Open an existing level
- 9) Create a new entity in an existing level
- 10) Save, Load and Export an existing level and close editor
-
- Note:
- - This test file must be called from the O3DE Editor command terminal
- - Any passed and failed tests are written to the Editor.log file.
- Parsing the file or running a log_monitor are required to observe the test results.
-
- :return: None
- """
-
- import os
- import editor_python_test_tools.hydra_editor_utils as hydra
- from editor_python_test_tools.utils import TestHelper as helper
- from editor_python_test_tools.utils import Report
- import azlmbr.bus as bus
- import azlmbr.editor as editor
- import azlmbr.legacy.general as general
- import azlmbr.math as math
-
- # 1) Launch editor and Create a new level
- helper.init_idle()
- test_level_name = "temp_level"
- general.create_level_no_prompt(test_level_name, 128, 1, 128, False)
- helper.wait_for_condition(lambda: general.get_current_level_name() == test_level_name, 2.0)
- Report.result(Tests.level_created, general.get_current_level_name() == test_level_name)
-
- # 2) Create a new entity
- entity_position = math.Vector3(200.0, 200.0, 38.0)
- new_entity = hydra.Entity("Entity1")
- new_entity.create_entity(entity_position, [])
- test_entity = hydra.find_entity_by_name("Entity1")
- Report.result(Tests.entity_found, test_entity.IsValid())
-
- # 3) Add Mesh component
- new_entity.add_component("Mesh")
- Report.result(Tests.mesh_added, hydra.has_components(new_entity.id, ["Mesh"]))
-
- # 4) Verify enter/exit game mode
- helper.enter_game_mode(Tests.enter_game_mode)
- helper.exit_game_mode(Tests.exit_game_mode)
-
- # 5) Save, Load and Export level
- # Save Level
- general.save_level()
- # Open Level
- general.open_level(test_level_name)
- Report.result(Tests.level_opened, general.get_current_level_name() == test_level_name)
- # Export Level
- general.export_to_engine()
- level_pak_file = os.path.join("AutomatedTesting", "Levels", test_level_name, "level.pak")
- Report.result(Tests.level_exported, os.path.exists(level_pak_file))
-
- # 6) Remove Mesh component
- new_entity.remove_component("Mesh")
- Report.result(Tests.mesh_removed, not hydra.has_components(new_entity.id, ["Mesh"]))
-
- # 7) Delete entity
- editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntityById", new_entity.id)
- test_entity = hydra.find_entity_by_name("Entity1")
- Report.result(Tests.entity_deleted, len(test_entity) == 0)
-
- # 8) Open an existing level
- general.open_level(test_level_name)
- Report.result(Tests.level_opened, general.get_current_level_name() == test_level_name)
-
- # 9) Create a new entity in an existing level
- entity_position = math.Vector3(200.0, 200.0, 38.0)
- new_entity_2 = hydra.Entity("Entity2")
- new_entity_2.create_entity(entity_position, [])
- test_entity = hydra.find_entity_by_name("Entity2")
- Report.result(Tests.entity_found, test_entity.IsValid())
-
- # 10) Save, Load and Export an existing level
- # Save Level
- general.save_level()
- # Open Level
- general.open_level(test_level_name)
- Report.result(Tests.level_opened, general.get_current_level_name() == test_level_name)
- entity_id = hydra.find_entity_by_name(new_entity_2.name)
- Report.result(Tests.level_edits_present, entity_id == new_entity_2.id)
- # Export Level
- general.export_to_engine()
- level_pak_file = os.path.join("AutomatedTesting", "Levels", test_level_name, "level.pak")
- Report.result(Tests.level_exported, os.path.exists(level_pak_file))
-
-
-if __name__ == "__main__":
-
- from editor_python_test_tools.utils import Report
-
- Report.start_test(Editor_NewExistingLevels_Works)
diff --git a/AutomatedTesting/Gem/PythonTests/smoke/test_Editor_NewExistingLevels_Works.py b/AutomatedTesting/Gem/PythonTests/smoke/test_Editor_NewExistingLevels_Works.py
deleted file mode 100644
index 5caf7744c4..0000000000
--- a/AutomatedTesting/Gem/PythonTests/smoke/test_Editor_NewExistingLevels_Works.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-Copyright (c) Contributors to the Open 3D Engine Project.
-For complete copyright and license terms please see the LICENSE at the root of this distribution.
-
-SPDX-License-Identifier: Apache-2.0 OR MIT
-
-
-Test should run in both gpu and non gpu
-"""
-
-import pytest
-import os
-from automatedtesting_shared.base import TestAutomationBase
-
-import ly_test_tools
-import ly_test_tools.environment.file_system as file_system
-
-
-@pytest.mark.SUITE_smoke
-@pytest.mark.skipif(not ly_test_tools.WINDOWS, reason="Only succeeds on windows https://github.com/o3de/o3de/issues/5539")
-@pytest.mark.parametrize("launcher_platform", ["windows_editor"])
-@pytest.mark.parametrize("project", ["AutomatedTesting"])
-@pytest.mark.parametrize("level", ["temp_level"])
-class TestAutomation(TestAutomationBase):
- def test_Editor_NewExistingLevels_Works(self, request, workspace, editor, level, project, launcher_platform):
- def teardown():
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- request.addfinalizer(teardown)
- file_system.delete([os.path.join(workspace.paths.engine_root(), project, "Levels", level)], True, True)
-
- from . import Editor_NewExistingLevels_Works as test_module
-
- self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material
index cc2c9e785b..d15aa620c7 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_black.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material
index a4bfb73d12..579359b085 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_green.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material
index fe9c54bc02..88d5fc0fc6 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_arch.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material
index a19afa33e2..7244397ee9 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_bricks.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material
index 0c1208d8fb..8a3f289c26 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_floor.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material
index 6aad4d644a..7bc193978f 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_mat_roof.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material
index 302589dc85..a53cbef4e4 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_phong5.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material
index 5217a4e4be..6ddb645319 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_red.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"baseColor": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material
index dba44f7b49..e3d310cd15 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/TestData/Test_Sponza_Material_Conversion_white.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"emissive": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material b/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material
index c8e9f1f8f7..35677a81c6 100644
--- a/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material
+++ b/AutomatedTesting/Gem/Sponza/Assets/objects/lightBlocker_lambert1.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"emissive": {
"color": [
diff --git a/AutomatedTesting/Gem/Sponza/gem.json b/AutomatedTesting/Gem/Sponza/gem.json
index 68749cd5f4..f36b22a805 100644
--- a/AutomatedTesting/Gem/Sponza/gem.json
+++ b/AutomatedTesting/Gem/Sponza/gem.json
@@ -4,14 +4,19 @@
"license": "Apache-2.0 Or MIT",
"license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
"origin": "Open 3D Engine - o3de.org",
+ "origin_url": "https://github.com/o3de/o3de",
"type": "Asset",
"summary": "A standard test scene for Global Illumination (forked from crytek sponza scene)",
"canonical_tags": [
- "Gem"
+ "Gem",
+ "Asset"
],
"user_tags": [
- "Assets"
+ "Sponza"
],
+ "icon_path": "preview.png",
"requirements": "",
- "dependencies": []
+ "documentation_url": "",
+ "dependencies": [
+ ]
}
diff --git a/AutomatedTesting/Gem/gem.json b/AutomatedTesting/Gem/gem.json
index df197df09d..90a0c8cb01 100644
--- a/AutomatedTesting/Gem/gem.json
+++ b/AutomatedTesting/Gem/gem.json
@@ -3,13 +3,21 @@
"display_name": "AutomatedTesting",
"license": "Apache-2.0 Or MIT",
"license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
- "origin": "Amazon Web Services, Inc.",
+ "origin": "Open 3D Engine - o3de.org",
+ "origin_url": "https://github.com/o3de/o3de",
"type": "Code",
"summary": "Project Gem for customizing the AutomatedTesting project functionality.",
"canonical_tags": [
"Gem"
],
- "user_tags": [],
+ "user_tags": [
+ "AutomatedTesting"
+ ],
"icon_path": "preview.png",
- "requirements": ""
+ "requirements": "",
+ "documentation_url": "",
+ "dependencies": [],
+ "external_subdirectories": [
+ "PythonCoverage"
+ ]
}
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/PbrMaterialChart.prefab b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/PbrMaterialChart.prefab
similarity index 97%
rename from AutomatedTesting/Levels/PbrMaterialChart/PbrMaterialChart.prefab
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/PbrMaterialChart.prefab
index faa93597de..2c0ee5cb1a 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/PbrMaterialChart.prefab
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/PbrMaterialChart.prefab
@@ -1474,9 +1474,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{1FD47684-2E9E-5525-BBCA-251795F9033C}"
+ "guid": "{12B5A321-3D64-5DF6-9E15-D8F447229EC1}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r00.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r00.azmaterial"
}
}
}
@@ -1569,9 +1569,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{B5660D78-818E-5273-AF3D-EC8189E2E6CB}"
+ "guid": "{EB8B9C49-D6F4-5098-AC97-543381E2554A}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r01.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r01.azmaterial"
}
}
}
@@ -1824,9 +1824,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{512443BD-9511-5F13-A84A-3ED5DB9E9B5A}"
+ "guid": "{CAA9CAFC-8A48-5406-BE26-448E5AA1A5B0}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r02.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r02.azmaterial"
}
}
}
@@ -1926,9 +1926,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{E28A5CC5-4B8B-5B90-877A-3D92C75DC75A}"
+ "guid": "{2F338C0B-EF86-5AC4-AEE6-28A26BB9E97E}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r03.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r03.azmaterial"
}
}
}
@@ -2028,9 +2028,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{1495BCCF-3F96-5D0B-8176-228DB22CEC82}"
+ "guid": "{9BF4E656-0D4F-5746-A256-32740742712B}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r04.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r04.azmaterial"
}
}
}
@@ -2130,9 +2130,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{40494612-0ABF-55B5-9C56-E968763FCFDE}"
+ "guid": "{850398D7-386A-56C6-AEB2-95E4F64368B1}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r05.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r05.azmaterial"
}
}
}
@@ -2232,9 +2232,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{76CF9D4A-009F-5494-83AB-6E3D4D1B4A36}"
+ "guid": "{74784C2A-A713-5C6A-8B3D-B66CAE3DD055}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r06.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r06.azmaterial"
}
}
}
@@ -2334,9 +2334,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{8431B792-E6CC-51DD-B82E-F3E4A12FCB4A}"
+ "guid": "{4F9F91F7-7E22-5A14-856D-194CC258E70D}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r07.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r07.azmaterial"
}
}
}
@@ -2436,9 +2436,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{4B1F29FF-7971-5524-AA1B-0DC2392A33C4}"
+ "guid": "{842AE870-802B-5934-997F-0965F960ECB9}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r08.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r08.azmaterial"
}
}
}
@@ -2538,9 +2538,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{785BE6DE-C0EB-5B47-9438-4F9ECFC34A96}"
+ "guid": "{0184CF10-E675-5C33-B1B9-009C383AB463}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r09.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r09.azmaterial"
}
}
}
@@ -2640,9 +2640,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{C40DE9AE-6756-57E7-B3B4-FB0542B5CD0F}"
+ "guid": "{6DDA0761-C165-58CC-B45E-03C29F0CF598}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m00_r10.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m00_r10.azmaterial"
}
}
}
@@ -2896,9 +2896,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{251C4C29-4ECD-5763-AF4F-20675EAC048B}"
+ "guid": "{101AB53A-3B3E-5ACF-841C-65DB2BFBF305}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r04.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r04.azmaterial"
}
}
}
@@ -2998,9 +2998,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{02D082C4-5032-57CC-A081-BC4D8518BCF0}"
+ "guid": "{B82B96D6-7511-5E22-A36E-FFF682B3236B}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r05.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r05.azmaterial"
}
}
}
@@ -3100,9 +3100,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{FA9D8842-95B2-5371-8352-CBEEEAABE676}"
+ "guid": "{DBED5292-3E17-5038-9974-80A8BB1F79E8}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r06.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r06.azmaterial"
}
}
}
@@ -3202,9 +3202,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{522A9626-FF4C-561A-A44A-64B68F7274D2}"
+ "guid": "{25F07733-365C-5826-AEE3-E92FBE807555}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r07.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r07.azmaterial"
}
}
}
@@ -3304,9 +3304,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{06DDFD66-D7F5-5D55-8972-6D61276E88F6}"
+ "guid": "{C9A7B916-CF71-5A34-B9B9-54FE8CB058DC}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r00.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r00.azmaterial"
}
}
}
@@ -3399,9 +3399,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{060EF1B7-1029-5227-B03B-1415C74E9D65}"
+ "guid": "{85C8DFC5-358D-579D-B922-14FA1B401571}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r08.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r08.azmaterial"
}
}
}
@@ -3501,9 +3501,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{7B7BC6F8-150A-518F-816E-2F7DBE786461}"
+ "guid": "{51924281-7A06-5654-B783-A4F5759063ED}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r01.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r01.azmaterial"
}
}
}
@@ -3603,9 +3603,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{270881B6-21E9-509D-A6CD-1046674FB0BE}"
+ "guid": "{7877F64E-26E3-558C-B6D9-B609ED6E43BF}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r09.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r09.azmaterial"
}
}
}
@@ -3705,9 +3705,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{C0538953-C56E-5C1A-BBE2-E6BE04764C20}"
+ "guid": "{6CC3C6B9-EE05-5A77-A12D-7085D93D89DB}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r02.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r02.azmaterial"
}
}
}
@@ -3874,9 +3874,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{5EA26E09-E3D6-5181-8E7A-F2E98A24247C}"
+ "guid": "{E6E15876-EEF3-555D-BD80-1B9D5A7ECC7D}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r10.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r10.azmaterial"
}
}
}
@@ -3976,9 +3976,9 @@
"{}": {
"MaterialAsset": {
"assetId": {
- "guid": "{E1A5D708-7A49-5CCA-81C3-4CB337C47703}"
+ "guid": "{83179EEC-BAC7-5D39-9788-37D33E9584B1}"
},
- "assetHint": "levels/pbrmaterialchart/materials/basic_m10_r03.azmaterial"
+ "assetHint": "levels/graphics/pbrmaterialchart/materials/basic_m10_r03.azmaterial"
}
}
}
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic.material
similarity index 95%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic.material
index 32ac8dfd10..6af3ceb0c1 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic.material
@@ -1,6 +1,6 @@
{
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"baseColor": {
"color": [ 1.0, 1.0, 1.0 ],
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r00.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r00.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r00.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r00.material
index 1c1096bf12..541bd83981 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r00.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r00.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r01.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r01.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r01.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r01.material
index 33148f3f73..19691258e0 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r01.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r01.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r02.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r02.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r02.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r02.material
index 38339454cb..46fda2aab1 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r02.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r02.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r03.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r03.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r03.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r03.material
index e21ab5775a..79cf4bf401 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r03.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r03.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r04.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r04.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r04.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r04.material
index 0272e66081..9aabf3e158 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r04.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r04.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r05.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r05.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r05.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r05.material
index 67d51777a4..8b02f225fc 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r05.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r05.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r06.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r06.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r06.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r06.material
index 3136f654e6..5b089da4bd 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r06.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r06.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r07.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r07.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r07.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r07.material
index a79744ea11..25741cf689 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r07.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r07.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r08.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r08.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r08.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r08.material
index 1372283500..04103273f2 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r08.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r08.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r09.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r09.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r09.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r09.material
index d1c951e53c..74eb68da99 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r09.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r09.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r10.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r10.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r10.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r10.material
index d34fc46530..3533ca6676 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m00_r10.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m00_r10.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 0.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r00.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r00.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r00.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r00.material
index 92ddfec7c4..d2ce0fadc9 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r00.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r00.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r01.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r01.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r01.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r01.material
index 874422384a..8d96ea6217 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r01.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r01.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r02.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r02.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r02.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r02.material
index b017add10b..e8feb87283 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r02.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r02.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r03.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r03.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r03.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r03.material
index 5353d651c8..c14591bd52 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r03.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r03.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r04.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r04.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r04.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r04.material
index 6dd47e4e3b..60a3167f02 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r04.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r04.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r05.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r05.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r05.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r05.material
index 04912cbfd4..d71ff06961 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r05.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r05.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r06.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r06.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r06.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r06.material
index 27f7f6ff42..6fa8cfe1a6 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r06.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r06.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r07.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r07.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r07.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r07.material
index e2b5df681c..773cc66f03 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r07.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r07.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r08.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r08.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r08.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r08.material
index 5418f9c855..6971597d1d 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r08.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r08.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r09.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r09.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r09.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r09.material
index dd1ec3489a..c2d8cc47bd 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r09.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r09.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r10.material b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r10.material
similarity index 88%
rename from AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r10.material
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r10.material
index 5f9317d2cc..906879b0ea 100644
--- a/AutomatedTesting/Levels/PbrMaterialChart/materials/basic_m10_r10.material
+++ b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/materials/basic_m10_r10.material
@@ -1,7 +1,7 @@
{
"parentMaterial": "./basic.material",
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"metallic": {
"factor": 1.0
diff --git a/AutomatedTesting/Levels/PbrMaterialChart/tags.txt b/AutomatedTesting/Levels/Graphics/PbrMaterialChart/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/PbrMaterialChart/tags.txt
rename to AutomatedTesting/Levels/Graphics/PbrMaterialChart/tags.txt
diff --git a/AutomatedTesting/Levels/Sponza/Sponza.prefab b/AutomatedTesting/Levels/Graphics/Sponza/Sponza.prefab
similarity index 100%
rename from AutomatedTesting/Levels/Sponza/Sponza.prefab
rename to AutomatedTesting/Levels/Graphics/Sponza/Sponza.prefab
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/tags.txt b/AutomatedTesting/Levels/Graphics/Sponza/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/tags.txt
rename to AutomatedTesting/Levels/Graphics/Sponza/tags.txt
diff --git a/AutomatedTesting/Levels/macbeth_shaderballs/macbeth_shaderballs.prefab b/AutomatedTesting/Levels/Graphics/macbeth_shaderballs/macbeth_shaderballs.prefab
similarity index 100%
rename from AutomatedTesting/Levels/macbeth_shaderballs/macbeth_shaderballs.prefab
rename to AutomatedTesting/Levels/Graphics/macbeth_shaderballs/macbeth_shaderballs.prefab
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/tags.txt b/AutomatedTesting/Levels/Graphics/macbeth_shaderballs/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/tags.txt
rename to AutomatedTesting/Levels/Graphics/macbeth_shaderballs/tags.txt
diff --git a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
index 9babf84ba4..18b503bab5 100644
--- a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
+++ b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:60276c07b45a734e4f71d695278167ea61e884f8b513906168c9642078ad5954
-size 6045
+oid sha256:0d004c329a7c5044a8fe05b6dbbf9b19de29c60acec75f13fdbc344a55aab8c7
+size 6404
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly
new file mode 100644
index 0000000000..b908d29eab
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/0.ly
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e89946c224d2e765931e8ba8e33133ac24651af321a404016d9a9ea8c323db6c
+size 8563
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml
new file mode 100644
index 0000000000..bb94b733b3
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak
new file mode 100644
index 0000000000..614e41c4b2
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/level.pak
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a46437ba86135567d87d43af0c4d499bf3cfe321721dbaf6e3cda8e49427ee1
+size 40212
diff --git a/AutomatedTesting/Levels/Sponza/tags.txt b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/Sponza/tags.txt
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/tags.txt
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terraintexture.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/terraintexture.pak
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terraintexture.pak
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/0/terraintexture.pak
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly
new file mode 100644
index 0000000000..216426fc2a
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/1.ly
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95996da3902d885060e700c573d13144bab246b930dfeedaed6066c13c879b11
+size 8737
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml
new file mode 100644
index 0000000000..5f5b4928fc
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak
new file mode 100644
index 0000000000..d920770374
--- /dev/null
+++ b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/level.pak
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:894dfd4ab92aa4d1d6003aebf82cf7ff854a8b3684e010234e073879f88b64e5
+size 40210
diff --git a/AutomatedTesting/Levels/macbeth_shaderballs/tags.txt b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt
similarity index 100%
rename from AutomatedTesting/Levels/macbeth_shaderballs/tags.txt
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/tags.txt
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terraintexture.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/terraintexture.pak
similarity index 100%
rename from AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terraintexture.pak
rename to AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/1/terraintexture.pak
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly
deleted file mode 100644
index a5953fc44b..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/C15425935_Material_LibraryUpdatedAcrossLevels_0.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:969b77ee335d2a04524a27c765dd2f2bdee048661f3ff7be0766ba69d18d5842
-size 10409
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml
deleted file mode 100644
index 9a78b1bfd5..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak
deleted file mode 100644
index 8e6b3b29cb..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:547d7fdfcd959569b69d78eb6f63c7c19fc90840d69ca2d46eca8a3e82b8db75
-size 39337
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml
deleted file mode 100644
index 668a4583bd..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/GameTokens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml
deleted file mode 100644
index 456d609b8a..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/leveldata/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield
deleted file mode 100644
index 011356e521..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_0/terrain/terrain.pxheightfield
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19096597087688692a225c1955f73d22c46354995fca1df8dff107a90c2f17a2
-size 4202594
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly
deleted file mode 100644
index 9f48f08a1b..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/C15425935_Material_LibraryUpdatedAcrossLevels_1.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:29f752c141514cb4b50aea07e6b63de5c8f43149ddac37722e9ddb8b5f4a667d
-size 9495
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml
deleted file mode 100644
index 9a78b1bfd5..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak
deleted file mode 100644
index 8e6b3b29cb..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:547d7fdfcd959569b69d78eb6f63c7c19fc90840d69ca2d46eca8a3e82b8db75
-size 39337
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml
deleted file mode 100644
index 668a4583bd..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/GameTokens.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml
deleted file mode 100644
index 456d609b8a..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/leveldata/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield b/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield
deleted file mode 100644
index 011356e521..0000000000
--- a/AutomatedTesting/Levels/Physics/Material_LibraryUpdatedAcrossLevels/C15425935_Material_LibraryUpdatedAcrossLevels_1/terrain/terrain.pxheightfield
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19096597087688692a225c1955f73d22c46354995fca1df8dff107a90c2f17a2
-size 4202594
diff --git a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
index d6052ffa7c..a4b28a9e96 100644
--- a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
+++ b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cb97ada674d123c67d7a32eb65e81fa66472cf51f748054c4a4297649f2a0f40
-size 5568
+oid sha256:0f645243fb623258ed4b063c5a18ea414560496f97d7234782ca97884e0ed8f0
+size 5961
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/Environment.xml b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/Environment.xml
deleted file mode 100644
index 4ba36f66ae..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/Environment.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TerrainTexture.xml
deleted file mode 100644
index f43df05b22..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TerrainTexture.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TimeOfDay.xml
deleted file mode 100644
index c5b404318e..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/TimeOfDay.xml
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/VegetationMap.dat
deleted file mode 100644
index dce5631cd0..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/LevelData/VegetationMap.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9
-size 63
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/TerrainTexture.pak b/AutomatedTesting/Levels/TestDependenciesLevel/TerrainTexture.pak
deleted file mode 100644
index fe3604a050..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/TerrainTexture.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
-size 22
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.ly b/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.ly
deleted file mode 100644
index 95cc91cd6b..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.ly
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:825828fe7c183e765315f933a8b1eb25283739d34d62cb84c34e2dcb56591d6e
-size 12415
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.prefab b/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.prefab
new file mode 100644
index 0000000000..cf30cb178c
--- /dev/null
+++ b/AutomatedTesting/Levels/TestDependenciesLevel/TestDependenciesLevel.prefab
@@ -0,0 +1,555 @@
+{
+ "ContainerEntity": {
+ "Id": "Entity_[1146574390643]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10641544592923449938]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 10641544592923449938
+ },
+ "Component_[12039882709170782873]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 12039882709170782873
+ },
+ "Component_[12265484671603697631]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 12265484671603697631
+ },
+ "Component_[14126657869720434043]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 14126657869720434043,
+ "Child Entity Order": [
+ "Entity_[1176639161715]"
+ ]
+ },
+ "Component_[15230859088967841193]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 15230859088967841193,
+ "Parent Entity": ""
+ },
+ "Component_[16239496886950819870]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 16239496886950819870
+ },
+ "Component_[5688118765544765547]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 5688118765544765547
+ },
+ "Component_[6545738857812235305]": {
+ "$type": "SelectionComponent",
+ "Id": 6545738857812235305
+ },
+ "Component_[7247035804068349658]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7247035804068349658
+ },
+ "Component_[9307224322037797205]": {
+ "$type": "EditorLockComponent",
+ "Id": 9307224322037797205
+ },
+ "Component_[9562516168917670048]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9562516168917670048
+ }
+ }
+ },
+ "Entities": {
+ "Entity_[1155164325235]": {
+ "Id": "Entity_[1155164325235]",
+ "Name": "Sun",
+ "Components": {
+ "Component_[10440557478882592717]": {
+ "$type": "SelectionComponent",
+ "Id": 10440557478882592717
+ },
+ "Component_[13620450453324765907]": {
+ "$type": "EditorLockComponent",
+ "Id": 13620450453324765907
+ },
+ "Component_[2134313378593666258]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 2134313378593666258
+ },
+ "Component_[234010807770404186]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 234010807770404186
+ },
+ "Component_[2970359110423865725]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 2970359110423865725
+ },
+ "Component_[3722854130373041803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3722854130373041803
+ },
+ "Component_[5992533738676323195]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5992533738676323195
+ },
+ "Component_[7378860763541895402]": {
+ "$type": "AZ::Render::EditorDirectionalLightComponent",
+ "Id": 7378860763541895402,
+ "Controller": {
+ "Configuration": {
+ "Intensity": 1.0,
+ "CameraEntityId": "",
+ "ShadowFilterMethod": 1
+ }
+ }
+ },
+ "Component_[7892834440890947578]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 7892834440890947578,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 0.0,
+ 13.487043380737305
+ ],
+ "Rotate": [
+ -76.13099670410156,
+ -0.847000002861023,
+ -15.8100004196167
+ ]
+ }
+ },
+ "Component_[8599729549570828259]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 8599729549570828259
+ },
+ "Component_[952797371922080273]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 952797371922080273
+ }
+ }
+ },
+ "Entity_[1159459292531]": {
+ "Id": "Entity_[1159459292531]",
+ "Name": "Ground",
+ "Components": {
+ "Component_[11701138785793981042]": {
+ "$type": "SelectionComponent",
+ "Id": 11701138785793981042
+ },
+ "Component_[12260880513256986252]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 12260880513256986252
+ },
+ "Component_[13711420870643673468]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 13711420870643673468
+ },
+ "Component_[138002849734991713]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 138002849734991713
+ },
+ "Component_[16578565737331764849]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 16578565737331764849,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[16919232076966545697]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16919232076966545697
+ },
+ "Component_[5182430712893438093]": {
+ "$type": "EditorMaterialComponent",
+ "Id": 5182430712893438093
+ },
+ "Component_[5675108321710651991]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 5675108321710651991,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
+ "subId": 277889906
+ },
+ "assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[5681893399601237518]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5681893399601237518
+ },
+ "Component_[592692962543397545]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 592692962543397545
+ },
+ "Component_[7090012899106946164]": {
+ "$type": "EditorLockComponent",
+ "Id": 7090012899106946164
+ },
+ "Component_[9410832619875640998]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 9410832619875640998
+ }
+ }
+ },
+ "Entity_[1163754259827]": {
+ "Id": "Entity_[1163754259827]",
+ "Name": "Camera",
+ "Components": {
+ "Component_[11895140916889160460]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11895140916889160460
+ },
+ "Component_[16880285896855930892]": {
+ "$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
+ "Id": 16880285896855930892,
+ "Controller": {
+ "Configuration": {
+ "Field of View": 55.0,
+ "EditorEntityId": 3342481886060234850
+ }
+ }
+ },
+ "Component_[17187464423780271193]": {
+ "$type": "EditorLockComponent",
+ "Id": 17187464423780271193
+ },
+ "Component_[17495696818315413311]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 17495696818315413311
+ },
+ "Component_[18086214374043522055]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 18086214374043522055,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Translate": [
+ -2.3000001907348633,
+ -3.9368600845336914,
+ 1.0
+ ],
+ "Rotate": [
+ -2.050307512283325,
+ 1.9552897214889526,
+ -43.623355865478516
+ ]
+ }
+ },
+ "Component_[18387556550380114975]": {
+ "$type": "SelectionComponent",
+ "Id": 18387556550380114975
+ },
+ "Component_[2654521436129313160]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 2654521436129313160
+ },
+ "Component_[5265045084611556958]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5265045084611556958
+ },
+ "Component_[7169798125182238623]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7169798125182238623
+ },
+ "Component_[7255796294953281766]": {
+ "$type": "GenericComponentWrapper",
+ "Id": 7255796294953281766,
+ "m_template": {
+ "$type": "FlyCameraInputComponent"
+ }
+ },
+ "Component_[8866210352157164042]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8866210352157164042
+ },
+ "Component_[9129253381063760879]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 9129253381063760879
+ }
+ }
+ },
+ "Entity_[1168049227123]": {
+ "Id": "Entity_[1168049227123]",
+ "Name": "Grid",
+ "Components": {
+ "Component_[11443347433215807130]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 11443347433215807130
+ },
+ "Component_[11779275529534764488]": {
+ "$type": "SelectionComponent",
+ "Id": 11779275529534764488
+ },
+ "Component_[14249419413039427459]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14249419413039427459
+ },
+ "Component_[15448581635946161318]": {
+ "$type": "AZ::Render::EditorGridComponent",
+ "Id": 15448581635946161318,
+ "Controller": {
+ "Configuration": {
+ "primarySpacing": 4.0,
+ "primaryColor": [
+ 0.501960813999176,
+ 0.501960813999176,
+ 0.501960813999176
+ ],
+ "secondarySpacing": 0.5,
+ "secondaryColor": [
+ 0.250980406999588,
+ 0.250980406999588,
+ 0.250980406999588
+ ]
+ }
+ }
+ },
+ "Component_[1843303322527297409]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 1843303322527297409
+ },
+ "Component_[380249072065273654]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 380249072065273654,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[7476660583684339787]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 7476660583684339787
+ },
+ "Component_[7557626501215118375]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 7557626501215118375
+ },
+ "Component_[7984048488947365511]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 7984048488947365511
+ },
+ "Component_[8118181039276487398]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 8118181039276487398
+ },
+ "Component_[9189909764215270515]": {
+ "$type": "EditorLockComponent",
+ "Id": 9189909764215270515
+ }
+ }
+ },
+ "Entity_[1172344194419]": {
+ "Id": "Entity_[1172344194419]",
+ "Name": "Shader Ball",
+ "Components": {
+ "Component_[10789351944715265527]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 10789351944715265527
+ },
+ "Component_[12037033284781049225]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 12037033284781049225
+ },
+ "Component_[13759153306105970079]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 13759153306105970079
+ },
+ "Component_[14135560884830586279]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14135560884830586279
+ },
+ "Component_[16247165675903986673]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 16247165675903986673
+ },
+ "Component_[18082433625958885247]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 18082433625958885247
+ },
+ "Component_[6472623349872972660]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6472623349872972660,
+ "Parent Entity": "Entity_[1176639161715]",
+ "Transform Data": {
+ "Rotate": [
+ 0.0,
+ 0.10000000149011612,
+ 180.0
+ ]
+ }
+ },
+ "Component_[6495255223970673916]": {
+ "$type": "AZ::Render::EditorMeshComponent",
+ "Id": 6495255223970673916,
+ "Controller": {
+ "Configuration": {
+ "ModelAsset": {
+ "assetId": {
+ "guid": "{FD340C30-755C-5911-92A3-19A3F7A77931}",
+ "subId": 281415304
+ },
+ "assetHint": "objects/shaderball/shaderball_default_1m.azmodel"
+ }
+ }
+ }
+ },
+ "Component_[8056625192494070973]": {
+ "$type": "SelectionComponent",
+ "Id": 8056625192494070973
+ },
+ "Component_[8550141614185782969]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8550141614185782969
+ },
+ "Component_[9439770997198325425]": {
+ "$type": "EditorLockComponent",
+ "Id": 9439770997198325425
+ }
+ }
+ },
+ "Entity_[1176639161715]": {
+ "Id": "Entity_[1176639161715]",
+ "Name": "Atom Default Environment",
+ "Components": {
+ "Component_[10757302973393310045]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 10757302973393310045,
+ "Parent Entity": "Entity_[1146574390643]"
+ },
+ "Component_[14505817420424255464]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 14505817420424255464,
+ "ComponentOrderEntryArray": [
+ {
+ "ComponentId": 10757302973393310045
+ }
+ ]
+ },
+ "Component_[14988041764659020032]": {
+ "$type": "EditorLockComponent",
+ "Id": 14988041764659020032
+ },
+ "Component_[15808690248755038124]": {
+ "$type": "SelectionComponent",
+ "Id": 15808690248755038124
+ },
+ "Component_[15900837685796817138]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15900837685796817138
+ },
+ "Component_[3298767348226484884]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3298767348226484884
+ },
+ "Component_[4076975109609220594]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 4076975109609220594
+ },
+ "Component_[5679760548946028854]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 5679760548946028854
+ },
+ "Component_[5855590796136709437]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 5855590796136709437,
+ "Child Entity Order": [
+ "Entity_[1155164325235]",
+ "Entity_[1180934129011]",
+ "Entity_[1172344194419]",
+ "Entity_[1168049227123]",
+ "Entity_[1163754259827]",
+ "Entity_[1159459292531]"
+ ]
+ },
+ "Component_[9277695270015777859]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9277695270015777859
+ }
+ }
+ },
+ "Entity_[1180934129011]": {
+ "Id": "Entity_[1180934129011]",
+ "Name": "Global Sky",
+ "Components": {
+ "Component_[11231930600558681245]": {
+ "$type": "AZ::Render::EditorHDRiSkyboxComponent",
+ "Id": 11231930600558681245,
+ "Controller": {
+ "Configuration": {
+ "CubemapAsset": {
+ "assetId": {
+ "guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
+ "subId": 1000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[11980494120202836095]": {
+ "$type": "SelectionComponent",
+ "Id": 11980494120202836095
+ },
+ "Component_[1428633914413949476]": {
+ "$type": "EditorLockComponent",
+ "Id": 1428633914413949476
+ },
+ "Component_[14936200426671614999]": {
+ "$type": "AZ::Render::EditorImageBasedLightComponent",
+ "Id": 14936200426671614999,
+ "Controller": {
+ "Configuration": {
+ "diffuseImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 3000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
+ },
+ "specularImageAsset": {
+ "assetId": {
+ "guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
+ "subId": 2000
+ },
+ "assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
+ }
+ }
+ }
+ },
+ "Component_[14994774102579326069]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 14994774102579326069
+ },
+ "Component_[15417479889044493340]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 15417479889044493340
+ },
+ "Component_[15826613364991382688]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15826613364991382688
+ },
+ "Component_[1665003113283562343]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 1665003113283562343
+ },
+ "Component_[3704934735944502280]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3704934735944502280
+ },
+ "Component_[5698542331457326479]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 5698542331457326479
+ },
+ "Component_[6644513399057217122]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 6644513399057217122,
+ "Parent Entity": "Entity_[1176639161715]"
+ },
+ "Component_[931091830724002070]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 931091830724002070
+ }
+ }
+ }
+ },
+ "Instances": {
+ "Instance_[425258647110]": {
+ "Source": "assets/simple_pot_fbx.procprefab"
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/filelist.xml b/AutomatedTesting/Levels/TestDependenciesLevel/filelist.xml
deleted file mode 100644
index b5164a4aee..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/filelist.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/AutomatedTesting/Levels/TestDependenciesLevel/level.pak b/AutomatedTesting/Levels/TestDependenciesLevel/level.pak
deleted file mode 100644
index dfba7fb4e3..0000000000
--- a/AutomatedTesting/Levels/TestDependenciesLevel/level.pak
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2611b691998640a0e802461f47b5b876f6832fbece62d34cc25da53e135e1c38
-size 44525
diff --git a/AutomatedTesting/Materials/DefaultPBRTransparent.material b/AutomatedTesting/Materials/DefaultPBRTransparent.material
index 7c8aa6cf94..a7000d5371 100644
--- a/AutomatedTesting/Materials/DefaultPBRTransparent.material
+++ b/AutomatedTesting/Materials/DefaultPBRTransparent.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/StandardPBR.materialtype",
"parentMaterial": "Materials/Presets/PBR/default_grid.material",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"opacity": {
"mode": "Blended"
diff --git a/AutomatedTesting/Materials/basic_grey.material b/AutomatedTesting/Materials/basic_grey.material
index 0b890db4c6..6ecc1e029a 100644
--- a/AutomatedTesting/Materials/basic_grey.material
+++ b/AutomatedTesting/Materials/basic_grey.material
@@ -1,6 +1,6 @@
{
"materialType": "Materials/Types/StandardPBR.materialtype",
- "propertyLayoutVersion": 1,
+ "materialTypeVersion": 1,
"properties": {
"baseColor": {
"color": [ 0.18, 0.18, 0.18 ],
diff --git a/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material b/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material
index 878b3ac39f..52c323b454 100644
--- a/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material
+++ b/AutomatedTesting/Objects/MorphTargets/DisplayWrinkleMaskBlendValues.material
@@ -2,7 +2,7 @@
"description": "",
"materialType": "Materials/Types/Skin.materialtype",
"parentMaterial": "",
- "propertyLayoutVersion": 3,
+ "materialTypeVersion": 3,
"properties": {
"wrinkleLayers": {
"count": 3,
diff --git a/AutomatedTesting/project.json b/AutomatedTesting/project.json
index fc14645d2b..5a4b303570 100644
--- a/AutomatedTesting/project.json
+++ b/AutomatedTesting/project.json
@@ -5,12 +5,15 @@
"modules": [],
"project_id": "{D816AFAE-4BB7-4FEF-88F4-E2B786DCF29D}",
"android_settings": {
- "package_name": "com.lumberyard.yourgame",
+ "package_name": "org.o3de.automatedtesting",
"version_number": 1,
"version_name": "1.0.0",
"orientation": "landscape"
},
"engine": "o3de",
"display_name": "AutomatedTesting",
- "icon_path": "preview.png"
-}
+ "icon_path": "preview.png",
+ "external_subdirectories": [
+ "Gem"
+ ]
+}
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f61a9561e8..c81581fe0f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,21 +49,56 @@ include(cmake/O3DEJson.cmake)
# Subdirectory processing
################################################################################
-function(add_engine_json_external_subdirectories)
- read_json_external_subdirs(external_subdis ${LY_ROOT_FOLDER}/engine.json)
- foreach(external_subdir ${external_subdis})
- file(REAL_PATH ${external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER})
- list(APPEND engine_external_subdirs ${real_external_subdir})
- endforeach()
+# this function is building up the LY_EXTERNAL_SUBDIRS global property
+function(add_engine_gem_json_external_subdirectories gem_path)
+ set(gem_json_path ${gem_path}/gem.json)
+ if(EXISTS ${gem_json_path})
+ read_json_external_subdirs(gem_external_subdirs ${gem_path}/gem.json)
+ foreach(gem_external_subdir ${gem_external_subdirs})
+ file(REAL_PATH ${gem_external_subdir} real_external_subdir BASE_DIRECTORY ${gem_path})
+ set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir})
+ add_engine_gem_json_external_subdirectories(${real_external_subdir})
+ endforeach()
+ endif()
+endfunction()
- set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${engine_external_subdirs})
+function(add_engine_json_external_subdirectories)
+ read_json_external_subdirs(engine_external_subdirs ${LY_ROOT_FOLDER}/engine.json)
+ foreach(engine_external_subdir ${engine_external_subdirs})
+ file(REAL_PATH ${engine_external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER})
+ set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir})
+ add_engine_gem_json_external_subdirectories(${real_external_subdir})
+ endforeach()
+endfunction()
+
+function(add_subdirectory_on_externalsubdirs)
+ get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS)
+ list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs})
+ # Loop over the additional external subdirectories and invoke add_subdirectory on them
+ foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
+ # Hash the external_directory name and append it to the Binary Directory section of add_subdirectory
+ # This is to deal with potential situations where multiple external directories has the same last directory name
+ # For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory
+ file(REAL_PATH ${external_directory} full_directory_path)
+ string(SHA256 full_directory_hash ${full_directory_path})
+ # Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit
+ # when the external subdirectory contains relative paths of significant length
+ string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash)
+ # Use the last directory as the suffix path to use for the Binary Directory
+ get_filename_component(directory_name ${external_directory} NAME)
+ add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash})
+ endforeach()
endfunction()
# Add the projects first so the Launcher can find them
include(cmake/Projects.cmake)
if(NOT INSTALLED_ENGINE)
-
+ # Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
+ # external subdirectories. This should go before adding the rest of the targets so the targets are availbe to the launcher.
+ add_engine_json_external_subdirectories()
+ add_subdirectory_on_externalsubdirs()
+
# Add the rest of the targets
add_subdirectory(Assets)
add_subdirectory(Code)
@@ -73,31 +108,11 @@ if(NOT INSTALLED_ENGINE)
add_subdirectory(Templates)
add_subdirectory(Tools)
- # Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
- # external subdirectories
- add_engine_json_external_subdirectories()
else()
ly_find_o3de_packages()
+ add_subdirectory_on_externalsubdirs()
endif()
-get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS)
-list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs})
-
-# Loop over the additional external subdirectories and invoke add_subdirectory on them
-foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
- # Hash the extenal_directory name and append it to the Binary Directory section of add_subdirectory
- # This is to deal with potential situations where multiple external directories has the same last directory name
- # For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory
- file(REAL_PATH ${external_directory} full_directory_path)
- string(SHA256 full_directory_hash ${full_directory_path})
- # Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit
- # when the external subdirectory contains relative paths of significant length
- string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash)
- # Use the last directory as the suffix path to use for the Binary Directory
- get_filename_component(directory_name ${external_directory} NAME)
- add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash})
-endforeach()
-
################################################################################
# Post-processing
################################################################################
diff --git a/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp b/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp
index baa287e47f..73c3d6f9ed 100644
--- a/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp
+++ b/Code/Editor/AssetImporter/AssetImporterManager/AssetImporterManager.cpp
@@ -191,6 +191,7 @@ void AssetImporterManager::OnBrowseDestinationFilePath(QLineEdit* destinationLin
fileDialog.setViewMode(QFileDialog::List);
fileDialog.setWindowModality(Qt::WindowModality::ApplicationModal);
fileDialog.setWindowTitle(tr("Select import destination"));
+ fileDialog.setFileMode(QFileDialog::Directory);
QSettings settings;
QString currentDestination = settings.value(AssetImporterManagerPrivate::g_selectDestinationFilesPath).toString();
diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
index bcaaa02b67..36e08982a7 100644
--- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
+++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
// AzQtComponents
#include
@@ -31,6 +32,15 @@ AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
AZ_CVAR_EXTERNED(bool, ed_useNewAssetBrowserTableView);
+namespace AzToolsFramework
+{
+ namespace AssetBrowser
+ {
+ static constexpr const char* CollapseAllIcon = "Assets/Editor/Icons/AssetBrowser/Collapse_All.svg";
+ static constexpr const char* MenuIcon = ":/Menu/menu.svg";
+ } // namespace AssetBrowser
+} // namespace AzToolsFramework
+
class ListenerForShowAssetEditorEvent
: public QObject
, private AzToolsFramework::EditorEvents::Bus::Handler
@@ -83,10 +93,24 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent)
m_ui->m_assetBrowserTableViewWidget->setVisible(false);
m_ui->m_toggleDisplayViewBtn->setVisible(false);
m_ui->m_searchWidget->SetFilterInputInterval(AZStd::chrono::milliseconds(250));
+
+ m_assetBrowserModel->SetFilterModel(m_filterModel.data());
+
+ m_ui->m_collapseAllButton->setAutoRaise(true); // hover highlight
+ m_ui->m_collapseAllButton->setIcon(QIcon(AzAssetBrowser::CollapseAllIcon));
+
+ connect(
+ m_ui->m_collapseAllButton, &QToolButton::clicked, this,
+ [this]()
+ {
+ m_ui->m_assetBrowserTreeViewWidget->collapseAll();
+ });
+
if (ed_useNewAssetBrowserTableView)
{
m_ui->m_toggleDisplayViewBtn->setVisible(true);
- m_ui->m_toggleDisplayViewBtn->setIcon(QIcon(":/Menu/menu.svg"));
+ m_ui->m_toggleDisplayViewBtn->setAutoRaise(true);
+ m_ui->m_toggleDisplayViewBtn->setIcon(QIcon(AzAssetBrowser::MenuIcon));
m_tableModel->setFilterRole(Qt::DisplayRole);
m_tableModel->setSourceModel(m_filterModel.data());
diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui
index a345438aed..2cc7c57ccd 100644
--- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui
+++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui
@@ -72,6 +72,22 @@
+ -
+
+
+ Qt::ClickFocus
+
+
+
+
+
+ 3
+
+
+
+
+
+
-
@@ -143,15 +159,6 @@
true
-
- false
-
-
- true
-
-
- false
-
-
diff --git a/Code/Editor/CMakeLists.txt b/Code/Editor/CMakeLists.txt
index 3358b49dce..9d74f8e3a2 100644
--- a/Code/Editor/CMakeLists.txt
+++ b/Code/Editor/CMakeLists.txt
@@ -63,7 +63,7 @@ ly_add_target(
set(pal_cmake_files "")
foreach(enabled_platform ${LY_PAL_TOOLS_ENABLED})
string(TOLOWER ${enabled_platform} enabled_platform_lowercase)
- ly_get_list_relative_pal_filename(pal_cmake_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${enabled_platform})
+ o3de_pal_dir(pal_cmake_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${enabled_platform} ${O3DE_ENGINE_RESTRICTED_PATH} ${LY_ROOT_FOLDER})
list(APPEND pal_cmake_files ${pal_cmake_dir}/editor_lib_${enabled_platform_lowercase}_files.cmake)
endforeach()
diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp
index 8ff83dd894..9609fb5014 100644
--- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp
+++ b/Code/Editor/Controls/ReflectedPropertyControl/PropertyGenericCtrl.cpp
@@ -24,7 +24,6 @@
// Editor
#include "SelectLightAnimationDialog.h"
#include "SelectSequenceDialog.h"
-#include "SelectEAXPresetDlg.h"
#include "QtViewPaneManager.h"
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
diff --git a/Code/Editor/CrtDebug.cpp b/Code/Editor/CrtDebug.cpp
deleted file mode 100644
index f9335373da..0000000000
--- a/Code/Editor/CrtDebug.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#include "EditorDefs.h"
-
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-//#ifdef _CRTDBG_MAP_ALLOC
-#ifdef CRTDBG_MAP_ALLOC
-#pragma pack (push,1)
-#define nNoMansLandSize 4
-typedef struct MyCrtMemBlockHeader
-{
- struct MyCrtMemBlockHeader* pBlockHeaderNext;
- struct MyCrtMemBlockHeader* pBlockHeaderPrev;
- char* szFileName;
- int nLine;
- size_t nDataSize;
- int nBlockUse;
- long lRequest;
- unsigned char gap[nNoMansLandSize];
- /* followed by:
- * unsigned char data[nDataSize];
- * unsigned char anotherGap[nNoMansLandSize];
- */
-} MyCrtMemBlockHeader;
-#pragma pack (pop)
-
-#define pbData(pblock) ((unsigned char*)((MyCrtMemBlockHeader*)pblock + 1))
-#define pHdr(pbData) (((MyCrtMemBlockHeader*)pbData) - 1)
-
-
-void crtdebug(const char* s, ...)
-{
- char str[32768];
- va_list arg_ptr;
- va_start(arg_ptr, s);
- vsprintf(str, s, arg_ptr);
- va_end(arg_ptr);
-
- FILE* l = nullptr;
- azfopen(&l, "crtdump.txt", "a+t");
- if (l)
- {
- fprintf(l, "%s", str);
- fclose(l);
- }
-}
-
-int crtAllocHook(int nAllocType, void* pvData,
- size_t nSize, int nBlockUse, long lRequest,
- const unsigned char* szFileName, int nLine)
-{
- if (nBlockUse == _CRT_BLOCK)
- {
- return TRUE;
- }
-
- static int total_cnt = 0;
- static int total_mem = 0;
- if (nAllocType == _HOOK_ALLOC)
- {
- //total_mem += nSize;
- //total_cnt++;
- //_CrtMemState mem_state;
- //_CrtMemCheckpoint( &mem_state );
- //total_cnt = mem_state.lCounts[_NORMAL_BLOCK];
- //total_mem = mem_state.lTotalCount;
- if ((total_cnt & 0xF) == 0)
- {
- //_CrtCheckMemory();
- }
-
- total_cnt++;
- total_mem += nSize;
-
- //crtdebug( " Alloc %d,size=%d,in: %s %d (total size=%d,num=%d)\n",lRequest,nSize,szFileName,nLine,total_mem,total_cnt );
- crtdebug("Size=%d, [Total=%d,N=%d] [%s:%d]\n", nSize, total_mem, total_cnt, szFileName, nLine);
- }
- else if (nAllocType == _HOOK_FREE)
- {
- MyCrtMemBlockHeader* pHead;
- pHead = pHdr(pvData);
-
- total_cnt--;
- total_mem -= pHead->nDataSize;
-
- crtdebug("Size=%d, [Total=%d,N=%d] [%s:%d]\n", pHead->nDataSize, total_mem, total_cnt, pHead->szFileName, pHead->nLine);
- //crtdebug( " Free size=%d,in: %s %d (total size=%d,num=%d)\n",pHead->nDataSize,pHead->szFileName,pHead->nLine,total_mem,total_cnt );
- //total_mem -= nSize;
- //total_cnt--;
- }
- return TRUE;
-}
-
-int crtReportHook(int nRptType, char* szMsg, int* retVal)
-{
- static int gl_num_asserts = 0;
- if (gl_num_asserts != 0)
- {
- return TRUE;
- }
- gl_num_asserts++;
- switch (nRptType)
- {
- case _CRT_WARN:
- crtdebug(" %s\n", szMsg);
- break;
- case _CRT_ERROR:
- crtdebug(" %s\n", szMsg);
- break;
- case _CRT_ASSERT:
- crtdebug(" %s\n", szMsg);
- break;
- }
- gl_num_asserts--;
- return TRUE;
-}
-
-void InitCrt()
-{
- FILE* l = nullptr;
- azfopen(&l, "crtdump.txt", "w");
- if (l)
- {
- fclose(l);
- }
-
- //_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_DEBUG );
- //_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );
- //_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_DEBUG );
-
- _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW);
- _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
- _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW);
-
- //_CrtSetDbgFlag( _CRTDBG_CHECK_ALWAYS_DF|_CRTDBG_CHECK_CRT_DF|_CRTDBG_LEAK_CHECK_DF|_CRTDBG_DELAY_FREE_MEM_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) );
- //_CrtSetDbgFlag( _CRTDBG_CHECK_CRT_DF|_CRTDBG_LEAK_CHECK_DF/*|_CRTDBG_DELAY_FREE_MEM_DF*/ | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) );
- int flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
- flags &= ~_CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_CRT_DF;
-
- _CrtSetDbgFlag(flags);
-
- _CrtSetAllocHook (crtAllocHook);
- _CrtSetReportHook(crtReportHook);
-}
-
-void DoneCrt()
-{
- //_CrtCheckMemory();
- //_CrtDumpMemoryLeaks();
-}
-
-// Autoinit CRT.
-//struct __autoinit_crt { __autoinit_crt() { InitCrt(); }; ~__autoinit_crt() { DoneCrt(); } } __autoinit_crt_var;
-#endif
-
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp
index 77099761c1..3beaf4d438 100644
--- a/Code/Editor/CryEdit.cpp
+++ b/Code/Editor/CryEdit.cpp
@@ -124,9 +124,6 @@ AZ_POP_DISABLE_WARNING
#include "ScopedVariableSetter.h"
#include "Util/3DConnexionDriver.h"
-
-#include "DimensionsDialog.h"
-
#include "Util/AutoDirectoryRestoreFileDialog.h"
#include "Util/EditorAutoLevelLoadTest.h"
#include "AboutDialog.h"
@@ -1352,8 +1349,27 @@ void CCryEditApp::CompileCriticalAssets() const
}
}
assetsInQueueNotifcation.BusDisconnect();
- CCryEditApp::OutputStartupMessage(QString("Asset Processor is now ready."));
+ // Signal the "CriticalAssetsCompiled" lifecycle event
+ // Also reload the "assetcatalog.xml" if it exists
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
+ {
+ AZ::ComponentApplicationLifecycle::SignalEvent(*settingsRegistry, "CriticalAssetsCompiled", R"({})");
+ // Reload the assetcatalog.xml at this point again
+ // Start Monitoring Asset changes over the network and load the AssetCatalog
+ auto LoadCatalog = [settingsRegistry](AZ::Data::AssetCatalogRequests* assetCatalogRequests)
+ {
+ if (AZ::IO::FixedMaxPath assetCatalogPath;
+ settingsRegistry->Get(assetCatalogPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder))
+ {
+ assetCatalogPath /= "assetcatalog.xml";
+ assetCatalogRequests->LoadCatalog(assetCatalogPath.c_str());
+ }
+ };
+ AZ::Data::AssetCatalogRequestBus::Broadcast(AZStd::move(LoadCatalog));
+ }
+
+ CCryEditApp::OutputStartupMessage(QString("Asset Processor is now ready."));
}
bool CCryEditApp::ConnectToAssetProcessor() const
@@ -1669,7 +1685,7 @@ bool CCryEditApp::InitInstance()
return false;
}
- if (AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get())
+ if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
{
AZ::ComponentApplicationLifecycle::SignalEvent(*settingsRegistry, "LegacySystemInterfaceCreated", R"({})");
}
@@ -1787,12 +1803,6 @@ bool CCryEditApp::InitInstance()
InitLevel(cmdInfo);
});
-#ifdef USE_WIP_FEATURES_MANAGER
- // load the WIP features file
- CWipFeatureManager::Instance()->EnableManager(!cmdInfo.m_bDeveloperMode);
- CWipFeatureManager::Init();
-#endif
-
if (!m_bConsoleMode && !m_bPreviewMode)
{
GetIEditor()->UpdateViews();
@@ -2123,13 +2133,6 @@ int CCryEditApp::ExitInstance(int exitCode)
}
qobject_cast(qApp)->UnloadSettings();
- #ifdef USE_WIP_FEATURES_MANAGER
- //
- // close wip features manager
- //
- CWipFeatureManager::Shutdown();
- #endif
-
if (IsInRegularEditorMode())
{
if (GetIEditor())
diff --git a/Code/Editor/CryEdit.h b/Code/Editor/CryEdit.h
index 97fcde8f34..48f362003c 100644
--- a/Code/Editor/CryEdit.h
+++ b/Code/Editor/CryEdit.h
@@ -14,7 +14,6 @@
#if !defined(Q_MOC_RUN)
#include
#include
-#include "WipFeatureManager.h"
#include "CryEditDoc.h"
#include "ViewPane.h"
diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp
index 3bcba4d5e0..9d93fd5f5b 100644
--- a/Code/Editor/CryEditDoc.cpp
+++ b/Code/Editor/CryEditDoc.cpp
@@ -45,7 +45,6 @@
#include "ActionManager.h"
#include "Include/IObjectManager.h"
#include "ErrorReportDialog.h"
-#include "SurfaceTypeValidator.h"
#include "Util/AutoLogTime.h"
#include "CheckOutDialog.h"
#include "GameExporter.h"
@@ -99,8 +98,7 @@ namespace Internal
// CCryEditDoc construction/destruction
CCryEditDoc::CCryEditDoc()
- : doc_validate_surface_types(nullptr)
- , m_modifiedModuleFlags(eModifiedNothing)
+ : m_modifiedModuleFlags(eModifiedNothing)
{
////////////////////////////////////////////////////////////////////////
// Set member variables to initial values
@@ -120,7 +118,6 @@ CCryEditDoc::CCryEditDoc()
GetIEditor()->SetDocument(this);
CLogFile::WriteLine("Document created");
- RegisterConsoleVariables();
MainWindow::instance()->GetActionManager()->RegisterActionHandler(ID_FILE_SAVE_AS, this, &CCryEditDoc::OnFileSaveAs);
bool isPrefabSystemEnabled = false;
@@ -459,8 +456,6 @@ void CCryEditDoc::Load(TDocMultiArchive& arrXmlAr, const QString& szFilename)
}
}
- CSurfaceTypeValidator().Validate();
-
LogLoadTime(GetTickCount() - t0);
// Loaded with success, remove event from log file
GetIEditor()->GetSettingsManager()->UnregisterEvent(loadEvent);
@@ -1910,25 +1905,6 @@ void CCryEditDoc::SetDocumentReady(bool bReady)
m_bDocumentReady = bReady;
}
-void CCryEditDoc::RegisterConsoleVariables()
-{
- doc_validate_surface_types = gEnv->pConsole->GetCVar("doc_validate_surface_types");
-
- if (!doc_validate_surface_types)
- {
- doc_validate_surface_types = REGISTER_INT_CB("doc_validate_surface_types", 0, 0,
- "Flag indicating whether icons are displayed on the animation graph.\n"
- "Default is 1.\n",
- OnValidateSurfaceTypesChanged);
- }
-}
-
-void CCryEditDoc::OnValidateSurfaceTypesChanged(ICVar*)
-{
- CErrorsRecorder errorsRecorder(GetIEditor());
- CSurfaceTypeValidator().Validate();
-}
-
void CCryEditDoc::OnStartLevelResourceList()
{
// after loading another level we clear the RFOM_Level list, the first time the list should be empty
diff --git a/Code/Editor/CryEditDoc.h b/Code/Editor/CryEditDoc.h
index f7e97d308e..5d20bddf45 100644
--- a/Code/Editor/CryEditDoc.h
+++ b/Code/Editor/CryEditDoc.h
@@ -176,9 +176,7 @@ protected:
virtual void OnFileSaveAs();
//! called immediately after saving the level.
void AfterSave();
- void RegisterConsoleVariables();
void OnStartLevelResourceList();
- static void OnValidateSurfaceTypesChanged(ICVar*);
QString GetCryIndexPath(const char* levelFilePath) const;
@@ -194,7 +192,6 @@ protected:
XmlNodeRef m_environmentTemplate;
std::list m_listeners;
bool m_bDocumentReady = false;
- ICVar* doc_validate_surface_types = nullptr;
int m_modifiedModuleFlags;
// On construction, it assumes loaded levels have already been exported. Can be a big fat lie, though.
// The right way would require us to save to the level folder the export status of the level.
diff --git a/Code/Editor/CryEditLiveCreate.rc b/Code/Editor/CryEditLiveCreate.rc
deleted file mode 100644
index 3dac96d682..0000000000
--- a/Code/Editor/CryEditLiveCreate.rc
+++ /dev/null
@@ -1,213 +0,0 @@
-ÿþ// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "winres.h"
-#include "resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (United States) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""winres.h""\r\n"
- "#include ""resource.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_MENU_LIVECREATE MENU
-BEGIN
- POPUP "&File"
- BEGIN
- MENUITEM "Save settings", ID_FILE_SAVESETTINGS
- MENUITEM "Close", ID_FILE_CLOSE_LIVECREATE_VIEW
- END
- POPUP "&View"
- BEGIN
- MENUITEM "LiveCreate Logger", ID_VIEW_LIVECREATELOGGER, CHECKED
- MENUITEM "LiveCreate Profile Editor", ID_VIEW_LIVECREATEPROFILEEDITOR, CHECKED
- MENUITEM "LiveCreate File Sync Settings", ID_VIEW_LIVECREATEFILESYNCSETTINGS, CHECKED
- END
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_LIVECREATE_PICKER DIALOGEX 0, 0, 316, 259
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Select game build directory"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,200,238,50,14
- PUSHBUTTON "Cancel",IDCANCEL,259,238,50,14
- CONTROL "",IDC_DIRECTORY_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,7,302,227
-END
-
-IDD_LIVECREATE_ADD_TARGETS DIALOGEX 0, 0, 500, 400
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Discover LiveCreate targets"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- PUSHBUTTON "Refresh",IDC_REFRESH,8,8,70,18
- PUSHBUTTON "Add custom...",IDC_BUTTON_ADD_PEER,82,8,70,18
- CONTROL "Use wider search (broadcast)",IDC_CHECK_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,12,200,10
- CONTROL "",IDC_LIST_PEERS,"XTPReport",WS_TABSTOP,8,32,484,342,WS_EX_STATICEDGE
- DEFPUSHBUTTON "Use selected",IDOK,180,379,70,18
- PUSHBUTTON "Cancel",IDCANCEL,259,379,70,18
- PUSHBUTTON "Add by IP...",IDC_BUTTON_ADD_MATERIAL,157,8,70,18
-END
-
-IDD_LIVECREATE_PEER_LIST DIALOGEX 0, 0, 395, 213
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_SYSMENU
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "Peers:",IDC_STATIC,17,27,22,8
- PUSHBUTTON "Add...",IDC_BUTTON_ADD_PEER,56,24,56,16
- PUSHBUTTON "Edit...",IDC_BUTTON_EDIT_PEER,116,24,56,16
- PUSHBUTTON "Remove",IDC_BUTTON_DELETE_PEER,176,24,52,16
- DEFPUSHBUTTON "Start All",IDC_BUTTON_START_ALL,4,4,48,16
- PUSHBUTTON "Reset All",IDC_BUTTON_RESET_ALL,176,4,52,16
- PUSHBUTTON "Force Sync All",IDC_BUTTON_FORCE_SYNC_ALL,56,4,56,16
- PUSHBUTTON "Clean All",IDC_BUTTON_CLEAN_ALL,232,4,52,16
- PUSHBUTTON "Screenshot All",IDC_BUTTON_SCREENSHOT_ALL,116,4,56,16
- CONTROL "",IDC_LIST_PEERS,"XTPReport",WS_TABSTOP,4,44,386,164,WS_EX_STATICEDGE
- CHECKBOX "LiveCreate",IDC_BUTTON_ENABLE_LIVECREATE,288,4,52,36,BS_PUSHLIKE | BS_MULTILINE
- CHECKBOX "Sync\nCamera",IDC_BUTTON_CAMERA_SYNC,345,4,52,36,BS_PUSHLIKE | BS_MULTILINE
- PUSHBUTTON "Discover",IDC_BUTTON_DISCOVER_PEERS,232,24,52,16
-END
-
-IDD_IDD_LIVECREATE_SETTINGS_PANEL DIALOGEX 0, 0, 156, 204
-STYLE DS_SETFONT | WS_CHILD
-FONT 8, "MS Shell Dlg 2", 400, 0, 0x1
-BEGIN
- PUSHBUTTON "Add targets...",IDC_BUTTON_DISCOVER_PEERS,4,4,80,16
-END
-
-IDD_LIVECREATE_EDIT_CONNECTION DIALOGEX 0, 0, 288, 183
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "LiveCreate host settings"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,158,154,58,20
- PUSHBUTTON "Cancel",IDCANCEL,221,154,58,20
- LTEXT "Name:",IDC_STATIC,16,46,22,8
- EDITTEXT IDC_EDIT_TARGET_NAME,44,44,100,14,ES_AUTOHSCROLL
- LTEXT "IP:",IDC_STATIC,152,46,10,8
- CONTROL "",IDC_TARGET_IPADDRESS,"SysIPAddress32",WS_TABSTOP,168,44,100,15
- LTEXT "Platform:",IDC_STATIC,8,26,30,8
- LTEXT "Build path (automatic):",IDC_STATIC,19,120,74,8
- PUSHBUTTON "Test IP",IDC_BUTTON_TEST_CONNECTION,168,60,100,16
- COMBOBOX IDC_COMBO_PLATFORM,44,24,100,88,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Resovle name to IP",IDC_BUTTON_REFRESH_IP,44,60,100,16
- CONTROL "Enable this peer",IDC_CHECK_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,67,10
- GROUPBOX "Build settings",IDC_STATIC,7,80,272,71
- LTEXT "Build executable:",IDC_STATIC,19,92,56,8
- PUSHBUTTON "...",IDC_BUTTON_PICK_GAME_DIRECTORY,249,104,22,14
- EDITTEXT IDC_EDIT_BUILD_ROOT_PATH,20,104,226,14,ES_AUTOHSCROLL
- EDITTEXT IDC_EDIT_BUILD_EXECUTABLE,20,131,249,14,ES_AUTOHSCROLL
-END
-
-IDD_LIVECREATE_TASK_WAIT DIALOGEX 0, 0, 238, 41
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Dialog"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- PUSHBUTTON "Cancel",IDCANCEL,94,20,50,14
- LTEXT "Static",IDC_TASK_PROGRESS_TEXT,7,7,224,8
-END
-
-IDD_LIVECREATE_ADD_BY_IP DIALOGEX 0, 0, 137, 75
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Add LiveCreate by IP"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,7,48,58,20
- PUSHBUTTON "Cancel",IDCANCEL,71,48,58,20
- LTEXT "IP:",-1,9,12,10,8
- EDITTEXT IDC_TARGET_IPADDRESS,25,10,100,15,WS_TABSTOP
- PUSHBUTTON "Test IP",IDC_BUTTON_TEST_CONNECTION,25,27,100,16
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_LIVECREATE_ADD_TARGETS, DIALOG
- BEGIN
- END
-
- IDD_LIVECREATE_EDIT_CONNECTION, DIALOG
- BEGIN
- END
-
- IDD_LIVECREATE_TASK_WAIT, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 231
- TOPMARGIN, 7
- BOTTOMMARGIN, 34
- END
-
- IDD_LIVECREATE_ADD_BY_IP, DIALOG
- BEGIN
- END
-END
-#endif // APSTUDIO_INVOKED
-
-#endif // English (United States) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
\ No newline at end of file
diff --git a/Code/Editor/DimensionsDialog.cpp b/Code/Editor/DimensionsDialog.cpp
deleted file mode 100644
index 6c8e6a616b..0000000000
--- a/Code/Editor/DimensionsDialog.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#include "EditorDefs.h"
-
-#include "DimensionsDialog.h"
-
-// Qt
-#include
-
-AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
-#include
-AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-CDimensionsDialog::CDimensionsDialog(QWidget* pParent /*=nullptr*/)
- : QDialog(pParent)
- , m_group(new QButtonGroup(this))
- , ui(new Ui::CDimensionsDialog)
-{
- ui->setupUi(this);
-
- setWindowTitle(tr("Generate Terrain Texture"));
-
- m_group->addButton(ui->Dim512, 512);
- m_group->addButton(ui->Dim1024, 1024);
- m_group->addButton(ui->Dim2048, 2048);
- m_group->addButton(ui->Dim4096, 4096);
- m_group->addButton(ui->Dim8192, 8192);
- m_group->addButton(ui->Dim16384, 16384);
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-CDimensionsDialog::~CDimensionsDialog()
-{
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CDimensionsDialog::SetDimensions(unsigned int iWidth)
-{
- ////////////////////////////////////////////////////////////////////////
- // Select a dimension option button in the dialog
- ////////////////////////////////////////////////////////////////////////
-
- QAbstractButton* button = m_group->button(iWidth);
- assert(button);
-
- button->setChecked(true);
-}
-
-UINT CDimensionsDialog::GetDimensions()
-{
- ////////////////////////////////////////////////////////////////////////
- // Get the currently selected dimension option button in the dialog
- ////////////////////////////////////////////////////////////////////////
-
- assert(m_group->checkedId() != -1);
-
- return m_group->checkedId();
-}
-
-#include
diff --git a/Code/Editor/DimensionsDialog.h b/Code/Editor/DimensionsDialog.h
deleted file mode 100644
index b94c58bf95..0000000000
--- a/Code/Editor/DimensionsDialog.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#pragma once
-#ifndef CRYINCLUDE_EDITOR_DIMENSIONSDIALOG_H
-#define CRYINCLUDE_EDITOR_DIMENSIONSDIALOG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-
-#include
-#endif
-
-class QButtonGroup;
-
-namespace Ui {
- class CDimensionsDialog;
-}
-
-class CDimensionsDialog
- : public QDialog
-{
- Q_OBJECT
-
-public:
- CDimensionsDialog(QWidget* pParent = nullptr); // standard constructor
- ~CDimensionsDialog();
-
- UINT GetDimensions();
- void SetDimensions(unsigned int iWidth);
-
-protected:
- void UpdateData(bool fromUi = true); // DDX/DDV support
-
-private:
- QButtonGroup* m_group;
-
- QScopedPointer ui;
-};
-
-#endif // CRYINCLUDE_EDITOR_DIMENSIONSDIALOG_H
diff --git a/Code/Editor/DimensionsDialog.ui b/Code/Editor/DimensionsDialog.ui
deleted file mode 100644
index 316a060c92..0000000000
--- a/Code/Editor/DimensionsDialog.ui
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
- CDimensionsDialog
-
-
-
- 0
- 0
- 465
- 237
-
-
-
- Qt::StrongFocus
-
-
-
-
-
-
- Texture Dimensions (Texture Dimensions divided by Terrain Size = Texels per meter)
-
-
-
-
-
-
- Qt::StrongFocus
-
-
- 512 x 512
-
-
- true
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 1024 x 1024
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 2048 x 2048
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 4096 x 4096
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 8192 x 8192
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- 16384 x 16384
-
-
-
-
-
-
- -
-
-
- Qt::StrongFocus
-
-
- QDialogButtonBox::Ok
-
-
-
-
-
-
-
-
- buttonBox
- accepted()
- CDimensionsDialog
- accept()
-
-
- 77
- 294
-
-
- 7
- 296
-
-
-
-
-
diff --git a/Code/Editor/EditorPreferencesDialog.cpp b/Code/Editor/EditorPreferencesDialog.cpp
index 665daf52a8..42f7446716 100644
--- a/Code/Editor/EditorPreferencesDialog.cpp
+++ b/Code/Editor/EditorPreferencesDialog.cpp
@@ -112,29 +112,31 @@ void EditorPreferencesDialog::showEvent(QShowEvent* event)
QDialog::showEvent(event);
}
-void WidgetHandleKeyPressEvent(QWidget* widget, QKeyEvent* event)
+bool WidgetConsumesKeyPressEvent(QKeyEvent* event)
{
// If the enter key is pressed during any text input, the dialog box will close
// making it inconvenient to do multiple edits. This routine captures the
// Key_Enter or Key_Return and clears the focus to give a visible cue that
- // editing of that field has finished and then doesn't propogate it.
+ // editing of that field has finished and then doesn't propagate it.
if (event->key() != Qt::Key::Key_Enter && event->key() != Qt::Key::Key_Return)
{
- QApplication::sendEvent(widget, event);
+ return false;
}
- else
+
+ if (QWidget* editWidget = QApplication::focusWidget())
{
- if (QWidget* editWidget = QApplication::focusWidget())
- {
- editWidget->clearFocus();
- }
+ editWidget->clearFocus();
}
-}
+ return true;
+}
void EditorPreferencesDialog::keyPressEvent(QKeyEvent* event)
{
- WidgetHandleKeyPressEvent(this, event);
+ if (!WidgetConsumesKeyPressEvent(event))
+ {
+ QDialog::keyPressEvent(event);
+ }
}
void EditorPreferencesDialog::OnTreeCurrentItemChanged()
diff --git a/Code/Editor/EditorPreferencesDialog.h b/Code/Editor/EditorPreferencesDialog.h
index a3f05ad00d..70a186375b 100644
--- a/Code/Editor/EditorPreferencesDialog.h
+++ b/Code/Editor/EditorPreferencesDialog.h
@@ -19,7 +19,7 @@ namespace Ui
class EditorPreferencesTreeWidgetItem;
-void WidgetHandleKeyPressEvent(QWidget* widget, QKeyEvent* event);
+bool WidgetConsumesKeyPressEvent(QKeyEvent* event);
class EditorPreferencesDialog
: public QDialog
diff --git a/Code/Editor/EditorPreferencesPageViewportGeneral.cpp b/Code/Editor/EditorPreferencesPageViewportGeneral.cpp
index 77560e24f8..f33cc3f725 100644
--- a/Code/Editor/EditorPreferencesPageViewportGeneral.cpp
+++ b/Code/Editor/EditorPreferencesPageViewportGeneral.cpp
@@ -41,8 +41,6 @@ void CEditorPreferencesPage_ViewportGeneral::Reflect(AZ::SerializeContext& seria
->Field("ShowBBoxes", &Display::m_showBBoxes)
->Field("DrawEntityLabels", &Display::m_drawEntityLabels)
->Field("ShowTriggerBounds", &Display::m_showTriggerBounds)
- ->Field("ShowIcons", &Display::m_showIcons)
- ->Field("DistanceScaleIcons", &Display::m_distanceScaleIcons)
->Field("ShowFrozenHelpers", &Display::m_showFrozenHelpers)
->Field("FillSelectedShapes", &Display::m_fillSelectedShapes)
->Field("ShowGridGuide", &Display::m_showGridGuide)
@@ -118,10 +116,6 @@ void CEditorPreferencesPage_ViewportGeneral::Reflect(AZ::SerializeContext& seria
AZ::Edit::UIHandlers::CheckBox, &Display::m_drawEntityLabels, "Always Draw Entity Labels", "Always Draw Entity Labels")
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &Display::m_showTriggerBounds, "Always Show Trigger Bounds", "Always Show Trigger Bounds")
- ->DataElement(AZ::Edit::UIHandlers::CheckBox, &Display::m_showIcons, "Show Object Icons", "Show Object Icons")
- ->DataElement(
- AZ::Edit::UIHandlers::CheckBox, &Display::m_distanceScaleIcons, "Scale Object Icons with Distance",
- "Scale Object Icons with Distance")
->DataElement(
AZ::Edit::UIHandlers::CheckBox, &Display::m_showFrozenHelpers, "Show Helpers of Frozen Objects",
"Show Helpers of Frozen Objects")
@@ -244,8 +238,6 @@ void CEditorPreferencesPage_ViewportGeneral::OnApply()
}
gSettings.viewports.bDrawEntityLabels = m_display.m_drawEntityLabels;
gSettings.viewports.bShowTriggerBounds = m_display.m_showTriggerBounds;
- gSettings.viewports.bShowIcons = m_display.m_showIcons;
- gSettings.viewports.bDistanceScaleIcons = m_display.m_distanceScaleIcons;
gSettings.viewports.nShowFrozenHelpers = m_display.m_showFrozenHelpers;
gSettings.viewports.bFillSelectedShapes = m_display.m_fillSelectedShapes;
gSettings.viewports.bShowGridGuide = m_display.m_showGridGuide;
@@ -300,8 +292,6 @@ void CEditorPreferencesPage_ViewportGeneral::InitializeSettings()
m_display.m_showBBoxes = (ds->GetRenderFlags() & RENDER_FLAG_BBOX) == RENDER_FLAG_BBOX;
m_display.m_drawEntityLabels = gSettings.viewports.bDrawEntityLabels;
m_display.m_showTriggerBounds = gSettings.viewports.bShowTriggerBounds;
- m_display.m_showIcons = gSettings.viewports.bShowIcons;
- m_display.m_distanceScaleIcons = gSettings.viewports.bDistanceScaleIcons;
m_display.m_showFrozenHelpers = gSettings.viewports.nShowFrozenHelpers;
m_display.m_fillSelectedShapes = gSettings.viewports.bFillSelectedShapes;
m_display.m_showGridGuide = gSettings.viewports.bShowGridGuide;
diff --git a/Code/Editor/EditorPreferencesPageViewportGeneral.h b/Code/Editor/EditorPreferencesPageViewportGeneral.h
index be89cc6df4..2d2a207d6c 100644
--- a/Code/Editor/EditorPreferencesPageViewportGeneral.h
+++ b/Code/Editor/EditorPreferencesPageViewportGeneral.h
@@ -62,8 +62,6 @@ private:
bool m_showBBoxes;
bool m_drawEntityLabels;
bool m_showTriggerBounds;
- bool m_showIcons;
- bool m_distanceScaleIcons;
bool m_showFrozenHelpers;
bool m_fillSelectedShapes;
bool m_showGridGuide;
diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp
index 754ea84544..a8180bcace 100644
--- a/Code/Editor/EditorViewportWidget.cpp
+++ b/Code/Editor/EditorViewportWidget.cpp
@@ -454,9 +454,6 @@ void EditorViewportWidget::Update()
// Render
{
- // TODO: Move out this logic to a controller and refactor to work with Atom
- ProcessRenderLisneters(m_displayContext);
-
m_displayContext.Flush2D();
// Post Render Callback
@@ -585,11 +582,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
case eNotify_OnCloseScene:
m_renderViewport->SetScene(nullptr);
- SetDefaultCamera();
break;
case eNotify_OnEndSceneOpen:
UpdateScene();
+ SetDefaultCamera();
break;
case eNotify_OnBeginNewScene:
@@ -1030,8 +1027,6 @@ void EditorViewportWidget::OnTitleMenu(QMenu* menu)
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Safe Frame"), &gSettings.viewports.bShowSafeFrame);
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Construction Plane"), &gSettings.snap.constructPlaneDisplay);
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Trigger Bounds"), &gSettings.viewports.bShowTriggerBounds);
- AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Icons"), &gSettings.viewports.bShowIcons, &gSettings.viewports.bShowSizeBasedIcons);
- AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Size-based Icons"), &gSettings.viewports.bShowSizeBasedIcons, &gSettings.viewports.bShowIcons);
AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Helpers of Frozen Objects"), &gSettings.viewports.nShowFrozenHelpers);
if (!m_predefinedAspectRatios.IsEmpty())
diff --git a/Code/Editor/GameEngine.cpp b/Code/Editor/GameEngine.cpp
index db4c587f54..9786dcf1b8 100644
--- a/Code/Editor/GameEngine.cpp
+++ b/Code/Editor/GameEngine.cpp
@@ -42,8 +42,6 @@
#include "ViewManager.h"
#include "AnimationContext.h"
-#include "UndoViewPosition.h"
-#include "UndoViewRotation.h"
#include "MainWindow.h"
#include "Include/IObjectManager.h"
#include "ActionManager.h"
diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h
index c91ca62c5e..90f1b63f55 100644
--- a/Code/Editor/IEditor.h
+++ b/Code/Editor/IEditor.h
@@ -52,7 +52,6 @@ class CUIEnumsDatabase;
struct ISourceControl;
struct IEditorClassFactory;
struct ITransformManipulator;
-class IFacialEditor;
class CDialog;
#if defined(AZ_PLATFORM_WINDOWS)
class C3DConnexionDriver;
diff --git a/Code/Editor/Include/IConsoleConnectivity.h b/Code/Editor/Include/IConsoleConnectivity.h
deleted file mode 100644
index 0f5e9bf35c..0000000000
--- a/Code/Editor/Include/IConsoleConnectivity.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-// Description : Standard interface for console connectivity plugins.
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_ICONSOLECONNECTIVITY_H
-#define CRYINCLUDE_EDITOR_INCLUDE_ICONSOLECONNECTIVITY_H
-#pragma once
-
-
-//////////////////////////////////////////////////////////////////////////
-// Description
-// This interface provide access to the console connectivity
-// functionality.
-//////////////////////////////////////////////////////////////////////////
-struct IConsoleConnectivity
- : public IUnknown
-{
- DEFINE_UUID(0x4DAA85E1, 0x8498, 0x402f, 0x9B, 0x85, 0x7F, 0x62, 0x9D, 0x76, 0x79, 0x8A);
-
- //////////////////////////////////////////////////////////////////////////
- //TODO: Must add the useful interface here.
- //////////////////////////////////////////////////////////////////////////
-
- // Description:
- // Checks if a development console is connected to the development PC.
- // See Also:
- // Arguments:
- // Nothing
- // Return:
- // bool - true if it is connected, false otherwise.
- virtual bool IsConnectedToConsole() = 0;
-
- // Description:
- // Send a file from the specified local filename to the console platform creating the full path
- // as required so it can copy to the remote filename.
- // See Also:
- // Nothing
- // Arguments:
- // szLocalFileName - is the local filename from which you want to copy the file.
- // szRemoteFilename - is the full path and filename to where you want to copy the file.
- // Return:
- // bool - true if the copy succeeded, false otherwise.
- virtual bool SendFile(const char* szLocalFileName, const char* szRemoteFilename) = 0;
-
- // Description:
- // Notifies to the console that a file has been changed, typically uploaded.
- // This will be usually called after a SendFile (see above) call, so that the
- // system running on the console may decide what to do with this new file.
- // Typically the system will have to load or reloads this new file.
- // See Also:
- // SendFile
- // Arguments:
- // szRemoteFilename - is the full path and filename in the console of the changed
- // file.
- // Return:
- // bool - true if succeeded sending the notification, false otherwise.
- virtual bool NotifyFileChange(const char* szRemoteFilename) = 0;
-
-
- // Description:
- // Gets the the title IP for the connected console .
- // Arguments:
- // dwConsoleAddressPlaceholder - is the pointer to the placeholder of the variable
- // which will contain the title IP of the console.
- // Return:
- // bool - true if dwConsoleAddressPlaceholder now contains the IP address, else false.
- virtual bool GetConsoleAddress(DWORD* dwConsoleAddressPlaceholder) = 0;
- //////////////////////////////////////////////////////////////////////////
- // IUnknown
- //////////////////////////////////////////////////////////////////////////
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) { return E_NOINTERFACE; };
- virtual ULONG STDMETHODCALLTYPE AddRef() { return 0; };
- virtual ULONG STDMETHODCALLTYPE Release() { return 0; };
- //////////////////////////////////////////////////////////////////////////
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_ICONSOLECONNECTIVITY_H
diff --git a/Code/Editor/Include/IFacialEditor.h b/Code/Editor/Include/IFacialEditor.h
deleted file mode 100644
index 5dfa9ab03f..0000000000
--- a/Code/Editor/Include/IFacialEditor.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IFACIALEDITOR_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IFACIALEDITOR_H
-#pragma once
-
-
-class IFacialEditor
-{
-public:
- enum EyeType
- {
- EYE_LEFT,
- EYE_RIGHT
- };
-
- virtual int GetNumMorphTargets() const = 0;
- virtual const char* GetMorphTargetName(int index) const = 0;
- virtual void PreviewEffector(int index, float value) = 0;
- virtual void ClearAllPreviewEffectors() = 0;
- virtual void SetForcedNeckRotation(const Quat& rotation) = 0;
- virtual void SetForcedEyeRotation(const Quat& rotation, EyeType eye) = 0;
- virtual int GetJoystickCount() const = 0;
- virtual const char* GetJoystickName(int joystickIndex) const = 0;
- virtual void SetJoystickPosition(int joystickIndex, float x, float y) = 0;
- virtual void GetJoystickPosition(int joystickIndex, float& x, float& y) const = 0;
- virtual void LoadJoystickFile(const char* filename) = 0;
- virtual void LoadCharacter(const char* filename) = 0;
- virtual void LoadSequence(const char* filename) = 0;
- virtual void SetVideoFrameResolution(int width, int height, int bpp) = 0;
- virtual int GetVideoFramePitch() = 0;
- virtual void* GetVideoFrameBits() = 0;
- virtual void ShowVideoFramePane() = 0;
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IFACIALEDITOR_H
diff --git a/Code/Editor/Include/IRenderListener.h b/Code/Editor/Include/IRenderListener.h
deleted file mode 100644
index 892a42b701..0000000000
--- a/Code/Editor/Include/IRenderListener.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-// Description : Interface for rendering custom 3D elements in the main
-// render viewport. Particularly usefull for debug geometries.
-
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_IRENDERLISTENER_H
-#define CRYINCLUDE_EDITOR_INCLUDE_IRENDERLISTENER_H
-#pragma once
-
-
-struct DisplayContext;
-
-struct IRenderListener
- : public IUnknown
-{
- DEFINE_UUID(0x8D52F857, 0x1027, 0x4346, 0xAC, 0x7B, 0xF6, 0x20, 0xDA, 0x7C, 0xCE, 0x42)
-
- virtual void Render(DisplayContext& rDisplayContext) = 0;
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_IRENDERLISTENER_H
diff --git a/Code/Editor/Include/ITextureDatabaseUpdater.h b/Code/Editor/Include/ITextureDatabaseUpdater.h
deleted file mode 100644
index 4482135b47..0000000000
--- a/Code/Editor/Include/ITextureDatabaseUpdater.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-// Description : This file declares the interface used by the texture viewer
-// and (implemented first implemented by the Texture Database Creator) to
-// syncronize their threads. A thread interace could be useful there.
-
-#ifndef CRYINCLUDE_EDITOR_INCLUDE_ITEXTUREDATABASEUPDATER_H
-#define CRYINCLUDE_EDITOR_INCLUDE_ITEXTUREDATABASEUPDATER_H
-#pragma once
-
-
-class CTextureDatabaseItem;
-
-struct ITextureDatabaseUpdater
-{
-public:
- //////////////////////////////////////////////////////////////////////////
- // Thread control
- virtual void NotifyShutDown() = 0;
- virtual void Lock() = 0;
- virtual void Unlock() = 0;
- virtual void WaitForThread() = 0;
- //////////////////////////////////////////////////////////////////////////
-
- //////////////////////////////////////////////////////////////////////////
- // Data access
- virtual CTextureDatabaseItem* GetItem(const char* szAddItem) = 0;
- //////////////////////////////////////////////////////////////////////////
-};
-
-#endif // CRYINCLUDE_EDITOR_INCLUDE_ITEXTUREDATABASEUPDATER_H
diff --git a/Code/Editor/Include/SandboxAPI.h b/Code/Editor/Include/SandboxAPI.h
index 4e0cafea4a..757b799837 100644
--- a/Code/Editor/Include/SandboxAPI.h
+++ b/Code/Editor/Include/SandboxAPI.h
@@ -21,7 +21,7 @@
#endif
#if defined(SANDBOX_IMPORTS) && defined(SANDBOX_EXPORTS)
-#error SANDBOX_EXPORTS and SANDBOX_IMPORTS can't be defined at the same time
+#error SANDBOX_EXPORTS and SANDBOX_IMPORTS cannot be defined at the same time
#endif
#if defined(SANDBOX_EXPORTS)
diff --git a/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp b/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp
index fd65634d4e..b73cb039ea 100644
--- a/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp
+++ b/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp
@@ -35,6 +35,11 @@ namespace DisplaySettingsPythonBindingsUnitTests
m_app.Start(appDesc);
m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsPythonFuncsHandler::CreateDescriptor());
+
+ // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
+ // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
+ // in the unit tests.
+ AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
}
void TearDown() override
diff --git a/Code/Editor/MainWindow.qrc b/Code/Editor/MainWindow.qrc
index 4506a4a2a8..57afc596bb 100644
--- a/Code/Editor/MainWindow.qrc
+++ b/Code/Editor/MainWindow.qrc
@@ -154,37 +154,6 @@
res/error_report_warning.svg
res/error_report_comment.svg
res/error_report_helper.svg
- particles_tree_00.png
- particles_tree_01.png
- particles_tree_02.png
- particles_tree_03.png
- particles_tree_04.png
- particles_tree_05.png
- particles_tree_06.png
- particles_tree_07.png
- arhitype_tree_00.png
- arhitype_tree_01.png
- arhitype_tree_02.png
- arhitype_tree_03.png
- water.png
- bmp00005_00.png
- bmp00005_01.png
- bmp00005_02.png
- bmp00005_03.png
- bmp00005_04.png
- bmp00005_05.png
- bmp00005_06.png
- bmp00005_07.png
- bmp00005_08.png
- bmp00005_09.png
- bmp00006_00.png
- bmp00006_01.png
- bmp00006_02.png
- bmp00006_03.png
- bmp00006_04.png
- bmp00006_05.png
- bmp00006_06.png
- bmp00006_07.png
res/arr_addkey.cur
diff --git a/Code/Editor/NewLevelDialog.cpp b/Code/Editor/NewLevelDialog.cpp
index c773acdb6f..b22d9dbaf3 100644
--- a/Code/Editor/NewLevelDialog.cpp
+++ b/Code/Editor/NewLevelDialog.cpp
@@ -18,9 +18,6 @@
#include
#include
-// Editor
-#include "NewTerrainDialog.h"
-
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
#include
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
@@ -115,7 +112,6 @@ CNewLevelDialog::~CNewLevelDialog()
void CNewLevelDialog::OnStartup()
{
UpdateData(false);
- setFocus();
}
void CNewLevelDialog::UpdateData(bool fromUi)
diff --git a/Code/Editor/NewLevelDialog.ui b/Code/Editor/NewLevelDialog.ui
index 14227fbb53..93a88dc897 100644
--- a/Code/Editor/NewLevelDialog.ui
+++ b/Code/Editor/NewLevelDialog.ui
@@ -133,6 +133,9 @@
1
+
+ LEVEL
+
diff --git a/Code/Editor/NewTerrainDialog.cpp b/Code/Editor/NewTerrainDialog.cpp
deleted file mode 100644
index 0e66482eb4..0000000000
--- a/Code/Editor/NewTerrainDialog.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-// NewTerrainDialog.cpp : implementation file
-//
-
-#include "EditorDefs.h"
-
-#include "NewTerrainDialog.h"
-
-
-AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option")
-#include
-AZ_POP_DISABLE_WARNING
-
-
-
-CNewTerrainDialog::CNewTerrainDialog(QWidget* pParent /*=nullptr*/)
- : QDialog(pParent)
- , m_terrainResolutionIndex(0)
- , m_terrainUnitsIndex(0)
- , m_bUpdate(false)
- , ui(new Ui::CNewTerrainDialog)
- , m_initialized(false)
-{
- ui->setupUi(this);
-
- setWindowTitle(tr("Terrain options"));
-
- // Default is 1024x1024, and m_terrainResolution holds an index to the combo box
- m_terrainResolutionIndex = 3;
-
- connect(ui->TERRAIN_RESOLUTION, SIGNAL(activated(int)), this, SLOT(OnComboBoxSelectionTerrainResolution()));
- connect(ui->TERRAIN_UNITS, SIGNAL(activated(int)), this, SLOT(OnComboBoxSelectionTerrainUnits()));
-}
-
-
-CNewTerrainDialog::~CNewTerrainDialog()
-{
-}
-
-
-void CNewTerrainDialog::UpdateData(bool fromUi)
-{
- if (fromUi)
- {
- m_terrainResolutionIndex = ui->TERRAIN_RESOLUTION->currentIndex();
- m_terrainUnitsIndex = ui->TERRAIN_UNITS->currentIndex();
- }
- else
- {
- ui->TERRAIN_RESOLUTION->setCurrentIndex(m_terrainResolutionIndex);
- ui->TERRAIN_UNITS->setCurrentIndex(m_terrainUnitsIndex);
- }
-}
-
-
-void CNewTerrainDialog::OnInitDialog()
-{
- // Initialize terrain values.
- int resolution = Ui::START_TERRAIN_RESOLUTION;
-
- // Fill terrain resolution combo box
- for (int i = 0; i < 6; i++)
- {
- ui->TERRAIN_RESOLUTION->addItem(QString("%1x%1").arg(resolution));
- resolution *= 2;
- }
-
- UpdateTerrainUnits();
- UpdateTerrainInfo();
-
- // Save data.
- UpdateData(false);
-}
-
-
-void CNewTerrainDialog::UpdateTerrainUnits()
-{
- uint32 terrainRes = GetTerrainResolution();
- int size = terrainRes * GetTerrainUnits();
- int maxUnit = IntegerLog2(Ui::MAXIMUM_TERRAIN_RESOLUTION / terrainRes);
- int units = Ui::START_TERRAIN_UNITS;
-
- ui->TERRAIN_UNITS->clear();
- for (int i = 0; i <= maxUnit; i++)
- {
- ui->TERRAIN_UNITS->addItem(QString::number(units));
- units *= 2;
- }
- if (size > Ui::MAXIMUM_TERRAIN_RESOLUTION)
- {
- m_terrainUnitsIndex = 0;
- }
- ui->TERRAIN_UNITS->setCurrentText(QString::number(m_terrainUnitsIndex));
-}
-
-
-void CNewTerrainDialog::UpdateTerrainInfo()
-{
- int sizeX = GetTerrainResolution() * GetTerrainUnits();
- int sizeY = GetTerrainResolution() * GetTerrainUnits();
-
- QString str;
- if (sizeX >= 1000)
- {
- str = tr("Terrain Size: %1 x %2 Kilometers").arg((float)sizeX / 1000.0f, 0, 'f', 3).arg((float)sizeY / 1000.0f, 0, 'f', 3);
- }
- else if (sizeX > 0)
- {
- str = tr("Terrain Size: %1 x %2 Meters").arg(sizeX).arg(sizeY);
- }
- else
- {
- str = tr("Level will have no terrain");
- }
-
- ui->TERRAIN_INFO->setText(str);
-}
-
-
-int CNewTerrainDialog::GetTerrainResolution() const
-{
- // convert combo box index into resolution value
- return Ui::START_TERRAIN_RESOLUTION * (1 << m_terrainResolutionIndex);
-}
-
-
-int CNewTerrainDialog::GetTerrainUnits() const
-{
- // convert combo box index into units value
- return Ui::START_TERRAIN_UNITS * (1 << m_terrainUnitsIndex);
-}
-
-
-void CNewTerrainDialog::OnComboBoxSelectionTerrainResolution()
-{
- UpdateData();
-
- UpdateTerrainUnits();
-
- UpdateTerrainInfo();
-}
-
-
-void CNewTerrainDialog::OnComboBoxSelectionTerrainUnits()
-{
- UpdateData();
-
- UpdateTerrainInfo();
-}
-
-
-void CNewTerrainDialog::showEvent(QShowEvent* event)
-{
- if (!m_initialized)
- {
- OnInitDialog();
- m_initialized = true;
- }
- QDialog::showEvent(event);
-}
-
-#include
diff --git a/Code/Editor/NewTerrainDialog.h b/Code/Editor/NewTerrainDialog.h
deleted file mode 100644
index 8905a8c123..0000000000
--- a/Code/Editor/NewTerrainDialog.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-#pragma once
-#ifndef CRYINCLUDE_EDITOR_NEWTERRAINDIALOG_H
-#define CRYINCLUDE_EDITOR_NEWTERRAINDIALOG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-
-#include
-
-#include
-#endif
-
-namespace Ui
-{
- class CNewTerrainDialog;
-
- enum TerrainDialogConstants
- {
- START_TERRAIN_RESOLUTION_POWER_OF_TWO = 7,
- START_TERRAIN_RESOLUTION = 1 << START_TERRAIN_RESOLUTION_POWER_OF_TWO,
- MAXIMUM_TERRAIN_POWER_OF_TWO = 16,
- MAXIMUM_TERRAIN_RESOLUTION = 1 << MAXIMUM_TERRAIN_POWER_OF_TWO,
- POWER_OFFSET = (MAXIMUM_TERRAIN_POWER_OF_TWO - START_TERRAIN_RESOLUTION_POWER_OF_TWO),
- START_TERRAIN_UNITS = 1
- };
-}
-
-class CNewTerrainDialog
- : public QDialog
-{
- Q_OBJECT
-
-public:
- CNewTerrainDialog(QWidget* pParent = nullptr); // standard constructor
- ~CNewTerrainDialog();
-
- int GetTerrainResolution() const;
- int GetTerrainUnits() const;
-
- void IsResize(bool bIsResize);
-
-
-protected:
- void UpdateData(bool fromUi = true);
- void OnInitDialog();
-
- void UpdateTerrainUnits();
- void UpdateTerrainInfo();
-
- void showEvent(QShowEvent* event) override;
-
-protected slots:
- void OnComboBoxSelectionTerrainResolution();
- void OnComboBoxSelectionTerrainUnits();
-
-public:
- int m_terrainResolutionIndex;
- int m_terrainUnitsIndex;
- bool m_bUpdate;
-
- QScopedPointer ui;
- bool m_initialized;
-};
-#endif // CRYINCLUDE_EDITOR_NEWTERRAINDIALOG_H
diff --git a/Code/Editor/NewTerrainDialog.ui b/Code/Editor/NewTerrainDialog.ui
deleted file mode 100644
index 977db11918..0000000000
--- a/Code/Editor/NewTerrainDialog.ui
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
- CNewTerrainDialog
-
-
-
- 0
- 0
- 292
- 160
-
-
-
- false
-
-
- -
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
- -
-
-
-
- QFormLayout::AllNonFixedFieldsGrow
-
-
-
-
-
- Heightmap Resolution:
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
- TERRAIN_RESOLUTION
-
-
-
- -
-
-
- -
-
-
- Meters Per Texel:
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
- TERRAIN_UNITS
-
-
-
- -
-
-
- -
-
-
- Terrain Size: 32x32 Km
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
-
-
-
-
-
-
-
-
- buttonBox
- accepted()
- CNewTerrainDialog
- accept()
-
-
- 164
- 176
-
-
- 169
- 1
-
-
-
-
- buttonBox
- rejected()
- CNewTerrainDialog
- reject()
-
-
- 245
- 172
-
-
- 247
- -1
-
-
-
-
-
diff --git a/Code/Editor/Objects/BaseObject.cpp b/Code/Editor/Objects/BaseObject.cpp
index 86840789dd..c14547407b 100644
--- a/Code/Editor/Objects/BaseObject.cpp
+++ b/Code/Editor/Objects/BaseObject.cpp
@@ -36,12 +36,6 @@
// To use the Andrew's algorithm in order to make convex hull from the points, this header is needed.
#include "Util/GeometryUtil.h"
-namespace {
- QColor kLinkColorParent = QColor(0, 255, 255);
- QColor kLinkColorChild = QColor(0, 0, 255);
- QColor kLinkColorGray = QColor(128, 128, 128);
-}
-
extern CObjectManager* g_pObjectManager;
//////////////////////////////////////////////////////////////////////////
@@ -761,72 +755,6 @@ void CBaseObject::SetModified(bool)
{
}
-void CBaseObject::DrawDefault(DisplayContext& dc, const QColor& labelColor)
-{
- Vec3 wp = GetWorldPos();
-
- bool bDisplaySelectionHelper = false;
- if (!CanBeDrawn(dc, bDisplaySelectionHelper))
- {
- return;
- }
-
- // Draw link between parent and child.
- if (dc.flags & DISPLAY_LINKS)
- {
- if (GetParent())
- {
- dc.DrawLine(GetParentAttachPointWorldTM().GetTranslation(), wp, IsFrozen() ? kLinkColorGray : kLinkColorParent, IsFrozen() ? kLinkColorGray : kLinkColorChild);
- }
- size_t nChildCount = GetChildCount();
- for (size_t i = 0; i < nChildCount; ++i)
- {
- const CBaseObject* pChild = GetChild(i);
- dc.DrawLine(pChild->GetParentAttachPointWorldTM().GetTranslation(), pChild->GetWorldPos(), pChild->IsFrozen() ? kLinkColorGray : kLinkColorParent, pChild->IsFrozen() ? kLinkColorGray : kLinkColorChild);
- }
- }
-
- // Draw Bounding box
- if (dc.flags & DISPLAY_BBOX)
- {
- AABB box;
- GetBoundBox(box);
- dc.SetColor(Vec3(1, 1, 1));
- dc.DrawWireBox(box.min, box.max);
- }
-
- if (IsHighlighted())
- {
- DrawHighlight(dc);
- }
-
- if (IsSelected())
- {
- DrawArea(dc);
-
- CSelectionGroup* pSelection = GetObjectManager()->GetSelection();
-
- // If the number of selected object is over 2, the merged boundbox should be used to render the measurement axis.
- if (!pSelection || (pSelection && pSelection->GetCount() == 1))
- {
- DrawDimensions(dc);
- }
- }
-
- if (bDisplaySelectionHelper)
- {
- DrawSelectionHelper(dc, wp, labelColor, 1.0f);
- }
- else if (!(dc.flags & DISPLAY_HIDENAMES))
- {
- DrawLabel(dc, wp, labelColor);
- }
-
- SetDrawTextureIconProperties(dc, wp);
- DrawTextureIcon(dc, wp);
- DrawWarningIcons(dc, wp);
-}
-
//////////////////////////////////////////////////////////////////////////
void CBaseObject::DrawDimensions(DisplayContext&, AABB*)
{
@@ -850,91 +778,6 @@ void CBaseObject::DrawSelectionHelper(DisplayContext& dc, const Vec3& pos, const
dc.SetState(nPrevState);
}
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::SetDrawTextureIconProperties(DisplayContext& dc, const Vec3& pos, float alpha, int texIconFlags)
-{
- if (gSettings.viewports.bShowIcons || gSettings.viewports.bShowSizeBasedIcons)
- {
- if (IsHighlighted())
- {
- dc.SetColor(QColor(255, 120, 0), 0.8f * alpha);
- }
- else if (IsSelected())
- {
- dc.SetSelectedColor(alpha);
- }
- else if (IsFrozen())
- {
- dc.SetFreezeColor();
- }
- else
- {
- dc.SetColor(QColor(255, 255, 255), alpha);
- }
-
- m_vDrawIconPos = pos;
-
- int nIconFlags = texIconFlags;
- if (CheckFlags(OBJFLAG_SHOW_ICONONTOP))
- {
- Vec3 objectPos = GetWorldPos();
-
- AABB box;
- GetBoundBox(box);
- m_vDrawIconPos.z = (m_vDrawIconPos.z - objectPos.z) + box.max.z;
- nIconFlags |= DisplayContext::TEXICON_ALIGN_BOTTOM;
- }
- m_nIconFlags = nIconFlags;
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::DrawTextureIcon(DisplayContext& dc, [[maybe_unused]] const Vec3& pos, [[maybe_unused]] float alpha)
-{
- if (m_nTextureIcon && (gSettings.viewports.bShowIcons || gSettings.viewports.bShowSizeBasedIcons))
- {
- dc.DrawTextureLabel(GetTextureIconDrawPos(), OBJECT_TEXTURE_ICON_SIZEX, OBJECT_TEXTURE_ICON_SIZEY, GetTextureIcon(), GetTextureIconFlags());
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void CBaseObject::DrawWarningIcons(DisplayContext& dc, const Vec3&)
-{
- if (gSettings.viewports.bShowIcons || gSettings.viewports.bShowSizeBasedIcons)
- {
- const int warningIconSizeX = OBJECT_TEXTURE_ICON_SIZEX / 2;
- const int warningIconSizeY = OBJECT_TEXTURE_ICON_SIZEY / 2;
-
- const int iconOffsetX = m_nTextureIcon ? (-OBJECT_TEXTURE_ICON_SIZEX / 2) : 0;
- const int iconOffsetY = m_nTextureIcon ? (-OBJECT_TEXTURE_ICON_SIZEY / 2) : 0;
-
- if (gSettings.viewports.bShowScaleWarnings)
- {
- const EScaleWarningLevel scaleWarningLevel = GetScaleWarningLevel();
-
- if (scaleWarningLevel != eScaleWarningLevel_None)
- {
- dc.SetColor(QColor(255, scaleWarningLevel == eScaleWarningLevel_RescaledNonUniform ? 50 : 255, 50), 1.0f);
- dc.DrawTextureLabel(GetTextureIconDrawPos(), warningIconSizeX, warningIconSizeY,
- GetIEditor()->GetIconManager()->GetIconTexture(eIcon_ScaleWarning), GetTextureIconFlags(),
- -warningIconSizeX / 2, iconOffsetX - (warningIconSizeY / 2));
- }
- }
-
- if (gSettings.viewports.bShowRotationWarnings)
- {
- const ERotationWarningLevel rotationWarningLevel = GetRotationWarningLevel();
- if (rotationWarningLevel != eRotationWarningLevel_None)
- {
- dc.SetColor(QColor(255, rotationWarningLevel == eRotationWarningLevel_RotatedNonRectangular ? 50 : 255, 50), 1.0f);
- dc.DrawTextureLabel(GetTextureIconDrawPos(), warningIconSizeX, warningIconSizeY,
- GetIEditor()->GetIconManager()->GetIconTexture(eIcon_RotationWarning), GetTextureIconFlags(),
- warningIconSizeX / 2, iconOffsetY - (warningIconSizeY / 2));
- }
- }
- }
-}
-
//////////////////////////////////////////////////////////////////////////
void CBaseObject::DrawLabel(DisplayContext& dc, const Vec3& pos, const QColor& lC, float alpha, float size)
{
diff --git a/Code/Editor/Objects/BaseObject.h b/Code/Editor/Objects/BaseObject.h
index f78755e81d..fea248c7f7 100644
--- a/Code/Editor/Objects/BaseObject.h
+++ b/Code/Editor/Objects/BaseObject.h
@@ -398,9 +398,6 @@ public:
// Interface to be implemented in plugins.
//////////////////////////////////////////////////////////////////////////
- //! Draw object to specified viewport.
- virtual void Display([[maybe_unused]] DisplayContext& disp) {}
-
//! Perform intersection testing of this object.
//! Return true if was hit.
virtual bool HitTest([[maybe_unused]] HitContext& hc) { return false; };
@@ -529,8 +526,6 @@ protected:
void ResolveParent(CBaseObject* object);
void SetColor(const QColor& color);
- //! Draw default object items.
- virtual void DrawDefault(DisplayContext& dc, const QColor& labelColor = QColor(255, 255, 255));
//! Draw object label.
void DrawLabel(DisplayContext& dc, const Vec3& pos, const QColor& labelColor = QColor(255, 255, 255), float alpha = 1.0f, float size = 1.f);
//! Draw 3D Axis at object position.
@@ -539,10 +534,6 @@ protected:
void DrawArea(DisplayContext& dc);
//! Draw selection helper.
void DrawSelectionHelper(DisplayContext& dc, const Vec3& pos, const QColor& labelColor = QColor(255, 255, 255), float alpha = 1.0f);
- //! Draw helper icon.
- virtual void DrawTextureIcon(DisplayContext& dc, const Vec3& pos, float alpha = 1.0f);
- //! Draw warning icons
- virtual void DrawWarningIcons(DisplayContext& dc, const Vec3& pos);
//! Check if dimension's figures can be displayed before draw them.
virtual void DrawDimensions(DisplayContext& dc, AABB* pMergedBoundBox = nullptr);
@@ -575,7 +566,6 @@ protected:
//! Only used by ObjectManager.
bool IsPotentiallyVisible() const;
- void SetDrawTextureIconProperties(DisplayContext& dc, const Vec3& pos, float alpha = 1.0f, int texIconFlags = 0);
const Vec3& GetTextureIconDrawPos(){ return m_vDrawIconPos; };
int GetTextureIconFlags(){ return m_nIconFlags; };
diff --git a/Code/Editor/PakManagerDlg.qrc b/Code/Editor/PakManagerDlg.qrc
deleted file mode 100644
index bea8f8aafd..0000000000
--- a/Code/Editor/PakManagerDlg.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- res/pakmanager_file.png
- res/pakmanager_folder.png
-
-
diff --git a/Code/Editor/PakManagerDlg.ui b/Code/Editor/PakManagerDlg.ui
deleted file mode 100644
index 087e5379da..0000000000
--- a/Code/Editor/PakManagerDlg.ui
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
- CPakManagerDlg
-
-
-
- 0
- 0
- 661
- 494
-
-
-
- -
-
-
-
-
-
-
- 0
- 45
-
-
-
- Open PAK...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Create PAK...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Add files...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Add folder...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Extract...
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- Delete entries
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
- &Close
-
-
-
-
-
- -
-
-
-
-
-
- Path:
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- QFrame::Panel
-
-
- QFrame::Sunken
-
-
- <none>
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
-
-
- -
-
-
- QFrame::Box
-
-
- Qt::ScrollBarAlwaysOn
-
-
- QAbstractItemView::NoEditTriggers
-
-
- QAbstractItemView::SelectItems
-
-
- 120
-
-
- false
-
-
-
- Filename
-
-
-
-
- Size
-
-
-
-
- Modified
-
-
-
-
- -
-
-
- Ready
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
-
- -
-
-
- Qt::AlignCenter
-
-
-
-
-
-
-
-
-
-
diff --git a/Code/Editor/Platform/Common/GCC/editor_lib_gcc.cmake b/Code/Editor/Platform/Common/GCC/editor_lib_gcc.cmake
new file mode 100644
index 0000000000..bc945f55c9
--- /dev/null
+++ b/Code/Editor/Platform/Common/GCC/editor_lib_gcc.cmake
@@ -0,0 +1,9 @@
+#
+# Copyright (c) Contributors to the Open 3D Engine Project.
+# For complete copyright and license terms please see the LICENSE at the root of this distribution.
+#
+# SPDX-License-Identifier: Apache-2.0 OR MIT
+#
+#
+
+set(LY_COMPILE_OPTIONS PRIVATE -fexceptions)
diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp
index fbb700723b..a70c200417 100644
--- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp
+++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp
@@ -723,97 +723,6 @@ CComponentEntityObject* CComponentEntityObject::FindObjectForEntity(AZ::EntityId
return nullptr;
}
-void CComponentEntityObject::Display(DisplayContext& dc)
-{
- if (!(dc.flags & DISPLAY_2D))
- {
- m_entityIconVisible = false;
- }
-
- bool displaySelectionHelper = false;
- if (!CanBeDrawn(dc, displaySelectionHelper))
- {
- return;
- }
-
- DrawDefault(dc);
-
- bool showIcons = m_hasIcon;
- if (showIcons)
- {
- SEditorSettings* editorSettings = GetIEditor()->GetEditorSettings();
- if (!editorSettings->viewports.bShowIcons && !editorSettings->viewports.bShowSizeBasedIcons)
- {
- showIcons = false;
- }
- }
-
- if (m_entityId.IsValid())
- {
- // Draw link to parent if this or the parent object are selected.
- {
- AZ::EntityId parentId;
- EBUS_EVENT_ID_RESULT(parentId, m_entityId, AZ::TransformBus, GetParentId);
- if (parentId.IsValid())
- {
- bool isParentVisible = false;
- AzToolsFramework::EditorEntityInfoRequestBus::EventResult(isParentVisible, parentId, &AzToolsFramework::EditorEntityInfoRequestBus::Events::IsVisible);
-
- CComponentEntityObject* parentObject = CComponentEntityObject::FindObjectForEntity(parentId);
- if (isParentVisible && (IsSelected() || (parentObject && parentObject->IsSelected())))
- {
- const QColor kLinkColorParent(0, 255, 255);
- const QColor kLinkColorChild(0, 0, 255);
-
- AZ::Vector3 parentTranslation;
- EBUS_EVENT_ID_RESULT(parentTranslation, parentId, AZ::TransformBus, GetWorldTranslation);
- dc.DrawLine(AZVec3ToLYVec3(parentTranslation), GetWorldTM().GetTranslation(), kLinkColorParent, kLinkColorChild);
- }
- }
- }
-
- // Don't draw icons if we have an ancestor in the same location that has an icon - makes sure
- // ancestor icons draw on top and are able to be selected over children. Also check if a descendant
- // is selected at the same location. In cases of entity hierarchies where numerous ancestors have
- // no position offset, we need this so the ancestors don't draw over us when we're selected
- if (showIcons)
- {
- if ((dc.flags & DISPLAY_2D) ||
- IsSelected() ||
- IsAncestorIconDrawingAtSameLocation() ||
- IsDescendantSelectedAtSameLocation())
- {
- showIcons = false;
- }
- }
-
- // Allow components to override in-editor visualization.
- {
- const AzFramework::DisplayContextRequestGuard displayContextGuard(dc);
-
- AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus;
- AzFramework::DebugDisplayRequestBus::Bind(
- debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId);
- AZ_Assert(debugDisplayBus, "Invalid DebugDisplayRequestBus.");
-
- AzFramework::DebugDisplayRequests* debugDisplay =
- AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus);
-
- AzFramework::EntityDebugDisplayEventBus::Event(
- m_entityId, &AzFramework::EntityDebugDisplayEvents::DisplayEntityViewport,
- AzFramework::ViewportInfo{ dc.GetView()->asCViewport()->GetViewportId() },
- *debugDisplay);
- }
- }
-}
-
-void CComponentEntityObject::DrawDefault(DisplayContext& dc, const QColor& labelColor)
-{
- CEntityObject::DrawDefault(dc, labelColor);
-
- DrawAccent(dc);
-}
-
bool CComponentEntityObject::IsIsolated() const
{
return m_isIsolated;
diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h
index 7ccea8da84..62209965a5 100644
--- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h
+++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h
@@ -55,7 +55,6 @@ public:
bool SetRotation(const Quat& rotate, int flags) override;
bool SetScale(const Vec3& scale, int flags) override;
void InvalidateTM(int nWhyFlags) override;
- void Display(DisplayContext& disp) override;
bool HitTest(HitContext& hc) override;
void GetLocalBounds(AABB& box) override;
void GetBoundBox(AABB& box) override;
@@ -69,7 +68,6 @@ public:
void DetachThis(bool bKeepPos = true) override;
XmlNodeRef Export(const QString& levelPath, XmlNodeRef& xmlNode) override;
void DeleteEntity() override;
- void DrawDefault(DisplayContext& dc, const QColor& labelColor = QColor(255, 255, 255)) override;
bool IsIsolated() const override;
bool IsSelected() const override;
diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerListModel.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerListModel.cpp
index 08d79adcf5..39be4839e6 100644
--- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerListModel.cpp
+++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerListModel.cpp
@@ -53,6 +53,7 @@
#include
#include
#include
+#include
#include "OutlinerDisplayOptionsMenu.h"
#include "OutlinerSortFilterProxyModel.hxx"
@@ -252,17 +253,7 @@ QVariant OutlinerListModel::dataForName(const QModelIndex& index, int role) cons
if (s_paintingName && !m_filterString.empty())
{
// highlight characters in filter
- int highlightTextIndex = 0;
- do
- {
- highlightTextIndex = label.lastIndexOf(QString(m_filterString.c_str()), highlightTextIndex - 1, Qt::CaseInsensitive);
- if (highlightTextIndex >= 0)
- {
- const QString BACKGROUND_COLOR{ "#707070" };
- label.insert(static_cast(highlightTextIndex + m_filterString.length()), "");
- label.insert(highlightTextIndex, "");
- }
- } while(highlightTextIndex > 0);
+ label = AzToolsFramework::RichTextHighlighter::HighlightText(label, m_filterString.c_str());
}
return label;
}
@@ -2608,17 +2599,13 @@ void OutlinerItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem&
optionV4.text.clear();
optionV4.widget->style()->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter);
- // Now we setup a Text Document so it can draw the rich text
- QTextDocument textDoc;
- textDoc.setDefaultFont(optionV4.font);
- textDoc.setDefaultStyleSheet("body {color: white}");
- textDoc.setHtml("" + entityNameRichText + "");
int verticalOffset = GetEntityNameVerticalOffset(entityId);
- painter->translate(textRect.topLeft() + QPoint(0, verticalOffset));
- textDoc.setTextWidth(textRect.width());
- textDoc.drawContents(painter, QRectF(0, 0, textRect.width(), textRect.height()));
+
+ AzToolsFramework::RichTextHighlighter::PaintHighlightedRichText(
+ entityNameRichText, painter, optionV4, textRect, QPoint(0, verticalOffset));
painter->restore();
+
OutlinerListModel::s_paintingName = false;
}
else
diff --git a/Code/Editor/Resource.h b/Code/Editor/Resource.h
index 432f07a531..ef72bfc9be 100644
--- a/Code/Editor/Resource.h
+++ b/Code/Editor/Resource.h
@@ -196,7 +196,6 @@
#define ID_FILE_EXPORT_TERRAINAREA 33904
#define ID_FILE_EXPORT_TERRAINAREAWITHOBJECTS 33910
#define ID_FILE_EXPORT_SELECTEDOBJECTS 33911
-#define ID_TERRAIN_TIMEOFDAY 33912
#define ID_SPLINE_PREVIOUS_KEY 33916
#define ID_SPLINE_NEXT_KEY 33917
#define ID_SPLINE_FLATTEN_ALL 33918
@@ -290,7 +289,6 @@
#define ID_TV_TRACKS_TOOLBAR_LAST 35183 // for up to 100 "Add Tracks..." dynamically added Track View Track buttons
#define ID_OPEN_TERRAIN_EDITOR 36007
#define ID_OPEN_UICANVASEDITOR 36010
-#define ID_TERRAIN_TIMEOFDAYBUTTON 36011
#define ID_OPEN_TERRAINTEXTURE_EDITOR 36012
#define ID_SKINS_REFRESH 36014
#define ID_FILE_GENERATETERRAIN 36016
diff --git a/Code/Editor/SelectEAXPresetDlg.cpp b/Code/Editor/SelectEAXPresetDlg.cpp
deleted file mode 100644
index 733de8b9cf..0000000000
--- a/Code/Editor/SelectEAXPresetDlg.cpp
+++ /dev/null
@@ -1,67 +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 "SelectEAXPresetDlg.h"
-
-AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
-#include "ui_SelectEAXPresetDlg.h"
-AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
-
-
-CSelectEAXPresetDlg::CSelectEAXPresetDlg(QWidget* pParent)
- : QDialog(pParent)
- , m_ui(new Ui_CSelectEAXPresetDlg)
-{
- m_ui->setupUi(this);
-}
-
-CSelectEAXPresetDlg::~CSelectEAXPresetDlg()
-{
-}
-
-void CSelectEAXPresetDlg::SetCurrPreset(const QString& sPreset)
-{
- QAbstractListModel* model = Model();
- if (!model)
- {
- return;
- }
-
- QModelIndexList indexes = model->match(QModelIndex(), Qt::DisplayRole, sPreset, 1, Qt::MatchExactly);
-
- if (!indexes.isEmpty())
- {
- m_ui->listView->setCurrentIndex(indexes.at(0));
- }
-}
-
-QString CSelectEAXPresetDlg::GetCurrPreset() const
-{
- if (m_ui->listView->currentIndex().isValid())
- {
- return m_ui->listView->currentIndex().data().toString();
- }
- // EXCEPTION: OCX Property Pages should return false
- return QString();
-}
-
-
-void CSelectEAXPresetDlg::SetModel(QAbstractListModel* model)
-{
- m_ui->listView->setModel(model);
-}
-
-QAbstractListModel* CSelectEAXPresetDlg::Model() const
-{
- return static_cast(m_ui->listView->model());
-}
-
-#include "moc_SelectEAXPresetDlg.cpp"
diff --git a/Code/Editor/SelectEAXPresetDlg.h b/Code/Editor/SelectEAXPresetDlg.h
deleted file mode 100644
index 9943585987..0000000000
--- a/Code/Editor/SelectEAXPresetDlg.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#pragma once
-
-// CSelectEAXPresetDlg dialog
-#ifndef CRYINCLUDE_EDITOR_SELECTEAXPRESETDLG_H
-#define CRYINCLUDE_EDITOR_SELECTEAXPRESETDLG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-#endif
-
-class QAbstractListModel;
-class Ui_CSelectEAXPresetDlg;
-
-class CSelectEAXPresetDlg
- : public QDialog
-{
- Q_OBJECT
-
-public:
- CSelectEAXPresetDlg(QWidget* pParent = nullptr); // standard constructor
- ~CSelectEAXPresetDlg();
-
- void SetCurrPreset(const QString& sPreset);
- QString GetCurrPreset() const;
-
-protected:
- void SetModel(QAbstractListModel* model);
- QAbstractListModel* Model() const;
-
-private:
- Ui_CSelectEAXPresetDlg* m_ui;
-};
-
-#endif // CRYINCLUDE_EDITOR_SELECTEAXPRESETDLG_H
diff --git a/Code/Editor/SelectEAXPresetDlg.ui b/Code/Editor/SelectEAXPresetDlg.ui
deleted file mode 100644
index 3177b66c38..0000000000
--- a/Code/Editor/SelectEAXPresetDlg.ui
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
- CSelectEAXPresetDlg
-
-
-
- 0
- 0
- 197
- 233
-
-
-
- Select Preset...
-
-
- -
-
-
- -
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
-
-
-
- listView
-
-
-
-
- buttonBox
- accepted()
- CSelectEAXPresetDlg
- accept()
-
-
- 51
- 207
-
-
- 49
- 199
-
-
-
-
- buttonBox
- rejected()
- CSelectEAXPresetDlg
- reject()
-
-
- 148
- 213
-
-
- 131
- 199
-
-
-
-
-
diff --git a/Code/Editor/Settings.cpp b/Code/Editor/Settings.cpp
index acb48c3545..8561e6dba3 100644
--- a/Code/Editor/Settings.cpp
+++ b/Code/Editor/Settings.cpp
@@ -142,9 +142,6 @@ SEditorSettings::SEditorSettings()
viewports.bShowMeshStatsOnMouseOver = false;
viewports.bDrawEntityLabels = false;
viewports.bShowTriggerBounds = false;
- viewports.bShowIcons = true;
- viewports.bDistanceScaleIcons = true;
- viewports.bShowSizeBasedIcons = false;
viewports.nShowFrozenHelpers = true;
viewports.bFillSelectedShapes = false;
viewports.nTopMapTextureResolution = 512;
@@ -534,8 +531,6 @@ void SEditorSettings::Save(bool isEditorClosing)
SaveValue("Settings", "ShowMeshStatsOnMouseOver", viewports.bShowMeshStatsOnMouseOver);
SaveValue("Settings", "DrawEntityLabels", viewports.bDrawEntityLabels);
SaveValue("Settings", "ShowTriggerBounds", viewports.bShowTriggerBounds);
- SaveValue("Settings", "ShowIcons", viewports.bShowIcons);
- SaveValue("Settings", "ShowSizeBasedIcons", viewports.bShowSizeBasedIcons);
SaveValue("Settings", "ShowFrozenHelpers", viewports.nShowFrozenHelpers);
SaveValue("Settings", "FillSelectedShapes", viewports.bFillSelectedShapes);
SaveValue("Settings", "MapTextureResolution", viewports.nTopMapTextureResolution);
@@ -736,8 +731,6 @@ void SEditorSettings::Load()
LoadValue("Settings", "ShowMeshStatsOnMouseOver", viewports.bShowMeshStatsOnMouseOver);
LoadValue("Settings", "DrawEntityLabels", viewports.bDrawEntityLabels);
LoadValue("Settings", "ShowTriggerBounds", viewports.bShowTriggerBounds);
- LoadValue("Settings", "ShowIcons", viewports.bShowIcons);
- LoadValue("Settings", "ShowSizeBasedIcons", viewports.bShowSizeBasedIcons);
LoadValue("Settings", "ShowFrozenHelpers", viewports.nShowFrozenHelpers);
LoadValue("Settings", "FillSelectedShapes", viewports.bFillSelectedShapes);
LoadValue("Settings", "MapTextureResolution", viewports.nTopMapTextureResolution);
diff --git a/Code/Editor/Settings.h b/Code/Editor/Settings.h
index 9276d9b715..0ebb70501d 100644
--- a/Code/Editor/Settings.h
+++ b/Code/Editor/Settings.h
@@ -136,13 +136,6 @@ struct SViewportsSettings
bool bDrawEntityLabels;
//! Show Trigger bounds.
bool bShowTriggerBounds;
- //! Show Icons in viewport.
- bool bShowIcons;
- //! Scale icons with distance, so they aren't a fixed size no matter how far away you are
- bool bDistanceScaleIcons;
-
- //! Show Size-based Icons in viewport.
- bool bShowSizeBasedIcons;
//! Show Helpers in viewport for frozen objects.
int nShowFrozenHelpers;
diff --git a/Code/Editor/SurfaceTypeValidator.cpp b/Code/Editor/SurfaceTypeValidator.cpp
deleted file mode 100644
index 9f246cd453..0000000000
--- a/Code/Editor/SurfaceTypeValidator.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#include "EditorDefs.h"
-
-#include "SurfaceTypeValidator.h"
-
-// Editor
-#include "Include/IObjectManager.h"
-#include "Objects/BaseObject.h"
-#include "ErrorReport.h"
-
-
-void CSurfaceTypeValidator::Validate()
-{
-}
-
diff --git a/Code/Editor/SurfaceTypeValidator.h b/Code/Editor/SurfaceTypeValidator.h
deleted file mode 100644
index 6b1a3fbed7..0000000000
--- a/Code/Editor/SurfaceTypeValidator.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_SURFACETYPEVALIDATOR_H
-#define CRYINCLUDE_EDITOR_SURFACETYPEVALIDATOR_H
-#pragma once
-
-
-
-class CSurfaceTypeValidator
-{
-public:
- void Validate();
-
-private:
-};
-
-#endif // CRYINCLUDE_EDITOR_SURFACETYPEVALIDATOR_H
diff --git a/Code/Editor/TimeOfDay/main-00.png b/Code/Editor/TimeOfDay/main-00.png
deleted file mode 100644
index 2c44fec541..0000000000
--- a/Code/Editor/TimeOfDay/main-00.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5201dbba6c8114914ed680b04b72a5e18e22c0519a514bcccdc7ae8d32670b4e
-size 993
diff --git a/Code/Editor/TimeOfDay/main-01.png b/Code/Editor/TimeOfDay/main-01.png
deleted file mode 100644
index 5cc1bf33d8..0000000000
--- a/Code/Editor/TimeOfDay/main-01.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:48a7250ad41c5e298079ddd13910b58baca2ef592defcc162ccc9df542d28905
-size 981
diff --git a/Code/Editor/TimeOfDay/main-02.png b/Code/Editor/TimeOfDay/main-02.png
deleted file mode 100644
index b7d90648a3..0000000000
--- a/Code/Editor/TimeOfDay/main-02.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:98b9e9abcc54b4f3e6903ad74bb50f364bfe4c8cd9fedc9653a6603d64a1ee0a
-size 838
diff --git a/Code/Editor/TimeOfDay/main-03.png b/Code/Editor/TimeOfDay/main-03.png
deleted file mode 100644
index e073dbf60b..0000000000
--- a/Code/Editor/TimeOfDay/main-03.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1199c834fc8de69f9d7c76e8c7fbd84e9b92713b9f07b513137085e5089432cb
-size 857
diff --git a/Code/Editor/TimeOfDay/main-04.png b/Code/Editor/TimeOfDay/main-04.png
deleted file mode 100644
index 6049dbfe18..0000000000
--- a/Code/Editor/TimeOfDay/main-04.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:79b44be1dbe5518e06dc8c8823d00462136d39ffe60a32ef4f64dc0712654d33
-size 646
diff --git a/Code/Editor/TimeOfDay/main-05.png b/Code/Editor/TimeOfDay/main-05.png
deleted file mode 100644
index 054419f39a..0000000000
--- a/Code/Editor/TimeOfDay/main-05.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6ea7450c1a278570e2a1dba3a8b4d7d4e5f0d054e8371139ebdb5220c405d355
-size 537
diff --git a/Code/Editor/TimeOfDay/main-06.png b/Code/Editor/TimeOfDay/main-06.png
deleted file mode 100644
index 35f8afdae2..0000000000
--- a/Code/Editor/TimeOfDay/main-06.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bc73f0720f2ff877aff5c6646938b7fc509a69d92e766fecb9fa010eecadee7b
-size 606
diff --git a/Code/Editor/TimeOfDay/main-07.png b/Code/Editor/TimeOfDay/main-07.png
deleted file mode 100644
index aca9597355..0000000000
--- a/Code/Editor/TimeOfDay/main-07.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e63519ed54fc19a4b4a2a38cb2c5f148b7404ac614d4aab039b71fee64cd7425
-size 569
diff --git a/Code/Editor/TimeOfDay/main-08.png b/Code/Editor/TimeOfDay/main-08.png
deleted file mode 100644
index abeb114fc2..0000000000
--- a/Code/Editor/TimeOfDay/main-08.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8742cad4b8f8f5bba59abb9cc028db84de222ed8b393398f6837fea16bb4a1d8
-size 563
diff --git a/Code/Editor/TimeOfDay/main-09.png b/Code/Editor/TimeOfDay/main-09.png
deleted file mode 100644
index cc77b8c9e2..0000000000
--- a/Code/Editor/TimeOfDay/main-09.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ef85628301b4edc4f858f0988e4f072772be3feb92d27a2ec33b72a27bcee7ff
-size 583
diff --git a/Code/Editor/TimeOfDay/main-10.png b/Code/Editor/TimeOfDay/main-10.png
deleted file mode 100644
index dc463c6497..0000000000
--- a/Code/Editor/TimeOfDay/main-10.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d17bfbdee6d37566b241adf64241ef47b62145aaac3e9e8f9691d1fb866b5fcb
-size 717
diff --git a/Code/Editor/TimeOfDay/main-11.png b/Code/Editor/TimeOfDay/main-11.png
deleted file mode 100644
index d686ab18c8..0000000000
--- a/Code/Editor/TimeOfDay/main-11.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:98b629abf927bcea41d8857b1761d12a37836471d7106b2f5210337c0ace0d9c
-size 1103
diff --git a/Code/Editor/TimeOfDay/main-12.png b/Code/Editor/TimeOfDay/main-12.png
deleted file mode 100644
index 069510ab24..0000000000
--- a/Code/Editor/TimeOfDay/main-12.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e949111b33e28834995807cab30ecb58d988a81a2d58fa166117962c85b8e149
-size 849
diff --git a/Code/Editor/TopRendererWnd.h b/Code/Editor/TopRendererWnd.h
index c5bc7a31f2..7bdf2eaff2 100644
--- a/Code/Editor/TopRendererWnd.h
+++ b/Code/Editor/TopRendererWnd.h
@@ -81,8 +81,6 @@ public:
bool m_bShowStatObjects;
bool m_bShowWater;
bool m_bAutoScaleGreyRange;
-
- friend class QTopRendererWnd;
};
#endif // CRYINCLUDE_EDITOR_TOPRENDERERWND_H
diff --git a/Code/Editor/UndoViewPosition.cpp b/Code/Editor/UndoViewPosition.cpp
deleted file mode 100644
index 1934d255d3..0000000000
--- a/Code/Editor/UndoViewPosition.cpp
+++ /dev/null
@@ -1,67 +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 : Undo for Python function (PySetCurrentViewPosition)
-
-
-#include "EditorDefs.h"
-
-#include "UndoViewPosition.h"
-
-// Editor
-#include "ViewManager.h"
-
-CUndoViewPosition::CUndoViewPosition(const QString& pUndoDescription)
-{
- m_undoDescription = pUndoDescription;
-
- CViewport* pRenderViewport = GetIEditor()->GetViewManager()->GetGameViewport();
- if (pRenderViewport)
- {
- Matrix34 tm = pRenderViewport->GetViewTM();
- m_undo = tm.GetTranslation();
- }
-}
-
-int CUndoViewPosition::GetSize()
-{
- return sizeof(*this);
-}
-
-QString CUndoViewPosition::GetDescription()
-{
- return m_undoDescription;
-}
-
-void CUndoViewPosition::Undo(bool bUndo)
-{
- CViewport* pRenderViewport = GetIEditor()->GetViewManager()->GetGameViewport();
- if (pRenderViewport)
- {
- Matrix34 tm = pRenderViewport->GetViewTM();
- if (bUndo)
- {
- m_redo = tm.GetTranslation();
- }
-
- tm.SetTranslation(m_undo);
- pRenderViewport->SetViewTM(tm);
- }
-}
-
-void CUndoViewPosition::Redo()
-{
- CViewport* pRenderViewport = GetIEditor()->GetViewManager()->GetGameViewport();
- if (pRenderViewport)
- {
- Matrix34 tm = pRenderViewport->GetViewTM();
- tm.SetTranslation(m_redo);
- pRenderViewport->SetViewTM(tm);
- }
-}
diff --git a/Code/Editor/UndoViewPosition.h b/Code/Editor/UndoViewPosition.h
deleted file mode 100644
index e0c6c145e8..0000000000
--- a/Code/Editor/UndoViewPosition.h
+++ /dev/null
@@ -1,36 +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 : Undo for Python function (PySetCurrentViewPosition)
-
-#ifndef CRYINCLUDE_EDITOR_UNDOVIEWPOSITION_H
-#define CRYINCLUDE_EDITOR_UNDOVIEWPOSITION_H
-#pragma once
-
-#include "Undo/IUndoObject.h"
-
-class CUndoViewPosition
- : public IUndoObject
-{
-public:
- CUndoViewPosition(const QString& pUndoDescription = "Set Current View Position");
-
-protected:
- int GetSize();
- QString GetDescription();
- void Undo(bool bUndo);
- void Redo();
-
-private:
- Vec3 m_undo;
- Vec3 m_redo;
- QString m_undoDescription;
-};
-
-#endif // CRYINCLUDE_EDITOR_UNDOVIEWPOSITION_H
diff --git a/Code/Editor/UndoViewRotation.cpp b/Code/Editor/UndoViewRotation.cpp
deleted file mode 100644
index a305641d3b..0000000000
--- a/Code/Editor/UndoViewRotation.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-// Description : Undo for Python function (PySetCurrentViewPosition)
-
-
-#include "EditorDefs.h"
-
-#include "UndoViewRotation.h"
-
-// Editor
-#include "ViewManager.h"
-
-#include
-#include
-#include
-#include
-
-Ang3 CUndoViewRotation::GetActiveCameraRotation()
-{
- AZ::Transform activeCameraTm = AZ::Transform::CreateIdentity();
- Camera::ActiveCameraRequestBus::BroadcastResult(
- activeCameraTm,
- &Camera::ActiveCameraRequestBus::Events::GetActiveCameraTransform
- );
- const AZ::Matrix3x4 cameraMatrix = AZ::Matrix3x4::CreateFromTransform(activeCameraTm);
- const Matrix33 cameraMatrixCry = AZMatrix3x3ToLYMatrix3x3(AZ::Matrix3x3::CreateFromMatrix3x4(cameraMatrix));
- return RAD2DEG(Ang3::GetAnglesXYZ(cameraMatrixCry));
-}
-
-CUndoViewRotation::CUndoViewRotation(const QString& pUndoDescription)
-{
- m_undoDescription = pUndoDescription;
- m_undo = GetActiveCameraRotation();
-}
-
-int CUndoViewRotation::GetSize()
-{
- return sizeof(*this);
-}
-
-QString CUndoViewRotation::GetDescription()
-{
- return m_undoDescription;
-}
-
-void CUndoViewRotation::Undo(bool bUndo)
-{
- CViewport* pRenderViewport = GetIEditor()->GetViewManager()->GetGameViewport();
- if (pRenderViewport)
- {
- if (bUndo)
- {
- m_redo = GetActiveCameraRotation();
- }
-
- Matrix34 tm = pRenderViewport->GetViewTM();
- tm.SetRotationXYZ(Ang3(DEG2RAD(m_undo.x), DEG2RAD(m_undo.y), DEG2RAD(m_undo.z)), tm.GetTranslation());
- pRenderViewport->SetViewTM(tm);
- }
-}
-
-void CUndoViewRotation::Redo()
-{
- CViewport* pRenderViewport = GetIEditor()->GetViewManager()->GetGameViewport();
- if (pRenderViewport)
- {
- Matrix34 tm = pRenderViewport->GetViewTM();
- tm.SetRotationXYZ(Ang3(DEG2RAD(m_redo.x), DEG2RAD(m_redo.y), DEG2RAD(m_redo.z)), tm.GetTranslation());
- pRenderViewport->SetViewTM(tm);
- }
-}
diff --git a/Code/Editor/UndoViewRotation.h b/Code/Editor/UndoViewRotation.h
deleted file mode 100644
index 2e086a3f05..0000000000
--- a/Code/Editor/UndoViewRotation.h
+++ /dev/null
@@ -1,39 +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 : Undo for Python function (PySetCurrentViewRotation)
-
-
-#ifndef CRYINCLUDE_EDITOR_UNDOVIEWROTATION_H
-#define CRYINCLUDE_EDITOR_UNDOVIEWROTATION_H
-#pragma once
-#include "Undo/IUndoObject.h"
-
-
-class CUndoViewRotation
- : public IUndoObject
-{
-public:
- CUndoViewRotation(const QString& pUndoDescription = "Set Current View Rotation");
-
-protected:
- int GetSize();
- QString GetDescription();
- void Undo(bool bUndo);
- void Redo();
-
-private:
- static Ang3 GetActiveCameraRotation();
-
- Ang3 m_undo;
- Ang3 m_redo;
- QString m_undoDescription;
-};
-
-#endif // CRYINCLUDE_EDITOR_UNDOVIEWROTATION_H
diff --git a/Code/Editor/UserMessageDefines.h b/Code/Editor/UserMessageDefines.h
deleted file mode 100644
index 0b13d2819f..0000000000
--- a/Code/Editor/UserMessageDefines.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#ifndef CRYINCLUDE_EDITOR_USERMESSAGEDEFINES_H
-#define CRYINCLUDE_EDITOR_USERMESSAGEDEFINES_H
-#pragma once
-
-
-enum ESandboxUserMessages
-{
- // InPlaceComboBox
- WM_USER_ON_SELECTION_CANCEL = WM_USER + 1,
- WM_USER_ON_SELECTION_OK,
- WM_USER_ON_NEW_SELECTION,
- WM_USER_ON_EDITCHANGE,
- WM_USER_ON_OPENDROPDOWN,
- WM_USER_ON_EDITKEYDOWN,
- WM_USER_ON_EDITCLICK,
- // ACListWnd
- ENAC_UPDATE,
- // EditWithButton
- WM_USER_EDITWITHBUTTON_CLICKED,
- // FillSliderCtrl
- WMU_FS_CHANGED,
- WMU_FS_LBUTTONDOWN,
- WMU_FS_LBUTTONUP,
- FLM_EDITTEXTCHANGED,
- FLM_FILTERTEXTCHANGED,
- // NumberCtrlEdit
- WMU_LBUTTONDOWN,
- WMU_LBUTTONUP,
- WM_ONWINDOWFOCUSCHANGES,
- // SelectObjectDialog
- IDT_TIMER_0,
- IDT_TIMER_1,
- // LensFlareEditor
- WM_FLAREEDITOR_UPDATETREECONTROL,
- // EquipPackDialog
- UM_EQUIPLIST_CHECKSTATECHANGE,
- // MaterialSender/MatEditMainDlg
- WM_MATEDITPICK,
- // GridMapWindow
- WM_USER_ON_DBL_CLICK,
- // LMCompDialog
- WM_UPDATE_LIGHTMAP_GENERATION_PROGRESS,
- WM_UPDATE_LIGHTMAP_GENERATION_MEMUSAGE,
- WM_UPDATE_LIGHTMAP_GENERATION_MEMUSAGE_STATIC,
- WM_UPDATE_GLM_NAME_EDIT,
- // Viewport
- WM_VIEWPORT_ON_TITLE_CHANGE,
- // VisualLogControls
- UWM_BUTTON_CLICKED,
-};
-#endif // CRYINCLUDE_EDITOR_USERMESSAGEDEFINES_H
diff --git a/Code/Editor/Util/EditorUtils.cpp b/Code/Editor/Util/EditorUtils.cpp
index adae34773a..47264a51ab 100644
--- a/Code/Editor/Util/EditorUtils.cpp
+++ b/Code/Editor/Util/EditorUtils.cpp
@@ -176,23 +176,6 @@ QString TrimTrailingZeros(QString str)
return str;
}
-//////////////////////////////////////////////////////////////////////////
-// This function is supposed to format float in user-friendly way,
-// omitting the exponent notation.
-//
-// Why not using printf? Its formatting rules has following drawbacks:
-// %g - will use exponent for small numbers;
-// %.Nf - doesn't allow to control total amount of significant numbers,
-// which exposes limited precision during binary-to-decimal fraction
-// conversion.
-//////////////////////////////////////////////////////////////////////////
-void FormatFloatForUI(QString& str, int significantDigits, double value)
-{
- str = TrimTrailingZeros(QString::number(value, 'f', significantDigits));
- return;
-}
-//////////////////////////////////////////////////////////////////////////-
-
//////////////////////////////////////////////////////////////////////////
QColor ColorLinearToGamma(ColorF col)
{
diff --git a/Code/Editor/Util/EditorUtils.h b/Code/Editor/Util/EditorUtils.h
index e950d75012..5a69633d0f 100644
--- a/Code/Editor/Util/EditorUtils.h
+++ b/Code/Editor/Util/EditorUtils.h
@@ -212,22 +212,6 @@ namespace XmlHelpers
//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-// Drag Drop helper functions
-//////////////////////////////////////////////////////////////////////////
-namespace EditorDragDropHelpers
-{
- inline QString GetAnimationNameClipboardFormat()
- {
- return QStringLiteral("application/x-animation-browser-copy");
- }
-
- inline QString GetFragmentClipboardFormat()
- {
- return QStringLiteral("application/x-preview-fragment-properties");
- }
-}
-
//////////////////////////////////////////////////////////////////////////
/*!
@@ -292,116 +276,6 @@ public:
}
};
-
-//////////////////////////////////////////////////////////////////////////
-//
-// Convert String representation of color to RGB integer value.
-//
-//////////////////////////////////////////////////////////////////////////
-inline QColor String2Color(const QString& val)
-{
- unsigned int r = 0, g = 0, b = 0;
- int res = 0;
- res = azsscanf(val.toUtf8().data(), "R:%d,G:%d,B:%d", &r, &g, &b);
- if (res != 3)
- {
- res = azsscanf(val.toUtf8().data(), "R:%d G:%d B:%d", &r, &g, &b);
- }
- if (res != 3)
- {
- res = azsscanf(val.toUtf8().data(), "%d,%d,%d", &r, &g, &b);
- }
- if (res != 3)
- {
- res = azsscanf(val.toUtf8().data(), "%d %d %d", &r, &g, &b);
- }
- if (res != 3)
- {
- azsscanf(val.toUtf8().data(), "%x", &r);
- return r;
- }
-
- return QColor(r, g, b);
-}
-
-// Converts QColor to Vector.
-inline Vec3 Rgb2Vec(const QColor& color)
-{
- return Vec3(aznumeric_cast(color.redF()), aznumeric_cast(color.greenF()), aznumeric_cast(color.blueF()));
-}
-
-// Converts QColor to ColorF.
-inline ColorF Rgb2ColorF(const QColor& color)
-{
- return ColorF(aznumeric_cast(color.redF()), aznumeric_cast(color.greenF()), aznumeric_cast(color.blueF()), 1.0f);
-}
-
-// Converts QColor to Vector.
-inline QColor Vec2Rgb(const Vec3& color)
-{
- return QColor(aznumeric_cast(color.x * 255), aznumeric_cast(color.y * 255), aznumeric_cast(color.z * 255));
-}
-
-// Converts ColorF to QColor.
-inline QColor ColorF2Rgb(const ColorF& color)
-{
- return QColor(aznumeric_cast(color.r * 255), aznumeric_cast(color.g * 255), aznumeric_cast(color.b * 255));
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Tokenize string.
-//////////////////////////////////////////////////////////////////////////
-inline QString TokenizeString(const QString& s, LPCSTR pszTokens, int& iStart)
-{
- assert(iStart >= 0);
-
- QByteArray str = s.toUtf8();
-
- if (pszTokens == nullptr)
- {
- return str;
- }
-
- auto pszPlace = str.begin() + iStart;
- auto pszEnd = str.end();
- if (pszPlace < pszEnd)
- {
- int nIncluding = (int)strspn(pszPlace, pszTokens);
- ;
-
- if ((pszPlace + nIncluding) < pszEnd)
- {
- pszPlace += nIncluding;
- int nExcluding = (int)strcspn(pszPlace, pszTokens);
-
- int iFrom = iStart + nIncluding;
- int nUntil = nExcluding;
- iStart = iFrom + nUntil + 1;
-
- return (str.mid(iFrom, nUntil));
- }
- }
-
- // return empty string, done tokenizing
- iStart = -1;
- return "";
-}
-
-// This template function will join strings from a vector into a single string, using a separator char
-template
-inline void JoinStrings(const QList& rStrings, QString& rDestStr, char aSeparator = ',')
-{
- for (size_t i = 0, iCount = rStrings.size(); i < iCount; ++i)
- {
- rDestStr += rStrings[i];
-
- if (i < iCount - 1)
- {
- rDestStr += aSeparator;
- }
- }
-}
-
// This function will split a string containing separated strings, into a vector of strings
// better version of TokenizeString
inline void SplitString(const QString& rSrcStr, QStringList& rDestStrings, char aSeparator = ',')
@@ -435,45 +309,6 @@ inline void SplitString(const QString& rSrcStr, QStringList& rDestStrings, char
}
}
-// Format unsigned number to string with 1000s separator
-inline QString FormatWithThousandsSeperator(const unsigned int number)
-{
- QString string;
-
- string = QString::number(number);
-
- for (int p = string.length() - 3; p > 0; p -= 3)
- {
- string.insert(p, ',');
- }
-
- return string;
-}
-
-
-void FormatFloatForUI(QString& str, int significantDigits, double value);
-
-//////////////////////////////////////////////////////////////////////////
-// Simply sub string searching case insensitive.
-//////////////////////////////////////////////////////////////////////////
-inline const char* strstri(const char* pString, const char* pSubstring)
-{
- int i, j, k;
- for (i = 0; pString[i]; i++)
- {
- for (j = i, k = 0; tolower(pString[j]) == tolower(pSubstring[k]); j++, k++)
- {
- if (!pSubstring[k + 1])
- {
- return (pString + i);
- }
- }
- }
-
- return nullptr;
-}
-
-
inline bool CheckVirtualKey(Qt::MouseButton button)
{
return (qApp->property("pressedMouseButtons").toInt() & button) != 0;
diff --git a/Code/Editor/ViewPane.cpp b/Code/Editor/ViewPane.cpp
index 421db8394e..e3494a4049 100644
--- a/Code/Editor/ViewPane.cpp
+++ b/Code/Editor/ViewPane.cpp
@@ -38,7 +38,6 @@
#include "Viewport.h"
#include "LayoutConfigDialog.h"
#include "TopRendererWnd.h"
-#include "UserMessageDefines.h"
#include "MainWindow.h"
#include "QtViewPaneManager.h"
#include "EditorViewportWidget.h"
diff --git a/Code/Editor/Viewport.cpp b/Code/Editor/Viewport.cpp
index 437dcead3b..dcf86abb02 100644
--- a/Code/Editor/Viewport.cpp
+++ b/Code/Editor/Viewport.cpp
@@ -30,7 +30,6 @@
#include "Objects/ObjectManager.h"
#include "Util/3DConnexionDriver.h"
#include "PluginManager.h"
-#include "Include/IRenderListener.h"
#include "GameEngine.h"
#include "Settings.h"
@@ -227,61 +226,6 @@ void QtViewport::GetDimensions(int* pWidth, int* pHeight) const
}
}
-//////////////////////////////////////////////////////////////////////////
-void QtViewport::RegisterRenderListener(IRenderListener* piListener)
-{
-#ifdef _DEBUG
- size_t nCount(0);
- size_t nTotal(0);
-
- nTotal = m_cRenderListeners.size();
- for (nCount = 0; nCount < nTotal; ++nCount)
- {
- if (m_cRenderListeners[nCount] == piListener)
- {
- assert(!"Registered the same RenderListener multiple times.");
- break;
- }
- }
-#endif //_DEBUG
- m_cRenderListeners.push_back(piListener);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool QtViewport::UnregisterRenderListener(IRenderListener* piListener)
-{
- size_t nCount(0);
- size_t nTotal(0);
-
- nTotal = m_cRenderListeners.size();
- for (nCount = 0; nCount < nTotal; ++nCount)
- {
- if (m_cRenderListeners[nCount] == piListener)
- {
- m_cRenderListeners.erase(m_cRenderListeners.begin() + nCount);
- return true;
- }
- }
- return false;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool QtViewport::IsRenderListenerRegistered(IRenderListener* piListener)
-{
- size_t nCount(0);
- size_t nTotal(0);
-
- nTotal = m_cRenderListeners.size();
- for (nCount = 0; nCount < nTotal; ++nCount)
- {
- if (m_cRenderListeners[nCount] == piListener)
- {
- return true;
- }
- }
- return false;
-}
-
//////////////////////////////////////////////////////////////////////////
void QtViewport::AddPostRenderer(IPostRenderer* pPostRenderer)
{
@@ -1164,18 +1108,6 @@ bool QtViewport::GetAdvancedSelectModeFlag()
return m_bAdvancedSelectMode;
}
-//////////////////////////////////////////////////////////////////////////
-void QtViewport::ProcessRenderLisneters(DisplayContext& rstDisplayContext)
-{
- size_t nCount(0);
- size_t nTotal(0);
-
- nTotal = m_cRenderListeners.size();
- for (nCount = 0; nCount < nTotal; ++nCount)
- {
- m_cRenderListeners[nCount]->Render(rstDisplayContext);
- }
-}
//////////////////////////////////////////////////////////////////////////
#if defined(AZ_PLATFORM_WINDOWS)
// Note: Both CreateAnglesYPR and CreateOrientationYPR were copied verbatim from Cry_Camera.h which has been removed.
diff --git a/Code/Editor/Viewport.h b/Code/Editor/Viewport.h
index 1b0e5a4d93..d992eb4cb0 100644
--- a/Code/Editor/Viewport.h
+++ b/Code/Editor/Viewport.h
@@ -43,7 +43,6 @@ class CLayoutViewPane;
class CViewManager;
class CBaseObjectsCache;
struct HitContext;
-struct IRenderListener;
class CImageEx;
class QMenu;
@@ -104,10 +103,6 @@ public:
//! Access to view manager.
CViewManager* GetViewManager() const { return m_viewManager; };
- virtual void RegisterRenderListener(IRenderListener* piListener) = 0;
- virtual bool UnregisterRenderListener(IRenderListener* piListener) = 0;
- virtual bool IsRenderListenerRegistered(IRenderListener* piListener) = 0;
-
virtual void AddPostRenderer(IPostRenderer* pPostRenderer) = 0;
virtual bool RemovePostRenderer(IPostRenderer* pPostRenderer) = 0;
@@ -477,10 +472,6 @@ public:
void ResetCursor() override;
void SetSupplementaryCursorStr(const QString& str) override;
- void RegisterRenderListener(IRenderListener* piListener) override;
- bool UnregisterRenderListener(IRenderListener* piListener) override;
- bool IsRenderListenerRegistered(IRenderListener* piListener) override;
-
void AddPostRenderer(IPostRenderer* pPostRenderer) override;
bool RemovePostRenderer(IPostRenderer* pPostRenderer) override;
@@ -508,8 +499,6 @@ protected:
void setRenderOverlayVisible(bool);
bool isRenderOverlayVisible() const;
- void ProcessRenderLisneters(DisplayContext& rstDisplayContext);
-
void mousePressEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
void mouseDoubleClickEvent(QMouseEvent* event) override;
@@ -597,8 +586,6 @@ protected:
// Same construction matrix is shared by all viewports.
Matrix34 m_constructionMatrix[LAST_COORD_SYSTEM];
- std::vector m_cRenderListeners;
-
typedef std::vector<_smart_ptr > PostRenderers;
PostRenderers m_postRenderers;
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
diff --git a/Code/Editor/WipFeatureManager.cpp b/Code/Editor/WipFeatureManager.cpp
deleted file mode 100644
index 4fb9ed1d93..0000000000
--- a/Code/Editor/WipFeatureManager.cpp
+++ /dev/null
@@ -1,454 +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 "WipFeatureManager.h"
-
-#ifdef USE_WIP_FEATURES_MANAGER
-#include "WipFeaturesDlg.h"
-
-#if defined(AZ_PLATFORM_WINDOWS)
-const char* CWipFeatureManager::kWipFeaturesFilename = "@user@\\Editor\\UI\\WipFeatures.xml";
-#else
-const char* CWipFeatureManager::kWipFeaturesFilename = "@user@/Editor/UI/WipFeatures.xml";
-#endif
-CWipFeatureManager* CWipFeatureManager::s_pInstance = nullptr;
-
-static void WipFeatureVarChange(ICVar* pVar)
-{
- QString strParams = pVar->GetString();
- QStringList params;
-
- SplitString(strParams, params, ' ');
-
- if (strParams == "edit")
- {
- static CWipFeaturesDlg dlg;
-
- dlg.show();
-
- return;
- }
-
- if (params.size() >= 2)
- {
- QString featName = params[0].trimmed();
- QString attr = params[1].trimmed();
-
- if (featName.isEmpty())
- {
- return;
- }
-
- int id = featName.toInt();
-
- // if all features
- if (featName == "*")
- {
- if (attr == "enable")
- {
- CWipFeatureManager::Instance()->EnableAllFeatures(true);
- }
- else
- if (attr == "disable")
- {
- CWipFeatureManager::Instance()->EnableAllFeatures(false);
- }
- else
- if (attr == "hide")
- {
- CWipFeatureManager::Instance()->ShowAllFeatures(false);
- }
- else
- if (attr == "show")
- {
- CWipFeatureManager::Instance()->ShowAllFeatures(true);
- }
- else
- if (attr == "safemode")
- {
- CWipFeatureManager::Instance()->SetAllFeaturesSafeMode(true);
- }
- else
- if (attr == "fullmode")
- {
- CWipFeatureManager::Instance()->SetAllFeaturesSafeMode(false);
- }
- else
- {
- CWipFeatureManager::Instance()->SetAllFeaturesParams(attr.toUtf8().data());
- }
-
- return;
- }
-
- if (attr == "enable")
- {
- CWipFeatureManager::Instance()->EnableFeature(id, true);
- }
- else
- if (attr == "disable")
- {
- CWipFeatureManager::Instance()->EnableFeature(id, false);
- }
- else
- if (attr == "hide")
- {
- CWipFeatureManager::Instance()->ShowFeature(id, false);
- }
- else
- if (attr == "show")
- {
- CWipFeatureManager::Instance()->ShowFeature(id, true);
- }
- else
- if (attr == "safemode")
- {
- CWipFeatureManager::Instance()->SetFeatureSafeMode(id, true);
- }
- else
- if (attr == "fullmode")
- {
- CWipFeatureManager::Instance()->SetFeatureSafeMode(id, false);
- }
- else
- {
- CWipFeatureManager::Instance()->SetFeatureParams(id, attr.toUtf8().data());
- }
- }
-}
-
-CWipFeatureManager::CWipFeatureManager()
-{
- m_bEnabled = true;
-}
-
-CWipFeatureManager::~CWipFeatureManager()
-{
-}
-
-bool CWipFeatureManager::Init(bool bLoadXml)
-{
- if (!gEnv)
- {
- return false;
- }
-
- IConsole* pConsole = gEnv->pConsole;
-
- if (!pConsole)
- {
- return false;
- }
-
- REGISTER_CVAR2_CB("e_wipfeature", (const char**)&CWipFeatureManager::Instance()->m_consoleCmdParams, "", VF_ALWAYSONCHANGE | VF_CHEAT, "wipfeature enable|disable|hide|show|safemode|fullmode", WipFeatureVarChange);
-
- if (bLoadXml)
- {
- CWipFeatureManager::Instance()->Load();
- }
-
- return true;
-}
-
-void CWipFeatureManager::Shutdown()
-{
- CWipFeatureManager::Instance()->Save();
- delete s_pInstance;
- s_pInstance = nullptr;
-}
-
-bool CWipFeatureManager::Load(const char* pFilename, bool bClearExisting)
-{
- if (!GetISystem())
- {
- return false;
- }
-
- XmlNodeRef root = GetISystem()->LoadXmlFromFile(pFilename);
-
- if (!root)
- {
- return false;
- }
-
- if (bClearExisting)
- {
- m_features.clear();
- }
-
- Log("Loading WIP features file: '%s'...", pFilename);
-
- for (size_t i = 0, iCount = root->getChildCount(); i < iCount; ++i)
- {
- SWipFeatureInfo wf;
- XmlNodeRef node = root->getChild(static_cast(i));
- XmlString str;
-
- node->getAttr("id", wf.m_id);
- node->getAttr("displayName", str);
- wf.m_displayName = str;
- node->getAttr("visible", wf.m_bVisible);
- node->getAttr("enabled", wf.m_bEnabled);
- node->getAttr("safeMode", wf.m_bSafeMode);
- node->getAttr("params", str);
- wf.m_params = str;
- wf.m_bLoadedFromXml = true;
-
- TWipFeatures::iterator iter = m_features.find(wf.m_id);
-
- if (iter == m_features.end())
- {
- m_features[wf.m_id] = wf;
- }
- else
- {
- m_features[wf.m_id].m_bVisible = wf.m_bVisible;
- m_features[wf.m_id].m_bEnabled = wf.m_bEnabled;
- m_features[wf.m_id].m_bSafeMode = wf.m_bSafeMode;
- m_features[wf.m_id].m_params = wf.m_params;
- }
- }
-
- Log("Loaded %d WIP features.", m_features.size());
-
- return true;
-}
-
-bool CWipFeatureManager::Save(const char* pFilename)
-{
- if (!gEnv)
- {
- return false;
- }
-
- if (!GetISystem())
- {
- return false;
- }
-
- ISystem* pISystem = GetISystem();
-
- XmlNodeRef root = pISystem->CreateXmlNode("features");
-
- for (TWipFeatures::iterator iter = m_features.begin(), iterEnd = m_features.end(); iter != iterEnd; ++iter)
- {
- SWipFeatureInfo& wf = iter->second;
- XmlNodeRef node = root->createNode("feature");
-
- node->setAttr("id", wf.m_id);
- node->setAttr("displayName", wf.m_displayName.c_str());
- node->setAttr("visible", wf.m_bVisible);
- node->setAttr("enabled", wf.m_bEnabled);
- node->setAttr("safeMode", wf.m_bSafeMode);
- node->setAttr("params", wf.m_params.c_str());
-
- root->addChild(node);
- }
-
- root->saveToFile(pFilename);
-
- return true;
-}
-
-int CWipFeatureManager::RegisterFeature(const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, const char* pParams, bool bSaveToXml)
-{
- int aMaxId = -1;
-
- for (TWipFeatures::iterator iter = m_features.begin(), iterEnd = m_features.end(); iter != iterEnd; ++iter)
- {
- if (iter->first > aMaxId)
- {
- aMaxId = iter->first;
- }
- }
-
- ++aMaxId;
- SetFeature(aMaxId, pDisplayName, bVisible, bEnabled, bSafeMode, pParams, bSaveToXml);
-
- return aMaxId;
-}
-
-void CWipFeatureManager::SetFeature(int aFeatureId, const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, const char* pParams, bool bSaveToXml)
-{
- m_features[aFeatureId].m_id = aFeatureId;
- m_features[aFeatureId].m_displayName = pDisplayName;
- m_features[aFeatureId].m_bVisible = bVisible;
- m_features[aFeatureId].m_bEnabled = bEnabled;
- m_features[aFeatureId].m_bSafeMode = bSafeMode;
- m_features[aFeatureId].m_bSaveToXml = bSaveToXml;
- m_features[aFeatureId].m_params = pParams;
-
- if (m_features[aFeatureId].m_pfnUpdateFeature)
- {
- m_features[aFeatureId].m_pfnUpdateFeature(aFeatureId, &bVisible, &bEnabled, &bSafeMode, pParams);
- }
-}
-
-void CWipFeatureManager::SetDefaultFeatureStates(int aFeatureId, const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, const char* pParams)
-{
- TWipFeatures::iterator iter = m_features.find(aFeatureId);
-
- // set feature if not existing
- if (iter == m_features.end() || (iter != m_features.end() && !iter->second.m_bLoadedFromXml))
- {
- m_features[aFeatureId].m_id = aFeatureId;
- m_features[aFeatureId].m_displayName = pDisplayName;
- m_features[aFeatureId].m_bVisible = bVisible;
- m_features[aFeatureId].m_bEnabled = bEnabled;
- m_features[aFeatureId].m_bSafeMode = bSafeMode;
- m_features[aFeatureId].m_params = pParams;
- }
- else
- if (iter != m_features.end() && iter->second.m_bLoadedFromXml)
- {
- m_features[aFeatureId].m_id = aFeatureId;
- m_features[aFeatureId].m_displayName = pDisplayName;
- }
-
- if (m_features[aFeatureId].m_pfnUpdateFeature)
- {
- m_features[aFeatureId].m_pfnUpdateFeature(aFeatureId, &bVisible, &bEnabled, &bSafeMode, pParams);
- }
-}
-
-bool CWipFeatureManager::IsFeatureVisible(int aFeatureId)
-{
- return m_features[aFeatureId].m_bVisible || !m_bEnabled;
-}
-
-bool CWipFeatureManager::IsFeatureEnabled(int aFeatureId)
-{
- return m_features[aFeatureId].m_bEnabled || !m_bEnabled;
-}
-
-bool CWipFeatureManager::IsFeatureInSafeMode(int aFeatureId)
-{
- if (!m_bEnabled)
- {
- return false;
- }
-
- return m_features[aFeatureId].m_bSafeMode;
-}
-
-const char* CWipFeatureManager::GetFeatureParams(int aFeatureId)
-{
- return m_features[aFeatureId].m_params.c_str();
-}
-
-void CWipFeatureManager::ShowFeature(int aFeatureId, bool bShow)
-{
- m_features[aFeatureId].m_bVisible = bShow;
-
- if (m_features[aFeatureId].m_pfnUpdateFeature)
- {
- m_features[aFeatureId].m_pfnUpdateFeature(aFeatureId, &bShow, nullptr, nullptr, nullptr);
- }
-}
-
-void CWipFeatureManager::EnableFeature(int aFeatureId, bool bEnable)
-{
- m_features[aFeatureId].m_bEnabled = bEnable;
-
- if (m_features[aFeatureId].m_pfnUpdateFeature)
- {
- m_features[aFeatureId].m_pfnUpdateFeature(aFeatureId, nullptr, &bEnable, nullptr, nullptr);
- }
-}
-
-void CWipFeatureManager::SetFeatureSafeMode(int aFeatureId, bool bSafeMode)
-{
- m_features[aFeatureId].m_bSafeMode = bSafeMode;
-
- if (m_features[aFeatureId].m_pfnUpdateFeature)
- {
- m_features[aFeatureId].m_pfnUpdateFeature(aFeatureId, nullptr, nullptr, &bSafeMode, nullptr);
- }
-}
-
-void CWipFeatureManager::SetFeatureParams(int aFeatureId, const char* pParams)
-{
- m_features[aFeatureId].m_params = pParams;
-
- if (m_features[aFeatureId].m_pfnUpdateFeature)
- {
- m_features[aFeatureId].m_pfnUpdateFeature(aFeatureId, nullptr, nullptr, nullptr, pParams);
- }
-}
-
-void CWipFeatureManager::ShowAllFeatures(bool bShow)
-{
- for (TWipFeatures::iterator iter = m_features.begin(), iterEnd = m_features.end(); iter != iterEnd; ++iter)
- {
- iter->second.m_bVisible = bShow;
-
- if (iter->second.m_pfnUpdateFeature)
- {
- iter->second.m_pfnUpdateFeature(iter->first, &bShow, nullptr, nullptr, nullptr);
- }
- }
-}
-
-void CWipFeatureManager::EnableAllFeatures(bool bEnable)
-{
- for (TWipFeatures::iterator iter = m_features.begin(), iterEnd = m_features.end(); iter != iterEnd; ++iter)
- {
- iter->second.m_bEnabled = bEnable;
-
- if (iter->second.m_pfnUpdateFeature)
- {
- iter->second.m_pfnUpdateFeature(iter->first, nullptr, &bEnable, nullptr, nullptr);
- }
- }
-}
-
-void CWipFeatureManager::SetAllFeaturesSafeMode(bool bSafeMode)
-{
- for (TWipFeatures::iterator iter = m_features.begin(), iterEnd = m_features.end(); iter != iterEnd; ++iter)
- {
- iter->second.m_bSafeMode = bSafeMode;
-
- if (iter->second.m_pfnUpdateFeature)
- {
- iter->second.m_pfnUpdateFeature(iter->first, nullptr, nullptr, &bSafeMode, nullptr);
- }
- }
-}
-
-void CWipFeatureManager::SetAllFeaturesParams(const char* pParams)
-{
- for (TWipFeatures::iterator iter = m_features.begin(), iterEnd = m_features.end(); iter != iterEnd; ++iter)
- {
- iter->second.m_params = pParams;
-
- if (iter->second.m_pfnUpdateFeature)
- {
- iter->second.m_pfnUpdateFeature(iter->first, nullptr, nullptr, nullptr, pParams);
- }
- }
-}
-
-void CWipFeatureManager::EnableManager(bool bEnable)
-{
- m_bEnabled = bEnable;
-}
-
-void CWipFeatureManager::SetFeatureUpdateCallback(int aFeatureId, TWipFeatureUpdateCallback pfnUpdate)
-{
- m_features[aFeatureId].m_pfnUpdateFeature = pfnUpdate;
-}
-
-AZStd::map& CWipFeatureManager::GetFeatures()
-{
- return m_features;
-}
-
-#endif
diff --git a/Code/Editor/WipFeatureManager.h b/Code/Editor/WipFeatureManager.h
deleted file mode 100644
index cd20f6d591..0000000000
--- a/Code/Editor/WipFeatureManager.h
+++ /dev/null
@@ -1,162 +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_WIPFEATUREMANAGER_H
-#define CRYINCLUDE_EDITOR_WIPFEATUREMANAGER_H
-#pragma once
-
-#include
-#include
-
-/*
- This class is used to control work in progress features at runtime, so QA can test even if the end user will not see those features
- You can use the console command: e_wipfeature enable|disable|hide|show|safemode|fullmode
- ******************************************************************************************************************************************
- *** GOOD TO KNOW: "e_wipfeature edit" console command will display the WIP dialog and you can control the features from there
- ******************************************************************************************************************************************
-*/
-
-// undef this define to spot all wip feature usages within the editor at compile time
-#define USE_WIP_FEATURES_MANAGER
-
-#ifdef USE_WIP_FEATURES_MANAGER
-
-// use this to register new wip features, usage from inside functions
-// @param id is the numeric unique id of the feature, its good to have all feature ids in an enum in one file
-// @param bVisible is the feature visible by default
-// @param bEnabled is the feature enabled (usually visual enable like non-grayed) by default
-// @param bSafeMode is the feature operating in some sort of safe mode (the safe mode behavior defined by the feature itself)
-// @param pTWipFeatureUpdateCallback callback of type TWipFeatureUpdateCallback for when a feature state (visible,enabled and so on) was modified
-#define REGISTER_WIP_FEATURE(id, bVisible, bEnabled, bSafeMode, pTWipFeatureUpdateCallback) \
- static CWipFeatureManager::CWipFeatureRegisterer s_wipFeatureRegisterer_##id(id, ""#id, bVisible, bEnabled, bSafeMode, pTWipFeatureUpdateCallback);
-
-#define IS_WIP_FEATURE_VISIBLE(id) CWipFeatureManager::Instance()->IsFeatureVisible(id)
-#define IS_WIP_FEATURE_ENABLED(id) CWipFeatureManager::Instance()->IsFeatureEnabled(id)
-#define IS_WIP_FEATURE_SAFEMODE(id) CWipFeatureManager::Instance()->IsFeatureInSafeMode(id)
-
-// The feature manager singleton itself
-class CWipFeatureManager
-{
-public:
-
- static const char* kWipFeaturesFilename;
-
- // Used to register a callback function to update the state of features whitin the editor
- // pbVisible, pbEnabled, pbSafeMode, pParams - if the pointer is nullptr, then that attribute was not changed
- typedef void (* TWipFeatureUpdateCallback)(int aFeatureId, const bool* const pbVisible, const bool* const pbEnabled, const bool* const pbSafeMode, const char* pParams);
-
- // wip feature registerer auto create object, used for static auto feature creation with the REGISTER_WIP_FEATURE macro
- class CWipFeatureRegisterer
- {
- public:
-
- CWipFeatureRegisterer(int id, const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, TWipFeatureUpdateCallback pTWipFeatureUpdateCallback)
- {
- CWipFeatureManager::Instance()->SetFeatureUpdateCallback(id, pTWipFeatureUpdateCallback);
- CWipFeatureManager::Instance()->SetDefaultFeatureStates(id, pDisplayName, bVisible, bEnabled, bSafeMode);
- }
- };
-
- struct SWipFeatureInfo
- {
- SWipFeatureInfo()
- : m_id(0)
- , m_displayName("")
- , m_bVisible(true)
- , m_bEnabled(true)
- , m_bSafeMode(false)
- , m_pfnUpdateFeature(nullptr)
- , m_bLoadedFromXml(false)
- {}
-
- int m_id;
- AZStd::string m_displayName, m_params;
- bool m_bVisible, m_bEnabled, m_bSafeMode,
- // if true, this feature will be saved into the xml file when Save(...) will be called
- m_bSaveToXml, m_bLoadedFromXml;
- TWipFeatureUpdateCallback m_pfnUpdateFeature;
- };
-
- typedef AZStd::map TWipFeatures;
-
-private:
-
- CWipFeatureManager();
- ~CWipFeatureManager();
-
- static CWipFeatureManager* s_pInstance;
-
-public:
-
- static CWipFeatureManager* Instance()
- {
- if (!s_pInstance)
- {
- s_pInstance = new CWipFeatureManager();
- AZ_Assert(s_pInstance, "Could not construct CWipFeatureManager");
- }
-
- return s_pInstance;
- }
-
- static bool Init(bool bLoadXml = true);
- static void Shutdown();
-
- bool Load(const char* pFilename = kWipFeaturesFilename, bool bClearExisting = true);
- bool Save(const char* pFilename = kWipFeaturesFilename);
-
- // Register a new feature
- // @return a new feature ID
- int RegisterFeature(const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, const char* pParams = "", bool bSaveToXml = true);
- // Set an existing feature
- void SetFeature(int aFeatureId, const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, const char* pParams = "", bool bSaveToXml = true);
- // Create a new feature, but it will take into account the existing feature info from the loaded XML file, with persistent settings, if any
- void SetDefaultFeatureStates(int aFeatureId, const char* pDisplayName, bool bVisible, bool bEnabled, bool bSafeMode, const char* pParams = "");
- bool IsFeatureVisible(int aFeatureId);
- bool IsFeatureEnabled(int aFeatureId);
- bool IsFeatureInSafeMode(int aFeatureId);
- const char* GetFeatureParams(int aFeatureId);
-
- void ShowFeature(int aFeatureId, bool bShow = true);
- void EnableFeature(int aFeatureId, bool bEnable = true);
- void SetFeatureSafeMode(int aFeatureId, bool bSafeMode);
- void SetFeatureParams(int aFeatureId, const char* pParams);
-
- void ShowAllFeatures(bool bShow = true);
- void EnableAllFeatures(bool bEnable = true);
- void SetAllFeaturesSafeMode(bool bSafeMode);
- void SetAllFeaturesParams(const char* pParams);
-
- // if manager is disabled, then all queries about feature enable/visible/fullmode states will return true always
- void EnableManager(bool bEnable = true);
-
- void SetFeatureUpdateCallback(int aFeatureId, TWipFeatureUpdateCallback pfnUpdate);
- TWipFeatures& GetFeatures();
-
-private:
-
- static const int kMaxWipCmdSize = 200;
-
- TWipFeatures m_features;
- char m_consoleCmdParams[kMaxWipCmdSize];
- bool m_bEnabled;
-};
-
-#else
-
-//
-// no WIP feature manager in production build
-//
-#define REGISTER_WIP_FEATURE
-#define IS_WIP_FEATURE_VISIBLE(id) true
-#define IS_WIP_FEATURE_ENABLED(id) true
-#define IS_WIP_FEATURE_SAFEMODE(id) true
-
-#endif //USE_WIP_FEATURES_MANAGER
-#endif // CRYINCLUDE_EDITOR_WIPFEATUREMANAGER_H
diff --git a/Code/Editor/WipFeaturesDlg.cpp b/Code/Editor/WipFeaturesDlg.cpp
deleted file mode 100644
index bc4372d7fb..0000000000
--- a/Code/Editor/WipFeaturesDlg.cpp
+++ /dev/null
@@ -1,239 +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 "WipFeatureManager.h"
-
-#include "WipFeaturesDlg.h"
-
-// Qt
-#include
-
-AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
-#include "ui_WipFeaturesDlg.h"
-AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
-
-#ifdef USE_WIP_FEATURES_MANAGER
-
-// CWipFeaturesDlg dialog
-
-class WipFeaturesModel
- : public QAbstractTableModel
-{
-public:
- WipFeaturesModel(QObject* parent = nullptr)
- : QAbstractTableModel(parent)
- {
- }
-
- int rowCount(const QModelIndex& parent = QModelIndex()) const override
- {
- return parent.isValid() ? 0 : static_cast(CWipFeatureManager::Instance()->GetFeatures().size());
- }
-
- int columnCount(const QModelIndex& parent = QModelIndex()) const override
- {
- return parent.isValid() ? 0 : 5;
- }
-
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
- {
- if (orientation != Qt::Horizontal || section >= columnCount())
- {
- return QVariant();
- }
-
-
- switch (role)
- {
- case Qt::TextAlignmentRole:
- return section == 0 ? Qt::AlignLeft : Qt::AlignCenter;
- case Qt::DisplayRole:
- switch (section)
- {
- case 0:
- return tr("Name");
- case 1:
- return tr("Id");
- case 2:
- return tr("Visible");
- case 3:
- return tr("Enabled");
- case 4:
- return tr("SafeMode");
- default:
- return QVariant();
- }
- default:
- return QVariant();
- }
- }
-
- bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override
- {
- if (!index.isValid() || index.column() >= columnCount(index.parent()) || index.row() >= rowCount(index.parent()))
- {
- return false;
- }
-
- if (role != Qt::EditRole || !value.canConvert())
- {
- return false;
- }
-
- auto it = CWipFeatureManager::Instance()->GetFeatures().begin();
- std::advance(it, index.row());
-
- auto id = it->first;
-
- switch (index.column())
- {
- case 2:
- CWipFeatureManager::Instance()->ShowFeature(id, value.toBool());
- break;
- case 3:
- CWipFeatureManager::Instance()->EnableFeature(id, value.toBool());
- break;
- case 4:
- CWipFeatureManager::Instance()->SetFeatureSafeMode(id, value.toBool());
- break;
- default:
- return false;
- }
-
- emit dataChanged(index, index);
- return true;
- }
-
- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override
- {
- if (!index.isValid() || index.column() >= columnCount(index.parent()) || index.row() >= rowCount(index.parent()))
- {
- return QVariant();
- }
-
- if (role == Qt::TextAlignmentRole)
- {
- return headerData(index.column(), Qt::Horizontal, role);
- }
-
- if (role != Qt::DisplayRole)
- {
- return QVariant();
- }
-
- auto it = CWipFeatureManager::Instance()->GetFeatures().begin();
- std::advance(it, index.row());
-
- auto feature = it->second;
-
- switch (index.column())
- {
- case 0:
- return QString(feature.m_displayName.c_str());
- case 1:
- return feature.m_id;
- case 2:
- return feature.m_bVisible ? tr("X") : QString();
- case 3:
- return feature.m_bEnabled ? tr("X") : QString();
- case 4:
- return feature.m_bSafeMode ? tr("X") : QString();
- default:
- return QVariant();
- }
- }
-};
-
-CWipFeaturesDlg::CWipFeaturesDlg(QWidget* pParent /*=nullptr*/)
- : QDialog(pParent)
- , m_ui(new Ui::WipFeaturesDlg)
-{
- m_ui->setupUi(this);
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- setFixedSize(size());
-
- OnInitDialog();
-
- connect(m_ui->buttonShow, &QPushButton::clicked, this, &CWipFeaturesDlg::OnBnClickedButtonShow);
- connect(m_ui->buttonHide, &QPushButton::clicked, this, &CWipFeaturesDlg::OnBnClickedButtonHide);
- connect(m_ui->buttonEnable, &QPushButton::clicked, this, &CWipFeaturesDlg::OnBnClickedButtonEnable);
- connect(m_ui->buttonDisable, &QPushButton::clicked, this, &CWipFeaturesDlg::OnBnClickedButtonDisable);
- connect(m_ui->buttonSafeMode, &QPushButton::clicked, this, &CWipFeaturesDlg::OnBnClickedButtonSafemode);
- connect(m_ui->buttonNormalMode, &QPushButton::clicked, this, &CWipFeaturesDlg::OnBnClickedButtonNormalmode);
-}
-
-CWipFeaturesDlg::~CWipFeaturesDlg()
-{
-}
-
-// CWipFeaturesDlg message handlers
-
-void CWipFeaturesDlg::OnInitDialog()
-{
- m_ui->m_lstFeatures->setModel(new WipFeaturesModel(this));
- m_ui->m_lstFeatures->horizontalHeader()->resizeSection(0, 300);
- m_ui->m_lstFeatures->horizontalHeader()->resizeSection(1, 70);
- m_ui->m_lstFeatures->horizontalHeader()->resizeSection(2, 70);
- m_ui->m_lstFeatures->horizontalHeader()->resizeSection(3, 70);
- m_ui->m_lstFeatures->horizontalHeader()->resizeSection(4, 70);
-}
-
-void CWipFeaturesDlg::OnBnClickedButtonShow()
-{
- for (auto index : m_ui->m_lstFeatures->selectionModel()->selectedRows())
- {
- m_ui->m_lstFeatures->model()->setData(index.sibling(index.row(), 2), true);
- }
-}
-
-void CWipFeaturesDlg::OnBnClickedButtonHide()
-{
- for (auto index : m_ui->m_lstFeatures->selectionModel()->selectedRows())
- {
- m_ui->m_lstFeatures->model()->setData(index.sibling(index.row(), 2), false);
- }
-}
-
-void CWipFeaturesDlg::OnBnClickedButtonEnable()
-{
- for (auto index : m_ui->m_lstFeatures->selectionModel()->selectedRows())
- {
- m_ui->m_lstFeatures->model()->setData(index.sibling(index.row(), 3), true);
- }
-}
-
-void CWipFeaturesDlg::OnBnClickedButtonDisable()
-{
- for (auto index : m_ui->m_lstFeatures->selectionModel()->selectedRows())
- {
- m_ui->m_lstFeatures->model()->setData(index.sibling(index.row(), 3), false);
- }
-}
-
-void CWipFeaturesDlg::OnBnClickedButtonSafemode()
-{
- for (auto index : m_ui->m_lstFeatures->selectionModel()->selectedRows())
- {
- m_ui->m_lstFeatures->model()->setData(index.sibling(index.row(), 4), true);
- }
-}
-
-void CWipFeaturesDlg::OnBnClickedButtonNormalmode()
-{
- for (auto index : m_ui->m_lstFeatures->selectionModel()->selectedRows())
- {
- m_ui->m_lstFeatures->model()->setData(index.sibling(index.row(), 4), false);
- }
-}
-
-#include
-
-#endif // USE_WIP_FEATURES_MANAGER
diff --git a/Code/Editor/WipFeaturesDlg.h b/Code/Editor/WipFeaturesDlg.h
deleted file mode 100644
index 28f4f43958..0000000000
--- a/Code/Editor/WipFeaturesDlg.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-
-#pragma once
-#ifndef CRYINCLUDE_EDITOR_WIPFEATURESDLG_H
-#define CRYINCLUDE_EDITOR_WIPFEATURESDLG_H
-
-#if !defined(Q_MOC_RUN)
-#include
-#endif
-
-#ifdef USE_WIP_FEATURES_MANAGER
-
-// CWipFeaturesDlg dialog
-
-namespace Ui
-{
- class WipFeaturesDlg;
-}
-
-class CWipFeaturesDlg
- : public QDialog
-{
- Q_OBJECT
-public:
- CWipFeaturesDlg(QWidget* pParent = nullptr); // standard constructor
- virtual ~CWipFeaturesDlg();
-
-private:
- void OnInitDialog();
- void OnBnClickedButtonShow();
- void OnBnClickedButtonHide();
- void OnBnClickedButtonEnable();
- void OnBnClickedButtonDisable();
- void OnBnClickedButtonSafemode();
- void OnBnClickedButtonNormalmode();
-
-private:
- QScopedPointer m_ui;
-};
-
-#else
-
-class CWipFeaturesDlg
- : public QDialog
-{
- Q_OBJECT
-};
-
-#endif // USE_WIP_FEATURES_MANAGER
-
-#endif // CRYINCLUDE_EDITOR_WIPFEATURESDLG_H
diff --git a/Code/Editor/WipFeaturesDlg.qrc b/Code/Editor/WipFeaturesDlg.qrc
deleted file mode 100644
index 1205b1063e..0000000000
--- a/Code/Editor/WipFeaturesDlg.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- res/work_in_progress_icon.png
-
-
diff --git a/Code/Editor/WipFeaturesDlg.ui b/Code/Editor/WipFeaturesDlg.ui
deleted file mode 100644
index b4bf95e2c5..0000000000
--- a/Code/Editor/WipFeaturesDlg.ui
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
- WipFeaturesDlg
-
-
-
- 0
- 0
- 620
- 342
-
-
-
- Work in Progress Features
-
-
- -
-
-
- Work in progress features:
-
-
-
-
-
-
- Qt::ScrollBarAlwaysOff
-
-
- QAbstractItemView::SelectRows
-
-
- true
-
-
- false
-
-
- 19
-
-
-
- -
-
-
- Show
-
-
-
- -
-
-
- Hide
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Ignored
-
-
-
- 74
- 20
-
-
-
-
- -
-
-
- Enable
-
-
-
- -
-
-
- Disable
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Ignored
-
-
-
- 74
- 20
-
-
-
-
- -
-
-
- Normal Mode
-
-
-
- -
-
-
- Safe Mode
-
-
-
-
-
-
- -
-
-
-
- 64
- 64
-
-
-
-
- 64
- 64
-
-
-
- :/res/work_in_progress_icon.png
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- NOTE:<br/>The states of the WIP features will be saved in the Editor/UI/WipFeatures.xml file when the editor exits successfuly
-
-
- true
-
-
-
- -
-
-
- QDialogButtonBox::Close
-
-
-
-
-
-
-
-
-
-
- buttonBox
- rejected()
- WipFeaturesDlg
- close()
-
-
- 647
- 339
-
-
- 674
- 314
-
-
-
-
-
diff --git a/Code/Editor/arhitype_tree_00.png b/Code/Editor/arhitype_tree_00.png
deleted file mode 100644
index 274b2b0667..0000000000
--- a/Code/Editor/arhitype_tree_00.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b9cc3783ba8ccc940e89039455f2a8617a67520400ce74c9ce4c3d16d942ead8
-size 208
diff --git a/Code/Editor/arhitype_tree_01.png b/Code/Editor/arhitype_tree_01.png
deleted file mode 100644
index 274b2b0667..0000000000
--- a/Code/Editor/arhitype_tree_01.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b9cc3783ba8ccc940e89039455f2a8617a67520400ce74c9ce4c3d16d942ead8
-size 208
diff --git a/Code/Editor/arhitype_tree_02.png b/Code/Editor/arhitype_tree_02.png
deleted file mode 100644
index f29a502de1..0000000000
--- a/Code/Editor/arhitype_tree_02.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1f8b26d30e8c00514648cf72bb80fe8be3f665eb7473b6565b31a4b078816bfd
-size 208
diff --git a/Code/Editor/arhitype_tree_03.png b/Code/Editor/arhitype_tree_03.png
deleted file mode 100644
index f29a502de1..0000000000
--- a/Code/Editor/arhitype_tree_03.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1f8b26d30e8c00514648cf72bb80fe8be3f665eb7473b6565b31a4b078816bfd
-size 208
diff --git a/Code/Editor/bmp00005_00.png b/Code/Editor/bmp00005_00.png
deleted file mode 100644
index 345abfaf01..0000000000
--- a/Code/Editor/bmp00005_00.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e4a0284f8d3b2625c3f27d6505b19a0babb7af0825f08b4e08f40e647d10873
-size 388
diff --git a/Code/Editor/bmp00005_01.png b/Code/Editor/bmp00005_01.png
deleted file mode 100644
index abeba83277..0000000000
--- a/Code/Editor/bmp00005_01.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:43f64ba8198c197f2dd91f00947df808fa41274411934d3d1f81e3eb44f78e7a
-size 532
diff --git a/Code/Editor/bmp00005_02.png b/Code/Editor/bmp00005_02.png
deleted file mode 100644
index 45439597e2..0000000000
--- a/Code/Editor/bmp00005_02.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:556929870bb8c26fe8ebf4e94536e74c2eb1084e6f566007ec3a5f2e6303fa53
-size 392
diff --git a/Code/Editor/bmp00005_03.png b/Code/Editor/bmp00005_03.png
deleted file mode 100644
index b67ec062ff..0000000000
--- a/Code/Editor/bmp00005_03.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:239843fcd5a08e260106ee6eb3f69d3606321267e94df1e64ab25573d14980e1
-size 486
diff --git a/Code/Editor/bmp00005_04.png b/Code/Editor/bmp00005_04.png
deleted file mode 100644
index 565730be66..0000000000
--- a/Code/Editor/bmp00005_04.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:98baf372c91fe63c423237a2a3ae5a043a4da41095698035ce86fd13f2051e44
-size 514
diff --git a/Code/Editor/bmp00005_05.png b/Code/Editor/bmp00005_05.png
deleted file mode 100644
index 232c374515..0000000000
--- a/Code/Editor/bmp00005_05.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a570ae986b5f0b7e573094a7e75a8cfcc42f88b4766c47785bab26a9e8b1c2bb
-size 239
diff --git a/Code/Editor/bmp00005_06.png b/Code/Editor/bmp00005_06.png
deleted file mode 100644
index 3de6336a89..0000000000
--- a/Code/Editor/bmp00005_06.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4c527f2b8c883c73aebba0b5f0df6215f73b7259db61b13fa5ff7aa7b96a7b9b
-size 779
diff --git a/Code/Editor/bmp00005_07.png b/Code/Editor/bmp00005_07.png
deleted file mode 100644
index a813c0ad0b..0000000000
--- a/Code/Editor/bmp00005_07.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8f7f84cb48b2f9031b3a23abeddaed95d54601de33c58057d6677073b3e083aa
-size 501
diff --git a/Code/Editor/bmp00005_08.png b/Code/Editor/bmp00005_08.png
deleted file mode 100644
index b9f98ffe1c..0000000000
--- a/Code/Editor/bmp00005_08.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:804491b4251adfe017f8c52e00324dd74f00ebec445eedd947dea9356865cd56
-size 682
diff --git a/Code/Editor/bmp00005_09.png b/Code/Editor/bmp00005_09.png
deleted file mode 100644
index 8650cc6a9e..0000000000
--- a/Code/Editor/bmp00005_09.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ecf6333b6b402e1834f3047b13e58e4f80e17a8eed3750017219b5694d1b6f67
-size 625
diff --git a/Code/Editor/bmp00006_00.png b/Code/Editor/bmp00006_00.png
deleted file mode 100644
index c48f7ede09..0000000000
--- a/Code/Editor/bmp00006_00.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:70724fdada9cecd5a8d7ee5211ee713accc8f9642415e5dd93b6d621ed7273cf
-size 139
diff --git a/Code/Editor/bmp00006_01.png b/Code/Editor/bmp00006_01.png
deleted file mode 100644
index 7fb55bc8a5..0000000000
--- a/Code/Editor/bmp00006_01.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3d12de5789fb345c5ffe4b76246ec0ba4d7972fb14d15db3f36886f3beaed3ff
-size 166
diff --git a/Code/Editor/bmp00006_02.png b/Code/Editor/bmp00006_02.png
deleted file mode 100644
index 7b1ab690a3..0000000000
--- a/Code/Editor/bmp00006_02.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fffdbe9b4e1630f4158c4a00985e713ddb6fae50bc71e8c100255bab04054c0a
-size 235
diff --git a/Code/Editor/bmp00006_03.png b/Code/Editor/bmp00006_03.png
deleted file mode 100644
index 4829767efd..0000000000
--- a/Code/Editor/bmp00006_03.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d5e4092107dbc45863abe1cbecb30c48135e17155b5a85afa07a4a90b3eb1221
-size 274
diff --git a/Code/Editor/bmp00006_04.png b/Code/Editor/bmp00006_04.png
deleted file mode 100644
index dc809b8a65..0000000000
--- a/Code/Editor/bmp00006_04.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bc454d6cf883b78ae4cc32bfe4a81a6d5ee64e5e1bade9f2069e7e1b405ad9b1
-size 373
diff --git a/Code/Editor/bmp00006_05.png b/Code/Editor/bmp00006_05.png
deleted file mode 100644
index 2f3c67fff6..0000000000
--- a/Code/Editor/bmp00006_05.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:359236f395259b21b75f8f3fa250dfeea9ef82b9d541c7344954cf93db5c9d47
-size 616
diff --git a/Code/Editor/bmp00006_06.png b/Code/Editor/bmp00006_06.png
deleted file mode 100644
index 86c43264ea..0000000000
--- a/Code/Editor/bmp00006_06.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bc8e5dd88bb78f4f63ba8618e2bf0c1fd74d2dbdcf48261cfa57883c476619fe
-size 1101
diff --git a/Code/Editor/bmp00006_07.png b/Code/Editor/bmp00006_07.png
deleted file mode 100644
index 067b20a5fb..0000000000
--- a/Code/Editor/bmp00006_07.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1fbfb749ecfec92f461979d15642dfb940cc7895db3d27c47d040b0a7e2a1ae4
-size 1288
diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake
index 59a1a91647..5d45bbd853 100644
--- a/Code/Editor/editor_lib_files.cmake
+++ b/Code/Editor/editor_lib_files.cmake
@@ -270,7 +270,6 @@ set(FILES
Include/Command.h
Include/HitContext.h
Include/ICommandManager.h
- Include/IConsoleConnectivity.h
Include/IDisplayViewport.h
Include/IEditorClassFactory.h
Include/IEventLoopHook.h
@@ -282,9 +281,7 @@ set(FILES
Include/IObjectManager.h
Include/IPlugin.h
Include/IPreferencesPage.h
- Include/IRenderListener.h
Include/ISourceControl.h
- Include/ITextureDatabaseUpdater.h
Include/ITransformManipulator.h
Include/IViewPane.h
Include/ObjectEvent.h
@@ -350,7 +347,6 @@ set(FILES
MainStatusBar.cpp
MainStatusBar.h
MainStatusBarItems.h
- CrtDebug.cpp
CryEdit.rc
CryEditDoc.cpp
CryEditDoc.h
@@ -361,7 +357,6 @@ set(FILES
LogFile.cpp
LogFile.h
Resource.h
- UserMessageDefines.h
ActionManager.cpp
ActionManager.h
ShortcutDispatcher.cpp
@@ -400,9 +395,6 @@ set(FILES
ResizeResolutionDialog.cpp
ResizeResolutionDialog.h
ResizeResolutionDialog.ui
- SelectEAXPresetDlg.cpp
- SelectEAXPresetDlg.h
- SelectEAXPresetDlg.ui
SelectLightAnimationDialog.cpp
SelectLightAnimationDialog.h
SelectSequenceDialog.cpp
@@ -424,9 +416,6 @@ set(FILES
IconListDialog.ui
UndoDropDown.cpp
UndoDropDown.h
- DimensionsDialog.cpp
- DimensionsDialog.h
- DimensionsDialog.ui
NewLevelDialog.cpp
NewLevelDialog.h
NewLevelDialog.ui
@@ -459,12 +448,7 @@ set(FILES
ToolBox.h
TrackViewNewSequenceDialog.h
UndoConfigSpec.h
- UndoViewPosition.h
- UndoViewRotation.h
Util/GeometryUtil.h
- WipFeaturesDlg.h
- WipFeaturesDlg.ui
- WipFeaturesDlg.qrc
LevelIndependentFileMan.cpp
LevelIndependentFileMan.h
LogFileImpl.cpp
@@ -553,11 +537,6 @@ set(FILES
TrackViewNewSequenceDialog.cpp
TrackViewNewSequenceDialog.ui
UndoConfigSpec.cpp
- UndoViewPosition.cpp
- UndoViewRotation.cpp
- WipFeatureManager.cpp
- WipFeatureManager.h
- WipFeaturesDlg.cpp
Dialogs/ErrorsDlg.cpp
Dialogs/ErrorsDlg.h
Dialogs/ErrorsDlg.ui
@@ -574,8 +553,6 @@ set(FILES
ProcessInfo.cpp
ProcessInfo.h
Report.h
- SurfaceTypeValidator.cpp
- SurfaceTypeValidator.h
TrackView/AtomOutputFrameCapture.cpp
TrackView/AtomOutputFrameCapture.h
TrackView/TrackViewDialog.qrc
diff --git a/Code/Editor/particles_tree_00.png b/Code/Editor/particles_tree_00.png
deleted file mode 100644
index 274b2b0667..0000000000
--- a/Code/Editor/particles_tree_00.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b9cc3783ba8ccc940e89039455f2a8617a67520400ce74c9ce4c3d16d942ead8
-size 208
diff --git a/Code/Editor/particles_tree_01.png b/Code/Editor/particles_tree_01.png
deleted file mode 100644
index 274b2b0667..0000000000
--- a/Code/Editor/particles_tree_01.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b9cc3783ba8ccc940e89039455f2a8617a67520400ce74c9ce4c3d16d942ead8
-size 208
diff --git a/Code/Editor/particles_tree_02.png b/Code/Editor/particles_tree_02.png
deleted file mode 100644
index 96f4bec585..0000000000
--- a/Code/Editor/particles_tree_02.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19b1ee36ba28ede080ef34bd13d37a8b579ad8e106089cd1b800b15aef1b58df
-size 252
diff --git a/Code/Editor/particles_tree_03.png b/Code/Editor/particles_tree_03.png
deleted file mode 100644
index 3ead10b3b4..0000000000
--- a/Code/Editor/particles_tree_03.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9e6ef5e26d5d1566f51824c3bfa0ed3d2653cb49e38111aaf0572590b2fd15be
-size 261
diff --git a/Code/Editor/particles_tree_04.png b/Code/Editor/particles_tree_04.png
deleted file mode 100644
index 0920a2667d..0000000000
--- a/Code/Editor/particles_tree_04.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:acbeaa97474bd203ac35bf87fdea49d8b3d60f18db62d64dd47c3b1b50e54816
-size 303
diff --git a/Code/Editor/particles_tree_05.png b/Code/Editor/particles_tree_05.png
deleted file mode 100644
index 0a4ce61ba0..0000000000
--- a/Code/Editor/particles_tree_05.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d92fc6ec4afc582ff5d019f5b26c48e3dbe6c5f3c753271d7918cd5ca95b8b32
-size 254
diff --git a/Code/Editor/particles_tree_06.png b/Code/Editor/particles_tree_06.png
deleted file mode 100644
index e0ab042cb3..0000000000
--- a/Code/Editor/particles_tree_06.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:02066aed1d53c3ffc53c0f844a88ba8870b6c2c9c846c47ef6443c21ce4b7d0c
-size 224
diff --git a/Code/Editor/particles_tree_07.png b/Code/Editor/particles_tree_07.png
deleted file mode 100644
index 2ab767a7e9..0000000000
--- a/Code/Editor/particles_tree_07.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:67668cc830b553605d2f9ccad57f2fcd422da6a7515cfc4e9af0f43aa8591543
-size 213
diff --git a/Code/Editor/water.png b/Code/Editor/water.png
deleted file mode 100644
index 342dee81e3..0000000000
--- a/Code/Editor/water.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4abde33fa9c29e927e403e275979536e7defbb6476eb375e85f847396645953f
-size 41419
diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp
index 693b2f1648..72b6e807d2 100644
--- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp
+++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp
@@ -565,10 +565,6 @@ namespace AZ
m_entityActivatedEvent.DisconnectAllHandlers();
m_entityDeactivatedEvent.DisconnectAllHandlers();
-#if !defined(_RELEASE)
- m_budgetTracker.Reset();
-#endif
-
DestroyAllocator();
}
@@ -758,6 +754,12 @@ namespace AZ
static_cast(m_settingsRegistry.get())->ClearNotifiers();
static_cast(m_settingsRegistry.get())->ClearMergeEvents();
+#if !defined(_RELEASE)
+ // the budget tracker must be cleaned up prior to module unloading to ensure
+ // budgets initialized cross boundary are freed properly
+ m_budgetTracker.Reset();
+#endif
+
// Uninit and unload any dynamic modules.
m_moduleManager->UnloadModules();
ComponentApplicationLifecycle::SignalEvent(*m_settingsRegistry, "GemsUnloaded", R"({})");
diff --git a/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp b/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp
index 17f9bfea54..3baf78b63d 100644
--- a/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp
+++ b/Code/Framework/AzCore/AzCore/DOM/Backends/JSON/JsonSerializationUtils.cpp
@@ -361,7 +361,7 @@ namespace AZ::Dom::Json
bool RapidJsonReadHandler::String(const char* str, rapidjson::SizeType length, bool copy)
{
- const Lifetime lifetime = copy ? m_stringLifetime : Lifetime::Temporary;
+ const Lifetime lifetime = !copy ? m_stringLifetime : Lifetime::Temporary;
return CheckResult(m_visitor->String(AZStd::string_view(str, length), lifetime));
}
@@ -373,11 +373,7 @@ namespace AZ::Dom::Json
bool RapidJsonReadHandler::Key(const char* str, rapidjson::SizeType length, [[maybe_unused]] bool copy)
{
AZStd::string_view key = AZStd::string_view(str, length);
- if (!m_visitor->SupportsRawKeys())
- {
- m_visitor->Key(AZ::Name(key));
- }
- const Lifetime lifetime = copy ? m_stringLifetime : Lifetime::Temporary;
+ const Lifetime lifetime = !copy ? m_stringLifetime : Lifetime::Temporary;
return CheckResult(m_visitor->RawKey(key, lifetime));
}
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomPath.cpp b/Code/Framework/AzCore/AzCore/DOM/DomPath.cpp
new file mode 100644
index 0000000000..bc50a8513c
--- /dev/null
+++ b/Code/Framework/AzCore/AzCore/DOM/DomPath.cpp
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project.
+ * For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#include
+#include
+#include
+#include
+
+namespace AZ::Dom
+{
+ PathEntry::PathEntry(size_t value)
+ : m_value(value)
+ {
+ }
+
+ PathEntry::PathEntry(AZ::Name value)
+ : m_value(AZStd::move(value))
+ {
+ }
+
+ PathEntry::PathEntry(AZStd::string_view value)
+ : m_value(AZ::Name(value))
+ {
+ }
+
+ PathEntry& PathEntry::operator=(size_t value)
+ {
+ m_value = value;
+ return *this;
+ }
+
+ PathEntry& PathEntry::operator=(AZ::Name value)
+ {
+ m_value = AZStd::move(value);
+ return *this;
+ }
+
+ PathEntry& PathEntry::operator=(AZStd::string_view value)
+ {
+ m_value = AZ::Name(value);
+ return *this;
+ }
+
+ bool PathEntry::operator==(const PathEntry& other) const
+ {
+ return m_value == other.m_value;
+ }
+
+ bool PathEntry::operator==(size_t value) const
+ {
+ return IsIndex() && GetIndex() == value;
+ }
+
+ bool PathEntry::operator==(const AZ::Name& key) const
+ {
+ return IsKey() && GetKey() == key;
+ }
+
+ bool PathEntry::operator==(AZStd::string_view key) const
+ {
+ return IsKey() && GetKey() == AZ::Name(key);
+ }
+
+ bool PathEntry::operator!=(const PathEntry& other) const
+ {
+ return m_value != other.m_value;
+ }
+
+ bool PathEntry::operator!=(size_t value) const
+ {
+ return !IsIndex() || GetIndex() != value;
+ }
+
+ bool PathEntry::operator!=(const AZ::Name& key) const
+ {
+ return !IsKey() || GetKey() != key;
+ }
+
+ bool PathEntry::operator!=(AZStd::string_view key) const
+ {
+ return !IsKey() || GetKey() != AZ::Name(key);
+ }
+
+ void PathEntry::SetEndOfArray()
+ {
+ m_value = EndOfArrayIndex;
+ }
+
+ bool PathEntry::IsEndOfArray() const
+ {
+ const size_t* result = AZStd::get_if(&m_value);
+ return result == nullptr ? false : ((*result) == EndOfArrayIndex);
+ }
+
+ bool PathEntry::IsIndex() const
+ {
+ const size_t* result = AZStd::get_if(&m_value);
+ return result == nullptr ? false : ((*result) != EndOfArrayIndex);
+ }
+
+ bool PathEntry::IsKey() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ size_t PathEntry::GetIndex() const
+ {
+ AZ_Assert(IsIndex(), "GetIndex called on PathEntry that is not an index");
+ return AZStd::get(m_value);
+ }
+
+ const AZ::Name& PathEntry::GetKey() const
+ {
+ AZ_Assert(IsKey(), "Key called on PathEntry that is not a key");
+ return AZStd::get(m_value);
+ }
+
+ Path::Path(AZStd::initializer_list init)
+ : m_entries(init)
+ {
+ }
+
+ Path::Path(AZStd::string_view pathString)
+ {
+ FromString(pathString);
+ }
+
+ Path Path::operator/(const PathEntry& entry) const
+ {
+ Path newPath(*this);
+ newPath /= entry;
+ return newPath;
+ }
+
+ Path Path::operator/(size_t index) const
+ {
+ return *this / PathEntry(index);
+ }
+
+ Path Path::operator/(AZ::Name key) const
+ {
+ return *this / PathEntry(key);
+ }
+
+ Path Path::operator/(AZStd::string_view key) const
+ {
+ return *this / PathEntry(key);
+ }
+
+ Path Path::operator/(const Path& other) const
+ {
+ Path newPath(*this);
+ newPath /= other;
+ return newPath;
+ }
+
+ Path& Path::operator/=(const PathEntry& entry)
+ {
+ Push(entry);
+ return *this;
+ }
+
+ Path& Path::operator/=(size_t index)
+ {
+ return *this /= PathEntry(index);
+ }
+
+ Path& Path::operator/=(AZ::Name key)
+ {
+ return *this /= PathEntry(key);
+ }
+
+ Path& Path::operator/=(AZStd::string_view key)
+ {
+ return *this /= PathEntry(key);
+ }
+
+ Path& Path::operator/=(const Path& other)
+ {
+ for (const PathEntry& entry : other)
+ {
+ Push(entry);
+ }
+ return *this;
+ }
+
+ bool Path::operator==(const Path& other) const
+ {
+ return m_entries == other.m_entries;
+ }
+
+ const Path::ContainerType& Path::GetEntries() const
+ {
+ return m_entries;
+ }
+
+ void Path::Push(PathEntry entry)
+ {
+ m_entries.push_back(AZStd::move(entry));
+ }
+
+ void Path::Push(size_t entry)
+ {
+ Push(PathEntry(entry));
+ }
+
+ void Path::Push(AZ::Name entry)
+ {
+ Push(PathEntry(AZStd::move(entry)));
+ }
+
+ void Path::Push(AZStd::string_view entry)
+ {
+ Push(AZ::Name(entry));
+ }
+
+ void Path::Pop()
+ {
+ m_entries.pop_back();
+ }
+
+ void Path::Clear()
+ {
+ m_entries.clear();
+ }
+
+ PathEntry Path::At(size_t index) const
+ {
+ if (index < m_entries.size())
+ {
+ return m_entries[index];
+ }
+ return {};
+ }
+
+ size_t Path::Size() const
+ {
+ return m_entries.size();
+ }
+
+ PathEntry& Path::operator[](size_t index)
+ {
+ return m_entries[index];
+ }
+
+ const PathEntry& Path::operator[](size_t index) const
+ {
+ return m_entries[index];
+ }
+
+ Path::ContainerType::iterator Path::begin()
+ {
+ return m_entries.begin();
+ }
+
+ Path::ContainerType::iterator Path::end()
+ {
+ return m_entries.end();
+ }
+
+ Path::ContainerType::const_iterator Path::begin() const
+ {
+ return m_entries.cbegin();
+ }
+
+ Path::ContainerType::const_iterator Path::end() const
+ {
+ return m_entries.cend();
+ }
+
+ Path::ContainerType::const_iterator Path::cbegin() const
+ {
+ return m_entries.cbegin();
+ }
+
+ Path::ContainerType::const_iterator Path::cend() const
+ {
+ return m_entries.cend();
+ }
+
+ size_t Path::size() const
+ {
+ return m_entries.size();
+ }
+
+ size_t Path::GetStringLength() const
+ {
+ size_t size = 0;
+ for (const PathEntry& entry : m_entries)
+ {
+ ++size;
+ if (entry.IsEndOfArray())
+ {
+ size += 1;
+ }
+ else if (entry.IsIndex())
+ {
+ const size_t index = entry.GetIndex();
+ const double digitCount = index > 0 ? log10(aznumeric_cast(index + 1)) : 1.0;
+ size += aznumeric_cast(ceil(digitCount));
+ }
+ else
+ {
+ const char* nameBuffer = entry.GetKey().GetCStr();
+ for (size_t i = 0; nameBuffer[i]; ++i)
+ {
+ if (nameBuffer[i] == EscapeCharacter || nameBuffer[i] == PathSeparator)
+ {
+ ++size;
+ }
+ ++size;
+ }
+ }
+ }
+ return size;
+ }
+
+ void Path::FormatString(char* stringBuffer, size_t bufferSize) const
+ {
+ size_t bufferIndex = 0;
+
+ auto putChar = [&](char c)
+ {
+ if (bufferIndex == bufferSize)
+ {
+ return;
+ }
+ stringBuffer[bufferIndex++] = c;
+ };
+
+ auto writeToBuffer = [&](const char* key)
+ {
+ for (size_t keyIndex = 0; key[keyIndex]; ++keyIndex)
+ {
+ const char c = key[keyIndex];
+ if (c == EscapeCharacter)
+ {
+ putChar(EscapeCharacter);
+ putChar(TildeSequence);
+ }
+ else if (c == PathSeparator)
+ {
+ putChar(EscapeCharacter);
+ putChar(ForwardSlashSequence);
+ }
+ else
+ {
+ putChar(c);
+ }
+ }
+ };
+
+ for (const PathEntry& entry : m_entries)
+ {
+ putChar(PathSeparator);
+ if (entry.IsEndOfArray())
+ {
+ putChar(EndOfArrayCharacter);
+ }
+ else if (entry.IsIndex())
+ {
+ bufferIndex += azsnprintf(&stringBuffer[bufferIndex], bufferSize - bufferIndex, "%zu", entry.GetIndex());
+ }
+ else
+ {
+ writeToBuffer(entry.GetKey().GetCStr());
+ }
+ }
+
+ putChar('\0');
+ }
+
+ AZStd::string Path::ToString() const
+ {
+ AZStd::string formattedString;
+ const size_t size = GetStringLength();
+ formattedString.resize_no_construct(size);
+ FormatString(formattedString.data(), size + 1);
+ return formattedString;
+ }
+
+ void Path::AppendToString(AZStd::string& output) const
+ {
+ const size_t startIndex = output.length();
+ const size_t stringLength = GetStringLength();
+ output.resize_no_construct(startIndex + stringLength);
+ FormatString(output.data() + startIndex, stringLength + 1);
+ }
+
+ void Path::FromString(AZStd::string_view pathString)
+ {
+ m_entries.clear();
+ if (pathString.empty())
+ {
+ return;
+ }
+
+ size_t pathEntryCount = 0;
+ for (size_t i = 1; i <= pathString.size(); ++i)
+ {
+ if (pathString[i] == PathSeparator)
+ {
+ ++pathEntryCount;
+ }
+ }
+ m_entries.reserve(pathEntryCount);
+
+ // Ignore a preceeding path separator and start processing after it
+ size_t pathIndex = pathString[0] == PathSeparator ? 1 : 0;
+ bool isNumber = true;
+ AZStd::string convertedSection;
+ for (size_t i = pathIndex; i <= pathString.size(); ++i)
+ {
+ if (i == pathString.size() || pathString[i] == PathSeparator)
+ {
+ AZStd::string_view section = pathString.substr(pathIndex, i - pathIndex);
+ if (section.size() == 1 && section[0] == EndOfArrayCharacter)
+ {
+ PathEntry entry;
+ entry.SetEndOfArray();
+ m_entries.push_back(AZStd::move(entry));
+ }
+ else if (isNumber && !section.empty())
+ {
+ size_t index = 0;
+ ConsoleTypeHelpers::StringToValue(index, section);
+ m_entries.push_back(PathEntry{ index });
+ }
+ else
+ {
+ convertedSection.clear();
+ size_t lastPos = 0;
+ size_t posToEscape = section.find(EscapeCharacter);
+ while (posToEscape != AZStd::string_view::npos)
+ {
+ if (convertedSection.empty())
+ {
+ convertedSection.reserve(section.size() - 1);
+ }
+ convertedSection += section.substr(lastPos, posToEscape - lastPos);
+ if (section[posToEscape + 1] == ForwardSlashSequence)
+ {
+ convertedSection += '/';
+ }
+ else
+ {
+ convertedSection += '~';
+ }
+
+ lastPos = posToEscape + 2;
+ posToEscape = section.find(EscapeCharacter, posToEscape + 2);
+ }
+
+ if (!convertedSection.empty())
+ {
+ convertedSection += section.substr(lastPos);
+ m_entries.emplace_back(convertedSection);
+ }
+ else
+ {
+ m_entries.emplace_back(section);
+ }
+ }
+ pathIndex = i + 1;
+ isNumber = true;
+ continue;
+ }
+
+ const char c = pathString[i];
+ isNumber = isNumber && c >= '0' && c <= '9';
+ }
+ }
+} // namespace AZ::Dom
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomPath.h b/Code/Framework/AzCore/AzCore/DOM/DomPath.h
new file mode 100644
index 0000000000..39f7c7da98
--- /dev/null
+++ b/Code/Framework/AzCore/AzCore/DOM/DomPath.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project.
+ * For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#pragma once
+
+#include
+#include
+#include
+
+namespace AZ::Dom
+{
+ //! Represents the path to a direct descendant of a Value.
+ //! PathEntry may be one of the following:
+ //! - Index, a numerical index for indexing within Arrays and Nodes
+ //! - Key, a name for indexing within Objects and Nodes
+ //! - EndOfArray, a special-case indicator for representing the end of an array
+ //! used by the patching system to represent push / pop back operations.
+ class PathEntry final
+ {
+ public:
+ static constexpr size_t EndOfArrayIndex = size_t(-1);
+
+ PathEntry() = default;
+ PathEntry(const PathEntry&) = default;
+ PathEntry(PathEntry&&) = default;
+ explicit PathEntry(size_t value);
+ explicit PathEntry(AZ::Name value);
+ explicit PathEntry(AZStd::string_view value);
+
+ PathEntry& operator=(const PathEntry&) = default;
+ PathEntry& operator=(PathEntry&&) = default;
+ PathEntry& operator=(size_t value);
+ PathEntry& operator=(AZ::Name value);
+ PathEntry& operator=(AZStd::string_view value);
+
+ bool operator==(const PathEntry& other) const;
+ bool operator==(size_t index) const;
+ bool operator==(const AZ::Name& key) const;
+ bool operator==(AZStd::string_view key) const;
+ bool operator!=(const PathEntry& other) const;
+ bool operator!=(size_t index) const;
+ bool operator!=(const AZ::Name& key) const;
+ bool operator!=(AZStd::string_view key) const;
+
+ void SetEndOfArray();
+
+ bool IsEndOfArray() const;
+ bool IsIndex() const;
+ bool IsKey() const;
+
+ size_t GetIndex() const;
+ const AZ::Name& GetKey() const;
+
+ private:
+ AZStd::variant m_value;
+ };
+
+ //! Represents a path, represented as a series of PathEntry values, to a position in a Value.
+ class Path final
+ {
+ public:
+ using ContainerType = AZStd::vector;
+ static constexpr char PathSeparator = '/';
+ static constexpr char EscapeCharacter = '~';
+ static constexpr char TildeSequence = '0';
+ static constexpr char ForwardSlashSequence = '1';
+ static constexpr char EndOfArrayCharacter = '-';
+
+ Path() = default;
+ Path(const Path&) = default;
+ Path(Path&&) = default;
+ explicit Path(AZStd::initializer_list init);
+ //! Creates a Path from a path string, a path string is formatted per the JSON pointer specification
+ //! and looks like "/path/to/value/0"
+ explicit Path(AZStd::string_view pathString);
+
+ template
+ explicit Path(InputIterator first, InputIterator last)
+ : m_entries(first, last)
+ {
+ }
+
+ Path& operator=(const Path&) = default;
+ Path& operator=(Path&&) = default;
+
+ Path operator/(const PathEntry&) const;
+ Path operator/(size_t) const;
+ Path operator/(AZ::Name) const;
+ Path operator/(AZStd::string_view) const;
+ Path operator/(const Path&) const;
+
+ Path& operator/=(const PathEntry&);
+ Path& operator/=(size_t);
+ Path& operator/=(AZ::Name);
+ Path& operator/=(AZStd::string_view);
+ Path& operator/=(const Path&);
+
+ bool operator==(const Path&) const;
+
+ const ContainerType& GetEntries() const;
+ void Push(PathEntry entry);
+ void Push(size_t entry);
+ void Push(AZ::Name entry);
+ void Push(AZStd::string_view key);
+ void Pop();
+ void Clear();
+ PathEntry At(size_t index) const;
+ size_t Size() const;
+
+ PathEntry& operator[](size_t index);
+ const PathEntry& operator[](size_t index) const;
+
+ ContainerType::iterator begin();
+ ContainerType::iterator end();
+ ContainerType::const_iterator begin() const;
+ ContainerType::const_iterator end() const;
+ ContainerType::const_iterator cbegin() const;
+ ContainerType::const_iterator cend() const;
+ size_t size() const;
+
+ //! Gets the length this path would require, if string-formatted.
+ //! The length includes the contents of the string but not a null terminator.
+ size_t GetStringLength() const;
+ //! Formats a JSON-pointer style path string into the target buffer.
+ //! This operation will fail if bufferSize < GetStringLength() + 1
+ void FormatString(char* stringBuffer, size_t bufferSize) const;
+ //! Returns a JSON-pointer style path string for this path.
+ AZStd::string ToString() const;
+ void AppendToString(AZStd::string& output) const;
+ //! Reads a JSON-pointer style path from pathString and replaces this path's contents.
+ //! Paths are accepted in the following forms:
+ //! "/path/to/foo/0"
+ //! "path/to/foo/0"
+ void FromString(AZStd::string_view pathString);
+
+ private:
+ ContainerType m_entries;
+ };
+} // namespace AZ::Dom
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp b/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp
index 9751b9cecc..bc5c2b28cf 100644
--- a/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp
+++ b/Code/Framework/AzCore/AzCore/DOM/DomUtils.cpp
@@ -21,4 +21,164 @@ namespace AZ::Dom::Utils
{
return backend.ReadFromBufferInPlace(string.data(), string.size(), visitor);
}
-}
+
+ AZ::Outcome WriteToValue(const Backend::WriteCallback& writeCallback)
+ {
+ Value value;
+ AZStd::unique_ptr writer = value.GetWriteHandler();
+ Visitor::Result result = writeCallback(*writer);
+ if (!result.IsSuccess())
+ {
+ return AZ::Failure(result.GetError().FormatVisitorErrorMessage());
+ }
+ return AZ::Success(AZStd::move(value));
+ }
+
+ bool DeepCompareIsEqual(const Value& lhs, const Value& rhs)
+ {
+ const Value::ValueType& lhsValue = lhs.GetInternalValue();
+ const Value::ValueType& rhsValue = rhs.GetInternalValue();
+
+ if (lhs.IsString() && rhs.IsString())
+ {
+ // If we both hold the same ref counted string we don't need to do a full comparison
+ if (AZStd::holds_alternative(lhsValue) && lhsValue == rhsValue)
+ {
+ return true;
+ }
+ return lhs.GetString() == rhs.GetString();
+ }
+
+ return AZStd::visit(
+ [&](auto&& ourValue) -> bool
+ {
+ using Alternative = AZStd::decay_t;
+
+ if constexpr (AZStd::is_same_v)
+ {
+ if (!rhs.IsObject())
+ {
+ return false;
+ }
+ auto&& theirValue = AZStd::get>(rhsValue);
+ if (ourValue == theirValue)
+ {
+ return true;
+ }
+
+ const Object::ContainerType& ourValues = ourValue->GetValues();
+ const Object::ContainerType& theirValues = theirValue->GetValues();
+
+ if (ourValues.size() != theirValues.size())
+ {
+ return false;
+ }
+
+ for (size_t i = 0; i < ourValues.size(); ++i)
+ {
+ const Object::EntryType& lhsChild = ourValues[i];
+ auto rhsIt = rhs.FindMember(lhsChild.first);
+ if (rhsIt == rhs.MemberEnd() || !DeepCompareIsEqual(lhsChild.second, rhsIt->second))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ if (!rhs.IsArray())
+ {
+ return false;
+ }
+ auto&& theirValue = AZStd::get>(rhsValue);
+ if (ourValue == theirValue)
+ {
+ return true;
+ }
+
+ const Array::ContainerType& ourValues = ourValue->GetValues();
+ const Array::ContainerType& theirValues = theirValue->GetValues();
+
+ if (ourValues.size() != theirValues.size())
+ {
+ return false;
+ }
+
+ for (size_t i = 0; i < ourValues.size(); ++i)
+ {
+ const Value& lhsChild = ourValues[i];
+ const Value& rhsChild = theirValues[i];
+ if (!DeepCompareIsEqual(lhsChild, rhsChild))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ if (!rhs.IsNode())
+ {
+ return false;
+ }
+ auto&& theirValue = AZStd::get>(rhsValue);
+ if (ourValue == theirValue)
+ {
+ return true;
+ }
+
+ const Node& ourNode = *ourValue;
+ const Node& theirNode = *theirValue;
+
+ const Object::ContainerType& ourProperties = ourNode.GetProperties();
+ const Object::ContainerType& theirProperties = theirNode.GetProperties();
+
+ if (ourProperties.size() != theirProperties.size())
+ {
+ return false;
+ }
+
+ for (size_t i = 0; i < ourProperties.size(); ++i)
+ {
+ const Object::EntryType& lhsChild = ourProperties[i];
+ auto rhsIt = rhs.FindMember(lhsChild.first);
+ if (rhsIt == rhs.MemberEnd() || !DeepCompareIsEqual(lhsChild.second, rhsIt->second))
+ {
+ return false;
+ }
+ }
+
+ const Array::ContainerType& ourChildren = ourNode.GetChildren();
+ const Array::ContainerType& theirChildren = theirNode.GetChildren();
+
+ for (size_t i = 0; i < ourChildren.size(); ++i)
+ {
+ const Value& lhsChild = ourChildren[i];
+ const Value& rhsChild = theirChildren[i];
+ if (!DeepCompareIsEqual(lhsChild, rhsChild))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ else
+ {
+ return lhs == rhs;
+ }
+ },
+ lhsValue);
+ }
+
+ Value DeepCopy(const Value& value, bool copyStrings)
+ {
+ Value copiedValue;
+ AZStd::unique_ptr writer = copiedValue.GetWriteHandler();
+ value.Accept(*writer, copyStrings);
+ return copiedValue;
+ }
+} // namespace AZ::Dom::Utils
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomUtils.h b/Code/Framework/AzCore/AzCore/DOM/DomUtils.h
index 84a6eb5687..5403b93714 100644
--- a/Code/Framework/AzCore/AzCore/DOM/DomUtils.h
+++ b/Code/Framework/AzCore/AzCore/DOM/DomUtils.h
@@ -9,9 +9,15 @@
#pragma once
#include
+#include
namespace AZ::Dom::Utils
{
Visitor::Result ReadFromString(Backend& backend, AZStd::string_view string, AZ::Dom::Lifetime lifetime, Visitor& visitor);
Visitor::Result ReadFromStringInPlace(Backend& backend, AZStd::string& string, Visitor& visitor);
+
+ AZ::Outcome WriteToValue(const Backend::WriteCallback& writeCallback);
+
+ bool DeepCompareIsEqual(const Value& lhs, const Value& rhs);
+ Value DeepCopy(const Value& value, bool copyStrings = true);
} // namespace AZ::Dom::Utils
diff --git a/Code/Framework/AzCore/AzCore/DOM/DomValue.cpp b/Code/Framework/AzCore/AzCore/DOM/DomValue.cpp
new file mode 100644
index 0000000000..793fadd092
--- /dev/null
+++ b/Code/Framework/AzCore/AzCore/DOM/DomValue.cpp
@@ -0,0 +1,1301 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project.
+ * For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#include
+#include
+#include
+#include
+
+namespace AZ::Dom
+{
+ namespace Internal
+ {
+ template
+ AZStd::shared_ptr& CheckCopyOnWrite(AZStd::shared_ptr& refCountedPointer)
+ {
+ if (refCountedPointer.use_count() == 1)
+ {
+ return refCountedPointer;
+ }
+ else
+ {
+ refCountedPointer = AZStd::allocate_shared(StdValueAllocator(), *refCountedPointer);
+ return refCountedPointer;
+ }
+ }
+
+ template
+ constexpr size_t GetTypeIndexInternal(size_t index = 0);
+
+ template
+ constexpr size_t GetTypeIndexInternal(size_t index = 0)
+ {
+ if constexpr (AZStd::is_same_v)
+ {
+ return index;
+ }
+ else
+ {
+ return GetTypeIndexInternal(index + 1);
+ }
+ }
+
+ template
+ struct ExtractTypeArgs
+ {
+ };
+
+ template class TypeToExtract, typename... Args>
+ struct ExtractTypeArgs>
+ {
+ template
+ static constexpr size_t GetTypeIndex()
+ {
+ return GetTypeIndexInternal();
+ }
+ };
+ } // namespace Internal
+
+ // Helper function, looks up the index of a type within Value::m_value's storage
+ template
+ constexpr size_t GetTypeIndex()
+ {
+ return Internal::ExtractTypeArgs::GetTypeIndex();
+ }
+
+ const Array::ContainerType& Array::GetValues() const
+ {
+ return m_values;
+ }
+
+ const Object::ContainerType& Object::GetValues() const
+ {
+ return m_values;
+ }
+
+ Node::Node(AZ::Name name)
+ : m_name(AZStd::move(name))
+ {
+ }
+
+ AZ::Name Node::GetName() const
+ {
+ return m_name;
+ }
+
+ void Node::SetName(AZ::Name name)
+ {
+ m_name = AZStd::move(name);
+ }
+
+ Object::ContainerType& Node::GetProperties()
+ {
+ return m_properties;
+ }
+
+ const Object::ContainerType& Node::GetProperties() const
+ {
+ return m_properties;
+ }
+
+ Array::ContainerType& Node::GetChildren()
+ {
+ return m_children;
+ }
+
+ const Array::ContainerType& Node::GetChildren() const
+ {
+ return m_children;
+ }
+
+ Value::Value(SharedStringType sharedString)
+ : m_value(AZStd::move(sharedString))
+ {
+ }
+
+ Value::Value(const Value& value)
+ : m_value(value.m_value)
+ {
+ }
+
+ Value::Value(Value&& value) noexcept
+ {
+ memcpy(this, &value, sizeof(Value));
+ memset(&value, 0, sizeof(Value));
+ }
+
+ Value::Value(AZStd::string_view stringView, bool copy)
+ {
+ if (copy)
+ {
+ CopyFromString(stringView);
+ }
+ else
+ {
+ SetString(stringView);
+ }
+ }
+
+ Value::Value(AZStd::any opaqueValue)
+ : m_value(AZStd::allocate_shared(StdValueAllocator(), AZStd::move(opaqueValue)))
+ {
+ }
+
+ Value Value::FromOpaqueValue(const AZStd::any& value)
+ {
+ return Value(value);
+ }
+
+ Value::Value(int8_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(uint8_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(int16_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(uint16_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(int32_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(uint32_t value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(int64_t value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(uint64_t value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(float value)
+ : m_value(aznumeric_cast(value))
+ {
+ }
+
+ Value::Value(double value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(bool value)
+ : m_value(value)
+ {
+ }
+
+ Value::Value(Type type)
+ {
+ switch (type)
+ {
+ case Type::Null:
+ // Null is the default initialized value
+ break;
+ case Type::Bool:
+ m_value = false;
+ break;
+ case Type::Object:
+ SetObject();
+ break;
+ case Type::Array:
+ SetArray();
+ break;
+ case Type::String:
+ SetString("");
+ break;
+ case Type::Int64:
+ m_value = int64_t{};
+ break;
+ case Type::Uint64:
+ m_value = uint64_t{};
+ break;
+ case Type::Double:
+ m_value = double{};
+ break;
+ case Type::Node:
+ SetNode("");
+ break;
+ case Type::Opaque:
+ AZ_Assert(false, "AZ::Dom::Value may not be constructed with an empty opaque type");
+ break;
+ }
+ }
+
+ Value& Value::operator=(const Value& other)
+ {
+ m_value = other.m_value;
+ return *this;
+ }
+
+ Value& Value::operator=(Value&& other) noexcept
+ {
+ SetNull();
+ memcpy(this, &other, sizeof(Value));
+ memset(&other, 0, sizeof(Value));
+ return *this;
+ }
+
+ bool Value::operator==(const Value& rhs) const
+ {
+ if (IsString() && rhs.IsString())
+ {
+ return GetString() == rhs.GetString();
+ }
+ else
+ {
+ return m_value == rhs.m_value;
+ }
+ }
+
+ bool Value::operator!=(const Value& rhs) const
+ {
+ return !operator==(rhs);
+ }
+
+ void Value::Swap(Value& other) noexcept
+ {
+ AZStd::aligned_storage_for_t temp;
+ memcpy(&temp, this, sizeof(Value));
+ memcpy(this, &other, sizeof(Value));
+ memcpy(&other, &temp, sizeof(Value));
+ }
+
+ Type Dom::Value::GetType() const
+ {
+ switch (m_value.index())
+ {
+ case GetTypeIndex():
+ return Type::Null;
+ case GetTypeIndex():
+ return Type::Int64;
+ case GetTypeIndex():
+ return Type::Uint64;
+ case GetTypeIndex():
+ return Type::Double;
+ case GetTypeIndex():
+ return Type::Bool;
+ case GetTypeIndex():
+ case GetTypeIndex():
+ case GetTypeIndex():
+ return Type::String;
+ case GetTypeIndex():
+ return Type::Object;
+ case GetTypeIndex():
+ return Type::Array;
+ case GetTypeIndex():
+ return Type::Node;
+ case GetTypeIndex>():
+ return Type::Opaque;
+ }
+ AZ_Assert(false, "AZ::Dom::Value::GetType: m_value has an unexpected type");
+ return Type::Null;
+ }
+
+ bool Value::IsNull() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsFalse() const
+ {
+ const bool* value = AZStd::get_if(&m_value);
+ return value != nullptr ? !(*value) : false;
+ }
+
+ bool Value::IsTrue() const
+ {
+ const bool* value = AZStd::get_if(&m_value);
+ return value != nullptr ? *value : false;
+ }
+
+ bool Value::IsBool() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsNode() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsObject() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsArray() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsOpaqueValue() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsNumber() const
+ {
+ return AZStd::visit(
+ [](auto&& value) -> bool
+ {
+ using CurrentType = AZStd::decay_t;
+ if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ },
+ m_value);
+ }
+
+ bool Value::IsInt() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsUint() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsDouble() const
+ {
+ return AZStd::holds_alternative(m_value);
+ }
+
+ bool Value::IsString() const
+ {
+ return AZStd::visit(
+ [](auto&& value) -> bool
+ {
+ using CurrentType = AZStd::decay_t;
+ if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else if constexpr (AZStd::is_same_v)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ },
+ m_value);
+ }
+
+ Value& Value::SetObject()
+ {
+ m_value = AZStd::allocate_shared