diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py index 062c449ab7..e701ff8d16 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py @@ -161,20 +161,6 @@ def run(): # Deletion/Undo/Redo test verify_deletion_undo_redo(self.component_name, entity_obj) - # Area Light Component - area_light = "Area Light" - ComponentTests( - area_light, lambda entity_obj: verify_required_component_addition( - entity_obj, ["Capsule Shape"], area_light)) - - # Decal Component - material_asset_path = os.path.join("AutomatedTesting", "Materials", "basic_grey.material") - material_asset = asset.AssetCatalogRequestBus( - bus.Broadcast, "GetAssetIdByPath", material_asset_path, math.Uuid(), False) - ComponentTests( - "Decal (Atom)", lambda entity_obj: verify_set_property( - entity_obj, "Controller|Configuration|Material", material_asset)) - # DepthOfField Component camera_entity = hydra.Entity("camera_entity") camera_entity.create_entity(math.Vector3(512.0, 512.0, 34.0), ["Camera"]) @@ -185,6 +171,14 @@ def run(): lambda entity_obj: verify_set_property( entity_obj, "Controller|Configuration|Camera Entity", camera_entity.id)) + # Decal Component + material_asset_path = os.path.join("AutomatedTesting", "Materials", "basic_grey.material") + material_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", material_asset_path, math.Uuid(), False) + ComponentTests( + "Decal (Atom)", lambda entity_obj: verify_set_property( + entity_obj, "Controller|Configuration|Material", material_asset)) + # Directional Light Component ComponentTests( "Directional Light", @@ -213,9 +207,6 @@ def run(): # Physical Sky Component ComponentTests("Physical Sky") - # Point Light Component - ComponentTests("Point Light") - # PostFX Layer Component ComponentTests("PostFX Layer") diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index 16139e3f66..aafa2ff9b7 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -27,194 +27,6 @@ TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "atom_hydra_scripts") @pytest.mark.parametrize("level", ["auto_test"]) class TestAtomEditorComponentsMain(object): - @pytest.mark.test_case_id( - "C32078117", # Area Light - "C32078130", # Display Mapper - "C32078129", # Light - "C32078131", # Radius Weight Modifier - "C32078127", # PostFX Layer - "C32078126", # Point Light - "C32078125", # Physical Sky - "C32078115", # Global Skylight (IBL) - "C32078121", # Exposure Control - "C32078120", # Directional Light - "C32078119", # DepthOfField - "C32078118") # Decal - def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): - cfg_args = [level] - - expected_lines = [ - # Area Light Component - "Area Light Entity successfully created", - "Area Light_test: Component added to the entity: True", - "Area Light_test: Component removed after UNDO: True", - "Area Light_test: Component added after REDO: True", - "Area Light_test: Entered game mode: True", - "Area Light_test: Entity enabled after adding required components: True", - "Area Light_test: Entity is hidden: True", - "Area Light_test: Entity is shown: True", - "Area Light_test: Entity deleted: True", - "Area Light_test: UNDO entity deletion works: True", - "Area Light_test: REDO entity deletion works: True", - # Decal Component - "Decal (Atom) Entity successfully created", - "Decal (Atom)_test: Component added to the entity: True", - "Decal (Atom)_test: Component removed after UNDO: True", - "Decal (Atom)_test: Component added after REDO: True", - "Decal (Atom)_test: Entered game mode: True", - "Decal (Atom)_test: Exit game mode: True", - "Decal (Atom) Controller|Configuration|Material: SUCCESS", - "Decal (Atom)_test: Entity is hidden: True", - "Decal (Atom)_test: Entity is shown: True", - "Decal (Atom)_test: Entity deleted: True", - "Decal (Atom)_test: UNDO entity deletion works: True", - "Decal (Atom)_test: REDO entity deletion works: True", - # DepthOfField Component - "DepthOfField Entity successfully created", - "DepthOfField_test: Component added to the entity: True", - "DepthOfField_test: Component removed after UNDO: True", - "DepthOfField_test: Component added after REDO: True", - "DepthOfField_test: Entered game mode: True", - "DepthOfField_test: Exit game mode: True", - "DepthOfField_test: Entity disabled initially: True", - "DepthOfField_test: Entity enabled after adding required components: True", - "DepthOfField Controller|Configuration|Camera Entity: SUCCESS", - "DepthOfField_test: Entity is hidden: True", - "DepthOfField_test: Entity is shown: True", - "DepthOfField_test: Entity deleted: True", - "DepthOfField_test: UNDO entity deletion works: True", - "DepthOfField_test: REDO entity deletion works: True", - # Directional Light Component - "Directional Light Entity successfully created", - "Directional Light_test: Component added to the entity: True", - "Directional Light_test: Component removed after UNDO: True", - "Directional Light_test: Component added after REDO: True", - "Directional Light_test: Entered game mode: True", - "Directional Light_test: Exit game mode: True", - "Directional Light Controller|Configuration|Shadow|Camera: SUCCESS", - "Directional Light_test: Entity is hidden: True", - "Directional Light_test: Entity is shown: True", - "Directional Light_test: Entity deleted: True", - "Directional Light_test: UNDO entity deletion works: True", - "Directional Light_test: REDO entity deletion works: True", - # Exposure Control Component - "Exposure Control Entity successfully created", - "Exposure Control_test: Component added to the entity: True", - "Exposure Control_test: Component removed after UNDO: True", - "Exposure Control_test: Component added after REDO: True", - "Exposure Control_test: Entered game mode: True", - "Exposure Control_test: Exit game mode: True", - "Exposure Control_test: Entity disabled initially: True", - "Exposure Control_test: Entity enabled after adding required components: True", - "Exposure Control_test: Entity is hidden: True", - "Exposure Control_test: Entity is shown: True", - "Exposure Control_test: Entity deleted: True", - "Exposure Control_test: UNDO entity deletion works: True", - "Exposure Control_test: REDO entity deletion works: True", - # Global Skylight (IBL) Component - "Global Skylight (IBL) Entity successfully created", - "Global Skylight (IBL)_test: Component added to the entity: True", - "Global Skylight (IBL)_test: Component removed after UNDO: True", - "Global Skylight (IBL)_test: Component added after REDO: True", - "Global Skylight (IBL)_test: Entered game mode: True", - "Global Skylight (IBL)_test: Exit game mode: True", - "Global Skylight (IBL) Controller|Configuration|Diffuse Image: SUCCESS", - "Global Skylight (IBL) Controller|Configuration|Specular Image: SUCCESS", - "Global Skylight (IBL)_test: Entity is hidden: True", - "Global Skylight (IBL)_test: Entity is shown: True", - "Global Skylight (IBL)_test: Entity deleted: True", - "Global Skylight (IBL)_test: UNDO entity deletion works: True", - "Global Skylight (IBL)_test: REDO entity deletion works: True", - # Physical Sky Component - "Physical Sky Entity successfully created", - "Physical Sky component was added to entity", - "Entity has a Physical Sky component", - "Physical Sky_test: Component added to the entity: True", - "Physical Sky_test: Component removed after UNDO: True", - "Physical Sky_test: Component added after REDO: True", - "Physical Sky_test: Entered game mode: True", - "Physical Sky_test: Exit game mode: True", - "Physical Sky_test: Entity is hidden: True", - "Physical Sky_test: Entity is shown: True", - "Physical Sky_test: Entity deleted: True", - "Physical Sky_test: UNDO entity deletion works: True", - "Physical Sky_test: REDO entity deletion works: True", - # Point Light Component - "Point Light Entity successfully created", - "Point Light_test: Component added to the entity: True", - "Point Light_test: Component removed after UNDO: True", - "Point Light_test: Component added after REDO: True", - "Point Light_test: Entered game mode: True", - "Point Light_test: Exit game mode: True", - "Point Light_test: Entity is hidden: True", - "Point Light_test: Entity is shown: True", - "Point Light_test: Entity deleted: True", - "Point Light_test: UNDO entity deletion works: True", - "Point Light_test: REDO entity deletion works: True", - # PostFX Layer Component - "PostFX Layer Entity successfully created", - "PostFX Layer_test: Component added to the entity: True", - "PostFX Layer_test: Component removed after UNDO: True", - "PostFX Layer_test: Component added after REDO: True", - "PostFX Layer_test: Entered game mode: True", - "PostFX Layer_test: Exit game mode: True", - "PostFX Layer_test: Entity is hidden: True", - "PostFX Layer_test: Entity is shown: True", - "PostFX Layer_test: Entity deleted: True", - "PostFX Layer_test: UNDO entity deletion works: True", - "PostFX Layer_test: REDO entity deletion works: True", - # Radius Weight Modifier Component - "Radius Weight Modifier Entity successfully created", - "Radius Weight Modifier_test: Component added to the entity: True", - "Radius Weight Modifier_test: Component removed after UNDO: True", - "Radius Weight Modifier_test: Component added after REDO: True", - "Radius Weight Modifier_test: Entered game mode: True", - "Radius Weight Modifier_test: Exit game mode: True", - "Radius Weight Modifier_test: Entity is hidden: True", - "Radius Weight Modifier_test: Entity is shown: True", - "Radius Weight Modifier_test: Entity deleted: True", - "Radius Weight Modifier_test: UNDO entity deletion works: True", - "Radius Weight Modifier_test: REDO entity deletion works: True", - # Light Component - "Light Entity successfully created", - "Light_test: Component added to the entity: True", - "Light_test: Component removed after UNDO: True", - "Light_test: Component added after REDO: True", - "Light_test: Entered game mode: True", - "Light_test: Exit game mode: True", - "Light_test: Entity is hidden: True", - "Light_test: Entity is shown: True", - "Light_test: Entity deleted: True", - "Light_test: UNDO entity deletion works: True", - "Light_test: REDO entity deletion works: True", - # Display Mapper Component - "Display Mapper Entity successfully created", - "Display Mapper_test: Component added to the entity: True", - "Display Mapper_test: Component removed after UNDO: True", - "Display Mapper_test: Component added after REDO: True", - "Display Mapper_test: Entered game mode: True", - "Display Mapper_test: Exit game mode: True", - "Display Mapper_test: Entity is hidden: True", - "Display Mapper_test: Entity is shown: True", - "Display Mapper_test: Entity deleted: True", - "Display Mapper_test: UNDO entity deletion works: True", - "Display Mapper_test: REDO entity deletion works: True", - ] - - unexpected_lines = [ - "failed to open", - "Traceback (most recent call last):", - ] - - hydra.launch_and_validate_results( - request, - TEST_DIRECTORY, - editor, - "hydra_AtomEditorComponents_AddedToEntity.py", - timeout=EDITOR_TIMEOUT, - expected_lines=expected_lines, - unexpected_lines=unexpected_lines, - halt_on_unexpected=True, - null_renderer=True, - cfg_args=cfg_args, - ) + # It requires at least one test + def test_Dummy(self, request, editor, level, workspace, project, launcher_platform): + pass diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py index 0fb873e677..8ca5b5aa31 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py @@ -19,6 +19,170 @@ import pytest @pytest.mark.parametrize("level", ["auto_test"]) class TestAtomEditorComponentsSandbox(object): - # It requires at least one test - def test_Dummy(self, request, editor, level, workspace, project, launcher_platform): - pass + @pytest.mark.test_case_id( + "C32078117", # Area Light + "C32078130", # Display Mapper + "C32078129", # Light + "C32078131", # Radius Weight Modifier + "C32078127", # PostFX Layer + "C32078126", # Point Light + "C32078125", # Physical Sky + "C32078115", # Global Skylight (IBL) + "C32078121", # Exposure Control + "C32078120", # Directional Light + "C32078119", # DepthOfField + "C32078118") # Decal + def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): + cfg_args = [level] + + expected_lines = [ + # Decal Component + "Decal (Atom) Entity successfully created", + "Decal (Atom)_test: Component added to the entity: True", + "Decal (Atom)_test: Component removed after UNDO: True", + "Decal (Atom)_test: Component added after REDO: True", + "Decal (Atom)_test: Entered game mode: True", + "Decal (Atom)_test: Exit game mode: True", + "Decal (Atom) Controller|Configuration|Material: SUCCESS", + "Decal (Atom)_test: Entity is hidden: True", + "Decal (Atom)_test: Entity is shown: True", + "Decal (Atom)_test: Entity deleted: True", + "Decal (Atom)_test: UNDO entity deletion works: True", + "Decal (Atom)_test: REDO entity deletion works: True", + # DepthOfField Component + "DepthOfField Entity successfully created", + "DepthOfField_test: Component added to the entity: True", + "DepthOfField_test: Component removed after UNDO: True", + "DepthOfField_test: Component added after REDO: True", + "DepthOfField_test: Entered game mode: True", + "DepthOfField_test: Exit game mode: True", + "DepthOfField_test: Entity disabled initially: True", + "DepthOfField_test: Entity enabled after adding required components: True", + "DepthOfField Controller|Configuration|Camera Entity: SUCCESS", + "DepthOfField_test: Entity is hidden: True", + "DepthOfField_test: Entity is shown: True", + "DepthOfField_test: Entity deleted: True", + "DepthOfField_test: UNDO entity deletion works: True", + "DepthOfField_test: REDO entity deletion works: True", + # Directional Light Component + "Directional Light Entity successfully created", + "Directional Light_test: Component added to the entity: True", + "Directional Light_test: Component removed after UNDO: True", + "Directional Light_test: Component added after REDO: True", + "Directional Light_test: Entered game mode: True", + "Directional Light_test: Exit game mode: True", + "Directional Light Controller|Configuration|Shadow|Camera: SUCCESS", + "Directional Light_test: Entity is hidden: True", + "Directional Light_test: Entity is shown: True", + "Directional Light_test: Entity deleted: True", + "Directional Light_test: UNDO entity deletion works: True", + "Directional Light_test: REDO entity deletion works: True", + # Exposure Control Component + "Exposure Control Entity successfully created", + "Exposure Control_test: Component added to the entity: True", + "Exposure Control_test: Component removed after UNDO: True", + "Exposure Control_test: Component added after REDO: True", + "Exposure Control_test: Entered game mode: True", + "Exposure Control_test: Exit game mode: True", + "Exposure Control_test: Entity disabled initially: True", + "Exposure Control_test: Entity enabled after adding required components: True", + "Exposure Control_test: Entity is hidden: True", + "Exposure Control_test: Entity is shown: True", + "Exposure Control_test: Entity deleted: True", + "Exposure Control_test: UNDO entity deletion works: True", + "Exposure Control_test: REDO entity deletion works: True", + # Global Skylight (IBL) Component + "Global Skylight (IBL) Entity successfully created", + "Global Skylight (IBL)_test: Component added to the entity: True", + "Global Skylight (IBL)_test: Component removed after UNDO: True", + "Global Skylight (IBL)_test: Component added after REDO: True", + "Global Skylight (IBL)_test: Entered game mode: True", + "Global Skylight (IBL)_test: Exit game mode: True", + "Global Skylight (IBL) Controller|Configuration|Diffuse Image: SUCCESS", + "Global Skylight (IBL) Controller|Configuration|Specular Image: SUCCESS", + "Global Skylight (IBL)_test: Entity is hidden: True", + "Global Skylight (IBL)_test: Entity is shown: True", + "Global Skylight (IBL)_test: Entity deleted: True", + "Global Skylight (IBL)_test: UNDO entity deletion works: True", + "Global Skylight (IBL)_test: REDO entity deletion works: True", + # Physical Sky Component + "Physical Sky Entity successfully created", + "Physical Sky component was added to entity", + "Entity has a Physical Sky component", + "Physical Sky_test: Component added to the entity: True", + "Physical Sky_test: Component removed after UNDO: True", + "Physical Sky_test: Component added after REDO: True", + "Physical Sky_test: Entered game mode: True", + "Physical Sky_test: Exit game mode: True", + "Physical Sky_test: Entity is hidden: True", + "Physical Sky_test: Entity is shown: True", + "Physical Sky_test: Entity deleted: True", + "Physical Sky_test: UNDO entity deletion works: True", + "Physical Sky_test: REDO entity deletion works: True", + # PostFX Layer Component + "PostFX Layer Entity successfully created", + "PostFX Layer_test: Component added to the entity: True", + "PostFX Layer_test: Component removed after UNDO: True", + "PostFX Layer_test: Component added after REDO: True", + "PostFX Layer_test: Entered game mode: True", + "PostFX Layer_test: Exit game mode: True", + "PostFX Layer_test: Entity is hidden: True", + "PostFX Layer_test: Entity is shown: True", + "PostFX Layer_test: Entity deleted: True", + "PostFX Layer_test: UNDO entity deletion works: True", + "PostFX Layer_test: REDO entity deletion works: True", + # Radius Weight Modifier Component + "Radius Weight Modifier Entity successfully created", + "Radius Weight Modifier_test: Component added to the entity: True", + "Radius Weight Modifier_test: Component removed after UNDO: True", + "Radius Weight Modifier_test: Component added after REDO: True", + "Radius Weight Modifier_test: Entered game mode: True", + "Radius Weight Modifier_test: Exit game mode: True", + "Radius Weight Modifier_test: Entity is hidden: True", + "Radius Weight Modifier_test: Entity is shown: True", + "Radius Weight Modifier_test: Entity deleted: True", + "Radius Weight Modifier_test: UNDO entity deletion works: True", + "Radius Weight Modifier_test: REDO entity deletion works: True", + # Light Component + "Light Entity successfully created", + "Light_test: Component added to the entity: True", + "Light_test: Component removed after UNDO: True", + "Light_test: Component added after REDO: True", + "Light_test: Entered game mode: True", + "Light_test: Exit game mode: True", + "Light_test: Entity is hidden: True", + "Light_test: Entity is shown: True", + "Light_test: Entity deleted: True", + "Light_test: UNDO entity deletion works: True", + "Light_test: REDO entity deletion works: True", + # Display Mapper Component + "Display Mapper Entity successfully created", + "Display Mapper_test: Component added to the entity: True", + "Display Mapper_test: Component removed after UNDO: True", + "Display Mapper_test: Component added after REDO: True", + "Display Mapper_test: Entered game mode: True", + "Display Mapper_test: Exit game mode: True", + "Display Mapper_test: Entity is hidden: True", + "Display Mapper_test: Entity is shown: True", + "Display Mapper_test: Entity deleted: True", + "Display Mapper_test: UNDO entity deletion works: True", + "Display Mapper_test: REDO entity deletion works: True", + ] + + unexpected_lines = [ + "failed to open", + "Traceback (most recent call last):", + ] + + hydra.launch_and_validate_results( + request, + TEST_DIRECTORY, + editor, + "hydra_AtomEditorComponents_AddedToEntity.py", + timeout=EDITOR_TIMEOUT, + expected_lines=expected_lines, + unexpected_lines=unexpected_lines, + halt_on_unexpected=True, + null_renderer=True, + cfg_args=cfg_args, + ) diff --git a/Code/Sandbox/Editor/SurfaceInfoPicker.cpp b/Code/Sandbox/Editor/SurfaceInfoPicker.cpp index f3d06e0017..5ef20dcec0 100644 --- a/Code/Sandbox/Editor/SurfaceInfoPicker.cpp +++ b/Code/Sandbox/Editor/SurfaceInfoPicker.cpp @@ -27,11 +27,6 @@ // ComponentEntityEditorPlugin #include "Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h" -// LmbrCentral -#include -#include - - static const float kEnoughFarDistance(5000.0f); CSurfaceInfoPicker::CSurfaceInfoPicker() @@ -185,19 +180,6 @@ void CSurfaceInfoPicker::FindNearestInfoFromEntities( AZ::EntityId id; AzToolsFramework::ComponentEntityObjectRequestBus::EventResult(id, entityObject, &AzToolsFramework::ComponentEntityObjectRequestBus::Events::GetAssociatedEntityId); - AZ::EBusAggregateResults statObjs; - LmbrCentral::LegacyMeshComponentRequestBus::EventResult(statObjs, id, &LmbrCentral::LegacyMeshComponentRequestBus::Events::GetStatObj); - - // If the entity has a MeshComponent, it will hit here - for (IStatObj* statObj : statObjs.values) - { - hit = RayIntersection(vWorldRaySrc, vWorldRayDir, nullptr, statObj, object->GetWorldTM(), outHitInfo, &statObjDefaultMaterial); - if (hit) - { - break; - } - } - // If the entity has an ActorComponent or another component that overrides RenderNodeRequestBus, it will hit here if (!hit) { @@ -237,14 +219,6 @@ void CSurfaceInfoPicker::FindNearestInfoFromEntities( } } } - - // If the entity has a GeometryCacheComponent it will hit here - if (!hit) - { - IGeomCacheRenderNode* geomCacheRenderNode = nullptr; - LmbrCentral::GeometryCacheComponentRequestBus::EventResult(geomCacheRenderNode, id, &LmbrCentral::GeometryCacheComponentRequestBus::Events::GetGeomCacheRenderNode); - hit = RayIntersection_IGeomCacheRenderNode(vWorldRaySrc, vWorldRayDir, geomCacheRenderNode, &pickedMaterial, object->GetWorldTM(), outHitInfo); - } } if (hit) diff --git a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp index 60574ee48c..8f695c39ab 100644 --- a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp +++ b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #include #include @@ -112,7 +111,6 @@ void CComponentEntityObject::AssignEntity(AZ::Entity* entity, bool destroyOld) { AZ::TransformNotificationBus::Handler::BusDisconnect(); LmbrCentral::RenderBoundsNotificationBus::Handler::BusDisconnect(); - LmbrCentral::MeshComponentNotificationBus::Handler::BusDisconnect(); AzToolsFramework::ComponentEntityEditorRequestBus::Handler::BusDisconnect(); AZ::EntityBus::Handler::BusDisconnect(); AzToolsFramework::ComponentEntityObjectRequestBus::Handler::BusDisconnect(); @@ -158,7 +156,6 @@ void CComponentEntityObject::AssignEntity(AZ::Entity* entity, bool destroyOld) AZ::TransformNotificationBus::Handler::BusConnect(m_entityId); LmbrCentral::RenderBoundsNotificationBus::Handler::BusConnect(m_entityId); - LmbrCentral::MeshComponentNotificationBus::Handler::BusConnect(m_entityId); AzToolsFramework::ComponentEntityEditorRequestBus::Handler::BusConnect(m_entityId); AZ::EntityBus::Handler::BusConnect(m_entityId); AzToolsFramework::ComponentEntityObjectRequestBus::Handler::BusConnect(this); @@ -399,15 +396,6 @@ void CComponentEntityObject::OnParentChanged([[maybe_unused]] AZ::EntityId oldPa { } -void CComponentEntityObject::OnMeshCreated(const AZ::Data::Asset& asset) -{ - (void)asset; - - // Need to recalculate bounds when the mesh changes. - OnRenderBoundsReset(); - ValidateMeshStatObject(); -} - void CComponentEntityObject::OnRenderBoundsReset() { CEntityObject::InvalidateTM(0); @@ -950,9 +938,7 @@ void CComponentEntityObject::DrawDefault(DisplayContext& dc, const QColor& label IStatObj* CComponentEntityObject::GetIStatObj() { - IStatObj* statObj = nullptr; - LmbrCentral::LegacyMeshComponentRequestBus::EventResult(statObj, m_entityId, &LmbrCentral::LegacyMeshComponentRequests::GetStatObj); - return statObj; + return nullptr; } bool CComponentEntityObject::IsIsolated() const diff --git a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h index 208ade7cd7..41619d75c5 100644 --- a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h +++ b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h @@ -27,7 +27,6 @@ #include #include "../Editor/Objects/EntityObject.h" -#include #include #endif @@ -43,7 +42,6 @@ class CComponentEntityObject , private AzToolsFramework::EditorEntityIconComponentNotificationBus::Handler , private AZ::TransformNotificationBus::Handler , private LmbrCentral::RenderBoundsNotificationBus::Handler - , private LmbrCentral::MeshComponentNotificationBus::Handler , private AzToolsFramework::ComponentEntityEditorRequestBus::Handler , private AzToolsFramework::ComponentEntityObjectRequestBus::Handler , private AZ::EntityBus::Handler @@ -131,11 +129,6 @@ public: void OnParentChanged(AZ::EntityId oldParent, AZ::EntityId newParent) override; ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //! MeshComponentNotificationBus - void OnMeshCreated(const AZ::Data::Asset& asset) override; - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// //! RenderBoundsNotificationBus void OnRenderBoundsReset() override; diff --git a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp index 1998642a02..f04e156afd 100644 --- a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp +++ b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomBridgeSystemComponent.cpp @@ -146,15 +146,6 @@ namespace AZ { static const AZ::Uuid legacyRenderComponentUuids[] = { AZ::Uuid("{FC315B86-3280-4D03-B4F0-5553D7D08432}"), // EditorMeshComponent - AZ::Uuid("{4B85E77D-91F9-40C5-8FCB-B494000A9E69}"), // EditorLensFlareComponent - AZ::Uuid("{7C18B273-5BA3-4E0F-857D-1F30BD6B0733}"), // EditorLightComponent - AZ::Uuid("{00818135-138D-42AD-8657-FF3FD38D9E7A}"), // EditorPointLightComponent - AZ::Uuid("{1DE624B1-876F-4E0A-96A6-7B248FA2076F}"), // EditorAreaLightComponent - AZ::Uuid("{41928E34-B558-4559-82CF-8B5795A38CB4}"), // EditorProjectorLightComponent - AZ::Uuid("{BA3890BD-D2E7-4DB6-95CD-7E7D5525567A}"), // EditorDecalComponent - AZ::Uuid("{8DBD6035-583E-409F-AFD9-F36829A0655D}"), // EditorEnvProbeComponent - AZ::Uuid("{9C86E09D-0727-476E-A4A1-25989CDBF9C6}"), // EditorHighQualityShadowComponent - AZ::Uuid("{045C0C58-C13E-49B0-A471-D4AC5D3FC6BD}"), // EditorGeometryCacheComponent }; const AZStd::string deprecatedString = " (DEPRECATED By Atom)"; diff --git a/Gems/Blast/Code/Source/Family/ActorRenderManager.h b/Gems/Blast/Code/Source/Family/ActorRenderManager.h index 9512fba92d..3908ed5ecd 100644 --- a/Gems/Blast/Code/Source/Family/ActorRenderManager.h +++ b/Gems/Blast/Code/Source/Family/ActorRenderManager.h @@ -15,11 +15,6 @@ #include #include -namespace LmbrCentral -{ - class MeshComponentRequests; -} - namespace Blast { class BlastMeshData; diff --git a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp index 0f6b084201..974dddc6e0 100644 --- a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp +++ b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp @@ -33,13 +33,7 @@ #include "Audio/AudioSystemComponent.h" #include "Audio/AudioTriggerComponent.h" #include "Bundling/BundlingSystemComponent.h" -#include "Rendering/DecalComponent.h" -#include "Rendering/StereoRendererComponent.h" -#include "Rendering/LensFlareComponent.h" -#include "Rendering/LightComponent.h" -#include "Rendering/HighQualityShadowComponent.h" #include "Rendering/MeshComponent.h" -#include "Rendering/GeomCacheComponent.h" #include "Ai/NavigationComponent.h" #include "Scripting/TagComponent.h" #include "Scripting/SimpleStateComponent.h" @@ -77,12 +71,10 @@ #include #include #include -#include #include #include // Asset handlers -#include #include // Scriptable Ebus Registration @@ -214,13 +206,9 @@ namespace LmbrCentral AudioSystemComponent::CreateDescriptor(), AudioTriggerComponent::CreateDescriptor(), BundlingSystemComponent::CreateDescriptor(), - DecalComponent::CreateDescriptor(), - LensFlareComponent::CreateDescriptor(), - LightComponent::CreateDescriptor(), LmbrCentralAllocatorComponent::CreateDescriptor(), LmbrCentralAssetBuilderAllocatorComponent::CreateDescriptor(), LmbrCentralSystemComponent::CreateDescriptor(), - HighQualityShadowComponent::CreateDescriptor(), MeshComponent::CreateDescriptor(), NavigationComponent::CreateDescriptor(), SimpleStateComponent::CreateDescriptor(), @@ -237,11 +225,9 @@ namespace LmbrCentral CompoundShapeComponent::CreateDescriptor(), SplineComponent::CreateDescriptor(), PolygonPrismShapeComponent::CreateDescriptor(), - StereoRendererComponent::CreateDescriptor(), NavigationSystemComponent::CreateDescriptor(), GeometrySystemComponent::CreateDescriptor(), RandomTimedSpawnerComponent::CreateDescriptor(), - GeometryCacheComponent::CreateDescriptor(), SphereShapeDebugDisplayComponent::CreateDescriptor(), DiskShapeDebugDisplayComponent::CreateDescriptor(), BoxShapeDebugDisplayComponent::CreateDescriptor(), @@ -275,7 +261,6 @@ namespace LmbrCentral azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), - azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), @@ -394,24 +379,15 @@ namespace LmbrCentral // Register asset handlers. Requires "AssetDatabaseService" AZ_Assert(AZ::Data::AssetManager::IsReady(), "Asset manager isn't ready!"); - auto lensFlareAssetHandler = aznew LensFlareAssetHandler; - lensFlareAssetHandler->Register(); // registers self with AssetManager - m_assetHandlers.emplace_back(lensFlareAssetHandler); - auto meshAssetHandler = aznew MeshAssetHandler(); meshAssetHandler->Register(); // registers self with AssetManager m_assetHandlers.emplace_back(meshAssetHandler); - auto geomCacheAssetHandler = aznew GeomCacheAssetHandler(); - geomCacheAssetHandler->Register(); // registers self with AssetManager - m_assetHandlers.emplace_back(geomCacheAssetHandler); - // Add asset types and extensions to AssetCatalog. Uses "AssetCatalogService". auto assetCatalog = AZ::Data::AssetCatalogRequestBus::FindFirstHandler(); if (assetCatalog) { assetCatalog->EnableCatalogForAsset(AZ::AzTypeInfo::Uuid()); - assetCatalog->EnableCatalogForAsset(AZ::AzTypeInfo::Uuid()); assetCatalog->EnableCatalogForAsset(AZ::AzTypeInfo::Uuid()); assetCatalog->EnableCatalogForAsset(AZ::AzTypeInfo::Uuid()); assetCatalog->EnableCatalogForAsset(AZ::AzTypeInfo::Uuid()); diff --git a/Gems/LmbrCentral/Code/Source/LmbrCentralEditor.cpp b/Gems/LmbrCentral/Code/Source/LmbrCentralEditor.cpp index b20ce12f35..14091a2e7a 100644 --- a/Gems/LmbrCentral/Code/Source/LmbrCentralEditor.cpp +++ b/Gems/LmbrCentral/Code/Source/LmbrCentralEditor.cpp @@ -25,16 +25,7 @@ #include "Audio/EditorAudioRtpcComponent.h" #include "Audio/EditorAudioSwitchComponent.h" #include "Audio/EditorAudioTriggerComponent.h" -#include "Rendering/EditorDecalComponent.h" -#include "Rendering/EditorLensFlareComponent.h" -#include "Rendering/EditorLightComponent.h" -#include "Rendering/EditorPointLightComponent.h" -#include "Rendering/EditorAreaLightComponent.h" -#include "Rendering/EditorProjectorLightComponent.h" -#include "Rendering/EditorEnvProbeComponent.h" -#include "Rendering/EditorHighQualityShadowComponent.h" #include "Rendering/EditorMeshComponent.h" -#include "Rendering/EditorGeomCacheComponent.h" #include "Scripting/EditorLookAtComponent.h" #include "Scripting/EditorRandomTimedSpawnerComponent.h" #include "Scripting/EditorSpawnerComponent.h" @@ -79,14 +70,6 @@ namespace LmbrCentral EditorAudioRtpcComponent::CreateDescriptor(), EditorAudioSwitchComponent::CreateDescriptor(), EditorAudioTriggerComponent::CreateDescriptor(), - EditorDecalComponent::CreateDescriptor(), - EditorLensFlareComponent::CreateDescriptor(), - EditorLightComponent::CreateDescriptor(), - EditorPointLightComponent::CreateDescriptor(), - EditorAreaLightComponent::CreateDescriptor(), - EditorProjectorLightComponent::CreateDescriptor(), - EditorEnvProbeComponent::CreateDescriptor(), - EditorHighQualityShadowComponent::CreateDescriptor(), EditorMeshComponent::CreateDescriptor(), EditorTagComponent::CreateDescriptor(), EditorSphereShapeComponent::CreateDescriptor(), @@ -104,7 +87,6 @@ namespace LmbrCentral EditorNavigationAreaComponent::CreateDescriptor(), EditorNavigationSeedComponent::CreateDescriptor(), EditorRandomTimedSpawnerComponent::CreateDescriptor(), - EditorGeometryCacheComponent::CreateDescriptor(), EditorSpawnerComponent::CreateDescriptor(), CopyDependencyBuilder::CopyDependencyBuilderComponent::CreateDescriptor(), DependencyBuilder::DependencyBuilderComponent::CreateDescriptor(), diff --git a/Gems/LmbrCentral/Code/Source/Rendering/DecalComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/DecalComponent.cpp deleted file mode 100644 index 1892b930b7..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/DecalComponent.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#include "LmbrCentral_precompiled.h" -#include "DecalComponent.h" -#include -#include -#include -#include -#include - -namespace LmbrCentral -{ - void DecalConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(2, &VersionConverter)-> - Field("Visible", &DecalConfiguration::m_visible)-> - Field("ProjectionType", &DecalConfiguration::m_projectionType)-> - Field("Material", &DecalConfiguration::m_material)-> - Field("SortPriority", &DecalConfiguration::m_sortPriority)-> - Field("Depth", &DecalConfiguration::m_depth)-> - Field("Offset", &DecalConfiguration::m_position)-> - Field("Opacity", &DecalConfiguration::m_opacity)-> - Field("Angle Attenuation", &DecalConfiguration::m_angleAttenuation)-> - Field("Deferred", &DecalConfiguration::m_deferred)-> - Field("DeferredString", &DecalConfiguration::m_deferredString)-> - Field("Max View Distance", &DecalConfiguration::m_maxViewDist)-> - Field("View Distance Multiplier", &DecalConfiguration::m_viewDistanceMultiplier)-> - Field("Min Spec", &DecalConfiguration::m_minSpec) - ; - } - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->EBus("DecalComponentRequestBus") - ->Event("SetVisibility", &DecalComponentRequestBus::Events::SetVisibility) - ->Event("Show", &DecalComponentRequestBus::Events::Show) - ->Event("Hide", &DecalComponentRequestBus::Events::Hide) - ; - } - } - - // Private Static - bool DecalConfiguration::VersionConverter([[maybe_unused]] AZ::SerializeContext& context, - AZ::SerializeContext::DataElementNode& classElement) - { - // conversion from version 1: - // - Remove Normal - if (classElement.GetVersion() <= 1) - { - classElement.RemoveElementByName(AZ_CRC_CE("Normal")); - } - - return true; - } - - ////////////////////////////////////////////////////////////////////////// - - void DecalComponent::Reflect(AZ::ReflectContext* context) - { - DecalConfiguration::Reflect(context); - - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1)-> - Field("DecalConfiguration", &DecalComponent::m_configuration); - ; - } - } - - ////////////////////////////////////////////////////////////////////////// - - DecalComponent::DecalComponent() - : m_decalRenderNode(nullptr) - { - m_materialBusHandler = aznew MaterialOwnerRequestBusHandlerImpl; - } - - DecalComponent::~DecalComponent() - { - delete m_materialBusHandler; - } - - - void DecalComponent::Activate() - { - } - - void DecalComponent::Deactivate() - { - } - - void DecalComponent::OnTransformChanged([[maybe_unused]] const AZ::Transform& local, const AZ::Transform& world) - { - SDecalProperties decalProperties = m_configuration.GetDecalProperties(world); - if (m_decalRenderNode) - { - m_decalRenderNode->SetDecalProperties(decalProperties); - m_decalRenderNode->SetMatrix(AZTransformToLYTransform(world)); - } - } - - void DecalComponent::Show() - { - if (!m_decalRenderNode) - { - return; - } - - m_decalRenderNode->Hide(false); - } - - void DecalComponent::Hide() - { - if (!m_decalRenderNode) - { - return; - } - - m_decalRenderNode->Hide(true); - } - - void DecalComponent::SetVisibility(bool show) - { - if (show) - { - Show(); - } - else - { - Hide(); - } - } - - IRenderNode* DecalComponent::GetRenderNode() - { - return m_decalRenderNode; - } - - float DecalComponent::GetRenderNodeRequestBusOrder() const - { - return s_renderNodeRequestBusOrder; - } - - - bool DecalComponent::IsMaterialOwnerReady() - { - return m_materialBusHandler->IsMaterialOwnerReady(); - } - - void DecalComponent::SetMaterial(_smart_ptr material) - { - m_materialBusHandler->SetMaterial(material); - } - - _smart_ptr DecalComponent::GetMaterial() - { - return m_materialBusHandler->GetMaterial(); - } - - void DecalComponent::SetMaterialHandle(const MaterialHandle& materialHandle) - { - m_materialBusHandler->SetMaterialHandle(materialHandle); - } - - MaterialHandle DecalComponent::GetMaterialHandle() - { - return m_materialBusHandler->GetMaterialHandle(); - } - - void DecalComponent::SetMaterialParamVector4(const AZStd::string& name, const AZ::Vector4& value, int materialId) - { - m_materialBusHandler->SetMaterialParamVector4(name, value, materialId); - } - - void DecalComponent::SetMaterialParamVector3(const AZStd::string& name, const AZ::Vector3& value, int materialId) - { - m_materialBusHandler->SetMaterialParamVector3(name, value, materialId); - } - - void DecalComponent::SetMaterialParamColor(const AZStd::string& name, const AZ::Color& value, int materialId) - { - m_materialBusHandler->SetMaterialParamColor(name, value, materialId); - } - - void DecalComponent::SetMaterialParamFloat(const AZStd::string& name, float value, int materialId) - { - m_materialBusHandler->SetMaterialParamFloat(name, value, materialId); - } - - AZ::Vector4 DecalComponent::GetMaterialParamVector4(const AZStd::string& name, int materialId) - { - return m_materialBusHandler->GetMaterialParamVector4(name, materialId); - } - - AZ::Vector3 DecalComponent::GetMaterialParamVector3(const AZStd::string& name, int materialId) - { - return m_materialBusHandler->GetMaterialParamVector3(name, materialId); - } - - AZ::Color DecalComponent::GetMaterialParamColor(const AZStd::string& name, int materialId) - { - return m_materialBusHandler->GetMaterialParamColor(name, materialId); - } - - float DecalComponent::GetMaterialParamFloat(const AZStd::string& name, int materialId) - { - return m_materialBusHandler->GetMaterialParamFloat(name, materialId); - } - - - const float DecalComponent::s_renderNodeRequestBusOrder = 900.f; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/DecalComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/DecalComponent.h deleted file mode 100644 index 177e2075f8..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/DecalComponent.h +++ /dev/null @@ -1,187 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include -#include - -namespace LmbrCentral -{ - class MaterialOwnerRequestBusHandlerImpl; - - /*! - * Contains properties used to create decals, these properties are later propagated to the - * 3D engine decal system. - */ - class DecalConfiguration - { - public: - AZ_TYPE_INFO(DecalConfiguration, "{47082F75-428F-4353-AC82-FAE8AB017F3B}"); - - virtual ~DecalConfiguration() {} - - virtual AZ::u32 MajorPropertyChanged() { return AZ_CRC("RefreshNone", 0x98a5045b); } - virtual AZ::u32 MinorPropertyChanged() { return AZ_CRC("RefreshNone", 0x98a5045b); } - - SDecalProperties::EProjectionType m_projectionType = SDecalProperties::EProjectionType::ePlanar; - AZ::Vector3 m_position = AZ::Vector3::CreateZero(); - AZ::Transform m_explicitRightUpFront = AZ::Transform::CreateIdentity(); - AZ::u32 m_sortPriority = 16; - float m_depth = 1.f; - float m_viewDistanceMultiplier = 1.f; - bool m_visible = true; - bool m_deferred = false; - AZStd::string m_deferredString = ""; - float m_opacity = 1.0f; - float m_angleAttenuation = 1.0f; - float m_maxViewDist = 8000.0f; - EngineSpec m_minSpec = EngineSpec::Low; - - //! User-specified material override. - AzFramework::SimpleAssetReference m_material; - - AZ::EntityId m_editorEntityId; // Editor-only, not reflected. - - static void Reflect(AZ::ReflectContext* context); - - SDecalProperties GetDecalProperties(const AZ::Transform& transform) - { - SDecalProperties decalProperties; - decalProperties.m_projectionType = m_projectionType; - decalProperties.m_radius = 1.f; - - if (m_projectionType != SDecalProperties::ePlanar) - { - decalProperties.m_radius = decalProperties.m_normal.GetLength(); - } - - Matrix34 wtm = AZTransformToLYTransform(transform); - Matrix33 rotation(wtm); - decalProperties.m_explicitRightUpFront = rotation; - decalProperties.m_pos = wtm.TransformPoint(AZVec3ToLYVec3(m_position)); - decalProperties.m_normal = Vec3(0, 0, 1); - decalProperties.m_pMaterialName = m_material.GetAssetPath().c_str(); - decalProperties.m_sortPrio = m_sortPriority; - decalProperties.m_deferred = m_deferred; - decalProperties.m_opacity = m_opacity; - decalProperties.m_angleAttenuation = m_angleAttenuation; - decalProperties.m_depth = m_depth; - decalProperties.m_maxViewDist = m_maxViewDist; - decalProperties.m_minSpec = m_minSpec; - - return decalProperties; - } - - private: - - static bool VersionConverter(AZ::SerializeContext& context, - AZ::SerializeContext::DataElementNode& classElement); - }; - - /*! - * Spawns decals as setup during edit time. - */ - class DecalComponent - : public AZ::Component - , public DecalComponentRequestBus::Handler - , public RenderNodeRequestBus::Handler - , public AZ::TransformNotificationBus::Handler - , public MaterialOwnerRequestBus::Handler - { - public: - - AZ_COMPONENT(DecalComponent, "{1C2CEAA8-786F-4684-8202-CA7D940D627B}"); - - DecalComponent(); - ~DecalComponent() override; - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component implementation. - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // DecalComponentRequests implementation. - void Show() override; - void Hide() override; - void SetVisibility(bool visible) override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // RenderNodeRequests implementation - IRenderNode* GetRenderNode() override; - float GetRenderNodeRequestBusOrder() const override; - static const float s_renderNodeRequestBusOrder; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // AZ::TransformNotificationBus implementation. - void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // MaterialOwnerRequestBus interface implementation - bool IsMaterialOwnerReady() override; - void SetMaterial(_smart_ptr) override; - _smart_ptr GetMaterial() override; - void SetMaterialHandle(const MaterialHandle& materialHandle) override; - MaterialHandle GetMaterialHandle() override; - void SetMaterialParamVector4( const AZStd::string& /*name*/, const AZ::Vector4& /*value*/, int /*materialId = 1*/) override; - void SetMaterialParamVector3( const AZStd::string& /*name*/, const AZ::Vector3& /*value*/, int /*materialId = 1*/) override; - void SetMaterialParamColor( const AZStd::string& /*name*/, const AZ::Color& /*value*/, int /*materialId = 1*/) override; - void SetMaterialParamFloat( const AZStd::string& /*name*/, float /*value*/, int /*materialId = 1*/) override; - AZ::Vector4 GetMaterialParamVector4( const AZStd::string& /*name*/, int /*materialId = 1*/) override; - AZ::Vector3 GetMaterialParamVector3( const AZStd::string& /*name*/, int /*materialId = 1*/) override; - AZ::Color GetMaterialParamColor( const AZStd::string& /*name*/, int /*materialId = 1*/) override; - float GetMaterialParamFloat( const AZStd::string& /*name*/, int /*materialId = 1*/) override; - /////////////////////////////////// - - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - provided.push_back(AZ_CRC("DecalService", 0xfb7f71ae)); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - required.push_back(AZ_CRC("TransformService", 0x8ee22c50)); - } - - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& /*dependent*/) - { - } - - static void Reflect(AZ::ReflectContext* context); - - void SetConfiguration(const DecalConfiguration& configuration) - { - m_configuration = configuration; - } - - protected: - - IDecalRenderNode* m_decalRenderNode; - DecalConfiguration m_configuration; - MaterialOwnerRequestBusHandlerImpl* m_materialBusHandler; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorAreaLightComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorAreaLightComponent.cpp deleted file mode 100644 index 00c314400e..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorAreaLightComponent.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include "EditorAreaLightComponent.h" - -namespace LmbrCentral -{ - void EditorAreaLightComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Area Light", "The Area Light component allows an entity to light a defined area") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/AreaLight.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/AreaLight.png") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-area-light.html") - ->Attribute(AZ::Edit::Attributes::ExportIfAllPlatformTags, AZStd::vector{AZ_CRC("renderer", 0xf199a19c)}) // Only export on platforms that render - ->Attribute(AZ::Edit::Attributes::RuntimeExportCallback, &EditorLightComponent::ExportLightComponent) - ; - } - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->Class()->RequestBus("EditorAreaLightComponentBus"); - } - } - - void EditorAreaLightComponent::Init() - { - SetLightType(EditorLightConfiguration::LightType::Area); - EditorLightComponent::Init(); - } - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorAreaLightComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorAreaLightComponent.h deleted file mode 100644 index ec9bb594d5..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorAreaLightComponent.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include "EditorLightComponent.h" - -namespace LmbrCentral -{ - /*! - * In-editor point light component. - * Handles previewing and activating lights in the editor. - */ - class EditorAreaLightComponent - : public EditorLightComponent - { - public: - AZ_COMPONENT(EditorAreaLightComponent, "{1DE624B1-876F-4E0A-96A6-7B248FA2076F}", EditorLightComponent); - - static void Reflect(AZ::ReflectContext* context); - - void Init() override; - - protected: - const char* GetLightTypeText() const override - { - return "Area Light"; - } - }; -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorDecalComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorDecalComponent.cpp deleted file mode 100644 index a1803afb23..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorDecalComponent.cpp +++ /dev/null @@ -1,401 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" -#include "EditorDecalComponent.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace LmbrCentral -{ - void EditorDecalComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - EditorDecalConfiguration::Reflect(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1)-> - Field("EditorDecalConfiguration", &EditorDecalComponent::m_configuration) - ; - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Decal", "The Decal component allows an entity to project a texture or material onto a mesh")-> - ClassElement(AZ::Edit::ClassElements::EditorData, "")-> - Attribute(AZ::Edit::Attributes::Category, "Rendering")-> - Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/Decal.svg")-> - Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid())-> - Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Decal.png")-> - Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c))-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-decal.html")-> - DataElement(0, &EditorDecalComponent::m_configuration, "Settings", "Decal configuration")-> - Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) - ; - } - } - } - - ////////////////////////////////////////////////////////////////////////// - - void EditorDecalConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - - if (editContext) - { - editContext->Class( - "Render Settings", "Rendering options for the decal.")-> - ClassElement(AZ::Edit::ClassElements::EditorData, "")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))-> - - ClassElement(AZ::Edit::ClassElements::Group, "Decal Settings")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(0, &DecalConfiguration::m_position, "Offset", "")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - - DataElement(0, &DecalConfiguration::m_visible, "Visible", "")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &DecalConfiguration::m_projectionType, "Projection type", "")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MajorPropertyChanged)-> - EnumAttribute(SDecalProperties::EProjectionType::ePlanar, "Planar")-> - EnumAttribute(SDecalProperties::EProjectionType::eProjectOnTerrain, "On Terrain")-> - EnumAttribute(SDecalProperties::EProjectionType::eProjectOnTerrainAndStaticObjects, "On Terrain and Static Objects")-> - - DataElement(AZ::Edit::UIHandlers::Default, &DecalConfiguration::m_deferredString, "Deferred", "")-> - Attribute(AZ::Edit::Attributes::ReadOnly, true)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MajorPropertyChanged)-> - - DataElement(AZ::Edit::UIHandlers::SpinBox, &DecalConfiguration::m_sortPriority, "Sort priority", "Higher priority renders decals on top.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0)-> - Attribute(AZ::Edit::Attributes::Max, 255)-> - Attribute(AZ::Edit::Attributes::Step, 1)-> - - DataElement(AZ::Edit::UIHandlers::SpinBox, &DecalConfiguration::m_depth, "Depth", "")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.0001f)-> - Attribute(AZ::Edit::Attributes::Max, 10.f)-> - Attribute(AZ::Edit::Attributes::Step, 1.f / 255.f)-> - - DataElement(0, &DecalConfiguration::m_material, "Material", "")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MajorPropertyChanged)-> - - DataElement(AZ::Edit::UIHandlers::Slider, &DecalConfiguration::m_opacity, "Opacity", "Additional opacity setting on top of the distance from the decal to the surface")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 1.f)-> - Attribute(AZ::Edit::Attributes::Visibility, &DecalConfiguration::m_deferred)-> - - DataElement(AZ::Edit::UIHandlers::Slider, &DecalConfiguration::m_angleAttenuation, "Angle Attenuation", "amount of angle attenuation computation taken into account")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 1.f)-> - Attribute(AZ::Edit::Attributes::Visibility, &DecalConfiguration::m_deferred)-> - - ClassElement(AZ::Edit::ClassElements::Group, "Options")-> - - DataElement(AZ::Edit::UIHandlers::Default, &DecalConfiguration::m_maxViewDist, "Max view distance", "The furthest distance this decal can be seen from")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 8000.0f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - - DataElement(AZ::Edit::UIHandlers::SpinBox, &DecalConfiguration::m_viewDistanceMultiplier, "View distance multiplier", "")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, IRenderNode::VIEW_DISTANCE_MULTIPLIER_MAX)-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &DecalConfiguration::m_minSpec, "Minimum spec", "Min spec for light to be active.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &DecalConfiguration::MinorPropertyChanged)-> - EnumAttribute(EngineSpec::Never, "Never")-> - EnumAttribute(EngineSpec::VeryHigh, "Very high")-> - EnumAttribute(EngineSpec::High, "High")-> - EnumAttribute(EngineSpec::Medium, "Medium")-> - EnumAttribute(EngineSpec::Low, "Low") - ; - } - } - } - - ////////////////////////////////////////////////////////////////////////// - - AZ::u32 EditorDecalConfiguration::MajorPropertyChanged() - { - if (m_editorEntityId.IsValid()) - { - EBUS_EVENT_ID(m_editorEntityId, DecalComponentEditorRequests::Bus, RefreshDecal); - } - - return AZ::Edit::PropertyRefreshLevels::EntireTree; - } - - AZ::u32 EditorDecalConfiguration::MinorPropertyChanged() - { - if (m_editorEntityId.IsValid()) - { - EBUS_EVENT_ID(m_editorEntityId, DecalComponentEditorRequests::Bus, RefreshDecal); - } - - return AZ::Edit::PropertyRefreshLevels::None; - } - - ////////////////////////////////////////////////////////////////////////// - - EditorDecalComponent::EditorDecalComponent() - : m_materialLayersMask(0) - { - } - - EditorDecalComponent::~EditorDecalComponent() - { - } - - void EditorDecalComponent::Activate() - { - Base::Activate(); - } - - void EditorDecalComponent::Deactivate() - { - Base::Deactivate(); - } - - void EditorDecalComponent::BuildGameEntity(AZ::Entity* gameEntity) - { - DecalComponent* decalComponent = gameEntity->CreateComponent(); - - if (decalComponent) - { - decalComponent->SetConfiguration(m_configuration); - } - } - - void EditorDecalComponent::OnEditorSpecChange() - { - RefreshDecal(); - } - - void EditorDecalComponent::RefreshDecal() - { - if (!m_decalRenderNode) - { - return; - } - - if (m_configuration.m_projectionType == SDecalProperties::EProjectionType::eProjectOnTerrainAndStaticObjects) - { - m_configuration.m_deferred = true; - m_configuration.m_deferredString = "Yes"; - } - else - { - m_configuration.m_deferred = false; - m_configuration.m_deferredString = "No"; - } - - m_renderFlags = 0; - - if (IsSelected()) - { - m_renderFlags |= ERF_SELECTED; - } - - // take the entity's visibility into account - bool visible = false; - AzToolsFramework::EditorEntityInfoRequestBus::EventResult( - visible, GetEntityId(), &AzToolsFramework::EditorEntityInfoRequestBus::Events::IsVisible); - - const int configSpec = gEnv->pSystem->GetConfigSpec(true); - if (!visible || !m_configuration.m_visible || static_cast(configSpec) < static_cast(m_configuration.m_minSpec)) - { - m_renderFlags |= ERF_HIDDEN; - } - - //Set default material - if (m_configuration.m_material.GetAssetPath().empty()) - { - m_configuration.m_material.SetAssetPath("engineassets/materials/decals/default.mtl"); - } - - AZ::Transform transform = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(transform, GetEntityId(), AZ::TransformBus, GetWorldTM); - - SDecalProperties decalProperties = m_configuration.GetDecalProperties(transform); - m_decalRenderNode->SetDecalProperties(decalProperties); - - m_renderFlags |= ERF_COMPONENT_ENTITY; - m_decalRenderNode->SetRndFlags(m_renderFlags); - m_decalRenderNode->SetMatrix(AZTransformToLYTransform(transform)); - m_decalRenderNode->SetMinSpec(static_cast(decalProperties.m_minSpec)); - m_decalRenderNode->SetMaterialLayers(m_materialLayersMask); - m_decalRenderNode->SetViewDistanceMultiplier(m_configuration.m_viewDistanceMultiplier); - } - - void EditorDecalComponent::SetPrimaryAsset(const AZ::Data::AssetId& id) - { - AZStd::string assetPath; - EBUS_EVENT_RESULT(assetPath, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, id); - m_configuration.m_material.SetAssetPath(assetPath.c_str()); - RefreshDecal(); - EBUS_EVENT(AzToolsFramework::ToolsApplicationRequests::Bus, AddDirtyEntity, GetEntityId()); - } - - void EditorDecalComponent::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - // Displays a small grid over the area where the decal will be applied. - if (!IsSelected()) - { - return; - } - - AZ::Transform transform = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(transform, GetEntityId(), AZ::TransformBus, GetWorldTM); - - AZ::Vector3 x1 = transform.TransformPoint(AZ::Vector3(-1, 0, 0)); - AZ::Vector3 x2 = transform.TransformPoint(AZ::Vector3(1, 0, 0)); - AZ::Vector3 y1 = transform.TransformPoint(AZ::Vector3(0, -1, 0)); - AZ::Vector3 y2 = transform.TransformPoint(AZ::Vector3(0, 1, 0)); - AZ::Vector3 p = transform.TransformPoint(AZ::Vector3(0, 0, 0)); - AZ::Vector3 n = transform.TransformPoint(AZ::Vector3(0, 0, 1)); - - debugDisplay.SetColor(AZ::Vector4(1, 0, 0, 1)); - - debugDisplay.DrawLine(p, n); - debugDisplay.DrawLine(x1, x2); - debugDisplay.DrawLine(y1, y2); - - AZ::Vector3 p0 = transform.TransformPoint(AZ::Vector3(-1, -1, 0)); - AZ::Vector3 p1 = transform.TransformPoint(AZ::Vector3(-1, 1, 0)); - AZ::Vector3 p2 = transform.TransformPoint(AZ::Vector3(1, 1, 0)); - AZ::Vector3 p3 = transform.TransformPoint(AZ::Vector3(1, -1, 0)); - - debugDisplay.DrawLine(p0, p1); - debugDisplay.DrawLine(p1, p2); - debugDisplay.DrawLine(p2, p3); - debugDisplay.DrawLine(p3, p0); - debugDisplay.DrawLine(p0, p2); - debugDisplay.DrawLine(p1, p3); - } - - void EditorDecalComponent::OnEntityVisibilityChanged(bool /*visibility*/) - { - RefreshDecal(); - } - - IRenderNode* EditorDecalComponent::GetRenderNode() - { - return m_decalRenderNode; - } - - float EditorDecalComponent::GetRenderNodeRequestBusOrder() const - { - return DecalComponent::s_renderNodeRequestBusOrder; - } - - void EditorDecalComponent::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& /*world*/) - { - RefreshDecal(); - } - - void EditorDecalComponent::SetMaterial(_smart_ptr material) - { - if (material) - { - m_configuration.m_material.SetAssetPath(material->GetName()); - } - else - { - m_configuration.m_material.SetAssetPath(""); - } - - RefreshDecal(); - - EBUS_EVENT(AzToolsFramework::ToolsApplicationEvents::Bus, InvalidatePropertyDisplay, AzToolsFramework::Refresh_AttributesAndValues); - } - - _smart_ptr EditorDecalComponent::GetMaterial() - { - return m_decalRenderNode->GetMaterial(); - } - - AZ::Aabb EditorDecalComponent::GetEditorSelectionBoundsViewport(const AzFramework::ViewportInfo& /*viewportInfo*/) - { - return GetWorldBounds(); - } - - AZ::Aabb EditorDecalComponent::GetWorldBounds() - { - AZ::Transform transform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(transform, GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); - - return GetLocalBounds().GetTransformedAabb(transform); - } - - AZ::Aabb EditorDecalComponent::GetLocalBounds() - { - AZ::Aabb bbox = AZ::Aabb::CreateNull(); - - bbox.AddPoint(AZ::Vector3(-1, -1, 0)); - bbox.AddPoint(AZ::Vector3(-1, 1, 0)); - bbox.AddPoint(AZ::Vector3(1, 1, 0)); - bbox.AddPoint(AZ::Vector3(1, -1, 0)); - - return bbox; - } - - bool EditorDecalComponent::EditorSelectionIntersectRayViewport(const AzFramework::ViewportInfo& /*viewportInfo*/, const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) - { - AZ::Transform transform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(transform, GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); - - AZ::Vector3 p0 = transform.TransformPoint(AZ::Vector3(-1, -1, 0)); - AZ::Vector3 p1 = transform.TransformPoint(AZ::Vector3(-1, 1, 0)); - AZ::Vector3 p2 = transform.TransformPoint(AZ::Vector3(1, 1, 0)); - AZ::Vector3 p3 = transform.TransformPoint(AZ::Vector3(1, -1, 0)); - float t{ 0.0f }; - - bool hitResult = AZ::Intersect::IntersectRayQuad(src, dir, p0, p1, p2, p3, t) != 0; - distance = t; - - return hitResult; - } -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorDecalComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorDecalComponent.h deleted file mode 100644 index f4b25f4a9a..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorDecalComponent.h +++ /dev/null @@ -1,145 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include "DecalComponent.h" - -namespace LmbrCentral -{ - /*! - * Extends DecalConfiguration structure to add editor functionality - * such as property handlers and visibility filters, as well as - * reflection for editing. - */ - class EditorDecalConfiguration - : public DecalConfiguration - { - public: - - AZ_TYPE_INFO(EditorDecalConfiguration, "{559556BE-F41E-43C0-9EE6-7048D84D7952}"); - - ~EditorDecalConfiguration() override {} - - static void Reflect(AZ::ReflectContext* context); - - AZ::u32 MajorPropertyChanged() override; - AZ::u32 MinorPropertyChanged() override; - }; - - /*! - * In-editor decal component. - * Handles placement of decals in editor. - */ - class EditorDecalComponent - : public AzToolsFramework::Components::EditorComponentBase - , private DecalComponentEditorRequests::Bus::Handler - , private MaterialOwnerRequestBus::Handler - , private RenderNodeRequestBus::Handler - , private AZ::TransformNotificationBus::Handler - , private AzFramework::EntityDebugDisplayEventBus::Handler - , private AzToolsFramework::EditorVisibilityNotificationBus::Handler - , private AzToolsFramework::EditorEvents::Bus::Handler - , private AzToolsFramework::EditorComponentSelectionRequestsBus::Handler - , public AzFramework::BoundsRequestBus::Handler - { - private: - using Base = AzToolsFramework::Components::EditorComponentBase; - - public: - AZ_COMPONENT(EditorDecalComponent, "{BA3890BD-D2E7-4DB6-95CD-7E7D5525567A}", AzToolsFramework::Components::EditorComponentBase); - - EditorDecalComponent(); - ~EditorDecalComponent() override; - - // AZ::Component interface implementation - void Activate() override; - void Deactivate() override; - - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - // AzToolsFramework::EditorVisibilityNotificationBus interface implementation - void OnEntityVisibilityChanged(bool visibility) override; - - // DecalComponentEditorRequests::Bus::Handler interface implementation - void RefreshDecal() override; - - // MaterialOwnerRequestBus interface implementation - void SetMaterial(_smart_ptr) override; - _smart_ptr GetMaterial() override; - - // RenderNodeRequestBus::Handler interface implementation - IRenderNode* GetRenderNode() override; - float GetRenderNodeRequestBusOrder() const override; - - // TransformNotificationBus::Handler interface implementation - void OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& /*world*/) override; - - // EditorComponentSelectionRequestsBus::Handler interface implementation - AZ::Aabb GetEditorSelectionBoundsViewport(const AzFramework::ViewportInfo&) override; - bool SupportsEditorRayIntersect() override { return true; }; - bool EditorSelectionIntersectRayViewport( - const AzFramework::ViewportInfo& viewportInfo, const AZ::Vector3& src, const AZ::Vector3& dir, - float& distance) override; - - // BoundsRequestBus overrides ... - AZ::Aabb GetWorldBounds() override; - AZ::Aabb GetLocalBounds() override; - - void BuildGameEntity(AZ::Entity* gameEntity) override; - - //! Called when you want to change the game asset through code (like when creating components based on assets). - void SetPrimaryAsset(const AZ::Data::AssetId& assetId) override; - - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - DecalComponent::GetProvidedServices(provided); - } - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent) - { - DecalComponent::GetDependentServices(dependent); - dependent.push_back(AZ_CRC_CE("EditorVisibilityService")); - } - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - DecalComponent::GetRequiredServices(required); - } - - static void Reflect(AZ::ReflectContext* context); - - protected: - - EditorDecalConfiguration m_configuration; - - IDecalRenderNode* m_decalRenderNode; - uint32 m_renderFlags; - - uint8 m_materialLayersMask; - - private: - // AzToolsFramework::EditorEvents interface implementation - void OnEditorSpecChange() override; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorEnvProbeComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorEnvProbeComponent.cpp deleted file mode 100644 index 98327471e5..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorEnvProbeComponent.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include - -#include "EditorEnvProbeComponent.h" - -namespace LmbrCentral -{ - void EditorEnvProbeComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Environment Probe", "The Environment Probe component is used to achieve the right visual quality for a space and help determine proper reflections, ambient diffuse values, particle diffuse values, and shadow colors") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/EnvironmentProbe.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/EnvironmentProbe.png") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-environment-probe.html") - ->Attribute(AZ::Edit::Attributes::RuntimeExportCallback, &EditorLightComponent::ExportLightComponent) - ; - } - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->Class()->RequestBus("EditorProbeLightComponentBus"); - } - } - - void EditorEnvProbeComponent::Init() - { - SetLightType(EditorLightConfiguration::LightType::Probe); - EditorLightComponent::Init(); - } - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorEnvProbeComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorEnvProbeComponent.h deleted file mode 100644 index 5336546caa..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorEnvProbeComponent.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include "EditorLightComponent.h" - -namespace LmbrCentral -{ - /*! - * In-editor point light component. - * Handles previewing and activating lights in the editor. - */ - class EditorEnvProbeComponent - : public EditorLightComponent - { - public: - AZ_COMPONENT(EditorEnvProbeComponent, "{8DBD6035-583E-409F-AFD9-F36829A0655D}", EditorLightComponent); - - static void Reflect(AZ::ReflectContext* context); - - void Init() override; - - protected: - const char* GetLightTypeText() const override - { - return "Environment Probe"; - } - }; -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorGeomCacheComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorGeomCacheComponent.cpp deleted file mode 100644 index 37d04b94ba..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorGeomCacheComponent.cpp +++ /dev/null @@ -1,347 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" -#include "EditorGeomCacheComponent.h" - -#include -#include - -namespace LmbrCentral -{ - void EditorGeometryCacheCommon::Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Version(1) - ; - - if (AZ::EditContext* editContext = serializeContext->GetEditContext()) - { - editContext->Class("Editor Geom Cache Common Configuration", "") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ; - - editContext->Class("Geom Cache Common Configuration", "") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_visible, "Visible", "Should the GeomCache be rendered.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnRenderOptionsChanged) - - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &GeometryCacheCommon::m_minSpec, "Min Spec", "The minimum graphics spec where this GeomCache will be rendered.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnRenderOptionsChanged) - ->EnumAttribute(EngineSpec::Never, "Never") - ->EnumAttribute(EngineSpec::VeryHigh, "Very high") - ->EnumAttribute(EngineSpec::High, "High") - ->EnumAttribute(EngineSpec::Medium, "Medium") - ->EnumAttribute(EngineSpec::Low, "Low") - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_geomCacheAsset, "Geom Cache", "The Alembic Geometry Cache asset.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnGeomCacheAssetChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_materialOverrideAsset, "Material Override", "Optional material override asset.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnMaterialOverrideChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_loop, "Loop", "Should the animation loop.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnLoopChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_playOnStart, "Play on Start", "Should the alembic animation play when the component activates.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnPlayOnStartChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_startTime, "Start Time", "The time point that the animation should start at.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnStartTimeChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_streamInDistance, "Stream In Distance", "How close does the viewer need to be for the GeomCache to begin streaming into memory.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnStreamInDistanceChanged) - - ->ClassElement(AZ::Edit::ClassElements::Group, "Stand-in Settings") - ->Attribute(AZ::Edit::Attributes::AutoExpand, false) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_firstFrameStandin, "First Frame Stand-in", "The entity that should stand in for this GeomCache before playback begins.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnFirstFrameStandinChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_lastFrameStandin, "Last Frame Stand-in", "The entity that should stand in for this GeomCache after playback has ended.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnLastFrameStandinChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_standin, "Stand-in", "The entity that should stand in for this GeomCache when the viewer is past the Stand-in Distance.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnStandinChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_standinDistance, "Stand-in Distance", "How close does the viewer need to be before the GeomCache replaces the Stand-in.") - - ->ClassElement(AZ::Edit::ClassElements::Group, "Options") - ->Attribute(AZ::Edit::Attributes::AutoExpand, false) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_maxViewDistance, "Max View Distance", "That maximum distance that this GeomCache can be viewed from.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnMaxViewDistanceChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_viewDistanceMultiplier, "View Distance Multiplier", "Multiplied to the Max View Distance to get the final max view distance.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnViewDistanceMultiplierChanged) - - ->DataElement(AZ::Edit::UIHandlers::Slider, &GeometryCacheCommon::m_lodDistanceRatio, "LOD Distance Ratio", "Controls LOD ratio over distance.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnLODDistanceRatioChanged) - ->Attribute(AZ::Edit::Attributes::Min, 0) - ->Attribute(AZ::Edit::Attributes::Max, 255) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_castShadows, "Cast Shadows", "Should the GeomCache cast shadows.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnRenderOptionsChanged) - - ->DataElement(AZ::Edit::UIHandlers::Default, &GeometryCacheCommon::m_useVisAreas, "Use Vis Areas", "Should the GeomCache be affected by VisAreas.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &GeometryCacheCommon::OnRenderOptionsChanged) - ; - } - } - } - - void EditorGeometryCacheCommon::Activate() - { - GeometryCacheCommon::Activate(); - EditorGeometryCacheComponentRequestBus::Handler::BusConnect(m_entityId); - - //Store the serialized results here so that we can properly react to stand-in changes after level load - m_prevFirstFrameStandin = m_firstFrameStandin; - m_prevLastFrameStandin = m_lastFrameStandin; - m_prevStandin = m_standin; - } - - void EditorGeometryCacheCommon::Deactivate() - { - EditorGeometryCacheComponentRequestBus::Handler::BusDisconnect(m_entityId); - GeometryCacheCommon::Deactivate(); - } - - void EditorGeometryCacheCommon::SetMinSpec(EngineSpec minSpec) - { - m_minSpec = minSpec; - OnRenderOptionsChanged(); - } - - void EditorGeometryCacheCommon::SetPlayOnStart(bool playOnStart) - { - m_playOnStart = playOnStart; - OnPlayOnStartChanged(); - } - - void EditorGeometryCacheCommon::SetMaxViewDistance(float maxViewDistance) - { - m_maxViewDistance = maxViewDistance; - OnMaxViewDistanceChanged(); - } - - void EditorGeometryCacheCommon::SetViewDistanceMultiplier(float viewDistanceMultiplier) - { - m_viewDistanceMultiplier = viewDistanceMultiplier; - OnViewDistanceMultiplierChanged(); - } - - void EditorGeometryCacheCommon::SetLODDistanceRatio(AZ::u32 lodDistanceRatio) - { - m_lodDistanceRatio = lodDistanceRatio; - OnLODDistanceRatioChanged(); - } - - void EditorGeometryCacheCommon::SetCastShadows(bool castShadows) - { - m_castShadows = castShadows; - OnRenderOptionsChanged(); - } - - void EditorGeometryCacheCommon::SetUseVisAreas(bool useVisAreas) - { - m_useVisAreas = useVisAreas; - OnRenderOptionsChanged(); - } - - void EditorGeometryCacheCommon::OnFirstFrameStandinChanged() - { - //We only need to remove the prev stand-in from the geom cache's hierarchy if it's not used anywhere else - bool removePrevFirstFrameStandinTransform = false; - if (m_prevFirstFrameStandin != m_prevStandin && m_prevFirstFrameStandin != m_prevLastFrameStandin) - { - removePrevFirstFrameStandinTransform = true; - } - HandleStandinChanged(m_prevFirstFrameStandin, m_firstFrameStandin, removePrevFirstFrameStandinTransform); - - m_prevFirstFrameStandin = m_firstFrameStandin; - } - - void EditorGeometryCacheCommon::OnLastFrameStandinChanged() - { - //We only need to remove the prev stand-in from the geom cache's hierarchy if it's not used anywhere else - bool removePrevLastFrameStandinTransform = false; - if (m_prevLastFrameStandin != m_prevStandin && m_prevLastFrameStandin != m_prevFirstFrameStandin) - { - removePrevLastFrameStandinTransform = true; - } - HandleStandinChanged(m_prevLastFrameStandin, m_lastFrameStandin, removePrevLastFrameStandinTransform); - - m_prevLastFrameStandin = m_lastFrameStandin; - } - - void EditorGeometryCacheCommon::OnStandinChanged() - { - //We only need to remove the prev stand-in from the geom cache's hierarchy if it's not used anywhere else - bool removePrevStandinTransform = false; - if (m_prevStandin != m_prevLastFrameStandin && m_prevStandin != m_prevFirstFrameStandin) - { - removePrevStandinTransform = true; - } - HandleStandinChanged(m_prevStandin, m_standin, removePrevStandinTransform); - m_prevStandin = m_standin; - } - - void EditorGeometryCacheCommon::HandleStandinChanged(const AZ::EntityId& prevStandinId, const AZ::EntityId& newStandinId, bool evictPrevStandinTransform) - { - //Undo modifications we've made to the stand-in entity - if (prevStandinId.IsValid() && evictPrevStandinTransform) - { - //If this stand-in isn't currently active it may be set to invisible. If it's not going to be a stand-in anymore we want it to be visible - MeshComponentRequestBus::Event(prevStandinId, &MeshComponentRequestBus::Events::SetVisibility, true); - //If it's not going to be a stand-in anymore it also doesn't need to be parented. User can re-parent if needed - AZ::TransformBus::Event(prevStandinId, &AZ::TransformBus::Events::SetParent, AZ::EntityId()); - } - - //Parent new stand-in to geometry cache transform - AZ::TransformBus::Event(newStandinId, &AZ::TransformBus::Events::SetParent, m_entityId); - - //Standin will be made visible if necessary in GeomCacheCommon::OnTick - MeshComponentRequestBus::Event(m_standin, &MeshComponentRequestBus::Events::SetVisibility, false); - MeshComponentRequestBus::Event(m_firstFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, false); - MeshComponentRequestBus::Event(m_lastFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, false); - - //Force stand-in logic to refresh - m_currentStandinType = StandinType::None; - } - - void EditorGeometryCacheCommon::SetMaterial(_smart_ptr material) - { - GeometryCacheCommon::SetMaterial(material); - - AzToolsFramework::ToolsApplicationEvents::Bus::Broadcast( - &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, - AzToolsFramework::Refresh_AttributesAndValues); - } - - void EditorGeometryCacheComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provides) - { - provides.push_back(AZ_CRC("GeomCacheService", 0x3d2bc48c)); - } - - void EditorGeometryCacheComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& requires) - { - requires.push_back(AZ_CRC("TransformService", 0x8ee22c50)); - } - - void EditorGeometryCacheComponent::Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Version(1) - ->Field("Common", &EditorGeometryCacheComponent::m_common) - ; - - if (AZ::EditContext* editContext = serializeContext->GetEditContext()) - { - editContext->Class("Geometry Cache", "Controls playback of baked vertex animations.") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/GeometryCache.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/GeometryCache.png") - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "http://docs.aws.amazon.com/console/lumberyard/userguide/geom-cache-component") - ->DataElement(AZ::Edit::UIHandlers::Default, &EditorGeometryCacheComponent::m_common, "Common", "No Description") - ; - } - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) - { - behaviorContext->Class() - ->RequestBus("GeometryCacheComponentRequestBus") - ->RequestBus("GeometryCacheComponentNotificationBus") - ; - } - - EditorGeometryCacheCommon::Reflect(context); - } - - void EditorGeometryCacheComponent::Init() - { - m_common.Init(GetEntityId()); - } - - void EditorGeometryCacheComponent::Activate() - { - m_common.Activate(); - - AzToolsFramework::Components::EditorComponentBase::Activate(); - - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId()); - AZ::TransformNotificationBus::Handler::BusConnect(GetEntityId()); - - //Get initial world transform for debug rendering - m_currentWorldTransform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(m_currentWorldTransform, GetEntityId(), &AZ::TransformBus::Events::GetWorldTM); - } - - void EditorGeometryCacheComponent::Deactivate() - { - AzToolsFramework::Components::EditorComponentBase::Deactivate(); - - AZ::TransformNotificationBus::Handler::BusDisconnect(GetEntityId()); - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(GetEntityId()); - - m_common.Deactivate(); - } - - void EditorGeometryCacheComponent::SetPrimaryAsset(const AZ::Data::AssetId& assetId) - { - m_common.SetGeomCacheAsset(assetId); - } - - void EditorGeometryCacheComponent::BuildGameEntity(AZ::Entity* gameEntity) - { - gameEntity->CreateComponent(&m_common); - } - - void EditorGeometryCacheComponent::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - // Don't draw extra visualization unless selected. - if (!IsSelected()) - { - return; - } - - debugDisplay.PushMatrix(m_currentWorldTransform); - - debugDisplay.SetColor(AZ::Vector4(1.0f, 1.0f, 1.0f, 1.0f)); - - debugDisplay.DrawWireSphere(AZ::Vector3::CreateZero(), m_common.GetStandInDistance()); - debugDisplay.DrawWireSphere(AZ::Vector3::CreateZero(), m_common.GetStreamInDistance()); - - debugDisplay.PopMatrix(); - } - - void EditorGeometryCacheComponent::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& world) - { - m_currentWorldTransform = world; - } - -} //namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorGeomCacheComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorGeomCacheComponent.h deleted file mode 100644 index 9fd64750a2..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorGeomCacheComponent.h +++ /dev/null @@ -1,133 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include - -#include -#include - -#include "GeomCacheComponent.h" - -namespace LmbrCentral -{ - /** - * Editor extensions for the GeometryCacheCommon - * - * Some parameters of the GeometryCache we only care - * about being able to edit on a bus at edit time. Mostly - * for legacy conversion. Also this class handles the - * PlayOnStart parameter differently. - */ - class EditorGeometryCacheCommon - : public GeometryCacheCommon - , public EditorGeometryCacheComponentRequestBus::Handler - { - public: - AZ_TYPE_INFO_LEGACY(EditorGeometryCacheCommon, "{ACE31D8E-F7BC-48B9-950E-AE191E50A80F}", GeometryCacheCommon); - AZ_CLASS_ALLOCATOR(EditorGeometryCacheCommon, AZ::SystemAllocator, 0); - - static void Reflect(AZ::ReflectContext* context); - - void Activate() override; - void Deactivate() override; - - void SetMinSpec(EngineSpec minSpec) override; - EngineSpec GetMinSpec() override { return m_minSpec; } - - void SetPlayOnStart(bool playOnStart) override; - bool GetPlayOnStart() override { return m_playOnStart; } - - void SetMaxViewDistance(float maxViewDistance) override; - float GetMaxViewDistance() override { return m_maxViewDistance; } - - void SetViewDistanceMultiplier(float viewDistanceMultiplier) override; - float GetViewDistanceMultiplier() override { return m_viewDistanceMultiplier; } - - void SetLODDistanceRatio(AZ::u32 lodDistanceRatio) override; - AZ::u32 GetLODDistanceRatio() override { return m_lodDistanceRatio; } - - void SetCastShadows(bool castShadows) override; - bool GetCastShadows() override { return m_castShadows; } - - void SetUseVisAreas(bool useVisAreas) override; - bool GetUseVisAreas() override { return m_useVisAreas; } - void SetMaterial(_smart_ptr material) override; - private: - - //We want the playOnStart param to reflect playing immediately in the editor - void OnPlayOnStartChanged() override - { - m_playing = m_playOnStart; - m_currentTime = m_startTime; - - //As in GeomCacheCommon::Activate we reset m_currentTime to m_startTime so - //that animations begin at the requested time. - } - - void OnFirstFrameStandinChanged() override; - void OnLastFrameStandinChanged() override; - void OnStandinChanged() override; - - void HandleStandinChanged(const AZ::EntityId& prevStandinId, const AZ::EntityId& newStandinId, bool evictPrevStandinTransform); //Handles the common logic for OnStandinXChanged events - - AZ::EntityId m_prevFirstFrameStandin; - AZ::EntityId m_prevLastFrameStandin; - AZ::EntityId m_prevStandin; - - }; - - /** - * The Edit-time implementation of the GeometryCache component - */ - class EditorGeometryCacheComponent - : public AzToolsFramework::Components::EditorComponentBase - , public AzFramework::EntityDebugDisplayEventBus::Handler - , public AZ::TransformNotificationBus::Handler - { - public: - friend class GeomCacheConverter; - - AZ_COMPONENT(EditorGeometryCacheComponent, "{045C0C58-C13E-49B0-A471-D4AC5D3FC6BD}", AzToolsFramework::Components::EditorComponentBase); - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provides); - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& requires); - static void Reflect(AZ::ReflectContext* context); - - ~EditorGeometryCacheComponent() = default; - - // EditorComponentBase - void Init() override; - void Activate() override; - void Deactivate() override; - - void SetPrimaryAsset(const AZ::Data::AssetId& assetId) override; - - void BuildGameEntity(AZ::Entity* gameEntity) override; - - private: - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - // AZ::TransformNotificationBus - void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override; - - //Reflected members - EditorGeometryCacheCommon m_common; - - //Unreflected members - AZ::Transform m_currentWorldTransform; - }; - -} //namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorHighQualityShadowComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorHighQualityShadowComponent.cpp deleted file mode 100644 index 30cea4619f..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorHighQualityShadowComponent.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include "EditorHighQualityShadowComponent.h" -#include -#include - - - -namespace LmbrCentral -{ - void EditorHighQualityShadowConfig::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - - if (editContext) - { - editContext->Class( - "Shadow Map Settings", "Settings for the entity's shadow map") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->DataElement(AZ::Edit::UIHandlers::Default, &HighQualityShadowConfig::m_enabled, "Enabled", "Enable the shadow map") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HighQualityShadowConfig::EditorRefresh) - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &HighQualityShadowConfig::m_constBias, "Const Bias", "Constant bias") - ->Attribute(AZ::Edit::Attributes::Min, 0.f) - ->Attribute(AZ::Edit::Attributes::Max, 1.f) - ->Attribute(AZ::Edit::Attributes::Step, 0.001f) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HighQualityShadowConfig::EditorRefresh) - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &HighQualityShadowConfig::m_slopeBias, "Slope Bias", "Slope bias") - ->Attribute(AZ::Edit::Attributes::Min, 0.f) - ->Attribute(AZ::Edit::Attributes::Max, 1.f) - ->Attribute(AZ::Edit::Attributes::Step, 0.01f) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HighQualityShadowConfig::EditorRefresh) - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &HighQualityShadowConfig::m_jitter, "Jitter", "Jitter") - ->Attribute(AZ::Edit::Attributes::Min, 0.f) - ->Attribute(AZ::Edit::Attributes::Max, 1.f) - ->Attribute(AZ::Edit::Attributes::Step, 0.01f) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HighQualityShadowConfig::EditorRefresh) - ->DataElement(AZ::Edit::UIHandlers::Vector3, &HighQualityShadowConfig::m_bboxScale, "Bounding Box Scale", "Scale applied to the shadow frustum") - ->Attribute(AZ::Edit::Attributes::Min, 0.f) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HighQualityShadowConfig::EditorRefresh) - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &HighQualityShadowConfig::m_shadowMapSize, "Shadow Map Size", "Shadow map size") - ->Attribute(AZ::Edit::Attributes::EnumValues, AZStd::vector > { - AZ::Edit::EnumConstant(256, "256"), - AZ::Edit::EnumConstant(512, "512"), - AZ::Edit::EnumConstant(1024, "1024"), - AZ::Edit::EnumConstant(2048, "2048"), - AZ::Edit::EnumConstant(8192, "8192") - }) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HighQualityShadowConfig::EditorRefresh) - ; - } - } - } - - void EditorHighQualityShadowConfig::EditorRefresh() - { - if (m_entityId.IsValid()) - { - EditorHighQualityShadowComponentRequestBus::Event(m_entityId, &EditorHighQualityShadowComponentRequests::RefreshProperties); - } - } - - void EditorHighQualityShadowComponent::Reflect(AZ::ReflectContext* context) - { - EditorHighQualityShadowConfig::Reflect(context); - - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("EditorHighQualityShadowConfig", &EditorHighQualityShadowComponent::m_config); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - - if (editContext) - { - editContext->Class("High Quality Shadow", "Assigns a unique shadow map to the entity to provide higher quality shadows. Has performance and memory impact so use sparingly.") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/Shadow.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Shadow.png") - ->Attribute(AZ::Edit::Attributes::PreferNoViewportIcon, true) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-high-quality-shadow.html") - ->DataElement(AZ::Edit::UIHandlers::Default, &EditorHighQualityShadowComponent::m_config, "Shadow Map Settings", "Settings for the entity's unique shadow map") - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ; - } - } - } - - void EditorHighQualityShadowComponent::Activate() - { - m_config.m_entityId = GetEntityId(); - EditorHighQualityShadowComponentRequestBus::Handler::BusConnect(GetEntityId()); - MeshComponentNotificationBus::Handler::BusConnect(GetEntityId()); - } - - void EditorHighQualityShadowComponent::Deactivate() - { - HighQualityShadowComponentUtils::RemoveShadow(GetEntityId()); - EditorHighQualityShadowComponentRequestBus::Handler::BusDisconnect(); - MeshComponentNotificationBus::Handler::BusDisconnect(GetEntityId()); - } - - void EditorHighQualityShadowComponent::RefreshProperties() - { - HighQualityShadowComponentUtils::ApplyShadowSettings(GetEntityId(), m_config); - } - - void EditorHighQualityShadowComponent::BuildGameEntity(AZ::Entity* gameEntity) - { - if (HighQualityShadowComponent* runtimeComponent = gameEntity->CreateComponent()) - { - runtimeComponent->m_config = m_config; - } - } - - void EditorHighQualityShadowComponent::OnMeshCreated([[maybe_unused]] const AZ::Data::Asset& asset) - { - HighQualityShadowComponentUtils::ApplyShadowSettings(GetEntityId(), m_config); - } - - void EditorHighQualityShadowComponent::OnMeshDestroyed() - { - HighQualityShadowComponentUtils::RemoveShadow(GetEntityId()); - } - - -} // namespace LmbrCentral - - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorHighQualityShadowComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorHighQualityShadowComponent.h deleted file mode 100644 index 82ba0f1514..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorHighQualityShadowComponent.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include "HighQualityShadowComponent.h" - -namespace LmbrCentral -{ - /** - * Extends HighQualityShadowConfig structure for editor functionality. - */ - class EditorHighQualityShadowConfig - : public HighQualityShadowConfig - { - public: - AZ_TYPE_INFO(EditorHighQualityShadowConfig, "{4A7D67C6-E689-427A-B126-A71A4BF8A2C7}"); - - static void Reflect(AZ::ReflectContext* context); - - AZ::EntityId m_entityId; // Editor-only, not reflected. - - void EditorRefresh() override; - }; - - /*! - * In-editor high quality shadow component. - */ - class EditorHighQualityShadowComponent - : public AzToolsFramework::Components::EditorComponentBase - , public EditorHighQualityShadowComponentRequestBus::Handler - , public MeshComponentNotificationBus::Handler - { - public: - - AZ_COMPONENT(EditorHighQualityShadowComponent, "{9C86E09D-0727-476E-A4A1-25989CDBF9C6}", AzToolsFramework::Components::EditorComponentBase); - - void BuildGameEntity(AZ::Entity* gameEntity) override; - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // MeshComponentNotificationBus interface implementation - void OnMeshCreated(const AZ::Data::Asset& asset) override; - void OnMeshDestroyed() override; - /////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // EditorHighQualityShadowComponentRequestBus interface implementation - void RefreshProperties() override; - /////////////////////////////////// - - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - provided.push_back(AZ_CRC("HighQualityShadowService", 0x43dea981)); - } - - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - incompatible.push_back(AZ_CRC("HighQualityShadowService", 0x43dea981)); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - // HighQualityShadowComponent is only applicable to Entities that cast and/or receive shadows. - required.push_back(AZ_CRC("MeshService", 0x71d8a455)); - } - - static void Reflect(AZ::ReflectContext* context); - - protected: - - EditorHighQualityShadowConfig m_config; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorLensFlareComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorLensFlareComponent.cpp deleted file mode 100644 index 20e6799df6..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorLensFlareComponent.cpp +++ /dev/null @@ -1,564 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include - -#include "EditorLensFlareComponent.h" -#include "LightComponent.h" - -namespace LmbrCentral -{ - void EditorLensFlareComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - EditorLensFlareConfiguration::Reflect(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1)-> - Field("Visible", &EditorLensFlareComponent::m_visible)-> - Field("LensFlareLibrary", &EditorLensFlareComponent::m_asset)-> - Field("SelectedLensFlare", &EditorLensFlareComponent::m_selectedLensFlareName)-> - Field("EditorLensFlareConfiguration", &EditorLensFlareComponent::m_configuration) - ; - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Lens Flare", "The Lens Flare component allows the placement of a lens flare on an entity") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/LensFlare.svg") - ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/LensFlare.png") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-lens-flare.html") - - ->DataElement(0, &EditorLensFlareComponent::m_configuration, "Settings", "Lens flare configuration") - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - - ->DataElement(AZ::Edit::UIHandlers::CheckBox, &EditorLensFlareComponent::m_visible, "Visible", "The current visibility status of this lens flare") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLensFlareComponent::OnVisibleChanged) - - ->DataElement(0, &EditorLensFlareComponent::m_asset, "Library", "The selected library of lens flares.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLensFlareComponent::OnAssetChanged) - - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorLensFlareComponent::m_selectedLensFlareName, "Lens flare", "The selected lens flare in this library.") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLensFlareComponent::OnLensFlareSelected) - ->Attribute(AZ::Edit::Attributes::StringList, &EditorLensFlareComponent::GetLensFlarePaths) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ; - } - } - } - - void EditorLensFlareConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Configuration", "Lens Flare configuration")-> - - ClassElement(AZ::Edit::ClassElements::EditorData, "")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))-> - - ClassElement(AZ::Edit::ClassElements::Group, "Flare Settings")-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &LensFlareConfiguration::m_minSpec, "Minimum spec", "Min spec for light to be active.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - EnumAttribute(EngineSpec::Never, "Never")-> - EnumAttribute(EngineSpec::VeryHigh, "Very high")-> - EnumAttribute(EngineSpec::High, "High")-> - EnumAttribute(EngineSpec::Medium, "Medium")-> - EnumAttribute(EngineSpec::Low, "Low")-> - - DataElement(0, &LensFlareConfiguration::m_lensFlareFrustumAngle, "FOV", "The lens flare FOV angle")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 1.f)-> - Attribute(AZ::Edit::Attributes::Max, 360.f)-> - Attribute(AZ::Edit::Attributes::Suffix, " degrees")-> - - DataElement(AZ::Edit::UIHandlers::Default, &LensFlareConfiguration::m_size, "Size", "The size of the lens flare")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - - DataElement(0, &LensFlareConfiguration::m_attachToSun, "Attach to sun", "Attach this flare to the sun")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::AttachToSunChanged)-> - - DataElement(0, &LensFlareConfiguration::m_useVisAreas, "Use VisAreas", "Lens Flares is affected by VisAreas")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - - DataElement(0, &LensFlareConfiguration::m_indoorOnly, "Indoor only", "Indoor only")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - - DataElement(0, &LensFlareConfiguration::m_onInitially, "On initially", "The lens flare is initially turned on.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - - DataElement(0, &LensFlareConfiguration::m_viewDistMultiplier, "View distance multiplier", "Adjusts max view distance. If 1.0 then default is used. 1.1 would be 10% further than default.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - // Will be visible if attach to sun is false. - Attribute(AZ::Edit::Attributes::Visibility, &LensFlareConfiguration::ShouldViewDistanceMultiplier)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - - ClassElement(AZ::Edit::ClassElements::Group, "Color Settings")-> - - DataElement(AZ::Edit::UIHandlers::Color, &LensFlareConfiguration::m_tint, "Tint", "Lens flare color tint")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - - DataElement(AZ::Edit::UIHandlers::Color, &LensFlareConfiguration::m_tintAlpha, "Tint [alpha]", "Lens flare alpha tint")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0)-> - Attribute(AZ::Edit::Attributes::Max, 255)-> - Attribute(AZ::Edit::Attributes::Step, 1)-> - - DataElement(0, &LensFlareConfiguration::m_brightness, "Brightness", "Lens flare brightness")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - - ClassElement(AZ::Edit::ClassElements::Group, "Animation")-> - - DataElement(0, &LensFlareConfiguration::m_syncAnimWithLight, "Sync with light", "When checked uses the animation settings of a provided light")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::SyncAnimationChanged)-> - - DataElement(0, &LensFlareConfiguration::m_lightEntity, "Light", "Entity that has a light component to sync with")-> - Attribute(AZ::Edit::Attributes::Visibility, &LensFlareConfiguration::m_syncAnimWithLight)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - - DataElement(0, &LensFlareConfiguration::m_animIndex, "Style", "Light animation curve ID (\"style\") as it corresponds to values in Light.cfx")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Max, 255)-> - Attribute(AZ::Edit::Attributes::Visibility, &LensFlareConfiguration::ShouldShowAnimationSettings)-> - - DataElement(0, &LensFlareConfiguration::m_animSpeed, "Speed", "Multiple of the base animation rate")-> - Attribute(AZ::Edit::Attributes::Visibility, &LensFlareConfiguration::ShouldShowAnimationSettings)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Max, 4.f)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - - DataElement(0, &LensFlareConfiguration::m_animPhase, "Phase", "Animation start offset from 0 to 1. 0.1 would be 10% into the animation")-> - Attribute(AZ::Edit::Attributes::Visibility, &LensFlareConfiguration::ShouldShowAnimationSettings)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LensFlareConfiguration::PropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Max, 1.f) - ; - } - } - } - - AZ::u32 EditorLensFlareConfiguration::PropertyChanged() - { - if (m_editorEntityId.IsValid()) - { - if (m_syncAnimWithLight && m_lightEntity.IsValid()) - { - //Get the config of the light we want to sync with - LmbrCentral::LightConfiguration lightConfig; - - EBUS_EVENT_ID_RESULT(lightConfig, m_lightEntity, EditorLightComponentRequestBus, GetConfiguration); - - m_syncAnimIndex = lightConfig.m_animIndex; - m_syncAnimSpeed = lightConfig.m_animSpeed; - m_syncAnimPhase = lightConfig.m_animPhase; - } - - EBUS_EVENT_ID(m_editorEntityId, EditorLensFlareComponentRequestBus, RefreshLensFlare); - } - - return AZ::Edit::PropertyRefreshLevels::None; - } - - AZ::u32 EditorLensFlareConfiguration::SyncAnimationChanged() - { - if (m_syncAnimWithLight) - { - LightSettingsNotificationsBus::Handler::BusConnect(m_editorEntityId); - } - else - { - LightSettingsNotificationsBus::Handler::BusDisconnect(); - } - - PropertyChanged(); - - return AZ_CRC("RefreshEntireTree", 0xefbc823c); - } - - AZ::u32 EditorLensFlareConfiguration::AttachToSunChanged() - { - // if attached to the sun , then use VIEW_DISTANCE_MULTIPLIER_MAX value - // else use the value set by user. - if (m_attachToSun) - { - m_viewDistMultiplierUser = m_viewDistMultiplier; - m_viewDistMultiplier = static_cast(IRenderNode::VIEW_DISTANCE_MULTIPLIER_MAX); - } - else - { - // We restore the cache user set value when it is not attached to the sun. - m_viewDistMultiplier = m_viewDistMultiplierUser; - } - - PropertyChanged(); - - return AZ_CRC("RefreshEntireTree", 0xefbc823c); - } - void EditorLensFlareConfiguration::AnimationSettingsChanged() - { - PropertyChanged(); - } - - void EditorLensFlareComponent::Init() - { - Base::Init(); - - //Set this in Init because it will never change and doesn't need to be reset if the component re-activates - m_configuration.m_material.SetAssetPath("EngineAssets/Materials/lens_optics"); - } - - void EditorLensFlareComponent::Activate() - { - Base::Activate(); - - //Trigger asset loading so the the editor could show right content for the dropdown. - //Don't call OnAssetChanged because we don't need to clear any serialized data - //nor do we need to check for bus connection. - if (m_asset.GetId().IsValid()) - { - //load LensFlare asset - AZ::Data::AssetBus::Handler::BusConnect(m_asset.GetId()); - m_asset.QueueLoad(); - } - - m_selectedLensFlareLibrary = GetLibraryNameFromAsset(); - m_selectedLensFlareName = GetFlareNameFromPath(m_configuration.m_lensFlare); - - const AZ::EntityId entityId = GetEntityId(); - m_configuration.m_editorEntityId = entityId; - - m_light.SetEntity(entityId); - RefreshLensFlare(); - - //Check to see if we need to start connected to the LightSettingsNotificationBus - m_configuration.SyncAnimationChanged(); - // We call this one in order to cache the user set value. - m_configuration.m_viewDistMultiplierUser = m_configuration.m_viewDistMultiplier; - - m_configuration.AttachToSunChanged(); - - EditorLensFlareComponentRequestBus::Handler::BusConnect(entityId); - RenderNodeRequestBus::Handler::BusConnect(entityId); - AzToolsFramework::EditorVisibilityNotificationBus::Handler::BusConnect(entityId); - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(entityId); - AzToolsFramework::EditorEvents::Bus::Handler::BusConnect(); - } - - void EditorLensFlareComponent::Deactivate() - { - //Check to see if we need to disconnect from the LightSettingsNotificationBus - m_configuration.SyncAnimationChanged(); - - AZ::Data::AssetBus::Handler::BusDisconnect(); - EditorLensFlareComponentRequestBus::Handler::BusDisconnect(); - RenderNodeRequestBus::Handler::BusDisconnect(); - AzToolsFramework::EditorVisibilityNotificationBus::Handler::BusDisconnect(); - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); - - m_light.DestroyRenderLight(); - m_light.SetEntity(AZ::EntityId()); - - m_configuration.m_editorEntityId.SetInvalid(); - - m_selectedLensFlareLibrary.clear(); - - Base::Deactivate(); - } - - void EditorLensFlareComponent::OnEntityVisibilityChanged(bool /*visibility*/) - { - RefreshLensFlare(); - } - - void EditorLensFlareComponent::OnEditorSpecChange() - { - RefreshLensFlare(); - } - - void EditorLensFlareComponent::RefreshLensFlare() - { - m_light.UpdateRenderLight(GetEditorLensFlareConfiguration()); - } - - EditorLensFlareConfiguration EditorLensFlareComponent::GetEditorLensFlareConfiguration() const - { - EditorLensFlareConfiguration configuration = m_configuration; - - // take the entity's visibility into account - bool visible = false; - AzToolsFramework::EditorEntityInfoRequestBus::EventResult( - visible, GetEntityId(), &AzToolsFramework::EditorEntityInfoRequestBus::Events::IsVisible); - - configuration.m_visible = visible && configuration.m_visible; - configuration.m_asset = m_asset; - - return configuration; - } - - void EditorLensFlareComponent::BuildGameEntity(AZ::Entity* gameEntity) - { - LensFlareComponent* lensFlareComponent = gameEntity->CreateComponent(); - - if (lensFlareComponent) - { - lensFlareComponent->m_configuration = m_configuration; - lensFlareComponent->m_configuration.m_asset = m_asset; - } - } - - void EditorLensFlareComponent::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - // Don't draw extra visualization unless selected. - if (!IsSelected()) - { - return; - } - - AZ::Transform transform = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(transform, GetEntityId(), AZ::TransformBus, GetWorldTM); - - debugDisplay.PushMatrix(transform); - - { - const AZ::Vector3& color = m_configuration.m_tint; - debugDisplay.SetColor(AZ::Vector4(color.GetX(), color.GetY(), color.GetZ(), 1.f)); - debugDisplay.DrawWireSphere(AZ::Vector3::CreateZero(), 1.0f); - } - - debugDisplay.PopMatrix(); - } - - AZ::u32 EditorLensFlareComponent::OnLensFlareSelected() - { - m_configuration.m_lensFlare = GetSelectedLensFlareFullName(); - - //If the flare we've selected is valid we need to parse a couple of parameters from it to make sure - //that we display the flare as it's seen in the lens flare editor - if (!m_configuration.m_lensFlare.empty()) - { - int lensOpticsID = 0; - if (gEnv->pOpticsManager->Load(m_configuration.m_lensFlare.c_str(), lensOpticsID)) - { - IOpticsElementBase* flare = gEnv->pOpticsManager->GetOptics(lensOpticsID); - - AZStd::vector varGroups = flare->GetEditorParamGroups(); - - for (size_t i = 0; i < varGroups.size(); ++i) - { - if (strcmp(varGroups[i].GetName(), "Common") == 0) - { - IFuncVariable* var = varGroups[i].FindVariable("Size"); - if (var) - { - m_configuration.m_size = var->GetFloat(); - } - - var = varGroups[i].FindVariable("Tint"); - if (var) - { - ColorF color = var->GetColorF(); - m_configuration.m_tint = AZ::Vector3(color.r, color.g, color.b); - m_configuration.m_tintAlpha = static_cast(color.a * 255.0f); - } - - var = varGroups[i].FindVariable("Brightness"); - if (var) - { - m_configuration.m_brightness = var->GetFloat(); - } - - } - } - } - } - - m_configuration.PropertyChanged(); // Update the render light - - return AZ::Edit::PropertyRefreshLevels::AttributesAndValues; - } - - void EditorLensFlareComponent::OnVisibleChanged() - { - m_configuration.m_visible = m_visible; - - m_configuration.PropertyChanged(); - } - - void EditorLensFlareComponent::OnAssetReady(AZ::Data::Asset asset) - { - if (asset.GetId() == m_asset.GetId()) - { - // Grab the lens flare list list from the Asset and refresh - const AZStd::vector& paths = static_cast(asset.Get())->GetPaths(); - - if (!paths.empty()) - { - //Store the name of the library retrieved from the filepath - m_selectedLensFlareLibrary = GetLibraryNameFromAsset(); - - // No selected lens flare, so automatically select the first one to ensure we see something right away. - if (m_selectedLensFlareName.empty()) - { - m_selectedLensFlareName = GetFlareNameFromPath(paths[0]); - OnLensFlareSelected(); - } - } - - EBUS_EVENT(AzToolsFramework::ToolsApplicationEvents::Bus, InvalidatePropertyDisplay, AzToolsFramework::Refresh_AttributesAndValues); - } - } - - AZStd::vector EditorLensFlareComponent::GetLensFlarePaths() const - { - if (m_asset.IsReady()) - { - AZStd::vector paths = m_asset.Get()->GetPaths(); - - //Remove the library name from the path as it's redundant to display it - for (size_t i = 0; i < paths.size(); i++) - { - paths[i] = GetFlareNameFromPath(paths[i]); - } - - return paths; - } - else - { - return AZStd::vector(); - } - } - - IRenderNode* EditorLensFlareComponent::GetRenderNode() - { - return m_light.GetRenderNode(); - } - - float EditorLensFlareComponent::GetRenderNodeRequestBusOrder() const - { - return LensFlareComponent::s_renderNodeRequestBusOrder; - } - - void EditorLensFlareComponent::OnAssetReloaded(AZ::Data::Asset asset) - { - m_asset = asset; - - // Force the optics manager to reload the library. Otherwise, it will keep returning the old version of the lens flare - // each time Load() is called. - int unusedOutIndex = 0; - const bool forceReload = true; - gEnv->pOpticsManager->Load(GetSelectedLensFlareFullName().c_str(), unusedOutIndex, forceReload); - - RefreshLensFlare(); - } - - void EditorLensFlareComponent::OnAssetChanged() - { - m_selectedLensFlareLibrary.clear(); - m_selectedLensFlareName.clear(); //Clear this so that when the asset is ready we will always pull a new flare from the new library - - if (AZ::Data::AssetBus::Handler::BusIsConnected()) - { - AZ::Data::AssetBus::Handler::BusDisconnect(); - } - - if (m_asset.GetId().IsValid()) - { - //load LensFlare asset - AZ::Data::AssetBus::Handler::BusConnect(m_asset.GetId()); - m_asset.QueueLoad(); - m_asset.BlockUntilLoadComplete(); - } - - EBUS_EVENT(AzToolsFramework::ToolsApplicationEvents::Bus, InvalidatePropertyDisplay, AzToolsFramework::Refresh_AttributesAndValues); - } - - void EditorLensFlareComponent::SetPrimaryAsset(const AZ::Data::AssetId& id) - { - m_asset.Create(id, true); - EBUS_EVENT(AzToolsFramework::ToolsApplicationRequests::Bus, AddDirtyEntity, GetEntityId()); - OnAssetChanged(); - } - - AZStd::string EditorLensFlareComponent::GetFlareNameFromPath(const AZStd::string& path) const - { - //Trim the library name from the beginning of the path to get the flare's name - if (!m_selectedLensFlareLibrary.empty() && m_selectedLensFlareLibrary.size() < path.size()) - { - return path.substr(m_selectedLensFlareLibrary.size() + 1); - } - - return AZStd::string(); - } - - AZStd::string EditorLensFlareComponent::GetLibraryNameFromAsset() const - { - AZStd::string filePath; - EBUS_EVENT_RESULT(filePath, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, m_asset.GetId()); - if (!filePath.empty()) - { - filePath = filePath.substr(filePath.find_last_of('/') + 1); - return filePath.substr(0, filePath.find_last_of('.')); - } - - return AZStd::string(); - } - - AZStd::string EditorLensFlareComponent::GetSelectedLensFlareFullName() const - { - return m_selectedLensFlareLibrary + "." + m_selectedLensFlareName; - } - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorLensFlareComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorLensFlareComponent.h deleted file mode 100644 index 116e2e3392..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorLensFlareComponent.h +++ /dev/null @@ -1,167 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include -#include -#include -#include - -#include - -#include -#include - -#include "LensFlareComponent.h" - -namespace LmbrCentral -{ - /** - * Extends LightConfiguration structure to add editor functionality - * such as property handlers and visibility filters, as well as - * reflection for editing. - */ - class EditorLensFlareConfiguration - : public LensFlareConfiguration - , private LightSettingsNotificationsBus::Handler - { - public: - AZ_TYPE_INFO(EditorLightConfiguration, "{B7E8C0BF-A7B6-4414-90FF-6E21B32E5E16}"); - - ~EditorLensFlareConfiguration() override {} - - static void Reflect(AZ::ReflectContext* context); - - // Overrides from LensFlareConfiguration - AZ::u32 PropertyChanged() override; - AZ::u32 SyncAnimationChanged() override; - AZ::u32 AttachToSunChanged() override; - - // Overrides from LightSettingsNotificationBus - void AnimationSettingsChanged() override; - - AZ::EntityId m_editorEntityId; // Not reflected. - }; - - /*! - * In-editor light component. - * Handles previewing and activating lights in the editor. - */ - class EditorLensFlareComponent - : public AzToolsFramework::Components::EditorComponentBase - , private AzToolsFramework::EditorVisibilityNotificationBus::Handler - , private AzToolsFramework::EditorEvents::Bus::Handler - , private AzFramework::EntityDebugDisplayEventBus::Handler - , private EditorLensFlareComponentRequestBus::Handler - , private RenderNodeRequestBus::Handler - , private AZ::Data::AssetBus::Handler - { - private: - using Base = AzToolsFramework::Components::EditorComponentBase; - public: - AZ_COMPONENT(EditorLensFlareComponent, "{4B85E77D-91F9-40C5-8FCB-B494000A9E69}", AzToolsFramework::Components::EditorComponentBase); - - EditorLensFlareComponent() {} - ~EditorLensFlareComponent() override {} - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Init() override; - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // AzToolsFramework::EditorVisibilityNotificationBus interface implementation - void OnEntityVisibilityChanged(bool visibility) override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // LensFlareComponentEditorRequestBus::Handler interface implementation - virtual void RefreshLensFlare() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // RenderNodeRequestBus::Handler interface implementation - IRenderNode* GetRenderNode() override; - float GetRenderNodeRequestBusOrder() const override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // AssetEventHandler - void OnAssetReady(AZ::Data::Asset asset) override; - void OnAssetReloaded(AZ::Data::Asset asset) override; - ////////////////////////////////////////////////////////////////////////// - - //! Called when you want to change the game asset through code (like when creating components based on assets). - void BuildGameEntity(AZ::Entity* gameEntity) override; - - //! Called when you want to change the game asset through code (like when creating components based on assets). - void SetPrimaryAsset(const AZ::Data::AssetId& assetId) override; - - //! Invoked in the editor when the user assigns a new lens flare. - void OnAssetChanged(); - - //! Invoked in the editor when the user selects a lens flare from the combo box. - AZ::u32 OnLensFlareSelected(); - - //! Invoked in the editor when the user changes the visibility setting from the check box - void OnVisibleChanged(); - - //! Used to populate the lens flare combo box. - AZStd::vector GetLensFlarePaths() const; - - //! Get a copy of configuration appropriate for use with the lens flare - EditorLensFlareConfiguration GetEditorLensFlareConfiguration() const; - - ////////////////////////////////////////////////////////////////////////// - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - LensFlareComponent::GetProvidedServices(provided); - } - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent) - { - LensFlareComponent::GetDependentServices(dependent); - dependent.push_back(AZ_CRC("EditorVisibilityService", 0x90888caf)); - } - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - LensFlareComponent::GetRequiredServices(required); - } - - static void Reflect(AZ::ReflectContext* context); - ////////////////////////////////////////////////////////////////////////// - - private: - ////////////////////////////////////////////////////////////////////////// - // AzToolsFramework::EditorEvents::Bus::Handler interface implementation - void OnEditorSpecChange() override; - ////////////////////////////////////////////////////////////////////////// - - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - AZStd::string GetSelectedLensFlareFullName() const; - AZStd::string GetFlareNameFromPath(const AZStd::string& path) const; - AZStd::string GetLibraryNameFromAsset() const; - - EditorLensFlareConfiguration m_configuration; - LightInstance m_light; - AZStd::string m_selectedLensFlareName; - AZStd::string m_selectedLensFlareLibrary; - AZ::Data::Asset m_asset; - bool m_visible = true; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorLightComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorLightComponent.cpp deleted file mode 100644 index cbef043f17..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorLightComponent.cpp +++ /dev/null @@ -1,2102 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include "EditorLightComponent.h" -#include "EditorAreaLightComponent.h" -#include "EditorPointLightComponent.h" -#include "EditorEnvProbeComponent.h" -#include "EditorProjectorLightComponent.h" - - -namespace LmbrCentral -{ - // private statics - IEditor* EditorLightComponent::m_editor = nullptr; - IMaterialManager* EditorLightComponent::m_materialManager = nullptr; - - const char* EditorLightComponent::BUTTON_GENERATE = "Generate"; - const char* EditorLightComponent::BUTTON_ADDBOUNCE = "Add Bounce"; - - // class converter. Convert EditorLightComponent to one of four above components - namespace ClassConverters - { - static bool ConvertEditorLightComponent(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement) - { - // extract light type - bool isFound = false; - LightConfiguration::LightType lightType; - - int lightConfigIndex = classElement.FindElement(AZ_CRC("EditorLightConfiguration", 0xe4cf6af9)); - if (lightConfigIndex != -1) - { - AZ::SerializeContext::DataElementNode configElement = classElement.GetSubElement(lightConfigIndex); - int baseClassIndex = configElement.FindElement(AZ_CRC("BaseClass1", 0xd4925735)); - if (baseClassIndex != -1) - { - AZ::SerializeContext::DataElementNode baseConfig = configElement.GetSubElement(baseClassIndex); - - int lightTypeIndex = baseConfig.FindElement(AZ_CRC("LightType", 0x9884ece8)); - if (lightTypeIndex != -1) - { - AZ::SerializeContext::DataElementNode lightTypeNode = baseConfig.GetSubElement(lightTypeIndex); - lightTypeNode.GetData< LightConfiguration::LightType>(lightType); - isFound = true; - } - } - } - - if (!isFound) - { - return false; - } - - //save all the sub elements for old EditorLightComponent - typedef AZStd::vector NodeArray; - NodeArray subElements; - for (int i = 0; i < classElement.GetNumSubElements(); i++) - { - subElements.push_back(classElement.GetSubElement(i)); - } - - // Convert to specific editor light component. - bool result = true; - switch (lightType) - { - case LightConfiguration::LightType::Point: - result = classElement.Convert(context); - break; - case LightConfiguration::LightType::Area: - result = classElement.Convert(context); - break; - case LightConfiguration::LightType::Projector: - result = classElement.Convert(context); - break; - case LightConfiguration::LightType::Probe: - result = classElement.Convert(context); - break; - default: - result = false; - break; - } - - if (result) - { - //add base class for the new specific light component - int baseClass = classElement.AddElement(context, "BaseClass1"); - AZ::SerializeContext::DataElementNode& baseClassNode = classElement.GetSubElement(baseClass); - - //then add all the sub elements to this base class. it's because we didn't introduce any other new element to specific light components. - for (int i = 0; i < subElements.size(); i++) - { - baseClassNode.AddElement(subElements[i]); - } - } - - return result; - } - } - - AZ::ExportedComponent EditorLightComponent::ExportLightComponent(AZ::Component* thisComponent, const AZ::PlatformTagSet& /*platformTags*/) - { - EditorLightComponent* editorLightComponent = static_cast(thisComponent); - - LightComponent* lightComponent = aznew LightComponent(); - lightComponent->m_configuration = editorLightComponent->m_configuration; - - return AZ::ExportedComponent(lightComponent, true); - } - - void EditorLightComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - EditorLightConfiguration::Reflect(context); - - if (serializeContext) - { - //any data using old UUID of EditorLightComponent will be send to converter - serializeContext->ClassDeprecate("EditorLightComponent", "{33BB1CD4-6A33-46AA-87ED-8BBB40D94B0D}", &ClassConverters::ConvertEditorLightComponent); - - serializeContext->Class() - ->Version(2, &EditorLightComponent::VersionConverter) - ->Field("EditorLightConfiguration", &EditorLightComponent::m_configuration) - ->Field("CubemapRegen", &EditorLightComponent::m_cubemapRegen) - ->Field("CubemapClear", &EditorLightComponent::m_cubemapClear) - ->Field("ViewCubemap", &EditorLightComponent::m_viewCubemap) - ->Field("UseCustomizedCubemap", &EditorLightComponent::m_useCustomizedCubemap) - ; - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Light", "Attach lighting to an entity.") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &EditorLightComponent::GetLightTypeText) - ->DataElement(0, &EditorLightComponent::m_configuration, "Settings", "Light configuration") - ->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) - - ->ClassElement(AZ::Edit::ClassElements::Group, "Cubemap generation") - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorLightComponent::IsProbe) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - - ->DataElement(AZ::Edit::UIHandlers::CheckBox, &EditorLightComponent::m_useCustomizedCubemap, "Use customized cubemap", "Check to enable usage of customized cubemap") - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorLightComponent::IsProbe) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLightComponent::OnCustomizedCubemapChanged) - - ->DataElement("Button", &EditorLightComponent::m_cubemapRegen, "Cubemap", "Generate the associated cubemap") - ->Attribute(AZ::Edit::Attributes::ButtonText, &EditorLightComponent::GetGenerateCubemapButtonName) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLightComponent::GenerateCubemap) - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorLightComponent::CanGenerateCubemap) - - ->DataElement("Button", &EditorLightComponent::m_cubemapClear, "Cubemap", "Clear the associated cubemap.") - ->Attribute(AZ::Edit::Attributes::ButtonText, "Reset") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLightComponent::ClearCubemap) - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorLightComponent::CanGenerateCubemap) - - ->DataElement(0, &EditorLightComponent::m_viewCubemap, "View cubemap", "Preview the cubemap in scene") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorLightComponent::OnViewCubemapChanged) - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorLightComponent::IsProbe) - ; - } - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - // In the editor we reflect a separate EBus per light type (e.g. Point, Area, Projector). At run-time, we only use a single - // "LightComponentBus" which is the intersection of the separate buses reflected here. - - // Point Light EBus reflection and VirtualProperties - behaviorContext->EBus("EditorPointLightComponentBus") - ->Event("GetVisible", &EditorLightComponentRequestBus::Events::GetVisible) - ->Event("SetVisible", &EditorLightComponentRequestBus::Events::SetVisible) - ->VirtualProperty("Visible", "GetVisible", "SetVisible") - ->Event("GetColor", &EditorLightComponentRequestBus::Events::GetColor) - ->Event("SetColor", &EditorLightComponentRequestBus::Events::SetColor) - ->VirtualProperty("Color", "GetColor", "SetColor") - ->Event("GetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::GetDiffuseMultiplier) - ->Event("SetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::SetDiffuseMultiplier) - ->VirtualProperty("DiffuseMultiplier", "GetDiffuseMultiplier", "SetDiffuseMultiplier") - ->Event("GetSpecularMultiplier", &EditorLightComponentRequestBus::Events::GetSpecularMultiplier) - ->Event("SetSpecularMultiplier", &EditorLightComponentRequestBus::Events::SetSpecularMultiplier) - ->VirtualProperty("SpecularMultiplier", "GetSpecularMultiplier", "SetSpecularMultiplier") - ->Event("GetAmbient", &EditorLightComponentRequestBus::Events::GetAmbient) - ->Event("SetAmbient", &EditorLightComponentRequestBus::Events::SetAmbient) - ->VirtualProperty("Ambient", "GetAmbient", "SetAmbient") - ->Event("GetPointMaxDistance", &EditorLightComponentRequestBus::Events::GetPointMaxDistance) - ->Event("SetPointMaxDistance", &EditorLightComponentRequestBus::Events::SetPointMaxDistance) - ->VirtualProperty("PointMaxDistance", "GetPointMaxDistance", "SetPointMaxDistance") - ->Event("GetPointAttenuationBulbSize", &EditorLightComponentRequestBus::Events::GetPointAttenuationBulbSize) - ->Event("SetPointAttenuationBulbSize", &EditorLightComponentRequestBus::Events::SetPointAttenuationBulbSize) - ->VirtualProperty("PointAttenuationBulbSize", "GetPointAttenuationBulbSize", "SetPointAttenuationBulbSize") - ; - - // Area Light EBus reflection and VirtualProperties - behaviorContext->EBus("EditorAreaLightComponentBus") - ->Event("GetVisible", &EditorLightComponentRequestBus::Events::GetVisible) - ->Event("SetVisible", &EditorLightComponentRequestBus::Events::SetVisible) - ->VirtualProperty("Visible", "GetVisible", "SetVisible") - ->Event("GetColor", &EditorLightComponentRequestBus::Events::GetColor) - ->Event("SetColor", &EditorLightComponentRequestBus::Events::SetColor) - ->VirtualProperty("Color", "GetColor", "SetColor") - ->Event("GetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::GetDiffuseMultiplier) - ->Event("SetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::SetDiffuseMultiplier) - ->VirtualProperty("DiffuseMultiplier", "GetDiffuseMultiplier", "SetDiffuseMultiplier") - ->Event("GetSpecularMultiplier", &EditorLightComponentRequestBus::Events::GetSpecularMultiplier) - ->Event("SetSpecularMultiplier", &EditorLightComponentRequestBus::Events::SetSpecularMultiplier) - ->VirtualProperty("SpecularMultiplier", "GetSpecularMultiplier", "SetSpecularMultiplier") - ->Event("GetAmbient", &EditorLightComponentRequestBus::Events::GetAmbient) - ->Event("SetAmbient", &EditorLightComponentRequestBus::Events::SetAmbient) - ->VirtualProperty("Ambient", "GetAmbient", "SetAmbient") - ->Event("GetAreaMaxDistance", &EditorLightComponentRequestBus::Events::GetAreaMaxDistance) - ->Event("SetAreaMaxDistance", &EditorLightComponentRequestBus::Events::SetAreaMaxDistance) - ->VirtualProperty("AreaMaxDistance", "GetAreaMaxDistance", "SetAreaMaxDistance") - ->Event("GetAreaWidth", &EditorLightComponentRequestBus::Events::GetAreaWidth) - ->Event("SetAreaWidth", &EditorLightComponentRequestBus::Events::SetAreaWidth) - ->VirtualProperty("AreaWidth", "GetAreaWidth", "SetAreaWidth") - ->Event("GetAreaHeight", &EditorLightComponentRequestBus::Events::GetAreaHeight) - ->Event("SetAreaHeight", &EditorLightComponentRequestBus::Events::SetAreaHeight) - ->VirtualProperty("AreaHeight", "GetAreaHeight", "SetAreaHeight") - ->Event("GetAreaFOV", &EditorLightComponentRequestBus::Events::GetAreaFOV) - ->Event("SetAreaFOV", &EditorLightComponentRequestBus::Events::SetAreaFOV) - ->VirtualProperty("AreaFOV", "GetAreaFOV", "SetAreaFOV") - ; - - // Projector Light Ebus reflection and VirtualProperties - behaviorContext->EBus("EditorProjectorLightComponentBus") - ->Event("GetVisible", &EditorLightComponentRequestBus::Events::GetVisible) - ->Event("SetVisible", &EditorLightComponentRequestBus::Events::SetVisible) - ->VirtualProperty("Visible", "GetVisible", "SetVisible") - ->Event("GetColor", &EditorLightComponentRequestBus::Events::GetColor) - ->Event("SetColor", &EditorLightComponentRequestBus::Events::SetColor) - ->VirtualProperty("Color", "GetColor", "SetColor") - ->Event("GetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::GetDiffuseMultiplier) - ->Event("SetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::SetDiffuseMultiplier) - ->VirtualProperty("DiffuseMultiplier", "GetDiffuseMultiplier", "SetDiffuseMultiplier") - ->Event("GetSpecularMultiplier", &EditorLightComponentRequestBus::Events::GetSpecularMultiplier) - ->Event("SetSpecularMultiplier", &EditorLightComponentRequestBus::Events::SetSpecularMultiplier) - ->VirtualProperty("SpecularMultiplier", "GetSpecularMultiplier", "SetSpecularMultiplier") - ->Event("GetAmbient", &EditorLightComponentRequestBus::Events::GetAmbient) - ->Event("SetAmbient", &EditorLightComponentRequestBus::Events::SetAmbient) - ->VirtualProperty("Ambient", "GetAmbient", "SetAmbient") - ->Event("GetProjectorMaxDistance", &EditorLightComponentRequestBus::Events::GetProjectorMaxDistance) - ->Event("SetProjectorMaxDistance", &EditorLightComponentRequestBus::Events::SetProjectorMaxDistance) - ->VirtualProperty("ProjectorMaxDistance", "GetProjectorMaxDistance", "SetProjectorMaxDistance") - ->Event("GetProjectorAttenuationBulbSize", &EditorLightComponentRequestBus::Events::GetProjectorAttenuationBulbSize) - ->Event("SetProjectorAttenuationBulbSize", &EditorLightComponentRequestBus::Events::SetProjectorAttenuationBulbSize) - ->VirtualProperty("ProjectorAttenuationBulbSize", "GetProjectorAttenuationBulbSize", "SetProjectorAttenuationBulbSize") - ->Event("GetProjectorFOV", &EditorLightComponentRequestBus::Events::GetProjectorFOV) - ->Event("SetProjectorFOV", &EditorLightComponentRequestBus::Events::SetProjectorFOV) - ->VirtualProperty("ProjectorFOV", "GetProjectorFOV", "SetProjectorFOV") - ->Event("GetProjectorNearPlane", &EditorLightComponentRequestBus::Events::GetProjectorNearPlane) - ->Event("SetProjectorNearPlane", &EditorLightComponentRequestBus::Events::SetProjectorNearPlane) - ->VirtualProperty("ProjectorNearPlane", "GetProjectorNearPlane", "SetProjectorNearPlane") - ; - - // Environment Probe Light Ebus reflection and VirtualProperties - behaviorContext->EBus("EditorProbeLightComponentBus") - ->Event("GetVisible", &EditorLightComponentRequestBus::Events::GetVisible) - ->Event("SetVisible", &EditorLightComponentRequestBus::Events::SetVisible) - ->VirtualProperty("Visible", "GetVisible", "SetVisible") - ->Event("GetColor", &EditorLightComponentRequestBus::Events::GetColor) - ->Event("SetColor", &EditorLightComponentRequestBus::Events::SetColor) - ->VirtualProperty("Color", "GetColor", "SetColor") - ->Event("GetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::GetDiffuseMultiplier) - ->Event("SetDiffuseMultiplier", &EditorLightComponentRequestBus::Events::SetDiffuseMultiplier) - ->VirtualProperty("DiffuseMultiplier", "GetDiffuseMultiplier", "SetDiffuseMultiplier") - ->Event("GetSpecularMultiplier", &EditorLightComponentRequestBus::Events::GetSpecularMultiplier) - ->Event("SetSpecularMultiplier", &EditorLightComponentRequestBus::Events::SetSpecularMultiplier) - ->VirtualProperty("SpecularMultiplier", "GetSpecularMultiplier", "SetSpecularMultiplier") - ->Event("GetProbeAreaDimensions", &EditorLightComponentRequestBus::Events::GetProbeAreaDimensions) - ->Event("SetProbeAreaDimensions", &EditorLightComponentRequestBus::Events::SetProbeAreaDimensions) - ->VirtualProperty("ProbeAreaDimensions", "GetProbeAreaDimensions", "SetProbeAreaDimensions") - ->Event("GetProbeSortPriority", &EditorLightComponentRequestBus::Events::GetProbeSortPriority) - ->Event("SetProbeSortPriority", &EditorLightComponentRequestBus::Events::SetProbeSortPriority) - ->VirtualProperty("ProbeSortPriority", "GetProbeSortPriority", "SetProbeSortPriority") - ->Event("GetProbeBoxProjected", &EditorLightComponentRequestBus::Events::GetProbeBoxProjected) - ->Event("SetProbeBoxProjected", &EditorLightComponentRequestBus::Events::SetProbeBoxProjected) - ->VirtualProperty("ProbeBoxProjected", "GetProbeBoxProjected", "SetProbeBoxProjected") - ->Event("GetProbeBoxHeight", &EditorLightComponentRequestBus::Events::GetProbeBoxHeight) - ->Event("SetProbeBoxHeight", &EditorLightComponentRequestBus::Events::SetProbeBoxHeight) - ->VirtualProperty("ProbeBoxHeight", "GetProbeBoxHeight", "SetProbeBoxHeight") - ->Event("GetProbeBoxLength", &EditorLightComponentRequestBus::Events::GetProbeBoxLength) - ->Event("SetProbeBoxLength", &EditorLightComponentRequestBus::Events::SetProbeBoxLength) - ->VirtualProperty("ProbeBoxLength", "GetProbeBoxLength", "SetProbeBoxLength") - ->Event("GetProbeBoxWidth", &EditorLightComponentRequestBus::Events::GetProbeBoxWidth) - ->Event("SetProbeBoxWidth", &EditorLightComponentRequestBus::Events::SetProbeBoxWidth) - ->VirtualProperty("ProbeBoxWidth", "GetProbeBoxWidth", "SetProbeBoxWidth") - ->Event("GetProbeAttenuationFalloff", &EditorLightComponentRequestBus::Events::GetProbeAttenuationFalloff) - ->Event("SetProbeAttenuationFalloff", &EditorLightComponentRequestBus::Events::SetProbeAttenuationFalloff) - ->VirtualProperty("ProbeAttenuationFalloff", "GetProbeAttenuationFalloff", "SetProbeAttenuationFalloff") - ->Event("GetProbeFade", &EditorLightComponentRequestBus::Events::GetProbeFade) - ->Event("SetProbeFade", &EditorLightComponentRequestBus::Events::SetProbeFade) - ->VirtualProperty("ProbeFade", "GetProbeFade", "SetProbeFade") - ; - } - } - - bool EditorLightComponent::VersionConverter([[maybe_unused]] AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement) - { - if (classElement.GetVersion() <= 1) - { - if (!classElement.RemoveElementByName(AZ_CRC("cubemapAsset", 0xc10ac43b))) - { - return false; - } - } - - return true; - } - void EditorLightConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Configuration", "Light configuration")-> - - ClassElement(AZ::Edit::ClassElements::EditorData, "")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly)-> - - ClassElement(AZ::Edit::ClassElements::Group, "General Settings")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(AZ::Edit::UIHandlers::CheckBox, &LightConfiguration::m_visible, "Visible", "The current visibility status of this flare")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MajorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_onInitially, "On initially", "The light is initially turned on.")-> - - DataElement(AZ::Edit::UIHandlers::Color, &LightConfiguration::m_color, "Color", "Light color")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_diffuseMultiplier, "Diffuse multiplier", "Diffuse color multiplier")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - - DataElement(0, &LightConfiguration::m_specMultiplier, "Specular multiplier", "Specular multiplier")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - - DataElement(0, &LightConfiguration::m_ambient, "Ambient", "Ambient light")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetAmbientLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - // Point Light Settings - ClassElement(AZ::Edit::ClassElements::Group, "Point Light Settings")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(0, &LightConfiguration::m_pointMaxDistance, "Max distance", "Point light radius")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetPointLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - Attribute(AZ::Edit::Attributes::Min, 0.1f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - - DataElement(0, &LightConfiguration::m_pointAttenuationBulbSize, "Attenuation bulb size", "Radius of area inside falloff.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetPointLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - - // Area Light Settings - ClassElement(AZ::Edit::ClassElements::Group, "Area Light Settings")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(0, &LightConfiguration::m_areaWidth, "Area width", "Area light width.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetAreaSettingVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.1f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - - DataElement(0, &LightConfiguration::m_areaHeight, "Area height", "Area light height.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetAreaSettingVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.1f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - - DataElement(0, &LightConfiguration::m_areaMaxDistance, "Max distance", "Area light max distance.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetAreaSettingVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.1f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, " _")-> - - DataElement(0, &LightConfiguration::m_areaFOV, "FOV", "Area light field of view.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetAreaSettingVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.0f)-> - Attribute(AZ::Edit::Attributes::Max, 90.0f)-> - Attribute(AZ::Edit::Attributes::Step, 1.0f)-> - Attribute(AZ::Edit::Attributes::Suffix, " degrees")-> - - // Projector settings. - ClassElement(AZ::Edit::ClassElements::Group, "Projector Light Settings")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(0, &LightConfiguration::m_projectorRange, "Max distance", "Projector light range")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProjectorLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.1f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - - DataElement(0, &LightConfiguration::m_projectorAttenuationBulbSize, "Attenuation bulb size", "Radius of area inside falloff.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProjectorLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - - DataElement(AZ::Edit::UIHandlers::Slider, &LightConfiguration::m_projectorFOV, "FOV", "Projector light FOV")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProjectorLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 1.f)-> - Attribute(AZ::Edit::Attributes::Max, 180.0f)-> //Projector will start shrinking if FOV goes above 180 degrees - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Suffix, " degrees")-> - - DataElement(0, &LightConfiguration::m_projectorNearPlane, "Near plane", "Projector light near plane")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProjectorLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 100.f)-> - Attribute(AZ::Edit::Attributes::Step, 1.f)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - - DataElement(0, &LightConfiguration::m_projectorTexture, "Texture", "Projector light texture")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProjectorLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MajorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_material, "Material", "Projector light material")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProjectorLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MajorPropertyChanged)-> - - //environment probe settings - ClassElement(AZ::Edit::ClassElements::Group, "Environment Probe Settings")-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(0, &LightConfiguration::m_probeArea, "Area dimensions", "Probe area")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(AZ::Edit::UIHandlers::CheckBox, &LightConfiguration::m_isBoxProjected, "Box projected", "Check to enable box projection during runtime")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_boxHeight, "Box height", "Height of box projection area")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_boxWidth, "Box width", "Width of box projection area")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_boxLength, "Box length", "Length of box projection area")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_attenFalloffMax, "Attenuation falloff", "Attenuation falloff value.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 1.0f)-> - Attribute(AZ::Edit::Attributes::Step, 0.02f)-> - - DataElement(0, &LightConfiguration::m_probeSortPriority, "Sort priority", "Sort priority")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &LightConfiguration::m_probeCubemapResolution, "Resolution", "Cubemap resolution")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MajorPropertyChanged)-> - EnumAttribute(ResolutionSetting::ResDefault, "Default (256)")-> - EnumAttribute(ResolutionSetting::Res32, "32")-> - EnumAttribute(ResolutionSetting::Res64, "64")-> - EnumAttribute(ResolutionSetting::Res128, "128")-> - EnumAttribute(ResolutionSetting::Res256, "256")-> - EnumAttribute(ResolutionSetting::Res512, "512")-> - - ClassElement(AZ::Edit::ClassElements::Group, "Cubemap Generation")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(AZ::Edit::UIHandlers::Default, &LightConfiguration::m_probeCubemap, "Cubemap asset", "Cubemap file path")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetProbeLightVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::OnCubemapAssetChanged)-> - Attribute(AZ::Edit::Attributes::ReadOnly,&LightConfiguration::CanGenerateCubemap)-> - - ClassElement(AZ::Edit::ClassElements::Group, "Animation")-> - - DataElement(0, &LightConfiguration::m_animIndex, "Style", "Light animation curve ID (\"style\") as it corresponds to values in Light.cfx")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::OnAnimationSettingChanged)-> - Attribute(AZ::Edit::Attributes::Max, 255)-> - - DataElement(0, &LightConfiguration::m_animSpeed, "Speed", "Multiple of the base animation rate")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::OnAnimationSettingChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Max, 4.f)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - - DataElement(0, &LightConfiguration::m_animPhase, "Phase", "Animation start offset from 0 to 1. 0.1 would be 10% into the animation")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::OnAnimationSettingChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - Attribute(AZ::Edit::Attributes::Max, 1.f)-> - - ClassElement(AZ::Edit::ClassElements::Group, "Options")-> - - DataElement(0, &LightConfiguration::m_viewDistMultiplier, "View distance multiplier", "Adjusts max view distance. If 1.0 then default is used. 1.1 would be 10% further than default.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Suffix, "x")-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &LightConfiguration::m_minSpec, "Minimum spec", "Min spec for light to be active.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - EnumAttribute(EngineSpec::Never, "Never")-> - EnumAttribute(EngineSpec::VeryHigh, "Very high")-> - EnumAttribute(EngineSpec::High, "High")-> - EnumAttribute(EngineSpec::Medium, "Medium")-> - EnumAttribute(EngineSpec::Low, "Low")-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &LightConfiguration::m_voxelGIMode, "Voxel GI mode", "Mode for light interaction with voxel GI.")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MajorPropertyChanged)-> - EnumAttribute(IRenderNode::VM_None, "None")-> - EnumAttribute(IRenderNode::VM_Static, "Static")-> - EnumAttribute(IRenderNode::VM_Dynamic, "Dynamic")-> - - DataElement(0, &LightConfiguration::m_useVisAreas, "Use VisAreas", "Light is affected by VisAreas")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_volumetricFog, "Volumetric fog", "Affects volumetric fog")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_volumetricFogOnly, "Volumetric fog only", "Only affects volumetric fog")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_indoorOnly, "Indoor only", "Indoor only")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - DataElement(0, &LightConfiguration::m_affectsThisAreaOnly, "Affects this area only", "Light only affects this area")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - ClassElement(AZ::Edit::ClassElements::Group, "Advanced")-> - - DataElement(0, &LightConfiguration::m_deferred, "Deferred", "Deferred light")-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_Hide", 0x32ab90f7))-> // Deprecated on non mobile platforms - hidden until we have a platform to use this - - ClassElement(AZ::Edit::ClassElements::Group, "Shadow Settings")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSpecVisibility)-> - Attribute(AZ::Edit::Attributes::AutoExpand, true)-> - - DataElement(AZ::Edit::UIHandlers::ComboBox, &LightConfiguration::m_castShadowsSpec, "Cast shadow spec", "Min spec for shadow casting.")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSpecVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MajorPropertyChanged)-> - EnumAttribute(EngineSpec::Never, "Never")-> - EnumAttribute(EngineSpec::VeryHigh, "Very high")-> - EnumAttribute(EngineSpec::High, "High")-> - EnumAttribute(EngineSpec::Medium, "Medium")-> - EnumAttribute(EngineSpec::Low, "Low")-> - - DataElement(0, &LightConfiguration::m_castTerrainShadows, "Terrain Shadows", "Include the terrain in the shadow casters for this light")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSettingsVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - - - DataElement(0, &LightConfiguration::m_shadowBias, "Shadow bias", "Shadow bias")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSettingsVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 100.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.5f)-> - - DataElement(0, &LightConfiguration::m_shadowSlopeBias, "Shadow slope bias", "Shadow slope bias")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSettingsVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 100.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.5f)-> - - DataElement(0, &LightConfiguration::m_shadowResScale, "Shadow resolution scale", "Shadow res scale")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSettingsVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 10.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f)-> - - DataElement(0, &LightConfiguration::m_shadowUpdateMinRadius, "Shadow update radius", "Shadow update min radius")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSettingsVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 100.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.5f)-> - Attribute(AZ::Edit::Attributes::Suffix, " m")-> - - DataElement(0, &LightConfiguration::m_shadowUpdateRatio, "Shadow update ratio", "Shadow update ratio")-> - Attribute(AZ::Edit::Attributes::Visibility, &LightConfiguration::GetShadowSettingsVisibility)-> - Attribute(AZ::Edit::Attributes::ChangeNotify, &LightConfiguration::MinorPropertyChanged)-> - Attribute(AZ::Edit::Attributes::Min, 0.f)-> - Attribute(AZ::Edit::Attributes::Max, 10.f)-> - Attribute(AZ::Edit::Attributes::Step, 0.1f) - ; - } - } - } - - AZ::Crc32 EditorLightConfiguration::GetAmbientLightVisibility() const - { - return m_lightType != LightType::Probe ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::GetPointLightVisibility() const - { - return m_lightType == LightType::Point ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::GetProjectorLightVisibility() const - { - return m_lightType == LightType::Projector ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::GetProbeLightVisibility() const - { - return m_lightType == LightType::Probe ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::GetShadowSpecVisibility() const - { - return m_lightType != LightType::Probe ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::GetShadowSettingsVisibility() const - { - return m_castShadowsSpec != EngineSpec::Never ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::GetAreaSettingVisibility() const - { - return m_lightType == LightType::Area ? - AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; - } - - AZ::Crc32 EditorLightConfiguration::MajorPropertyChanged() - { - if (m_editorEntityId.IsValid()) - { - EditorLightComponentRequestBus::Event(m_editorEntityId, &EditorLightComponentRequests::RefreshLight); - } - - return AZ::Edit::PropertyRefreshLevels::EntireTree; - } - - AZ::Crc32 EditorLightConfiguration::MinorPropertyChanged() - { - if (m_editorEntityId.IsValid()) - { - EditorLightComponentRequestBus::Event(m_editorEntityId, &EditorLightComponentRequests::RefreshLight); - } - - return AZ::Edit::PropertyRefreshLevels::None; - } - - AZ::Crc32 EditorLightConfiguration::OnAnimationSettingChanged() - { - if (m_editorEntityId.IsValid()) - { - EditorLightComponentRequestBus::Event(m_editorEntityId, &EditorLightComponentRequests::RefreshLight); - LightSettingsNotificationsBus::Broadcast(&LightSettingsNotifications::AnimationSettingsChanged); - } - - return AZ_CRC("RefreshNone", 0x98a5045b); - } - - AZ::Crc32 EditorLightConfiguration::OnCubemapAssetChanged() - { - if (!m_component) - { - AZ_Error("Lighting", false, "Lighting configuration has a null component, unable to change CubemapAsset"); - return 0; - } - - return m_component->OnCubemapAssetChanged(); - } - - bool EditorLightConfiguration::CanGenerateCubemap() const - { - if (!m_component) - { - AZ_Error("Lighting", false, "Lighting configuration has a null component, unable to generate Cubemap"); - return false; - } - - return m_component->CanGenerateCubemap(); - } - - EditorLightComponent::EditorLightComponent() - : m_useCustomizedCubemap(false) - , m_viewCubemap(false) - , m_cubemapRegen(false) - , m_cubemapClear(false) - { - m_configuration.m_projectorTexture.SetAssetPath("engineassets/textures/defaults/spot_default.dds"); - m_configuration.SetComponent(nullptr); - } - - EditorLightComponent::~EditorLightComponent() - { - } - - void EditorLightComponent::Init() - { - Base::Init(); - } - - void EditorLightComponent::Activate() - { - Base::Activate(); - - m_configuration.SetComponent(this); - m_configuration.m_editorEntityId = GetEntityId(); - - m_light.SetEntity(GetEntityId()); - RefreshLight(); - - if (m_configuration.m_lightType == LightConfiguration::LightType::Probe) - { - m_cubemapPreview.Setup(m_configuration.m_probeCubemap.GetAssetPath().c_str()); - - AZ::Transform transform = AZ::Transform::Identity(); - AZ::TransformBus::EventResult(transform, GetEntityId(), &AZ::TransformInterface::GetWorldTM); - m_cubemapPreview.SetTransform(AZTransformToLYTransform(transform)); - - OnViewCubemapChanged(); // Check to see if it should be displayed now. - } - - EditorCameraCorrectionRequestBus::Handler::BusConnect(GetEntityId()); - EditorLightComponentRequestBus::Handler::BusConnect(GetEntityId()); - RenderNodeRequestBus::Handler::BusConnect(GetEntityId()); - AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId()); - AzToolsFramework::EditorVisibilityNotificationBus::Handler::BusConnect(GetEntityId()); - AzToolsFramework::EditorEvents::Bus::Handler::BusConnect(); - AZ::TransformNotificationBus::Handler::BusConnect(GetEntityId()); - } - - void EditorLightComponent::Deactivate() - { - EditorCameraCorrectionRequestBus::Handler::BusDisconnect(); - EditorLightComponentRequestBus::Handler::BusDisconnect(); - RenderNodeRequestBus::Handler::BusDisconnect(); - AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); - AzToolsFramework::EditorVisibilityNotificationBus::Handler::BusDisconnect(); - AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); - AZ::TransformNotificationBus::Handler::BusDisconnect(); - - if (gEnv->p3DEngine) - { - gEnv->p3DEngine->FreeRenderNodeState(&m_cubemapPreview); - } - - m_light.DestroyRenderLight(); - m_light.SetEntity(AZ::EntityId()); - - m_configuration.m_editorEntityId.SetInvalid(); - - Base::Deactivate(); - } - - void EditorLightComponent::OnEntityVisibilityChanged(bool /*visibility*/) - { - RefreshLight(); - } - - void EditorLightComponent::OnEditorSpecChange() - { - RefreshLight(); - } - - void EditorLightComponent::RefreshLight() - { - EditorLightConfiguration configuration = m_configuration; - - // take the entity's visibility into account - bool visible = false; - AzToolsFramework::EditorEntityInfoRequestBus::EventResult( - visible, GetEntityId(), &AzToolsFramework::EditorEntityInfoRequestBus::Events::IsVisible); - - configuration.m_visible = visible && configuration.m_visible; - - m_light.UpdateRenderLight(configuration); - } - - IRenderNode* EditorLightComponent::GetRenderNode() - { - return m_light.GetRenderNode(); - } - - float EditorLightComponent::GetRenderNodeRequestBusOrder() const - { - return LightComponent::s_renderNodeRequestBusOrder; - } - - bool EditorLightComponent::IsProbe() const - { - return (m_configuration.m_lightType == LightConfiguration::LightType::Probe); - } - - bool EditorLightComponent::HasCubemap() const - { - return !m_configuration.m_probeCubemap.GetAssetPath().empty(); - } - - const char* EditorLightComponent::GetCubemapAssetName() const - { - return m_configuration.m_probeCubemap.GetAssetPath().c_str(); - } - - - bool EditorLightComponent::CanGenerateCubemap() const - { - return (m_configuration.m_lightType == LightConfiguration::LightType::Probe) && (!m_useCustomizedCubemap); - } - - const char* EditorLightComponent::GetGenerateCubemapButtonName() const - { - if (HasCubemap()) - { - return BUTTON_ADDBOUNCE; - } - else - { - return BUTTON_GENERATE; - } - } - - void EditorLightComponent::GenerateCubemap() - { - if (CanGenerateCubemap()) - { - EBUS_EVENT(AzToolsFramework::EditorRequests::Bus, - GenerateCubemapWithIDForEntity, - GetEntityId(), - GetCubemapId(), - nullptr, - false, - true); - } - } - - void EditorLightComponent::ClearCubemap() - { - SetCubemap(""); - } - - void EditorLightComponent::OnViewCubemapChanged() - { - if (!gEnv->p3DEngine) - { - return; - } - - if (m_viewCubemap) - { - gEnv->p3DEngine->RegisterEntity(&m_cubemapPreview); - } - else - { - gEnv->p3DEngine->FreeRenderNodeState(&m_cubemapPreview); - } - } - - void EditorLightComponent::BuildGameEntity(AZ::Entity* gameEntity) - { - LightComponent* lightComponent = gameEntity->CreateComponent(); - - if (lightComponent) - { - lightComponent->m_configuration = m_configuration; - } - } - - void EditorLightComponent::SetCubemap(const AZStd::string& cubemap) - { - if (cubemap != m_configuration.m_probeCubemap.GetAssetPath()) - { - AzToolsFramework::ScopedUndoBatch undo("Cubemap Assignment"); - - m_configuration.m_probeCubemap.SetAssetPath(cubemap.c_str()); - m_cubemapPreview.UpdateTexture(m_configuration.m_probeCubemap.GetAssetPath().c_str()); - - AzToolsFramework::ToolsApplicationRequestBus::Broadcast( - &AzToolsFramework::ToolsApplicationRequests::AddDirtyEntity, GetEntityId()); - } - - if (m_configuration.m_probeCubemap.GetAssetPath().empty()) - { - // Since the cubemap was simply cleared, there is no need to wait for an asset to be processed. - // Instead, refresh the light now so the output will be cleared immediately. - - if (IsSelected()) - { - AzToolsFramework::ToolsApplicationEvents::Bus::Broadcast( - &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, AzToolsFramework::Refresh_AttributesAndValues); - - } - - if (EditorLightConfiguration::LightType::Probe == m_configuration.m_lightType) - { - RefreshLight(); - } - } - else - { - // Get the notice when the dds is generated by AP. We will only refresh the m_cubemapAsset and the PropertyDisplay when the dds is generated. - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); - } - } - - void EditorLightComponent::SetProjectorTexture(const AZStd::string& projectorTexture) - { - if (projectorTexture != m_configuration.m_projectorTexture.GetAssetPath()) - { - m_configuration.m_projectorTexture.SetAssetPath(projectorTexture.c_str()); - RefreshLight(); - } - } - - void EditorLightComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) - { - AZ::Data::AssetId cmAssetId; - AZ::Data::AssetCatalogRequestBus::BroadcastResult( - cmAssetId, &AZ::Data::AssetCatalogRequests::GetAssetIdByPath, - m_configuration.m_probeCubemap.GetAssetPath().c_str(), - m_configuration.m_probeCubemap.GetAssetType(), true); - - if (cmAssetId == assetId) - { - AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); - //refresh the tree since we don't need to wait for the asset imported - if (IsSelected()) - { - AzToolsFramework::ToolsApplicationEvents::Bus::Broadcast( - &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, AzToolsFramework::Refresh_AttributesAndValues); - } - - // We wait to refresh the light until after the new asset has finished loading to avoid showing old data; for example, when you - // Generate, Clear, and then Generate again. - if (EditorLightConfiguration::LightType::Probe == m_configuration.m_lightType) - { - RefreshLight(); - } - } - } - - void EditorLightComponent::OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) - { - OnCatalogAssetAdded(assetId); - } - - AZ::Crc32 EditorLightComponent::OnCubemapAssetChanged() - { - //in case user select a "_diff" texture file. remove it and generate specular file name - static const char* diffExt = "_diff"; - static const int diffStrSize = 5; //string len of "_diff" - - const char* specularCubemap = 0; - string specularName(m_configuration.m_probeCubemap.GetAssetPath().c_str()); - - int strIndex = specularName.find(diffExt); - if (strIndex >= 0) - { - specularName = specularName.substr(0, strIndex) + specularName.substr(strIndex + diffStrSize, specularName.length()); - specularCubemap = specularName.c_str(); - m_configuration.m_probeCubemap.SetAssetPath(specularName); - } - - m_cubemapPreview.UpdateTexture(m_configuration.m_probeCubemap.GetAssetPath().c_str()); - - RefreshLight(); - - return AZ::Edit::PropertyRefreshLevels::ValuesOnly; - } - - void EditorLightConfiguration::SetComponent(EditorLightComponent* component) - { - m_component = component; - } - - AZ::Crc32 EditorLightComponent::OnCustomizedCubemapChanged() - { - //clean assets - m_configuration.m_probeCubemap.SetAssetPath(""); - m_cubemapPreview.UpdateTexture(m_configuration.m_probeCubemap.GetAssetPath().c_str()); - - RefreshLight(); - - return AZ::Edit::PropertyRefreshLevels::EntireTree; - } - - AZ::u32 EditorLightComponent::GetCubemapResolution() - { - return static_cast(m_configuration.m_probeCubemapResolution); - } - void EditorLightComponent::SetCubemapResolution(AZ::u32 newResolution) - { - AZ_Assert(newResolution > 0, "Invalid resolution"); - - LightConfiguration::ResolutionSetting cubemapResolution = static_cast(newResolution); - if (m_configuration.m_probeCubemapResolution != cubemapResolution) - { - m_configuration.m_probeCubemapResolution = cubemapResolution; - m_configuration.MinorPropertyChanged(); - } - } - - bool EditorLightComponent::UseCustomizedCubemap() const - { - return m_useCustomizedCubemap; - } - - const LightConfiguration& EditorLightComponent::GetConfiguration() const - { - return m_configuration; - } - - //////////////////////////////////////////////////////////// - // Modifiers - void EditorLightComponent::SetVisible(bool isVisible) - { - if (m_configuration.m_visible != isVisible) - { - m_configuration.m_visible = isVisible; - m_configuration.MajorPropertyChanged(); - } - } - - bool EditorLightComponent::GetVisible() - { - return m_configuration.m_visible; - } - - void EditorLightComponent::SetOnInitially(bool onInitially) - { - if (m_configuration.m_onInitially != onInitially) - { - m_configuration.m_onInitially = onInitially; - m_configuration.MajorPropertyChanged(); - } - } - bool EditorLightComponent::GetOnInitially() - { - return m_configuration.m_onInitially; - } - - void EditorLightComponent::SetColor(const AZ::Color& newColor) - { - if (m_configuration.m_color != newColor) - { - m_configuration.m_color = newColor; - m_configuration.MinorPropertyChanged(); - } - } - - const AZ::Color EditorLightComponent::GetColor() - { - return m_configuration.m_color; - } - - void EditorLightComponent::SetDiffuseMultiplier(float newMultiplier) - { - if (newMultiplier != m_configuration.m_diffuseMultiplier) - { - m_configuration.m_diffuseMultiplier = newMultiplier; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetDiffuseMultiplier() - { - return m_configuration.m_diffuseMultiplier; - } - - void EditorLightComponent::SetSpecularMultiplier(float newMultiplier) - { - if (newMultiplier != m_configuration.m_specMultiplier) - { - m_configuration.m_specMultiplier = newMultiplier; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetSpecularMultiplier() - { - return m_configuration.m_specMultiplier; - } - - void EditorLightComponent::SetAmbient(bool isAmbient) - { - if (isAmbient != m_configuration.m_ambient) - { - m_configuration.m_ambient = isAmbient; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetAmbient() - { - return m_configuration.m_ambient; - } - - void EditorLightComponent::SetPointMaxDistance(float newMaxDistance) - { - if (newMaxDistance != m_configuration.m_pointMaxDistance) - { - m_configuration.m_pointMaxDistance = newMaxDistance; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetPointMaxDistance() - { - return m_configuration.m_pointMaxDistance; - } - - void EditorLightComponent::SetPointAttenuationBulbSize(float newAttenuationBulbSize) - { - if (newAttenuationBulbSize != m_configuration.m_pointAttenuationBulbSize) - { - m_configuration.m_pointAttenuationBulbSize = newAttenuationBulbSize; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetPointAttenuationBulbSize() - { - return m_configuration.m_pointAttenuationBulbSize; - } - - void EditorLightComponent::SetAreaMaxDistance(float newMaxDistance) - { - if (newMaxDistance != m_configuration.m_areaMaxDistance) - { - m_configuration.m_areaMaxDistance = newMaxDistance; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAreaMaxDistance() - { - return m_configuration.m_areaMaxDistance; - } - - void EditorLightComponent::SetAreaWidth(float newWidth) - { - if (newWidth != m_configuration.m_areaWidth) - { - m_configuration.m_areaWidth = newWidth; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAreaWidth() - { - return m_configuration.m_areaWidth; - } - - void EditorLightComponent::SetAreaHeight(float newHeight) - { - if (newHeight != m_configuration.m_areaHeight) - { - m_configuration.m_areaHeight = newHeight; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAreaHeight() - { - return m_configuration.m_areaHeight; - } - - void EditorLightComponent::SetAreaFOV(float newFOV) - { - if (newFOV != m_configuration.m_areaFOV) - { - m_configuration.m_areaFOV = newFOV; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAreaFOV() - { - return m_configuration.m_areaFOV; - } - - void EditorLightComponent::SetProjectorMaxDistance(float newMaxDistance) - { - if (newMaxDistance != m_configuration.m_projectorRange) - { - m_configuration.m_projectorRange = newMaxDistance; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetProjectorMaxDistance() - { - return m_configuration.m_projectorRange; - } - - void EditorLightComponent::SetProjectorAttenuationBulbSize(float newAttenuationBulbSize) - { - if (newAttenuationBulbSize != m_configuration.m_projectorAttenuationBulbSize) - { - m_configuration.m_projectorAttenuationBulbSize = newAttenuationBulbSize; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetProjectorAttenuationBulbSize() - { - return m_configuration.m_projectorAttenuationBulbSize; - } - - void EditorLightComponent::SetProjectorFOV(float newFOV) - { - if (newFOV != m_configuration.m_projectorFOV) - { - m_configuration.m_projectorFOV = newFOV; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetProjectorFOV() - { - return m_configuration.m_projectorFOV; - } - - void EditorLightComponent::SetProjectorNearPlane(float newNearPlane) - { - if (newNearPlane != m_configuration.m_projectorNearPlane) - { - m_configuration.m_projectorNearPlane = newNearPlane; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetProjectorNearPlane() - { - return m_configuration.m_projectorNearPlane; - } - - void EditorLightComponent::SetProbeAreaDimensions(const AZ::Vector3& newDimensions) - { - if (newDimensions != m_configuration.m_probeArea) - { - m_configuration.m_probeArea = newDimensions; - m_configuration.MinorPropertyChanged(); - } - } - const AZ::Vector3 EditorLightComponent::GetProbeAreaDimensions() - { - return m_configuration.m_probeArea; - } - - void EditorLightComponent::SetProbeBoxProjected(bool isProbeBoxProjected) - { - if (isProbeBoxProjected != m_configuration.m_isBoxProjected) - { - m_configuration.m_isBoxProjected = isProbeBoxProjected; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetProbeBoxProjected() - { - return m_configuration.m_isBoxProjected; - } - - void EditorLightComponent::SetProbeBoxHeight(float newHeight) - { - if (newHeight != m_configuration.m_boxHeight) - { - m_configuration.m_boxHeight = newHeight; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetProbeBoxHeight() - { - return m_configuration.m_boxHeight; - } - - void EditorLightComponent::SetProbeBoxLength(float newLength) - { - if (newLength != m_configuration.m_boxLength) - { - m_configuration.m_boxLength = newLength; - m_configuration.MinorPropertyChanged(); - } - } - - float EditorLightComponent::GetProbeBoxLength() - { - return m_configuration.m_boxLength; - } - - void EditorLightComponent::SetProbeBoxWidth(float newWidth) - { - if (newWidth != m_configuration.m_boxWidth) - { - m_configuration.m_boxWidth = newWidth; - m_configuration.MinorPropertyChanged(); - } - } - - float EditorLightComponent::GetProbeBoxWidth() - { - return m_configuration.m_boxWidth; - } - - void EditorLightComponent::SetProbeAttenuationFalloff(float newAttenuationFalloff) - { - if (newAttenuationFalloff != m_configuration.m_attenFalloffMax) - { - m_configuration.m_attenFalloffMax = newAttenuationFalloff; - m_configuration.MinorPropertyChanged(); - } - } - - float EditorLightComponent::GetProbeAttenuationFalloff() - { - return m_configuration.m_attenFalloffMax; - } - - void EditorLightComponent::SetProbeFade(float fade) - { - AZ_Warning("Lighting", 0.0f <= fade && fade <= 1.0f, "SetProbeFade value %f out of range. Clamping to [0,1]", fade); - fade = AZ::GetClamp(fade, 0.0f, 1.0f); - - if (fade != m_configuration.m_probeFade) - { - m_configuration.m_probeFade = fade; - m_configuration.MinorPropertyChanged(); - } - } - - float EditorLightComponent::GetProbeFade() - { - return m_configuration.m_probeFade; - } - - void EditorLightComponent::SetIndoorOnly(bool newIndoorOnly) - { - if (m_configuration.m_indoorOnly != newIndoorOnly) - { - m_configuration.m_indoorOnly = newIndoorOnly; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetIndoorOnly() - { - return m_configuration.m_indoorOnly; - } - - void EditorLightComponent::SetCastShadowSpec(AZ::u32 newCastShadowSpec) - { - EngineSpec shadowSpec = static_cast(newCastShadowSpec); - if (m_configuration.m_castShadowsSpec != shadowSpec) - { - m_configuration.m_castShadowsSpec = shadowSpec; - m_configuration.MinorPropertyChanged(); - } - } - AZ::u32 EditorLightComponent::GetCastShadowSpec() - { - return static_cast(m_configuration.m_castShadowsSpec); - } - - void EditorLightComponent::SetViewDistanceMultiplier(float newMultiplier) - { - if (m_configuration.m_viewDistMultiplier != newMultiplier) - { - m_configuration.m_viewDistMultiplier = newMultiplier; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetViewDistanceMultiplier() - { - return m_configuration.m_viewDistMultiplier; - } - - void EditorLightComponent::SetProbeArea(const AZ::Vector3& newProbeArea) - { - if (m_configuration.m_probeArea != newProbeArea) - { - m_configuration.m_probeArea = newProbeArea; - m_configuration.MinorPropertyChanged(); - } - } - AZ::Vector3 EditorLightComponent::GetProbeArea() - { - return m_configuration.m_probeArea; - } - - void EditorLightComponent::SetProbeSortPriority(AZ::u32 newProbeSortPriority) - { - if (m_configuration.m_probeSortPriority != newProbeSortPriority) - { - m_configuration.m_probeSortPriority = newProbeSortPriority; - m_configuration.MinorPropertyChanged(); - } - } - AZ::u32 EditorLightComponent::GetProbeSortPriority() - { - return m_configuration.m_probeSortPriority; - } - - void EditorLightComponent::SetVolumetricFog(bool newVolumetricFog) - { - if (m_configuration.m_volumetricFog != newVolumetricFog) - { - m_configuration.m_volumetricFog = newVolumetricFog; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetVolumetricFog() - { - return m_configuration.m_volumetricFog; - } - - void EditorLightComponent::SetVolumetricFogOnly(bool newVolumetricFogOnly) - { - if (m_configuration.m_volumetricFogOnly != newVolumetricFogOnly) - { - m_configuration.m_volumetricFogOnly = newVolumetricFogOnly; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetVolumetricFogOnly() - { - return m_configuration.m_volumetricFogOnly; - } - - void EditorLightComponent::SetAttenuationFalloffMax(float newAttenFalloffMax) - { - if (m_configuration.m_attenFalloffMax != newAttenFalloffMax) - { - m_configuration.m_attenFalloffMax = newAttenFalloffMax; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAttenuationFalloffMax() - { - return m_configuration.m_attenFalloffMax; - } - - void EditorLightComponent::SetUseVisAreas(bool useVisAreas) - { - if (m_configuration.m_useVisAreas != useVisAreas) - { - m_configuration.m_useVisAreas = useVisAreas; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetUseVisAreas() - { - return m_configuration.m_useVisAreas; - } - - void EditorLightComponent::SetAffectsThisAreaOnly(bool affectsThisAreaOnly) - { - if (m_configuration.m_affectsThisAreaOnly != affectsThisAreaOnly) - { - m_configuration.m_affectsThisAreaOnly = affectsThisAreaOnly; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetAffectsThisAreaOnly() - { - return m_configuration.m_affectsThisAreaOnly; - } - - void EditorLightComponent::SetBoxHeight(float newBoxHeight) - { - if (m_configuration.m_boxHeight != newBoxHeight) - { - m_configuration.m_boxHeight = newBoxHeight; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetBoxHeight() - { - return m_configuration.m_boxHeight; - } - - void EditorLightComponent::SetBoxWidth(float newBoxWidth) - { - if (m_configuration.m_boxWidth != newBoxWidth) - { - m_configuration.m_boxWidth = newBoxWidth; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetBoxWidth() - { - return m_configuration.m_boxWidth; - } - - void EditorLightComponent::SetBoxLength(float newBoxLength) - { - if (m_configuration.m_boxLength != newBoxLength) - { - m_configuration.m_boxLength = newBoxLength; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetBoxLength() - { - return m_configuration.m_boxLength; - } - - void EditorLightComponent::SetBoxProjected(bool newBoxProjected) - { - if (m_configuration.m_isBoxProjected != newBoxProjected) - { - m_configuration.m_isBoxProjected = newBoxProjected; - m_configuration.MinorPropertyChanged(); - } - } - bool EditorLightComponent::GetBoxProjected() - { - return m_configuration.m_isBoxProjected; - } - /////////////////////////////////////////////////////////////////// - - void EditorLightComponent::SetShadowBias(float shadowBias) - { - if (m_configuration.m_shadowBias != shadowBias) - { - m_configuration.m_shadowBias = shadowBias; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetShadowBias() - { - return m_configuration.m_shadowBias; - } - - void EditorLightComponent::SetShadowSlopeBias(float shadowSlopeBias) - { - if (m_configuration.m_shadowSlopeBias != shadowSlopeBias) - { - m_configuration.m_shadowSlopeBias = shadowSlopeBias; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetShadowSlopeBias() - { - return m_configuration.m_shadowSlopeBias; - } - - void EditorLightComponent::SetShadowResScale(float shadowResScale) - { - if (m_configuration.m_shadowResScale != shadowResScale) - { - m_configuration.m_shadowResScale = shadowResScale; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetShadowResScale() - { - return m_configuration.m_shadowResScale; - } - - void EditorLightComponent::SetShadowUpdateMinRadius(float shadowUpdateMinRadius) - { - if (m_configuration.m_shadowUpdateMinRadius != shadowUpdateMinRadius) - { - m_configuration.m_shadowUpdateMinRadius = shadowUpdateMinRadius; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetShadowUpdateMinRadius() - { - return m_configuration.m_shadowUpdateMinRadius; - } - - void EditorLightComponent::SetShadowUpdateRatio(float shadowUpdateRatio) - { - if (m_configuration.m_shadowUpdateRatio != shadowUpdateRatio) - { - m_configuration.m_shadowUpdateRatio = shadowUpdateRatio; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetShadowUpdateRatio() - { - return m_configuration.m_shadowUpdateRatio; - } - - // Animation parameters - void EditorLightComponent::SetAnimIndex(AZ::u32 animIndex) - { - if (m_configuration.m_animIndex != animIndex) - { - m_configuration.m_animIndex = animIndex; - m_configuration.MinorPropertyChanged(); - } - } - AZ::u32 EditorLightComponent::GetAnimIndex() - { - return m_configuration.m_animIndex; - } - - void EditorLightComponent::SetAnimSpeed(float animSpeed) - { - if (m_configuration.m_animSpeed != animSpeed) - { - m_configuration.m_animSpeed = animSpeed; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAnimSpeed() - { - return m_configuration.m_animSpeed; - } - - void EditorLightComponent::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& world) - { - m_cubemapPreview.SetTransform(AZTransformToLYTransform(world)); - } - - void EditorLightComponent::SetAnimPhase(float animPhase) - { - if (m_configuration.m_animPhase != animPhase) - { - m_configuration.m_animPhase = animPhase; - m_configuration.MinorPropertyChanged(); - } - } - float EditorLightComponent::GetAnimPhase() - { - return m_configuration.m_animPhase; - } - - const char* EditorLightComponent::GetLightTypeText() const - { - return "Deprecated Light"; - } - - void EditorLightComponent::DisplayEntityViewport( - [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) - { - // Don't draw extra visualization unless selected. - if (!IsSelected()) - { - return; - } - - AZ::Transform transform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(transform, GetEntityId(), &AZ::TransformInterface::GetWorldTM); - - transform.ExtractScale(); - debugDisplay.PushMatrix(transform); - const AZ::Color& color = m_configuration.m_color; - debugDisplay.SetColor(AZ::Vector4(color.GetR(), color.GetG(), color.GetB(), 1.f)); - - switch (m_configuration.m_lightType) - { - case EditorLightConfiguration::LightType::Point: - { - debugDisplay.DrawWireSphere(AZ::Vector3::CreateZero(), m_configuration.m_pointMaxDistance); - debugDisplay.DrawWireSphere(AZ::Vector3::CreateZero(), m_configuration.m_pointAttenuationBulbSize); - break; - } - case EditorLightConfiguration::LightType::Area: - { - debugDisplay.SetColor(AZ::Vector4(color.GetR(), color.GetG(), color.GetB(), 0.5f)); - - // Some initial calculations for drawing - AZ::Matrix3x3 rotYMatrix = AZ::Matrix3x3::CreateRotationY(AZ::DegToRad(m_configuration.m_areaFOV)); - AZ::Matrix3x3 rotXMatrix = AZ::Matrix3x3::CreateRotationX(AZ::DegToRad(45)); - AZ::Vector3 AngleRefPoint = AZ::Vector3(m_configuration.m_areaMaxDistance, 0, 0); - AngleRefPoint *= rotYMatrix; - const float roundedRectangleOffset = AngleRefPoint.GetZ(); - AngleRefPoint *= rotXMatrix; - - // draw box around light - AZ::Vector3 points[4]; - points[0] = AZ::Vector3(0, -m_configuration.m_areaWidth * 0.5f, -m_configuration.m_areaHeight * 0.5f); - points[1] = AZ::Vector3(0, m_configuration.m_areaWidth * 0.5f, -m_configuration.m_areaHeight * 0.5f); - points[2] = AZ::Vector3(0, m_configuration.m_areaWidth * 0.5f, m_configuration.m_areaHeight * 0.5f); - points[3] = AZ::Vector3(0, -m_configuration.m_areaWidth * 0.5f, m_configuration.m_areaHeight * 0.5f); - debugDisplay.DrawPolyLine(points, 4, true); - - // draw lines from corners of light - debugDisplay.DrawLine(points[0], points[0] + AZ::Vector3(AngleRefPoint.GetX(), -AngleRefPoint.GetY(), -AngleRefPoint.GetZ())); - debugDisplay.DrawLine(points[1], points[1] + AZ::Vector3(AngleRefPoint.GetX(), AngleRefPoint.GetY(), -AngleRefPoint.GetZ())); - debugDisplay.DrawLine(points[2], points[2] + AZ::Vector3(AngleRefPoint.GetX(), AngleRefPoint.GetY(), AngleRefPoint.GetZ())); - debugDisplay.DrawLine(points[3], points[3] + AZ::Vector3(AngleRefPoint.GetX(), -AngleRefPoint.GetY(), AngleRefPoint.GetZ())); - - // draw curves to the corners of the max distance box - const float sqrthalf = sqrt(0.5f); - debugDisplay.DrawArc(points[0], m_configuration.m_areaMaxDistance, 0, m_configuration.m_areaFOV, 1.0f, AZ::Vector3(0, sqrthalf, -sqrthalf)); - debugDisplay.DrawArc(points[1], m_configuration.m_areaMaxDistance, -m_configuration.m_areaFOV, m_configuration.m_areaFOV, 1.0f, AZ::Vector3(0, -sqrthalf, -sqrthalf)); - debugDisplay.DrawArc(points[2], m_configuration.m_areaMaxDistance, 0, m_configuration.m_areaFOV, 1.0f, AZ::Vector3(0, -sqrthalf, sqrthalf)); - debugDisplay.DrawArc(points[3], m_configuration.m_areaMaxDistance, -m_configuration.m_areaFOV, m_configuration.m_areaFOV, 1.0f, AZ::Vector3(0, sqrthalf, sqrthalf)); - - // Draw middle rounded rect - debugDisplay.DrawLine( - AZ::Vector3(AngleRefPoint.GetX(), points[0].GetY(), points[0].GetZ() - roundedRectangleOffset), - AZ::Vector3(AngleRefPoint.GetX(), points[1].GetY(), points[1].GetZ() - roundedRectangleOffset) - ); - debugDisplay.DrawLine( - AZ::Vector3(AngleRefPoint.GetX(), points[1].GetY() + roundedRectangleOffset, points[1].GetZ()), - AZ::Vector3(AngleRefPoint.GetX(), points[2].GetY() + roundedRectangleOffset, points[2].GetZ()) - ); - debugDisplay.DrawLine( - AZ::Vector3(AngleRefPoint.GetX(), points[2].GetY(), points[2].GetZ() + roundedRectangleOffset), - AZ::Vector3(AngleRefPoint.GetX(), points[3].GetY(), points[3].GetZ() + roundedRectangleOffset) - ); - debugDisplay.DrawLine( - AZ::Vector3(AngleRefPoint.GetX(), points[3].GetY() - roundedRectangleOffset, points[3].GetZ()), - AZ::Vector3(AngleRefPoint.GetX(), points[0].GetY() - roundedRectangleOffset, points[0].GetZ()) - ); - - debugDisplay.DrawArc(AZ::Vector3(AngleRefPoint.GetX(), points[0].GetY(), points[0].GetZ()), roundedRectangleOffset, 270.0f, 90.0f, 2.0f, AZ::Vector3(1.0f, 0.0f, 0.0f)); - debugDisplay.DrawArc(AZ::Vector3(AngleRefPoint.GetX(), points[1].GetY(), points[1].GetZ()), roundedRectangleOffset, 0.0f, 90.0f, 2.0f, AZ::Vector3(1.0f, 0.0f, 0.0f)); - debugDisplay.DrawArc(AZ::Vector3(AngleRefPoint.GetX(), points[2].GetY(), points[2].GetZ()), roundedRectangleOffset, 90.0f, 90.0f, 2.0f, AZ::Vector3(1.0f, 0.0f, 0.0f)); - debugDisplay.DrawArc(AZ::Vector3(AngleRefPoint.GetX(), points[3].GetY(), points[3].GetZ()), roundedRectangleOffset, 180.0f, 90.0f, 2.0f, AZ::Vector3(1.0f, 0.0f, 0.0f)); - - // draw box at max distance in front of light - points[0] = AZ::Vector3(m_configuration.m_areaMaxDistance, -m_configuration.m_areaWidth * 0.5f, -m_configuration.m_areaHeight * 0.5f); - points[1] = AZ::Vector3(m_configuration.m_areaMaxDistance, m_configuration.m_areaWidth * 0.5f, -m_configuration.m_areaHeight * 0.5f); - points[2] = AZ::Vector3(m_configuration.m_areaMaxDistance, m_configuration.m_areaWidth * 0.5f, m_configuration.m_areaHeight * 0.5f); - points[3] = AZ::Vector3(m_configuration.m_areaMaxDistance, -m_configuration.m_areaWidth * 0.5f, m_configuration.m_areaHeight * 0.5f); - debugDisplay.DrawPolyLine(points, 4, true); - - break; - } - case EditorLightConfiguration::LightType::Projector: - { - debugDisplay.SetColor(AZ::Vector4(color.GetR(), color.GetG(), color.GetB(), 0.5f)); - - const float range = m_configuration.m_projectorRange; - const float attenuation = m_configuration.m_projectorAttenuationBulbSize; - const float nearPlane = m_configuration.m_projectorNearPlane; - - DrawProjectionGizmo(debugDisplay, range); - DrawProjectionGizmo(debugDisplay, attenuation); - DrawPlaneGizmo(debugDisplay, nearPlane); - - break; - } - case EditorLightConfiguration::LightType::Probe: - { - AZ::Vector3 halfAreaSize = m_configuration.m_probeArea/2; - debugDisplay.SetColor(1, 1, 0, 0.8f); - debugDisplay.DrawWireBox( -halfAreaSize, halfAreaSize); - if (m_configuration.m_isBoxProjected) - { - AZ::Vector3 halfBoxSize = AZ::Vector3(m_configuration.m_boxWidth, m_configuration.m_boxLength, m_configuration.m_boxHeight) / 2; - debugDisplay.SetColor(0, 1, 0, 0.8f); - debugDisplay.DrawWireBox(-halfBoxSize, halfBoxSize); - } - - // Note that rendering the cubemap preview is handled by m_cubemapPreview - - break; - } - } - - debugDisplay.PopMatrix(); - } - - void EditorLightComponent::DrawProjectionGizmo( - AzFramework::DebugDisplayRequests& debugDisplay, const float radius) const - { - //Don't draw if the radius isn't going to result in anything visible - if (radius <= 0) - { - return; - } - - const int numPoints = 16; // per one arc - const int numArcs = 6; - - AZ::Vector3 points[numPoints * numArcs]; - { - // Generate 4 arcs on intersection of sphere with pyramid. - const float fov = DEG2RAD(m_configuration.m_projectorFOV); - - const AZ::Vector3 lightAxis(radius, 0.0f, 0.0f); - const float tanA = tan_tpl(fov * 0.5f); - const float fovProj = asin_tpl(1.0f / sqrtf(2.0f + 1.0f / (tanA * tanA))) * 2.0f; - - const float halfFov = 0.5f * fov; - const float halfFovProj = fovProj * 0.5f; - const float anglePerSegmentOfFovProj = 1.0f / (numPoints - 1) * fovProj; - - const AZ::Quaternion yRot = AZ::Quaternion::CreateRotationY(halfFov); - AZ::Vector3* arcPoints = points; - for (int i = 0; i < numPoints; ++i) - { - float angle = i * anglePerSegmentOfFovProj - halfFovProj; - arcPoints[i] = (yRot * AZ::Quaternion::CreateRotationZ(angle)).TransformVector(lightAxis); - } - - const AZ::Quaternion zRot = AZ::Quaternion::CreateRotationZ(halfFov); - arcPoints += numPoints; - for (int i = 0; i < numPoints; ++i) - { - float angle = (numPoints - i - 1) * anglePerSegmentOfFovProj - halfFovProj; - arcPoints[i] = (zRot * AZ::Quaternion::CreateRotationY(angle)).TransformVector(lightAxis); - } - - const AZ::Quaternion nyRot = AZ::Quaternion::CreateRotationY(-halfFov); - arcPoints += numPoints; - for (int i = 0; i < numPoints; ++i) - { - float angle = (numPoints - i - 1) * anglePerSegmentOfFovProj - halfFovProj; - arcPoints[i] = (nyRot * AZ::Quaternion::CreateRotationZ(angle)).TransformVector(lightAxis); - } - - const AZ::Quaternion nzRot = AZ::Quaternion::CreateRotationZ(-halfFov); - arcPoints += numPoints; - for (int i = 0; i < numPoints; ++i) - { - float angle = i * anglePerSegmentOfFovProj - halfFovProj; - arcPoints[i] = (nzRot * AZ::Quaternion::CreateRotationY(angle)).TransformVector(lightAxis); - } - - arcPoints += numPoints; - const float anglePerSegmentOfFov = 1.0f / (numPoints - 1) * fov; - for (int i = 0; i < numPoints; ++i) - { - float angle = i * anglePerSegmentOfFov - halfFov; - arcPoints[i] = AZ::Quaternion::CreateRotationY(angle).TransformVector(lightAxis); - } - - arcPoints += numPoints; - for (int i = 0; i < numPoints; ++i) - { - float angle = i * anglePerSegmentOfFov - halfFov; - arcPoints[i] = AZ::Quaternion::CreateRotationZ(angle).TransformVector(lightAxis); - } - } - - // Draw pyramid and sphere intersection. - debugDisplay.DrawPolyLine(points, numPoints * 4, false); - - // Draw cross. - debugDisplay.DrawPolyLine(points + numPoints * 4, numPoints, false); - debugDisplay.DrawPolyLine(points + numPoints * 5, numPoints, false); - debugDisplay.DrawLine(AZ::Vector3::CreateZero(), points[numPoints * 0]); - debugDisplay.DrawLine(AZ::Vector3::CreateZero(), points[numPoints * 1]); - debugDisplay.DrawLine(AZ::Vector3::CreateZero(), points[numPoints * 2]); - debugDisplay.DrawLine(AZ::Vector3::CreateZero(), points[numPoints * 3]); - } - - void EditorLightComponent::DrawPlaneGizmo(AzFramework::DebugDisplayRequests& debugDisplay, const float depth) const - { - //Don't draw if depth isn't going to result in anything visible - if (depth <= 0) - { - return; - } - - const uint32_t numPoints = 8; //8 Points - 4 corners and 4 half widths - - AZ::Vector3 points[numPoints]; - - const float fov = DEG2RAD(m_configuration.m_projectorFOV); - const float halfWidth = tanf(0.5f * fov) * depth; //Calculate the half width of the frustum at this depth - - //Add corners - points[0] = AZ::Vector3(depth, +halfWidth, +halfWidth); //Top-Left - points[1] = AZ::Vector3(depth, -halfWidth, +halfWidth); //Top-Right - points[2] = AZ::Vector3(depth, -halfWidth, -halfWidth); //Bottom-Right - points[3] = AZ::Vector3(depth, +halfWidth, -halfWidth); //Bottom-Left - - //Add points halfway between corners - points[4] = AZ::Vector3(depth, 0, +halfWidth); //Top-Middle - points[5] = AZ::Vector3(depth, -halfWidth, 0); //Right-Middle - points[6] = AZ::Vector3(depth, 0, -halfWidth); //Bottom-Middle - points[7] = AZ::Vector3(depth, +halfWidth, 0); //Left-Middle - - - //Draw Square - debugDisplay.DrawLine(points[0], points[1]); //TL to TR - debugDisplay.DrawLine(points[1], points[2]); //TR to BR - debugDisplay.DrawLine(points[2], points[3]); //BR to BL - debugDisplay.DrawLine(points[3], points[0]); //BL to TL - - const AZ::Vector3 depthVec(depth, 0, 0); - - // Draw Cross - debugDisplay.DrawLine(depthVec, points[4]); - debugDisplay.DrawLine(depthVec, points[5]); - debugDisplay.DrawLine(depthVec, points[6]); - debugDisplay.DrawLine(depthVec, points[7]); - } - - EditorLightComponent::CubemapPreview::CubemapPreview() - : m_renderTransform(Matrix34::CreateIdentity()) - , m_statObj(nullptr) - { - m_dwRndFlags |= ERF_RENDER_ALWAYS; - } - - void EditorLightComponent::CubemapPreview::Setup(const char* textureName) - { - if (!m_editor) - { - AzToolsFramework::EditorRequestBus::BroadcastResult(m_editor, &AzToolsFramework::EditorRequests::GetEditor); - } - - if (!m_editor->Get3DEngine()) - { - return; - } - - if (!m_materialManager) - { - m_materialManager = m_editor->Get3DEngine()->GetMaterialManager(); - } - - _smart_ptr material = m_materialManager->LoadMaterial("Objects/envcube", false, true); - QString matName = Path::GetFileName(textureName); - if (material) - { - SShaderItem& si = material->GetShaderItem(); - - // We need to clone the material in order for multiple Environment Probes to not stomp each other's preview materials. - material = m_materialManager->CreateMaterial(matName.toUtf8().data(), material->GetFlags() | MTL_FLAG_NON_REMOVABLE); - if (material) - { - SInputShaderResources isr = si.m_pShaderResources; - // The following operation will create a texture slot entry and copy the name to it. - isr.m_TexturesResourcesMap[EFTT_ENV].m_Name = textureName; - - SShaderItem siDst = m_editor->GetRenderer()->EF_LoadShaderItem(si.m_pShader->GetName(), true, 0, &isr, si.m_pShader->GetGenerationMask()); - material->AssignShaderItem(siDst); - } - } - - m_statObj = m_editor->Get3DEngine()->LoadStatObjAutoRef("Objects/envcube.cgf", nullptr, nullptr, false); - if (m_statObj) - { - // We need to clone the object in order for multiple Environment Probes to not stomp each other's preview materials. - m_statObj = m_statObj->Clone(false, false, false); - - m_statObj->SetMaterial(material); - } - } - - void EditorLightComponent::CubemapPreview::UpdateTexture(const char* textureName) - { - if (m_statObj) - { - _smart_ptr material = m_statObj->GetMaterial(); - - if (material) - { - SShaderItem& si = material->GetShaderItem(); - - SInputShaderResources isr = si.m_pShaderResources; - // The following operation will create a texture slot entry and copy the name to it. - isr.m_TexturesResourcesMap[EFTT_ENV].m_Name = textureName; - - SShaderItem siDst = m_editor->GetRenderer()->EF_LoadShaderItem(si.m_pShader->GetName(), true, 0, &isr, si.m_pShader->GetGenerationMask()); - material->AssignShaderItem(siDst); - } - } - } - - void EditorLightComponent::CubemapPreview::SetTransform(const Matrix34& transform) - { - m_renderTransform = transform; - } - - void EditorLightComponent::CubemapPreview::Render([[maybe_unused]] const struct SRendParams& inRenderParams, const struct SRenderingPassInfo& passInfo) - { - if (m_statObj) - { - SRendParams rp; - rp.AmbientColor = ColorF(1.0f, 1.0f, 1.0f, 1); - rp.fAlpha = 1; - rp.pMatrix = &m_renderTransform; - rp.pMaterial = m_statObj->GetMaterial(); - - m_statObj->Render(rp, passInfo); - } - } - - EERType EditorLightComponent::CubemapPreview::GetRenderNodeType() - { - return eERType_RenderComponent; - } - - const char* EditorLightComponent::CubemapPreview::GetName() const - { - return "CubemapPreview"; - } - - const char* EditorLightComponent::CubemapPreview::GetEntityClassName() const - { - return "CubemapPreview"; - } - - Vec3 EditorLightComponent::CubemapPreview::GetPos([[maybe_unused]] bool bWorldOnly) const - { - return m_renderTransform.GetTranslation(); - } - - const AABB EditorLightComponent::CubemapPreview::GetBBox() const - { - AABB transformedAABB; - transformedAABB.Reset(); - if (m_statObj) - { - transformedAABB.SetTransformedAABB(QuatT(m_renderTransform), m_statObj->GetAABB()); - } - return transformedAABB; - } - - _smart_ptr EditorLightComponent::CubemapPreview::GetMaterial([[maybe_unused]] Vec3* pHitPos) - { - return m_statObj ? m_statObj->GetMaterial() : nullptr; - } - - _smart_ptr EditorLightComponent::CubemapPreview::GetMaterialOverride() - { - return m_statObj ? m_statObj->GetMaterial() : nullptr; - } - - IStatObj* EditorLightComponent::CubemapPreview::GetEntityStatObj(unsigned int nPartId, [[maybe_unused]] unsigned int nSubPartId, Matrix34A* pMatrix, [[maybe_unused]] bool bReturnOnlyVisible) - { - if (0 == nPartId) - { - if (pMatrix) - { - *pMatrix = m_renderTransform; - } - - return m_statObj; - } - - return nullptr; - } - - float EditorLightComponent::CubemapPreview::GetMaxViewDist() - { - return FLT_MAX; - } - - void EditorLightComponent::CubemapPreview::GetMemoryUsage(class ICrySizer* pSizer) const - { - pSizer->AddObjectSize(this); - } - - - -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorLightComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorLightComponent.h deleted file mode 100644 index 3b1de2c528..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorLightComponent.h +++ /dev/null @@ -1,408 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include "LightComponent.h" - -#include - -namespace LmbrCentral -{ - class EditorLightComponent; - - /** - * Extends LightConfiguration structure to add editor functionality - * such as property handlers and visibility filters, as well as - * reflection for editing. - */ - - class EditorLightConfiguration - : public LightConfiguration - { - public: - AZ_TYPE_INFO(EditorLightConfiguration, "{1D3B114F-8FB2-47BD-9C21-E089F4F37861}"); - - ~EditorLightConfiguration() override {} - - static void Reflect(AZ::ReflectContext* context); - - AZ::Crc32 GetAmbientLightVisibility() const override; - AZ::Crc32 GetPointLightVisibility() const override; - AZ::Crc32 GetProjectorLightVisibility() const override; - AZ::Crc32 GetProbeLightVisibility() const override; - AZ::Crc32 GetShadowSpecVisibility() const override; - AZ::Crc32 GetShadowSettingsVisibility() const override; - AZ::Crc32 GetAreaSettingVisibility() const override; - - AZ::Crc32 MinorPropertyChanged() override; - AZ::Crc32 MajorPropertyChanged() override; - AZ::Crc32 OnAnimationSettingChanged() override; - AZ::Crc32 OnCubemapAssetChanged() override; - bool CanGenerateCubemap() const override; - - void SetComponent(EditorLightComponent* component); - EditorLightComponent* m_component; - }; - - /*! - * In-editor light component. - * Handles previewing and activating lights in the editor. - */ - class EditorLightComponent - : public AzToolsFramework::Components::EditorComponentBase - , private AzToolsFramework::EditorVisibilityNotificationBus::Handler - , private AzToolsFramework::EditorEvents::Bus::Handler - , private AzFramework::EntityDebugDisplayEventBus::Handler - , private EditorLightComponentRequestBus::Handler - , private RenderNodeRequestBus::Handler - , private AzFramework::AssetCatalogEventBus::Handler - , private AZ::TransformNotificationBus::Handler - , private EditorCameraCorrectionRequestBus::Handler - { - private: - using Base = AzToolsFramework::Components::EditorComponentBase; - public: - - friend EditorLightConfiguration; - //old guid "{33BB1CD4-6A33-46AA-87ED-8BBB40D94B0D}" before splitting editor light component - AZ_COMPONENT(EditorLightComponent, "{7C18B273-5BA3-4E0F-857D-1F30BD6B0733}", AzToolsFramework::Components::EditorComponentBase); - - EditorLightComponent(); - ~EditorLightComponent() override; - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Init() override; - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // AzToolsFramework::EditorVisibilityNotificationBus interface implementation - void OnEntityVisibilityChanged(bool visibility) override; - ////////////////////////////////////////////////////////////////////////// - - // AzFramework::EntityDebugDisplayEventBus - void DisplayEntityViewport( - const AzFramework::ViewportInfo& viewportInfo, - AzFramework::DebugDisplayRequests& debugDisplay) override; - - ////////////////////////////////////////////////////////////////////////// - // EditorLightComponentRequestBus::Handler interface implementation - void SetCubemap(const AZStd::string& cubemap) override; - void SetProjectorTexture(const AZStd::string& projectorTexture) override; - - AZ::u32 GetCubemapResolution() override; - void SetCubemapResolution(AZ::u32 resolution) override; - bool UseCustomizedCubemap() const override; - void RefreshLight() override; - const LightConfiguration& GetConfiguration() const override; - AZ::Crc32 OnCubemapAssetChanged(); - AZ::Crc32 OnCustomizedCubemapChanged(); - - // EditorCameraCorrectionRequestBus interface implementation - // Light is aligned along the the x-axis so add a transform correction to align along the y-axis. - AZ::Matrix3x3 GetTransformCorrection() override { return AZ::Matrix3x3::CreateRotationZ(-AZ::Constants::HalfPi); } - - /////////////////////////////////////////// - // EditorLightComponentRequestBus Modifiers - void SetVisible(bool isVisible) override; - bool GetVisible() override; - - void SetOnInitially(bool onInitially) override; - bool GetOnInitially() override; - - void SetColor(const AZ::Color& newColor) override; - const AZ::Color GetColor() override; - - void SetDiffuseMultiplier(float newMultiplier) override; - float GetDiffuseMultiplier() override; - - void SetSpecularMultiplier(float newMultiplier) override; - float GetSpecularMultiplier() override; - - void SetAmbient(bool isAmbient) override; - bool GetAmbient() override; - - void SetPointMaxDistance(float newMaxDistance) override; - float GetPointMaxDistance() override; - - void SetPointAttenuationBulbSize(float newAttenuationBulbSize) override; - float GetPointAttenuationBulbSize() override; - - void SetAreaMaxDistance(float newMaxDistance) override; - float GetAreaMaxDistance() override; - - void SetAreaWidth(float newWidth) override; - float GetAreaWidth() override; - - void SetAreaHeight(float newHeight) override; - float GetAreaHeight() override; - - void SetAreaFOV(float newFOV) override; - float GetAreaFOV() override; - - void SetProjectorMaxDistance(float newMaxDistance) override; - float GetProjectorMaxDistance() override; - - void SetProjectorAttenuationBulbSize(float newAttenuationBulbSize) override; - float GetProjectorAttenuationBulbSize() override; - - void SetProjectorFOV(float newFOV) override; - float GetProjectorFOV() override; - - void SetProjectorNearPlane(float newNearPlane) override; - float GetProjectorNearPlane() override; - - // Environment Probe Settings - void SetProbeAreaDimensions(const AZ::Vector3& newDimensions) override; - const AZ::Vector3 GetProbeAreaDimensions() override; - - void SetProbeSortPriority(AZ::u32 newPriority) override; - AZ::u32 GetProbeSortPriority() override; - - void SetProbeBoxProjected(bool isProbeBoxProjected) override; - bool GetProbeBoxProjected() override; - - void SetProbeBoxHeight(float newHeight) override; - float GetProbeBoxHeight() override; - - void SetProbeBoxLength(float newLength) override; - float GetProbeBoxLength() override; - - void SetProbeBoxWidth(float newWidth) override; - float GetProbeBoxWidth() override; - - void SetProbeAttenuationFalloff(float newAttenuationFalloff) override; - float GetProbeAttenuationFalloff() override; - - void SetProbeFade(float fade) override; - float GetProbeFade() override; - - void SetIndoorOnly(bool indoorOnly) override; - bool GetIndoorOnly() override; - - void SetCastShadowSpec(AZ::u32 castShadowSpec) override; - AZ::u32 GetCastShadowSpec() override; - - void SetViewDistanceMultiplier(float viewDistanceMultiplier) override; - float GetViewDistanceMultiplier() override; - - void SetProbeArea(const AZ::Vector3& probeArea) override; - AZ::Vector3 GetProbeArea() override; - - void SetVolumetricFogOnly(bool volumetricFogOnly) override; - bool GetVolumetricFogOnly() override; - - void SetVolumetricFog(bool volumetricFog) override; - bool GetVolumetricFog() override; - - void SetAttenuationFalloffMax(float attenFalloffMax); - float GetAttenuationFalloffMax(); - - void SetUseVisAreas(bool useVisAreas) override; - bool GetUseVisAreas() override; - - void SetAffectsThisAreaOnly(bool affectsThisAreaOnly) override; - bool GetAffectsThisAreaOnly() override; - - void SetBoxHeight(float boxHeight) override; - float GetBoxHeight() override; - - void SetBoxWidth(float boxWidth) override; - float GetBoxWidth() override; - - void SetBoxLength(float boxLength) override; - float GetBoxLength() override; - - void SetBoxProjected(bool boxProjected) override; - bool GetBoxProjected() override; - - void SetShadowBias(float shadowBias) override; - float GetShadowBias() override; - - void SetShadowSlopeBias(float shadowSlopeBias) override; - float GetShadowSlopeBias() override; - - void SetShadowResScale(float shadowResScale) override; - float GetShadowResScale() override; - - void SetShadowUpdateMinRadius(float shadowUpdateMinRadius) override; - float GetShadowUpdateMinRadius() override; - - void SetShadowUpdateRatio(float shadowUpdateRatio) override; - float GetShadowUpdateRatio() override; - ////////////////////////////////////////////////////////////////////////// - - // Animation parameters - void SetAnimIndex(AZ::u32 animIndex) override; - AZ::u32 GetAnimIndex() override; - - void SetAnimSpeed(float animSpeed) override; - float GetAnimSpeed() override; - - void SetAnimPhase(float animPhase) override; - float GetAnimPhase() override; - - ////////////////////////////////////////////////////////////////////////// - // RenderNodeRequestBus::Handler interface implementation - IRenderNode* GetRenderNode() override; - float GetRenderNodeRequestBusOrder() const override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // TransformNotificationBus::Handler interface implementation - void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override; - ////////////////////////////////////////////////////////////////////////// - - void BuildGameEntity(AZ::Entity* gameEntity) override; - - ////////////////////////////////////////////////////////////////////////// - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - LightComponent::GetProvidedServices(provided); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - LightComponent::GetRequiredServices(required); - } - - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent) - { - LightComponent::GetDependentServices(dependent); - dependent.push_back(AZ_CRC("EditorVisibilityService", 0x90888caf)); - } - - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - LightComponent::GetIncompatibleServices(incompatible); - } - - static AZ::ExportedComponent ExportLightComponent(AZ::Component* thisComponent, const AZ::PlatformTagSet& /*platformTags*/); - - static void Reflect(AZ::ReflectContext* context); - ////////////////////////////////////////////////////////////////////////// - - protected: - void SetLightType(EditorLightConfiguration::LightType lightType) - { - m_configuration.m_lightType = lightType; - } - - AZ::Uuid GetCubemapId() - { - return m_configuration.m_cubemapId; - } - - virtual const char* GetLightTypeText() const; - - private: - - static bool VersionConverter(AZ::SerializeContext& context, - AZ::SerializeContext::DataElementNode& classElement); - - //! Handles rendering of the preview cubemap by creating a simple cubemapped sphere. - class CubemapPreview : public IRenderNode - { - public: - CubemapPreview(); - void Setup(const char* textureName); - void UpdateTexture(const char* textureName); - void SetTransform(const Matrix34& transform); - - private: - ////////////////////////////////////////////////////////////////////////// - // IRenderNode interface implementation - void Render(const struct SRendParams& inRenderParams, const struct SRenderingPassInfo& passInfo) override; - EERType GetRenderNodeType() override; - const char* GetName() const override; - const char* GetEntityClassName() const override; - Vec3 GetPos(bool bWorldOnly = true) const override; - const AABB GetBBox() const override; - void SetBBox([[maybe_unused]] const AABB& WSBBox) override {} - void OffsetPosition([[maybe_unused]] const Vec3& delta) override {} - void SetMaterial(_smart_ptr pMat) override {} - _smart_ptr GetMaterial(Vec3* pHitPos = nullptr) override; - _smart_ptr GetMaterialOverride() override; - IStatObj* GetEntityStatObj(unsigned int nPartId = 0, unsigned int nSubPartId = 0, Matrix34A* pMatrix = nullptr, bool bReturnOnlyVisible = false); - float GetMaxViewDist() override; - void GetMemoryUsage(class ICrySizer* pSizer) const override; - ////////////////////////////////////////////////////////////////////////// - private: - Matrix34 m_renderTransform; - _smart_ptr m_statObj; - }; - - //if an cubemap asset is added or changed - void OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) override; - void OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) override; - - void OnEditorSpecChange() override; - - //! Returns whether the light is an environment probe - bool IsProbe() const; - - //! Returns whether the light has a cubemap assigned - bool HasCubemap() const; - - //! Triggers regeneration of the environment probe's cubemap (the current cubemap output will be baked into the new cubemap as well). - void GenerateCubemap(); - - //! Removes the associated cubemap, returning the environment probe to its default state - void ClearCubemap(); - - void OnViewCubemapChanged(); - - //! Returns true if it's an environment probe and not using customized cubemap - bool CanGenerateCubemap() const; - - //! Returns the name to use for the Generate Cubemap button. - const char* GetGenerateCubemapButtonName() const; - - const char* GetCubemapAssetName() const; - - void DrawProjectionGizmo(AzFramework::DebugDisplayRequests& dc, const float radius) const; - void DrawPlaneGizmo(AzFramework::DebugDisplayRequests& dc, const float depth) const; - - EditorLightConfiguration m_configuration; - bool m_viewCubemap; - bool m_useCustomizedCubemap; - bool m_cubemapRegen; - bool m_cubemapClear; - - CubemapPreview m_cubemapPreview; - - LightInstance m_light; - - //Statics that can be used by every light - static IEditor* m_editor; - static IMaterialManager* m_materialManager; - static const char* BUTTON_GENERATE; - static const char* BUTTON_ADDBOUNCE; - }; -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorPointLightComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorPointLightComponent.cpp deleted file mode 100644 index ac2a4ec822..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorPointLightComponent.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include "EditorPointLightComponent.h" - -namespace LmbrCentral -{ - void EditorPointLightComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Point Light", "The Point Light component allows an entity to create a point of light") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/PointLight.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/PointLight.png") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-point-light.html") - ->Attribute(AZ::Edit::Attributes::ExportIfAllPlatformTags, AZStd::vector{AZ_CRC("renderer", 0xf199a19c)}) // Only export on platforms that render - ->Attribute(AZ::Edit::Attributes::RuntimeExportCallback, &EditorLightComponent::ExportLightComponent) - ; - } - } - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->Class()->RequestBus("EditorPointLightComponentBus"); - } - } - - void EditorPointLightComponent::Init() - { - SetLightType(EditorLightConfiguration::LightType::Point); - EditorLightComponent::Init(); - } - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorPointLightComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorPointLightComponent.h deleted file mode 100644 index 4438c6f2f1..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorPointLightComponent.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include "EditorLightComponent.h" - -namespace LmbrCentral -{ - /*! - * In-editor point light component. - * Handles previewing and activating lights in the editor. - */ - class EditorPointLightComponent - : public EditorLightComponent - { - public: - AZ_COMPONENT(EditorPointLightComponent, "{00818135-138D-42AD-8657-FF3FD38D9E7A}", AzToolsFramework::Components::EditorComponentBase); - - static void Reflect(AZ::ReflectContext* context); - - void Init() override; - - protected: - const char* GetLightTypeText() const override - { - return "Point Light"; - } - }; -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorProjectorLightComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/EditorProjectorLightComponent.cpp deleted file mode 100644 index 3faab93d82..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorProjectorLightComponent.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include - -#include "EditorProjectorLightComponent.h" - -namespace LmbrCentral -{ - void EditorProjectorLightComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class( - "Projector Light", "The Projector Light component allows an entity to project a light") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Rendering") - ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/ProjectorLight.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/ProjectorLight.png") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://docs.aws.amazon.com/lumberyard/latest/userguide/component-projector-light.html") - ->Attribute(AZ::Edit::Attributes::ExportIfAllPlatformTags, AZStd::vector{AZ_CRC("renderer", 0xf199a19c)}) // Only export on platforms that render - ->Attribute(AZ::Edit::Attributes::RuntimeExportCallback, &EditorLightComponent::ExportLightComponent) - ; - } - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->Class()->RequestBus("EditorProjectorLightComponentBus"); - } - } - - void EditorProjectorLightComponent::Init() - { - SetLightType(EditorLightConfiguration::LightType::Projector); - EditorLightComponent::Init(); - } - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/EditorProjectorLightComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/EditorProjectorLightComponent.h deleted file mode 100644 index 5526c5917e..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/EditorProjectorLightComponent.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include "EditorLightComponent.h" - -namespace LmbrCentral -{ - /*! - * In-editor point light component. - * Handles previewing and activating lights in the editor. - */ - class EditorProjectorLightComponent - : public EditorLightComponent - { - public: - AZ_COMPONENT(EditorProjectorLightComponent, "{41928E34-B558-4559-82CF-8B5795A38CB4}", EditorLightComponent); - - static void Reflect(AZ::ReflectContext* context); - - void Init() override; - - protected: - const char* GetLightTypeText() const override - { - return "Projector Light"; - } - }; -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/GeomCacheComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/GeomCacheComponent.cpp deleted file mode 100644 index 8739030a56..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/GeomCacheComponent.cpp +++ /dev/null @@ -1,817 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include "GeomCacheComponent.h" - -#include -#include - -#include "MathConversion.h" - -#include - -namespace LmbrCentral -{ - //BehaviorContext GeometryCacheComponentNotificationBus Forwarder - class BehaviorGeometryCacheComponentNotificationBusHandler - : public GeometryCacheComponentNotificationBus::Handler - , public AZ::BehaviorEBusHandler - { - public: - AZ_EBUS_BEHAVIOR_BINDER(BehaviorGeometryCacheComponentNotificationBusHandler, "{8E0B4617-DD82-47D8-AA2F-3DF3E6677B4B}", AZ::SystemAllocator, - OnPlaybackStart, - OnPlaybackPause, - OnPlaybackStop, - OnStandinChanged); - - void OnPlaybackStart() override - { - Call(FN_OnPlaybackStart); - } - - void OnPlaybackPause() override - { - Call(FN_OnPlaybackPause); - } - - void OnPlaybackStop() override - { - Call(FN_OnPlaybackStop); - } - - void OnStandinChanged(StandinType standinType) override - { - Call(FN_OnStandinChanged, standinType); - } - }; - - void GeometryCacheCommon::Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Version(1) - ->Field("Visible", &GeometryCacheCommon::m_visible) - ->Field("MinSpec", &GeometryCacheCommon::m_minSpec) - ->Field("GeomCacheAsset", &GeometryCacheCommon::m_geomCacheAsset) - ->Field("MaterialOverrideAsset", &GeometryCacheCommon::m_materialOverrideAsset) - ->Field("Loop", &GeometryCacheCommon::m_loop) - ->Field("PlayOnStart", &GeometryCacheCommon::m_playOnStart) - ->Field("StartTime", &GeometryCacheCommon::m_startTime) - ->Field("StreamInDistance", &GeometryCacheCommon::m_streamInDistance) - ->Field("FirstFrameStandin", &GeometryCacheCommon::m_firstFrameStandin) - ->Field("LastFrameStandin", &GeometryCacheCommon::m_lastFrameStandin) - ->Field("Standin", &GeometryCacheCommon::m_standin) - ->Field("StandinDistance", &GeometryCacheCommon::m_standinDistance) - ->Field("MaxViewDistance", &GeometryCacheCommon::m_maxViewDistance) - ->Field("ViewDistanceMultiplier", &GeometryCacheCommon::m_viewDistanceMultiplier) - ->Field("LODDistanceRatio", &GeometryCacheCommon::m_lodDistanceRatio) - ->Field("CastShadows", &GeometryCacheCommon::m_castShadows) - ->Field("UseVisArea", &GeometryCacheCommon::m_useVisAreas) - ; - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) - { - behaviorContext->EBus("GeometryCacheComponentRequestBus") - ->Event("Play", &GeometryCacheComponentRequestBus::Events::Play) - ->Event("Pause", &GeometryCacheComponentRequestBus::Events::Pause) - ->Event("Stop", &GeometryCacheComponentRequestBus::Events::Stop) - - ->Event("GetTimeRemaining", &GeometryCacheComponentRequestBus::Events::GetTimeRemaining) - - ->Event("SetVisible", &GeometryCacheComponentRequestBus::Events::SetVisible) - ->Event("GetVisible", &GeometryCacheComponentRequestBus::Events::GetVisible) - ->VirtualProperty("Visible", "GetVisible", "SetVisible") - - ->Event("SetLoop", &GeometryCacheComponentRequestBus::Events::SetLoop) - ->Event("GetLoop", &GeometryCacheComponentRequestBus::Events::GetLoop) - ->VirtualProperty("Loop", "GetLoop", "SetLoop") - - ->Event("SetStartTime", &GeometryCacheComponentRequestBus::Events::SetStartTime) - ->Event("GetStartTime", &GeometryCacheComponentRequestBus::Events::GetStartTime) - ->VirtualProperty("StartTime", "GetStartTime", "SetStartTime") - - ->Event("SetFirstFrameStandIn", &GeometryCacheComponentRequestBus::Events::SetFirstFrameStandIn) - ->Event("GetFirstFrameStandIn", &GeometryCacheComponentRequestBus::Events::GetFirstFrameStandIn) - ->VirtualProperty("FirstFrameStandIn", "GetFirstFrameStandIn", "SetFirstFrameStandIn") - - ->Event("SetLastFrameStandIn", &GeometryCacheComponentRequestBus::Events::SetLastFrameStandIn) - ->Event("GetLastFrameStandIn", &GeometryCacheComponentRequestBus::Events::GetLastFrameStandIn) - ->VirtualProperty("LastFrameStandIn", "GetLastFrameStandIn", "SetLastFrameStandIn") - - ->Event("SetStandIn", &GeometryCacheComponentRequestBus::Events::SetStandIn) - ->Event("GetStandIn", &GeometryCacheComponentRequestBus::Events::GetStandIn) - ->VirtualProperty("StandIn", "GetStandIn", "SetStandIn") - - ->Event("SetStandInDistance", &GeometryCacheComponentRequestBus::Events::SetStandInDistance) - ->Event("GetStandInDistance", &GeometryCacheComponentRequestBus::Events::GetStandInDistance) - ->VirtualProperty("StandInDistance", "GetStandInDistance", "SetStandInDistance") - - ->Event("SetStreamInDistance", &GeometryCacheComponentRequestBus::Events::SetStreamInDistance) - ->Event("GetStreamInDistance", &GeometryCacheComponentRequestBus::Events::GetStreamInDistance) - ->VirtualProperty("StreamInDistance", "GetStreamInDistance", "SetStreamInDistance") - - ; - - behaviorContext->EBus("GeometryCacheComponentNotificationBus") - ->Handler() - ; - - behaviorContext->Class() - ->RequestBus("GeometryCacheComponentRequestBus") - ->NotificationBus("GeometryCacheComponentNotificationBus") - ; - } - } - - GeometryCacheCommon::~GeometryCacheCommon() - { - if (m_geomCacheRenderNode) - { - delete m_geomCacheRenderNode; - m_geomCacheRenderNode = nullptr; - } - } - - void GeometryCacheCommon::Init(const AZ::EntityId& entityId) - { - m_entityId = entityId; - - if (gEnv && gEnv->p3DEngine && !m_geomCacheRenderNode) - { - m_geomCacheRenderNode = static_cast(gEnv->p3DEngine->CreateRenderNode(eERType_GeomCache)); - } - } - - void GeometryCacheCommon::Activate() - { - m_isRegisteredWithRenderer = false; - - m_currentTime = m_startTime; //We default to m_startTime here instead of 0.0 so that animations actually start at m_startTime - - //If there is no set asset use the defaultgeomcache asset that is expected to exist in EngineAssets - if (!m_geomCacheAsset.GetId().IsValid()) - { - AZ::Data::AssetId defaultGeomCacheAssetId; - const char* defaultGeomCacheAssetName = "engineassets/geomcaches/defaultgeomcache.cax"; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(defaultGeomCacheAssetId, &AZ::Data::AssetCatalogRequests::GetAssetIdByPath, defaultGeomCacheAssetName, AZ::Data::s_invalidAssetType, false); - - if (defaultGeomCacheAssetId.IsValid()) - { - m_geomCacheAsset.Create(defaultGeomCacheAssetId); - } - else - { - AZ_Warning("GeometryCache", false, "Default Geometry Cache was not found"); - } - } - - CreateGeomCache(); - - //Hide all referenced entities by default - //If a standin *should* be shown that will be determined on the first tick - HideAllStandins(); - m_currentStandinType = StandinType::None; - ShowCurrentStandin(); - - GeometryCacheComponentRequestBus::Handler::BusConnect(m_entityId); - AZ::TransformNotificationBus::Handler::BusConnect(m_entityId); - AZ::TickBus::Handler::BusConnect(); - MaterialOwnerRequestBus::Handler::BusConnect(m_entityId); - - //Get initial transform and update the render node with it - AZ::Transform world = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(world, m_entityId, &AZ::TransformBus::Events::GetWorldTM); - - OnTransformChanged(AZ::Transform::CreateIdentity(), world); - - m_playing = false; - if (m_playOnStart) - { - Play(); - } - } - - void GeometryCacheCommon::Deactivate() - { - HideAllStandins(); - - GeometryCacheComponentRequestBus::Handler::BusDisconnect(m_entityId); - AZ::TransformNotificationBus::Handler::BusDisconnect(m_entityId); - AZ::TickBus::Handler::BusDisconnect(); - MaterialOwnerRequestBus::Handler::BusDisconnect(m_entityId); - - DestroyGeomCache(); - } - - void GeometryCacheCommon::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& world) - { - m_currentWorldPos = world.GetTranslation(); - - if (m_geomCacheRenderNode) - { - Matrix34 cryMat = AZTransformToLYTransform(world); - m_geomCacheRenderNode->SetMatrix(cryMat); - - //Re-register to update position - RegisterRenderNode(); - } - } - - void GeometryCacheCommon::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) - { - if (m_geomCacheRenderNode && m_playing) - { - float playbackTime = m_currentTime; - - m_currentTime += deltaTime; - playbackTime = m_currentTime; - - m_geomCacheRenderNode->SetPlaybackTime(playbackTime); - } - - //Don't care about handling stand-in visibility if the whole - //GeomCache shouldn't be visible - if (m_hidden) - { - return; - } - - bool standinInUse = false; - - //Distance based stand-in - //This has the highest priority - const Vec3 cameraPos = gEnv->p3DEngine->GetRenderingCamera().GetPosition(); - float distance = (LYVec3ToAZVec3(cameraPos) - m_currentWorldPos).GetLength(); - if (distance > m_standinDistance) - { - standinInUse = true; - - if (m_standin.IsValid() && m_currentStandinType != StandinType::Distance) - { - HideCurrentStandin(); - m_currentStandinType = StandinType::Distance; - ShowCurrentStandin(); - } - } - else - { - //Stand-in for first frame - if (m_currentTime == m_startTime) - { - standinInUse = true; - - if (m_firstFrameStandin.IsValid() && m_currentStandinType != StandinType::FirstFrame) - { - HideCurrentStandin(); - m_currentStandinType = StandinType::FirstFrame; - ShowCurrentStandin(); - } - } - //Stand-in for last frame - else if (!m_loop && m_geomCache && m_currentTime >= m_geomCache->GetDuration()) - { - standinInUse = true; - - if (m_lastFrameStandin.IsValid() && m_currentStandinType != StandinType::LastFrame) - { - HideCurrentStandin(); - m_currentStandinType = StandinType::LastFrame; - ShowCurrentStandin(); - } - } - } - - //If none of the other stand-ins are being rendered, remove any existing ones - //and go back to just rendering the geom cache - if (!standinInUse && m_currentStandinType != StandinType::None) - { - HideCurrentStandin(); - m_currentStandinType = StandinType::None; - ShowCurrentStandin(); - } - } - - void GeometryCacheCommon::OnAssetReady(AZ::Data::Asset asset) - { - if (asset == m_geomCacheAsset) - { - m_geomCacheAsset = asset; - m_geomCache = m_geomCacheAsset.Get()->m_geomCache; - - if (m_geomCache != nullptr) - { - m_geomCacheRenderNode->SetGeomCache(m_geomCache); - - //Allow this geom cache to clean up after we've properly set it on the render node - m_geomCache->SetProcessedByRenderNode(true); - - if (m_materialOverride) - { - m_geomCacheRenderNode->SetMaterial(m_materialOverride); - } - - if (gEnv && gEnv->p3DEngine) - { - gEnv->p3DEngine->RegisterEntity(m_geomCacheRenderNode); - m_isRegisteredWithRenderer = true; - } - - //Apply latest transform to the render node - AZ::Transform world = AZ::Transform::CreateIdentity(); - AZ::TransformBus::EventResult(world, m_entityId, &AZ::TransformBus::Events::GetWorldTM); - - OnTransformChanged(AZ::Transform::CreateIdentity(), world); - } - } - } - - void GeometryCacheCommon::OnAssetReloaded(AZ::Data::Asset asset) - { - if (asset == m_geomCacheAsset) - { - // We need to make sure m_geomCacheAsset is assigned with the new asset. - // Since the new asset passed in has zero refCount. The assigning will clear the refCount of the old m_geomCacheAsset - // and set the refCount of the new asset to 1, otherwise it will be unloaded. - m_geomCacheAsset = asset; - m_geomCache = m_geomCacheAsset.Get()->m_geomCache; - } - } - - void GeometryCacheCommon::SetMaterial(_smart_ptr material) - { - m_materialOverride = material; - - if (material) - { - m_materialOverrideAsset.SetAssetPath(material->GetName()); - } - else - { - m_materialOverrideAsset.SetAssetPath(""); - } - - DestroyGeomCache(); - CreateGeomCache(); - } - - _smart_ptr GeometryCacheCommon::GetMaterial() - { - if (m_materialOverride) - { - return m_materialOverride; - } - - if (m_geomCache == nullptr) - { - return nullptr; - } - - return m_geomCache->GetMaterial(); - } - - void GeometryCacheCommon::Play() - { - if (!m_playing) - { - m_playing = true; - GeometryCacheComponentNotificationBus::Broadcast(&GeometryCacheComponentNotificationBus::Events::OnPlaybackStart); - } - } - - void GeometryCacheCommon::Pause() - { - if (m_playing) - { - m_playing = false; - GeometryCacheComponentNotificationBus::Broadcast(&GeometryCacheComponentNotificationBus::Events::OnPlaybackPause); - } - } - - void GeometryCacheCommon::Stop() - { - if (m_playing) - { - m_playing = false; - m_currentTime = 0; - if (m_geomCacheRenderNode) - { - m_geomCacheRenderNode->StopStreaming(); - } - GeometryCacheComponentNotificationBus::Broadcast(&GeometryCacheComponentNotificationBus::Events::OnPlaybackStop); - } - } - - float GeometryCacheCommon::GetTimeRemaining() - { - if (m_playing) - { - return m_geomCache->GetDuration() - m_currentTime; - } - else - { - return -1.0f; - } - } - - void GeometryCacheCommon::SetGeomCacheAsset(const AZ::Data::AssetId& id) - { - DestroyGeomCache(); - m_geomCacheAsset.Create(id); - CreateGeomCache(); - } - - void GeometryCacheCommon::SetVisible(bool visible) - { - m_visible = visible; - OnRenderOptionsChanged(); - } - - void GeometryCacheCommon::SetLoop(bool loop) - { - m_loop = loop; - OnLoopChanged(); - } - - void GeometryCacheCommon::SetStartTime(float startTime) - { - m_startTime = startTime; - OnStartTimeChanged(); - } - - void GeometryCacheCommon::SetFirstFrameStandIn(AZ::EntityId entityId) - { - if (!entityId.IsValid()) - { - return; - } - - if (m_currentStandinType == StandinType::FirstFrame) - { - HideCurrentStandin(); - } - - m_firstFrameStandin = entityId; - - if (m_currentStandinType == StandinType::FirstFrame) - { - ShowCurrentStandin(); - } - } - - void GeometryCacheCommon::SetLastFrameStandIn(AZ::EntityId entityId) - { - if (!entityId.IsValid()) - { - return; - } - - if (m_currentStandinType == StandinType::LastFrame) - { - HideCurrentStandin(); - } - - m_lastFrameStandin = entityId; - - if (m_currentStandinType == StandinType::LastFrame) - { - ShowCurrentStandin(); - } - } - - void GeometryCacheCommon::SetStandIn(AZ::EntityId entityId) - { - if (!entityId.IsValid()) - { - return; - } - - if (m_currentStandinType == StandinType::Distance) - { - HideCurrentStandin(); - } - - m_standin = entityId; - - if (m_currentStandinType == StandinType::Distance) - { - ShowCurrentStandin(); - } - } - - void GeometryCacheCommon::SetStandInDistance(float standInDistance) - { - m_standinDistance = standInDistance; - } - - void GeometryCacheCommon::SetStreamInDistance(float streamInDistance) - { - m_streamInDistance = streamInDistance; - OnStreamInDistanceChanged(); - } - - void GeometryCacheCommon::OnRenderOptionsChanged() - { - AZ::u32 rendFlags = 0; - - //We want to hide the GeomCache if we're rendering a stand-in - if (m_renderingStandin) - { - rendFlags |= ERF_HIDDEN; - } - //But if the GeomCache is marked as invisible (or the min spec is too high), neither - //the GeomCache or any stand-ins should render - const int configSpec = gEnv->pSystem->GetConfigSpec(true); - - m_hidden = !m_visible || (static_cast(configSpec) < static_cast(m_minSpec)); - if (m_hidden) - { - rendFlags |= ERF_HIDDEN; - HideAllStandins(); - } - - if (!m_useVisAreas) - { - rendFlags |= ERF_OUTDOORONLY; - } - - if (m_castShadows) - { - rendFlags |= ERF_HAS_CASTSHADOWMAPS; - rendFlags |= ERF_CASTSHADOWMAPS; - } - - rendFlags |= ERF_COMPONENT_ENTITY; - m_geomCacheRenderNode->SetRndFlags(rendFlags); - - //Re-register to update flags - RegisterRenderNode(); - } - - void GeometryCacheCommon::OnGeomCacheAssetChanged() - { - DestroyGeomCache(); - CreateGeomCache(); - } - - void GeometryCacheCommon::OnMaterialOverrideChanged() - { - LoadMaterialOverride(); - if (m_materialOverride) - { - m_geomCacheRenderNode->SetMaterial(m_materialOverride); - } - - //On Activate this will be false and that's expected. - //However when the asset actually loads, the material should be applied. - //This is just for whenever the material override *changes* - //but not necessarily for material application on startup. - RegisterRenderNode(); - } - - void GeometryCacheCommon::OnStartTimeChanged() - { - if (m_geomCache) - { - if (m_startTime > m_geomCache->GetDuration()) - { - m_startTime = m_geomCache->GetDuration(); - } - } - - //If the start time has changed, restart the animation - m_currentTime = m_startTime; - } - - void GeometryCacheCommon::OnLoopChanged() - { - m_geomCacheRenderNode->SetLooping(m_loop); - } - - void GeometryCacheCommon::OnMaxViewDistanceChanged() - { - m_geomCacheRenderNode->SetBaseMaxViewDistance(m_maxViewDistance); - - RegisterRenderNode(); - } - - void GeometryCacheCommon::OnViewDistanceMultiplierChanged() - { - m_geomCacheRenderNode->SetViewDistanceMultiplier(m_viewDistanceMultiplier); - - RegisterRenderNode(); - } - - void GeometryCacheCommon::OnLODDistanceRatioChanged() - { - m_geomCacheRenderNode->SetLodRatio(m_lodDistanceRatio); - - RegisterRenderNode(); - } - - void GeometryCacheCommon::OnStreamInDistanceChanged() - { - m_geomCacheRenderNode->SetStreamInDistance(m_streamInDistance); - } - - void GeometryCacheCommon::LoadMaterialOverride() - { - const AZStd::string& materialOverridePath = m_materialOverrideAsset.GetAssetPath(); - if (!materialOverridePath.empty()) - { - m_materialOverride = gEnv->p3DEngine->GetMaterialManager()->LoadMaterial(materialOverridePath.c_str()); - - AZ_Warning("GeomCacheComponent", m_materialOverride != gEnv->p3DEngine->GetMaterialManager()->GetDefaultMaterial(), - "Failed to load override material \"%s\".", - materialOverridePath.c_str()); - } - else - { - m_materialOverride = nullptr; - } - } - - void GeometryCacheCommon::RegisterRenderNode() - { - if(m_isRegisteredWithRenderer && gEnv && gEnv->p3DEngine) - { - gEnv->p3DEngine->RegisterEntity(m_geomCacheRenderNode); - } - } - - void GeometryCacheCommon::CreateGeomCache() - { - if (gEnv && gEnv->p3DEngine && !m_geomCacheRenderNode) - { - m_geomCacheRenderNode = static_cast(gEnv->p3DEngine->CreateRenderNode(eERType_GeomCache)); - } - - if (m_geomCacheAsset.GetId().IsValid()) - { - if (!AZ::Data::AssetBus::Handler::BusIsConnected()) - { - AZ::Data::AssetBus::Handler::BusConnect(m_geomCacheAsset.GetId()); - } - - m_geomCacheAsset.QueueLoad(); - } - - //Apply starting params to the render node - ApplyAllRenderNodeParams(); - } - - void GeometryCacheCommon::DestroyGeomCache() - { - if (m_isRegisteredWithRenderer && m_geomCacheRenderNode) - { - m_geomCacheRenderNode->StopStreaming(); - m_isRegisteredWithRenderer = false; - - gEnv->p3DEngine->FreeRenderNodeState(m_geomCacheRenderNode); - } - - m_geomCache = nullptr; - m_materialOverride = nullptr; - - m_geomCacheAsset.Release(); - - AZ::Data::AssetBus::Handler::BusDisconnect(); - } - - void GeometryCacheCommon::ApplyAllRenderNodeParams() - { - OnRenderOptionsChanged(); - OnMaterialOverrideChanged(); - OnLoopChanged(); - OnMaxViewDistanceChanged(); - OnViewDistanceMultiplierChanged(); - OnLODDistanceRatioChanged(); - OnStreamInDistanceChanged(); - } - - void GeometryCacheCommon::ShowCurrentStandin() - { - switch (m_currentStandinType) - { - case StandinType::FirstFrame: - { - MeshComponentRequestBus::Event(m_firstFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, true); - break; - } - case StandinType::LastFrame: - { - MeshComponentRequestBus::Event(m_lastFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, true); - break; - } - case StandinType::Distance: - { - MeshComponentRequestBus::Event(m_standin, &MeshComponentRequestBus::Events::SetVisibility, true); - break; - } - case StandinType::None: - { - //Show the geom cache by removing the ERF_HIDDEN flag - m_renderingStandin = false; - OnRenderOptionsChanged(); - break; - } - } - - GeometryCacheComponentNotificationBus::Broadcast(&GeometryCacheComponentNotificationBus::Events::OnStandinChanged, m_currentStandinType); - } - - void GeometryCacheCommon::HideCurrentStandin() - { - switch (m_currentStandinType) - { - case StandinType::FirstFrame: - { - MeshComponentRequestBus::Event(m_firstFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, false); - break; - } - case StandinType::LastFrame: - { - MeshComponentRequestBus::Event(m_lastFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, false); - break; - } - case StandinType::Distance: - { - MeshComponentRequestBus::Event(m_standin, &MeshComponentRequestBus::Events::SetVisibility, false); - break; - } - case StandinType::None: - { - //Hide the geom cache by adding the ERF_HIDDEN flag - m_renderingStandin = true; - OnRenderOptionsChanged(); - break; - } - } - } - - void GeometryCacheCommon::HideAllStandins() - { - if (m_firstFrameStandin.IsValid()) - { - MeshComponentRequestBus::Event(m_firstFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, false); - } - if (m_lastFrameStandin.IsValid()) - { - MeshComponentRequestBus::Event(m_lastFrameStandin, &MeshComponentRequestBus::Events::SetVisibility, false); - } - if (m_standin.IsValid()) - { - MeshComponentRequestBus::Event(m_standin, &MeshComponentRequestBus::Events::SetVisibility, false); - } - } - - void GeometryCacheComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provides) - { - provides.push_back(AZ_CRC("GeomCacheService", 0x3d2bc48c)); - } - - void GeometryCacheComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& requires) - { - requires.push_back(AZ_CRC("TransformService", 0x8ee22c50)); - } - - void GeometryCacheComponent::Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) - { - serializeContext->Class() - ->Version(1) - ->Field("Common", &GeometryCacheComponent::m_common) - ; - } - - GeometryCacheCommon::Reflect(context); - } - - void GeometryCacheComponent::Init() - { - m_common.Init(GetEntityId()); - } - - void GeometryCacheComponent::Activate() - { - m_common.Activate(); - } - - void GeometryCacheComponent::Deactivate() - { - m_common.Deactivate(); - } -} //namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/GeomCacheComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/GeomCacheComponent.h deleted file mode 100644 index 3f011c6e62..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/GeomCacheComponent.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include - -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include - -#include - -#include - -#include - -namespace LmbrCentral -{ - enum class StandinType : AZ::u32 - { - None, - FirstFrame, - LastFrame, - Distance - }; - - /** - * A Common structure for the GeometryCache and EditorGeometryCache. - * - * This is where most of the GeometryCache logic lives and it's made - * available to the GeometryCacheComponent and the EditorGeometryCacheComponent. - */ - class GeometryCacheCommon - : public AZ::TransformNotificationBus::Handler - , public AZ::Data::AssetBus::Handler - , public AZ::TickBus::Handler - , public MaterialOwnerRequestBus::Handler - , public GeometryCacheComponentRequestBus::Handler - { - friend class EditorGeometryCacheCommon; //So that we can reflect private members - - public: - AZ_TYPE_INFO(GeometryCacheCommon, "{4534C4C4-50CC-4256-83F0-85B0274A5E26}"); - AZ_CLASS_ALLOCATOR(GeometryCacheCommon, AZ::SystemAllocator, 0); - - static void Reflect(AZ::ReflectContext* context); - - virtual ~GeometryCacheCommon(); - - //Startup helpers - void Init(const AZ::EntityId& entityId); - virtual void Activate(); - virtual void Deactivate(); - - // AZ::TransformNotificationBus interface implementation - void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override; - - // AZ::TickBus - void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; - - // AZ::Data::AssetBus - void OnAssetReady(AZ::Data::Asset asset) override; - void OnAssetReloaded(AZ::Data::Asset asset) override; - - // MaterialOwnerRequestBus - void SetMaterial(_smart_ptr material) override; - _smart_ptr GetMaterial() override; - - // GeometryCacheComponentRequestBus - void Play() override; - void Pause() override; - void Stop() override; - - float GetTimeRemaining() override; - - StandinType GetCurrentStandinType() override { return m_currentStandinType; } - - void SetGeomCacheAsset(const AZ::Data::AssetId& id); - AZ::Data::Asset GetGeomCacheAsset() { return m_geomCacheAsset; } - - void SetVisible(bool visible) override; - bool GetVisible() override { return m_visible; } - - void SetLoop(bool loop) override; - bool GetLoop() override { return m_loop; } - - void SetStartTime(float startTime) override; - float GetStartTime() override { return m_startTime; } - - void SetFirstFrameStandIn(AZ::EntityId entityId) override; - AZ::EntityId GetFirstFrameStandIn() override { return m_firstFrameStandin; } - - void SetLastFrameStandIn(AZ::EntityId entityId) override; - AZ::EntityId GetLastFrameStandIn() override { return m_lastFrameStandin; } - - void SetStandIn(AZ::EntityId entityId) override; - AZ::EntityId GetStandIn() override { return m_standin; } - - void SetStandInDistance(float standInDistance) override; - float GetStandInDistance() override { return m_standinDistance; } - - void SetStreamInDistance(float streamInDistance) override; - float GetStreamInDistance() override { return m_streamInDistance; } - - IGeomCacheRenderNode* GetGeomCacheRenderNode() override { return m_geomCacheRenderNode; } - - void ClearGeomCacheRenderNode() { m_geomCacheRenderNode = nullptr; } - - protected: - //Reflected Members - bool m_visible = true; - bool m_loop = false; - bool m_playOnStart = false; - bool m_castShadows = true; - bool m_useVisAreas = true; - float m_startTime = 0.0f; - EngineSpec m_minSpec = EngineSpec::Low; - float m_standinDistance = 100.0f; - float m_streamInDistance = 150.0f; - float m_maxViewDistance = 8000.0f; - float m_viewDistanceMultiplier = 1.0f; - AZ::u32 m_lodDistanceRatio = 100; - AZ::EntityId m_firstFrameStandin; - AZ::EntityId m_lastFrameStandin; - AZ::EntityId m_standin; - AZ::Data::Asset m_geomCacheAsset; - AzFramework::SimpleAssetReference m_materialOverrideAsset; - - //Unreflected members - bool m_hidden; //< This is different from visible because this can also be controlled by the min spec being too high. - bool m_isRegisteredWithRenderer = false; //< We keep track of this because if some params are change we want to re-register but only if already registered. - bool m_renderingStandin = false; - bool m_playing; - float m_currentTime; - StandinType m_currentStandinType; - _smart_ptr m_materialOverride; - IGeomCacheRenderNode* m_geomCacheRenderNode = nullptr; - _smart_ptr m_geomCache; - AZ::EntityId m_entityId; - AZ::Vector3 m_currentWorldPos; - AZStd::vector m_currentStandinEntities; - - //Helper methods - void OnRenderOptionsChanged(); - void OnGeomCacheAssetChanged(); - void OnMaterialOverrideChanged(); - void OnStartTimeChanged(); - virtual void OnPlayOnStartChanged() {} //Only matters at edit time - void OnLoopChanged(); - void OnMaxViewDistanceChanged(); - void OnViewDistanceMultiplierChanged(); - void OnLODDistanceRatioChanged(); - void OnStreamInDistanceChanged(); - virtual void OnFirstFrameStandinChanged() {} - virtual void OnLastFrameStandinChanged() {} - virtual void OnStandinChanged() {} - - void LoadMaterialOverride(); - - void RegisterRenderNode(); - - void CreateGeomCache(); - void DestroyGeomCache(); - - void ApplyAllRenderNodeParams(); - - void ShowCurrentStandin(); - void HideCurrentStandin(); - void HideAllStandins(); - - AZ::EntityId m_prevFirstFrameStandin; - AZ::EntityId m_prevLastFrameStandin; - AZ::EntityId m_prevStandin; - }; - - /** - * A Component for handling Alembic geometry cache animations. - * - * Most of the logic lives in GeometryCacheCommon. - */ - class GeometryCacheComponent - : public AZ::Component - { - public: - AZ_COMPONENT(GeometryCacheComponent, "{B2974790-5A3B-4641-868F-6148C67830EE}", AZ::Component); - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provides); - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& requires); - static void Reflect(AZ::ReflectContext* context); - - GeometryCacheComponent() {}; - explicit GeometryCacheComponent(GeometryCacheCommon* common) - { - m_common = *common; - m_common.ClearGeomCacheRenderNode(); //We don't want to copy the render node from the given common structure - } - ~GeometryCacheComponent() = default; - - void Init() override; - void Activate() override; - void Deactivate() override; - - private: - //Reflected members - GeometryCacheCommon m_common; - }; -} //namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/HighQualityShadowComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/HighQualityShadowComponent.cpp deleted file mode 100644 index c537c2f8f6..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/HighQualityShadowComponent.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#include "LmbrCentral_precompiled.h" -#include "HighQualityShadowComponent.h" - -#include -#include -#include -#include -#include - - -namespace LmbrCentral -{ - ////////////////////////////////////////////////////////////////////////// - - HighQualityShadowConfig::HighQualityShadowConfig() - : m_enabled(true) - , m_constBias(0.001f) - , m_slopeBias(0.01f) - , m_jitter(0.01f) - , m_bboxScale(1,1,1) - , m_shadowMapSize(1024) - { - - } - - void HighQualityShadowConfig::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("Enabled", &HighQualityShadowConfig::m_enabled) - ->Field("ConstBias", &HighQualityShadowConfig::m_constBias) - ->Field("SlopeBias", &HighQualityShadowConfig::m_slopeBias) - ->Field("Jitter", &HighQualityShadowConfig::m_jitter) - ->Field("BBoxScale", &HighQualityShadowConfig::m_bboxScale) - ->Field("ShadowMapSize", &HighQualityShadowConfig::m_shadowMapSize) - ; - } - } - - ////////////////////////////////////////////////////////////////////////// - - void HighQualityShadowComponent::Reflect(AZ::ReflectContext* context) - { - HighQualityShadowConfig::Reflect(context); - - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("HighQualityShadowConfig", &HighQualityShadowComponent::m_config); - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) - { - behaviorContext->EBus("HighQualityShadowComponentRequestBus") - ->Event("SetEnabled", &HighQualityShadowComponentRequestBus::Events::SetEnabled, { { {"Enabled", ""} } }) - ->Attribute(AZ::Script::Attributes::ToolTip, "Enables or disables the High Quality Shadow") - ->Event("GetEnabled", &HighQualityShadowComponentRequestBus::Events::GetEnabled) - ->Attribute(AZ::Script::Attributes::ToolTip, "Returns whether the High Quality Shadow is enabled") - ->VirtualProperty("Enabled", "GetEnabled", "SetEnabled"); - } - } - - - - void HighQualityShadowComponent::Activate() - { - HighQualityShadowComponentRequestBus::Handler::BusConnect(GetEntityId()); - MeshComponentNotificationBus::Handler::BusConnect(GetEntityId()); - } - - void HighQualityShadowComponent::Deactivate() - { - HighQualityShadowComponentUtils::RemoveShadow(GetEntityId()); - HighQualityShadowComponentRequestBus::Handler::BusDisconnect(); - MeshComponentNotificationBus::Handler::BusDisconnect(GetEntityId()); - } - - bool HighQualityShadowComponent::GetEnabled() - { - return m_config.m_enabled; - } - - void HighQualityShadowComponent::SetEnabled(bool enabled) - { - m_config.m_enabled = enabled; - HighQualityShadowComponentUtils::ApplyShadowSettings(GetEntityId(), m_config); - } - - void HighQualityShadowComponentUtils::ApplyShadowSettings(AZ::EntityId entityId, const HighQualityShadowConfig& config) - { - int numRenderNodesApplied = 0; - - AZ::EBusAggregateResults renderNodes; - LmbrCentral::RenderNodeRequestBus::EventResult(renderNodes, entityId, &LmbrCentral::RenderNodeRequests::GetRenderNode); - for(IRenderNode* renderNode : renderNodes.values) - { - if (renderNode) - { - const EERType type = renderNode->GetRenderNodeType(); - - const bool typeIsSupported = - type == eERType_StaticMeshRenderComponent || // Mesh Component uses this - type == eERType_DynamicMeshRenderComponent || // Mesh Component uses this - type == eERType_SkinnedMeshRenderComponent || // Skinned Mesh Component uses this; probably isn't necessary since this is deprecated, but is included for completion's sake - type == eERType_RenderComponent; // Actor Component uses this - - if (typeIsSupported) - { - ++numRenderNodesApplied; - - if (config.m_enabled && renderNode->IsReady()) // Note that if the mesh isn't ready yet, OnMeshCreated will be called when it is ready, which will call ApplyShadowSettings again - { - const Vec3 bboxScaleVec3(config.m_bboxScale.GetX(), config.m_bboxScale.GetY(), config.m_bboxScale.GetZ()); - gEnv->p3DEngine->AddPerObjectShadow(renderNode, config.m_constBias, config.m_slopeBias, config.m_jitter, bboxScaleVec3, config.m_shadowMapSize); - } - else - { - gEnv->p3DEngine->RemovePerObjectShadow(renderNode); - } - } - - } - } - - // This should never fail because "MeshService" components are mutually exclusive. It is possible that numRenderNodesApplied be 0, - // because some mesh-based components, like ActorComponent, may return a null IRenderNode when they aren't initialized yet. - AZ_Assert(numRenderNodesApplied <= 1, "Expected exactly one mesh-based component. Found %d", numRenderNodesApplied); - } - - void HighQualityShadowComponentUtils::RemoveShadow(AZ::EntityId entityId) - { - AZ::EBusAggregateResults renderNodes; - LmbrCentral::RenderNodeRequestBus::EventResult(renderNodes, entityId, &LmbrCentral::RenderNodeRequests::GetRenderNode); - for (IRenderNode* renderNode : renderNodes.values) - { - if (renderNode) - { - gEnv->p3DEngine->RemovePerObjectShadow(renderNode); - } - } - } - - void HighQualityShadowComponent::OnMeshCreated([[maybe_unused]] const AZ::Data::Asset& asset) - { - HighQualityShadowComponentUtils::ApplyShadowSettings(GetEntityId(), m_config); - } - - void HighQualityShadowComponent::OnMeshDestroyed() - { - HighQualityShadowComponentUtils::RemoveShadow(GetEntityId()); - } - -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/HighQualityShadowComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/HighQualityShadowComponent.h deleted file mode 100644 index c51899bab2..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/HighQualityShadowComponent.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include -#include -#include -#include -#include - -namespace LmbrCentral -{ - /*! - * Stores configuration settings for per-entity shadows - */ - class HighQualityShadowConfig - { - public: - AZ_TYPE_INFO(HighQualityShadowConfig, "{3B3CD21A-E61B-401A-8F54-B76FB6278B11}"); - - HighQualityShadowConfig(); - virtual ~HighQualityShadowConfig() {} - - static void Reflect(AZ::ReflectContext* context); - - bool m_enabled; - float m_constBias; - float m_slopeBias; - float m_jitter; - AZ::Vector3 m_bboxScale; - int m_shadowMapSize; - - // Property event-handlers implemented in editor component. - virtual void EditorRefresh() { } - }; - - /*! - * Provides a entity-specific shadow map to achieving higher quality shadows on a specific entity. - * Has performance and memory impact so use sparingly. - * Corresponds to legacy PerEntityShadows feature. - */ - class HighQualityShadowComponent - : public AZ::Component - , public HighQualityShadowComponentRequestBus::Handler - , public MeshComponentNotificationBus::Handler - { - public: - friend class EditorHighQualityShadowComponent; - - AZ_COMPONENT(HighQualityShadowComponent, "{B692F9D9-4850-4D6E-9A32-760901455E40}"); - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // HighQualityShadowComponentRequestBus interface implementation - void SetEnabled(bool enabled) override; - bool GetEnabled() override; - /////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // MeshComponentNotificationBus interface implementation - void OnMeshCreated(const AZ::Data::Asset& asset) override; - void OnMeshDestroyed() override; - /////////////////////////////////// - - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - provided.push_back(AZ_CRC("HighQualityShadowService", 0x43dea981)); - } - - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - incompatible.push_back(AZ_CRC("HighQualityShadowService", 0x43dea981)); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - // HighQualityShadowComponent is only applicable to Entities that cast and/or receive shadows. - required.push_back(AZ_CRC("MeshService", 0x71d8a455)); - } - - static void Reflect(AZ::ReflectContext* context); - - protected: - - HighQualityShadowConfig m_config; - }; - - namespace HighQualityShadowComponentUtils - { - void ApplyShadowSettings(AZ::EntityId entityId, const HighQualityShadowConfig& config); - void RemoveShadow(AZ::EntityId entityId); - } - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareAssetHandler.cpp b/Gems/LmbrCentral/Code/Source/Rendering/LensFlareAssetHandler.cpp deleted file mode 100644 index d1f44a0cff..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareAssetHandler.cpp +++ /dev/null @@ -1,205 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include - -#include - -#include -#include "LensFlareAssetHandler.h" - -#include - -#define LENS_FLARE_EXT "xml" - -namespace LmbrCentral -{ - LensFlareAssetHandler::~LensFlareAssetHandler() - { - Unregister(); - } - - AZ::Data::AssetPtr LensFlareAssetHandler::CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) - { - (void)type; - AZ_Assert(type == AZ::AzTypeInfo::Uuid(), "Invalid asset type! We handle only 'LensFlareAsset'"); - - if (!CanHandleAsset(id)) - { - return nullptr; - } - - return aznew LensFlareAsset; - } - - AZ::Data::AssetHandler::LoadResult LensFlareAssetHandler::LoadAssetData( - const AZ::Data::Asset& asset, - AZStd::shared_ptr stream, - const AZ::Data::AssetFilterCB& assetLoadFilterCB) - { - (void)assetLoadFilterCB; - - // Load from preloaded stream. - AZ_Assert(asset.GetType() == AZ::AzTypeInfo::Uuid(), "Invalid asset type! We handle only 'LensFlareAsset'"); - if (stream) - { - LensFlareAsset* data = asset.GetAs(); - - const size_t sizeBytes = static_cast(stream->GetLength()); - char* buffer = new char[sizeBytes]; - stream->Read(sizeBytes, buffer); - - bool loaded = LoadFromBuffer(data, buffer, sizeBytes); - - delete[] buffer; - - return loaded ? AZ::Data::AssetHandler::LoadResult::LoadComplete : AZ::Data::AssetHandler::LoadResult::Error; - } - - return AZ::Data::AssetHandler::LoadResult::Error; - } - - void LensFlareAssetHandler::DestroyAsset(AZ::Data::AssetPtr ptr) - { - delete ptr; - } - - void LensFlareAssetHandler::GetHandledAssetTypes(AZStd::vector& assetTypes) - { - assetTypes.push_back(AZ::AzTypeInfo::Uuid()); - } - - void LensFlareAssetHandler::Register() - { - AZ_Assert(AZ::Data::AssetManager::IsReady(), "Asset manager isn't ready!"); - AZ::Data::AssetManager::Instance().RegisterHandler(this, AZ::AzTypeInfo::Uuid()); - - AZ::AssetTypeInfoBus::Handler::BusConnect(AZ::AzTypeInfo::Uuid()); - } - - void LensFlareAssetHandler::Unregister() - { - AZ::AssetTypeInfoBus::Handler::BusDisconnect(); - - if (AZ::Data::AssetManager::IsReady()) - { - AZ::Data::AssetManager::Instance().UnregisterHandler(this); - } - } - - AZ::Data::AssetType LensFlareAssetHandler::GetAssetType() const - { - return AZ::AzTypeInfo::Uuid(); - } - - const char* LensFlareAssetHandler::GetAssetTypeDisplayName() const - { - return "Lens Flare"; - } - - const char* LensFlareAssetHandler::GetBrowserIcon() const - { - return "Icons/Components/LensFlare.svg"; - } - - AZ::Uuid LensFlareAssetHandler::GetComponentTypeId() const - { - return AZ::Uuid("{4B85E77D-91F9-40C5-8FCB-B494000A9E69}"); - } - - void LensFlareAssetHandler::GetAssetTypeExtensions(AZStd::vector& extensions) - { - extensions.push_back(LENS_FLARE_EXT); - } - - bool LensFlareAssetHandler::CanHandleAsset(const AZ::Data::AssetId& id) const - { - // Look up the asset path to ensure it's actually a lens flare library. - AZStd::string assetPath; - EBUS_EVENT_RESULT(assetPath, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, id); - - bool isLensFlareLibrary = false; - if (!assetPath.empty() && strstr(assetPath.c_str(), "." LENS_FLARE_EXT)) - { - //check whether the file includes "LensFlareLibrary" string - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "FileIO is not initialized."); - AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; - const AZ::IO::Result result = fileIO->Open(assetPath.c_str(), AZ::IO::OpenMode::ModeRead, fileHandle); - if (result) - { - AZ::u64 fileSize = 0; - if (fileIO->Size(fileHandle, fileSize) && fileSize) - { - AZStd::vector memoryBuffer; - memoryBuffer.resize_no_construct(fileSize); - if (fileIO->Read(fileHandle, memoryBuffer.begin(), fileSize, true)) - { - //compare string instead of parse the entire xml because it's faster. - isLensFlareLibrary = (nullptr != strstr(memoryBuffer.begin(), "LensFlareLibrary")); - } - } - - fileIO->Close(fileHandle); - } - } - return isLensFlareLibrary; - } - - bool LensFlareAssetHandler::LoadFromBuffer(LensFlareAsset* data, char* buffer, [[maybe_unused]] size_t bufferSize) - { - using namespace AZ::rapidxml; - - xml_document xmlDoc; - xmlDoc.parse(buffer); - - xml_node* root = xmlDoc.first_node(); - if (root) - { - //get the name of this lens flare library - xml_attribute* nameAttribute = root->first_attribute("Name"); - if (nameAttribute) - { - const char* libName = nameAttribute->value(); - if (libName && libName[0]) - { - xml_node* flareNode = root->first_node("FlareItem"); - while (flareNode) - { - //for each of FlareItem add their path, combined with lib name, to LensFlareAsset data. - xml_attribute* flareNameAttribute = flareNode->first_attribute("Name"); - if (flareNameAttribute) - { - const char* effectName = flareNameAttribute->value(); - if (effectName && effectName[0]) - { - AZStd::string flarePath = AZStd::string::format("%s.%s", libName, effectName); - data->AddPath(std::move(flarePath)); - } - } - - flareNode = flareNode->next_sibling("FlareItem"); - } - return true; - } - } - } - - return false; - } -} // namespace LmbrCentral - diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareAssetHandler.h b/Gems/LmbrCentral/Code/Source/Rendering/LensFlareAssetHandler.h deleted file mode 100644 index acbfb97e84..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareAssetHandler.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include - -namespace LmbrCentral -{ - class LensFlareAssetHandler - : public AZ::Data::AssetHandler - , public AZ::AssetTypeInfoBus::Handler - { - public: - - AZ_CLASS_ALLOCATOR(LensFlareAssetHandler, AZ::SystemAllocator, 0); - - ~LensFlareAssetHandler() override; - - ////////////////////////////////////////////////////////////////////////////////////////////// - // AZ::Data::AssetHandler - AZ::Data::AssetPtr CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) override; - AZ::Data::AssetHandler::LoadResult LoadAssetData( - const AZ::Data::Asset& asset, - AZStd::shared_ptr stream, - const AZ::Data::AssetFilterCB& assetLoadFilterCB) override; - void DestroyAsset(AZ::Data::AssetPtr ptr) override; - void GetHandledAssetTypes(AZStd::vector& assetTypes) override; - bool CanHandleAsset(const AZ::Data::AssetId& id) const override; - ////////////////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////////////////////// - // AZ::AssetTypeInfoBus::Handler - AZ::Data::AssetType GetAssetType() const override; - const char* GetAssetTypeDisplayName() const override; - const char* GetBrowserIcon() const override; - AZ::Uuid GetComponentTypeId() const override; - void GetAssetTypeExtensions(AZStd::vector& extensions) override; - ////////////////////////////////////////////////////////////////////////////////////////////// - - void Register(); - void Unregister(); - - private: - static bool LoadFromBuffer(LensFlareAsset* data, char* buffer, size_t bufferSize); - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/LensFlareComponent.cpp deleted file mode 100644 index 49b433f3e8..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareComponent.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include -#include - -#include "LensFlareComponent.h" - -namespace LmbrCentral -{ - ////////////////////////////////////////////////////////////////////////// - // BehaviorContext LensFlareComponentNotificationBus forwarder - class BehaviorLensFlareComponentNotificationBusHandler : public LensFlareComponentNotificationBus::Handler, public AZ::BehaviorEBusHandler - { - public: - AZ_EBUS_BEHAVIOR_BINDER(BehaviorLensFlareComponentNotificationBusHandler, "{285A6AB7-82CF-472F-8C3B-1659A59213FF}", AZ::SystemAllocator, - LensFlareTurnedOn, LensFlareTurnedOff); - - void LensFlareTurnedOn() - { - Call(FN_LensFlareTurnedOn); - } - - void LensFlareTurnedOff() - { - Call(FN_LensFlareTurnedOff); - } - }; - - // Class to encapsulate LensFlareComponentRequests::State values. - class BehaviorLensFlareComponentState - { - public: - AZ_TYPE_INFO(BehaviorLensFlareComponentState, "{1A63ED6B-C2D2-4D3C-AC27-5FDBF22B5B38}"); - AZ_CLASS_ALLOCATOR(BehaviorLensFlareComponentState, AZ::SystemAllocator, 0); - }; - - void LensFlareComponent::Reflect(AZ::ReflectContext* context) - { - LensFlareConfiguration::Reflect(context); - - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1)-> - Field("LensFlareConfiguration", &LensFlareComponent::m_configuration); - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->Class("LensFlareComponentState") - ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) - ->Constant("Off", BehaviorConstant(LensFlareComponentRequests::State::Off)) - ->Constant("On", BehaviorConstant(LensFlareComponentRequests::State::On)) - ; - - behaviorContext->EBus("LensFlareComponentRequestBus") - ->Event("SetLensFlareState", &LensFlareComponentRequestBus::Events::SetLensFlareState) - ->Event("TurnOnLensFlare", &LensFlareComponentRequestBus::Events::TurnOnLensFlare) - ->Event("TurnOffLensFlare", &LensFlareComponentRequestBus::Events::TurnOffLensFlare) - ->Event("ToggleLensFlare", &LensFlareComponentRequestBus::Events::ToggleLensFlare) - ; - - behaviorContext->EBus("LensFlareComponentNotificationBus") - ->Handler(); - } - } - - void LensFlareConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(4, &VersionConverter)-> - Field("Visible", &LensFlareConfiguration::m_visible)-> - Field("LensFlare", &LensFlareConfiguration::m_lensFlare)-> - Field("Asset", &LensFlareConfiguration::m_asset)-> - - Field("MinimumSpec", &LensFlareConfiguration::m_minSpec)-> - Field("LensFlareFrustumAngle", &LensFlareConfiguration::m_lensFlareFrustumAngle)-> - Field("Size", &LensFlareConfiguration::m_size)-> - Field("AttachToSun", &LensFlareConfiguration::m_attachToSun)-> - Field("AffectsThisAreaOnly", &LensFlareConfiguration::m_affectsThisAreaOnly)-> - Field("UseVisAreas", &LensFlareConfiguration::m_useVisAreas)-> - Field("IndoorOnly", &LensFlareConfiguration::m_indoorOnly)-> - Field("OnInitially", &LensFlareConfiguration::m_onInitially)-> - Field("ViewDistanceMultiplier", &LensFlareConfiguration::m_viewDistMultiplier)-> - - Field("Tint", &LensFlareConfiguration::m_tint)-> - Field("TintAlpha", &LensFlareConfiguration::m_tintAlpha)-> - Field("Brightness", &LensFlareConfiguration::m_brightness)-> - - Field("SyncAnimWithLight", &LensFlareConfiguration::m_syncAnimWithLight)-> - Field("LightEntity", &LensFlareConfiguration::m_lightEntity)-> - Field("AnimIndex", &LensFlareConfiguration::m_animIndex)-> - Field("AnimSpeed", &LensFlareConfiguration::m_animSpeed)-> - Field("AnimPhase", &LensFlareConfiguration::m_animPhase)-> - - Field("SyncedAnimIndex", &LensFlareConfiguration::m_syncAnimIndex)-> - Field("SyncedAnimSpeed", &LensFlareConfiguration::m_syncAnimSpeed)-> - Field("SyncedAnimPhase", &LensFlareConfiguration::m_syncAnimPhase) - ; - } - } - - bool LensFlareConfiguration::VersionConverter(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement) - { - // conversion from version 2 to version 3: - // - Need to rename IgnoreVisAreas to UseVisAreas - // UseVisAreas is the Inverse of IgnoreVisAreas - if (classElement.GetVersion() <= 2) - { - int ignoreVisAreasIndex = classElement.FindElement(AZ_CRC("IgnoreVisAreas", 0x01823201)); - - if (ignoreVisAreasIndex < 0) - { - return false; - } - - AZ::SerializeContext::DataElementNode& useVisAreasNode = classElement.GetSubElement(ignoreVisAreasIndex); - useVisAreasNode.SetName("UseVisAreas"); - - bool ignoreVisAreas = true; - if (!useVisAreasNode.GetData(ignoreVisAreas)) - { - return false; - } - - if (!useVisAreasNode.SetData(context, !ignoreVisAreas)) - { - return false; - } - } - - return true; - } - - void LensFlareComponent::TurnOnLensFlare() - { - bool success = m_light.TurnOn(); - if (success) - { - LensFlareComponentNotificationBus::Event(GetEntityId(), &LensFlareComponentNotificationBus::Events::LensFlareTurnedOn); - } - } - - void LensFlareComponent::TurnOffLensFlare() - { - bool success = m_light.TurnOff(); - if (success) - { - LensFlareComponentNotificationBus::Event(GetEntityId(), &LensFlareComponentNotificationBus::Events::LensFlareTurnedOff); - } - } - - void LensFlareComponent::ToggleLensFlare() - { - if (m_light.IsOn()) - { - TurnOffLensFlare(); - } - else - { - TurnOnLensFlare(); - } - } - - LensFlareConfiguration LensFlareComponent::GetLensFlareConfiguration() - { - return m_configuration; - } - - void LensFlareComponent::SetLensFlareState(State state) - { - switch (state) - { - case LensFlareComponentRequests::State::On: - { - TurnOnLensFlare(); - } - break; - - case LensFlareComponentRequests::State::Off: - { - TurnOffLensFlare(); - } - break; - } - } - - IRenderNode* LensFlareComponent::GetRenderNode() - { - return m_light.GetRenderNode(); - } - - float LensFlareComponent::GetRenderNodeRequestBusOrder() const - { - return s_renderNodeRequestBusOrder; - } - - const float LensFlareComponent::s_renderNodeRequestBusOrder = 600.f; - - void LensFlareComponent::Init() - { - //Set this in Init because it will never change and doesn't need to be reset if the component re-activates - m_configuration.m_material.SetAssetPath("EngineAssets/Materials/lens_optics"); - } - - void LensFlareComponent::Activate() - { - const AZ::EntityId entityId = GetEntityId(); - - m_light.SetEntity(entityId); - m_light.CreateRenderLight(m_configuration); - - LensFlareComponentRequestBus::Handler::BusConnect(entityId); - RenderNodeRequestBus::Handler::BusConnect(entityId); - - if (m_configuration.m_onInitially) - { - TurnOnLensFlare(); - } - else - { - TurnOffLensFlare(); - } - } - - void LensFlareComponent::Deactivate() - { - LensFlareComponentRequestBus::Handler::BusDisconnect(); - RenderNodeRequestBus::Handler::BusDisconnect(); - - m_light.DestroyRenderLight(); - m_light.SetEntity(AZ::EntityId()); - } - - LensFlareConfiguration::LensFlareConfiguration() - : m_minSpec(EngineSpec::Low) - , m_visible(true) - , m_onInitially(true) - , m_tint(1.f) - , m_brightness(1.f) - , m_viewDistMultiplier(1.f) - , m_affectsThisAreaOnly(1.f) - , m_useVisAreas(true) - , m_indoorOnly(false) - , m_animSpeed(1.f) - , m_animPhase(0.f) - , m_animIndex(0) - , m_lensFlareFrustumAngle(360.f) - , m_size(1.0f) - , m_attachToSun(false) - , m_syncAnimWithLight(false) - { - } -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/LensFlareComponent.h deleted file mode 100644 index 885e436b2a..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LensFlareComponent.h +++ /dev/null @@ -1,163 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include -#include - -#include "LightInstance.h" -#include -#include -#include -#include - -#include - -namespace LmbrCentral -{ - /*! - * Stores configuration settings for engine lens flares. - */ - class LensFlareConfiguration - { - public: - AZ_TYPE_INFO(LensFlareConfiguration, "{1E28DADD-0BD4-4AD5-A94B-2665813BF346}"); - - LensFlareConfiguration(); - virtual ~LensFlareConfiguration() {}; - - static void Reflect(AZ::ReflectContext* context); - static bool VersionConverter(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement); - - AZ::Data::Asset m_asset { AZ::Data::AssetLoadBehavior::PreLoad }; //! Used at asset compile time to track the dependency. Not used at edit or runtime. - - //! Settings common to all LY engine lights - EngineSpec m_minSpec; - - //! Turned on by default? - bool m_onInitially; - - //! Currently visible? - bool m_visible; - - //! Lens flare size - float m_size; - - AZ::Vector3 m_tint; - AZ::u32 m_tintAlpha; - float m_brightness; - - float m_viewDistMultiplier; - float m_viewDistMultiplierUser; // Value set by user from UI. - bool m_affectsThisAreaOnly; - bool m_useVisAreas; - bool m_indoorOnly; - bool m_attachToSun; - - bool m_syncAnimWithLight; - AZ::EntityId m_lightEntity; - float m_animSpeed; - float m_animPhase; - AZ::u32 m_animIndex; - - AZStd::string m_lensFlare; - float m_lensFlareFrustumAngle; - - // Animation settings from the light - float m_syncAnimSpeed; - float m_syncAnimPhase; - AZ::u32 m_syncAnimIndex; - - // Settings not reflected in the editor - AzFramework::SimpleAssetReference m_material; //Same name as the material in the LightSettings - - AZ_INLINE bool ShouldShowAnimationSettings() { - return !m_syncAnimWithLight; - } - - AZ_INLINE bool ShouldViewDistanceMultiplier() { - return !m_attachToSun; - } - - // Property event-handlers implemented in editor component. - virtual AZ::u32 PropertyChanged() { return 0; } - virtual AZ::u32 SyncAnimationChanged() { return AZ_CRC("RefreshNone", 0x98a5045b); } - virtual AZ::u32 AttachToSunChanged() {return AZ_CRC("RefreshNone", 0x98a5045b); } - }; - - - /*! - * In-game light component. - */ - class LensFlareComponent - : public AZ::Component - , public LensFlareComponentRequestBus::Handler - , public RenderNodeRequestBus::Handler - { - public: - friend class EditorLensFlareComponent; - - AZ_COMPONENT(LensFlareComponent, "{07593109-4A57-473F-B868-C2DCF9270186}"); - - LensFlareComponent() {} - ~LensFlareComponent() override {} - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Init() override; - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // LensFlareComponentRequestBus::Handler interface implementation - void TurnOnLensFlare() override; - void TurnOffLensFlare() override; - void SetLensFlareState(State state) override; - void ToggleLensFlare() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // RenderNodeRequestBus::Handler interface implementation - IRenderNode* GetRenderNode() override; - float GetRenderNodeRequestBusOrder() const override; - static const float s_renderNodeRequestBusOrder; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - provided.push_back(AZ_CRC("LensFlareService", 0xda3286e8)); - } - - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent) - { - dependent.push_back(AZ_CRC("TransformService", 0x8ee22c50)); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - required.push_back(AZ_CRC("TransformService", 0x8ee22c50)); - } - - static void Reflect(AZ::ReflectContext* context); - ////////////////////////////////////////////////////////////////////////// - - LensFlareConfiguration GetLensFlareConfiguration(); - - protected: - - LensFlareConfiguration m_configuration; - LightInstance m_light; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LightComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/LightComponent.cpp deleted file mode 100644 index b52feac3fd..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LightComponent.cpp +++ /dev/null @@ -1,875 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include -#include - -#include "LightInstance.h" -#include "LightComponent.h" - -namespace LmbrCentral -{ - ////////////////////////////////////////////////////////////////////////// - class BehaviorLightComponentNotificationBusHandler : public LightComponentNotificationBus::Handler, public AZ::BehaviorEBusHandler - { - public: - AZ_EBUS_BEHAVIOR_BINDER(BehaviorLightComponentNotificationBusHandler, "{969C5B17-10D1-41DB-8123-6664FA64B4E9}", AZ::SystemAllocator, - LightTurnedOn, LightTurnedOff); - - // Sent when the light is turned on. - void LightTurnedOn() override - { - Call(FN_LightTurnedOn); - } - - // Sent when the light is turned off. - void LightTurnedOff() override - { - Call(FN_LightTurnedOff); - } - }; - - void LightComponent::Reflect(AZ::ReflectContext* context) - { - LightConfiguration::Reflect(context); - - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class() - ->Version(1) - ->Field("LightConfiguration", &LightComponent::m_configuration); - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->Class()->RequestBus("LightComponentRequestBus"); - ; - auto probeFadeDefaultValue(behaviorContext->MakeDefaultValue(1.0f)); - - behaviorContext->EBus("Light", "LightComponentRequestBus") - ->Attribute(AZ::Script::Attributes::Category, "Rendering") - ->Event("SetState", &LightComponentRequestBus::Events::SetLightState, "SetLightState", { { { "State", "1=On, 0=Off" } } }) - ->Attribute(AZ::Script::Attributes::ToolTip, "Set the light state") - ->Event("TurnOn", &LightComponentRequestBus::Events::TurnOnLight, "TurnOnLight") - ->Event("TurnOff", &LightComponentRequestBus::Events::TurnOffLight, "TurnOffLight") - ->Event("Toggle", &LightComponentRequestBus::Events::ToggleLight, "ToggleLight") - // General Settings Modifiers - ->Event("GetVisible", &LightComponentRequestBus::Events::GetVisible) - ->Event("SetVisible", &LightComponentRequestBus::Events::SetVisible, { { { "IsVisible", "" } } }) - ->VirtualProperty("Visible", "GetVisible", "SetVisible") - ->Event("GetColor", &LightComponentRequestBus::Events::GetColor) - ->Event("SetColor", &LightComponentRequestBus::Events::SetColor, { { { "Color", "The color to set" } } }) - ->VirtualProperty("Color", "GetColor", "SetColor") - ->Event("GetDiffuseMultiplier", &LightComponentRequestBus::Events::GetDiffuseMultiplier) - ->Event("SetDiffuseMultiplier", &LightComponentRequestBus::Events::SetDiffuseMultiplier, { { { "Multiplier", "The multiplier" } } }) - ->VirtualProperty("DiffuseMultiplier", "GetDiffuseMultiplier", "SetDiffuseMultiplier") - ->Event("GetSpecularMultiplier", &LightComponentRequestBus::Events::GetSpecularMultiplier) - ->Event("SetSpecularMultiplier", &LightComponentRequestBus::Events::SetSpecularMultiplier, { { { "Multiplier", "The multiplier" } } }) - ->VirtualProperty("SpecularMultiplier", "GetSpecularMultiplier", "SetSpecularMultiplier") - ->Event("GetAmbient", &LightComponentRequestBus::Events::GetAmbient) - ->Event("SetAmbient", &LightComponentRequestBus::Events::SetAmbient, { { { "IsAmbient", "" } } }) - ->VirtualProperty("Ambient", "GetAmbient", "SetAmbient") - // Point Light Modifiers - ->Event("GetPointMaxDistance", &LightComponentRequestBus::Events::GetPointMaxDistance) - ->Event("SetPointMaxDistance", &LightComponentRequestBus::Events::SetPointMaxDistance, { { { "Distance", "The max point distance" } } }) - ->VirtualProperty("PointMaxDistance", "GetPointMaxDistance", "SetPointMaxDistance") - ->Event("GetPointAttenuationBulbSize", &LightComponentRequestBus::Events::GetPointAttenuationBulbSize) - ->Event("SetPointAttenuationBulbSize", &LightComponentRequestBus::Events::SetPointAttenuationBulbSize, { { { "BulbSize", "The size of the bulb" } } }) - ->VirtualProperty("PointAttenuationBulbSize", "GetPointAttenuationBulbSize", "SetPointAttenuationBulbSize") - // Area Light Modifiers - ->Event("GetAreaMaxDistance", &LightComponentRequestBus::Events::GetAreaMaxDistance) - ->Event("SetAreaMaxDistance", &LightComponentRequestBus::Events::SetAreaMaxDistance, { { { "Distance", "The max point distance" } } }) - ->VirtualProperty("AreaMaxDistance", "GetAreaMaxDistance", "SetAreaMaxDistance") - ->Event("GetAreaWidth", &LightComponentRequestBus::Events::GetAreaWidth) - ->Event("SetAreaWidth", &LightComponentRequestBus::Events::SetAreaWidth, { { { "Width", "Area Width" } } }) - ->VirtualProperty("AreaWidth", "GetAreaWidth", "SetAreaWidth") - ->Event("GetAreaHeight", &LightComponentRequestBus::Events::GetAreaHeight) - ->Event("SetAreaHeight", &LightComponentRequestBus::Events::SetAreaHeight, { { { "Height", "Area Height" } } }) - ->VirtualProperty("AreaHeight", "GetAreaHeight", "SetAreaHeight") - ->Event("GetAreaFOV", &LightComponentRequestBus::Events::GetAreaFOV) - ->Event("SetAreaFOV", &LightComponentRequestBus::Events::SetAreaFOV, { { { "FOV", "Field of View" } } }) - ->VirtualProperty("AreaFOV", "GetAreaFOV", "SetAreaFOV") - // Projector Light Modifiers - ->Event("GetProjectorMaxDistance", &LightComponentRequestBus::Events::GetProjectorMaxDistance) - ->Event("SetProjectorMaxDistance", &LightComponentRequestBus::Events::SetProjectorMaxDistance, { { { "Distance", "Projector distance" } } }) - ->VirtualProperty("ProjectorMaxDistance", "GetProjectorMaxDistance", "SetProjectorMaxDistance") - ->Event("GetProjectorAttenuationBulbSize", &LightComponentRequestBus::Events::GetProjectorAttenuationBulbSize) - ->Event("SetProjectorAttenuationBulbSize", &LightComponentRequestBus::Events::SetProjectorAttenuationBulbSize, { { { "BulbSize", "The size of the bulb" } } }) - ->VirtualProperty("ProjectorAttenuationBulbSize", "GetProjectorAttenuationBulbSize", "SetProjectorAttenuationBulbSize") - ->Event("GetProjectorFOV", &LightComponentRequestBus::Events::GetProjectorFOV) - ->Event("SetProjectorFOV", &LightComponentRequestBus::Events::SetProjectorFOV, { { { "FOV", "Field of View" } } }) - ->VirtualProperty("ProjectorFOV", "GetProjectorFOV", "SetProjectorFOV") - ->Event("GetProjectorNearPlane", &LightComponentRequestBus::Events::GetProjectorNearPlane) - ->Event("SetProjectorNearPlane", &LightComponentRequestBus::Events::SetProjectorNearPlane, { { { "Plane", "Plane distance" } } }) - ->VirtualProperty("ProjectorNearPlane", "GetProjectorNearPlane", "SetProjectorNearPlane") - // Environment Probe Light Modifiers - ->Event("GetProbeAreaDimensions", &LightComponentRequestBus::Events::GetProbeAreaDimensions) - ->Event("SetProbeAreaDimensions", &LightComponentRequestBus::Events::SetProbeAreaDimensions, { { { "Dimension", "The X,Y and Z extents" } } }) - ->VirtualProperty("ProbeAreaDimensions", "GetProbeAreaDimensions", "SetProbeAreaDimensions") - ->Event("GetProbeSortPriority", &LightComponentRequestBus::Events::GetProbeSortPriority) - ->Event("SetProbeSortPriority", &LightComponentRequestBus::Events::SetProbeSortPriority, { { { "Priority", "" } } }) - ->VirtualProperty("ProbeSortPriority", "GetProbeSortPriority", "SetProbeSortPriority") - ->Event("GetProbeBoxProjected", &LightComponentRequestBus::Events::GetProbeBoxProjected) - ->Event("SetProbeBoxProjected", &LightComponentRequestBus::Events::SetProbeBoxProjected, { { { "IsProjected", "TRUE will project the box, False otherwise." } } }) - ->VirtualProperty("ProbeBoxProjected", "GetProbeBoxProjected", "SetProbeBoxProjected") - ->Event("GetProbeBoxHeight", &LightComponentRequestBus::Events::GetProbeBoxHeight) - ->Event("SetProbeBoxHeight", &LightComponentRequestBus::Events::SetProbeBoxHeight, { { { "Height", "Box Height" } } }) - ->VirtualProperty("ProbeBoxHeight", "GetProbeBoxHeight", "SetProbeBoxHeight") - ->Event("GetProbeBoxLength", &LightComponentRequestBus::Events::GetProbeBoxLength) - ->Event("SetProbeBoxLength", &LightComponentRequestBus::Events::SetProbeBoxLength, { { { "Length", "Box Length" } } }) - ->VirtualProperty("ProbeBoxLength", "GetProbeBoxLength", "SetProbeBoxLength") - ->Event("GetProbeBoxWidth", &LightComponentRequestBus::Events::GetProbeBoxWidth) - ->Event("SetProbeBoxWidth", &LightComponentRequestBus::Events::SetProbeBoxWidth, { { { "Width", "Box Width" } } }) - ->VirtualProperty("ProbeBoxWidth", "GetProbeBoxWidth", "SetProbeBoxWidth") - ->Event("GetProbeAttenuationFalloff", &LightComponentRequestBus::Events::GetProbeAttenuationFalloff) - ->Event("SetProbeAttenuationFalloff", &LightComponentRequestBus::Events::SetProbeAttenuationFalloff, { { { "Falloff", "Smoothness of the falloff around the probe's bounds" } } }) - ->VirtualProperty("ProbeAttenuationFalloff", "GetProbeAttenuationFalloff", "SetProbeAttenuationFalloff") - ->Event("GetProbeFade", &LightComponentRequestBus::Events::GetProbeFade) - ->Event("SetProbeFade", &LightComponentRequestBus::Events::SetProbeFade, { { { "Fade", "Multiplier for fading out a probe [0-1]", probeFadeDefaultValue } } }) - ->VirtualProperty("ProbeFade", "GetProbeFade", "SetProbeFade") - ; - - behaviorContext->EBus("LightNotification", "LightComponentNotificationBus", "Notifications for the Light Components") - ->Attribute(AZ::Script::Attributes::Category, "Rendering") - ->Handler(); - } - } - - void LightConfiguration::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class() - ->Version(8, &VersionConverter) - ->Field("LightType", &LightConfiguration::m_lightType) - ->Field("Visible", &LightConfiguration::m_visible) - ->Field("OnInitially", &LightConfiguration::m_onInitially) - ->Field("Color", &LightConfiguration::m_color) - ->Field("DiffuseMultiplier", &LightConfiguration::m_diffuseMultiplier) - ->Field("SpecMultiplier", &LightConfiguration::m_specMultiplier) - ->Field("Ambient", &LightConfiguration::m_ambient) - ->Field("PointMaxDistance", &LightConfiguration::m_pointMaxDistance) - ->Field("PointAttenuationBulbSize", &LightConfiguration::m_pointAttenuationBulbSize) - ->Field("AreaWidth", &LightConfiguration::m_areaWidth) - ->Field("AreaHeight", &LightConfiguration::m_areaHeight) - ->Field("AreaMaxDistance", &LightConfiguration::m_areaMaxDistance) - ->Field("AreaFOV", &LightConfiguration::m_areaFOV) - ->Field("ProjectorDistance", &LightConfiguration::m_projectorRange) - ->Field("ProjectorAttenuationBulbSize", &LightConfiguration::m_projectorAttenuationBulbSize) - ->Field("ProjectorFOV", &LightConfiguration::m_projectorFOV) - ->Field("ProjectorNearPlane", &LightConfiguration::m_projectorNearPlane) - ->Field("ProjectorTexture", &LightConfiguration::m_projectorTexture) - ->Field("ProjectorMaterial", &LightConfiguration::m_material) - ->Field("Area X,Y,Z", &LightConfiguration::m_probeArea) - ->Field("SortPriority", &LightConfiguration::m_probeSortPriority) - ->Field("CubemapResolution", &LightConfiguration::m_probeCubemapResolution) - ->Field("CubemapTexture", &LightConfiguration::m_probeCubemap) - ->Field("BoxProject", &LightConfiguration::m_isBoxProjected) - ->Field("BoxHeight", &LightConfiguration::m_boxHeight) - ->Field("BoxLength", &LightConfiguration::m_boxLength) - ->Field("BoxWidth", &LightConfiguration::m_boxWidth) - ->Field("AttenuationFalloffMax", &LightConfiguration::m_attenFalloffMax) - ->Field("ViewDistanceMultiplier", &LightConfiguration::m_viewDistMultiplier) - ->Field("MinimumSpec", &LightConfiguration::m_minSpec) - ->Field("CastShadowsSpec", &LightConfiguration::m_castShadowsSpec) - ->Field("VoxelGIMode", &LightConfiguration::m_voxelGIMode) - ->Field("UseVisAreas", &LightConfiguration::m_useVisAreas) - ->Field("IndoorOnly", &LightConfiguration::m_indoorOnly) - ->Field("AffectsThisAreaOnly", &LightConfiguration::m_affectsThisAreaOnly) - ->Field("VolumetricFogOnly", &LightConfiguration::m_volumetricFogOnly) - ->Field("VolumetricFog", &LightConfiguration::m_volumetricFog) - ->Field("Deferred", &LightConfiguration::m_deferred) - ->Field("TerrainShadows", &LightConfiguration::m_castTerrainShadows) - ->Field("ShadowBias", &LightConfiguration::m_shadowBias) - ->Field("ShadowResScale", &LightConfiguration::m_shadowResScale) - ->Field("ShadowSlopeBias", &LightConfiguration::m_shadowSlopeBias) - ->Field("ShadowUpdateMinRadius", &LightConfiguration::m_shadowUpdateMinRadius) - ->Field("ShadowUpdateRatio", &LightConfiguration::m_shadowUpdateRatio) - ->Field("AnimIndex", &LightConfiguration::m_animIndex) - ->Field("AnimSpeed", &LightConfiguration::m_animSpeed) - ->Field("AnimPhase", &LightConfiguration::m_animPhase) - ->Field("CubemapId", &LightConfiguration::m_cubemapId); - } - } - - // Private Static - bool LightConfiguration::VersionConverter(AZ::SerializeContext& context, - AZ::SerializeContext::DataElementNode& classElement) - { - // conversion from version 1: - // - Need to rename OmniRadius to MaxDistance - // - remove ShadowBlurStrength - if (classElement.GetVersion() <= 1) - { - int radiusIndex = classElement.FindElement(AZ_CRC("OmniRadius", 0x3fbb253e)); - - if (radiusIndex < 0) - { - return false; - } - - AZ::SerializeContext::DataElementNode& radius = classElement.GetSubElement(radiusIndex); - radius.SetName("MaxDistance"); - - classElement.RemoveElementByName(AZ_CRC("ShadowBlurStrength", 0x70ac8e34)); - } - - // conversion from version 2: - // - Replace AreaSize with AreaWidth and AreaHeights - if (classElement.GetVersion() <= 2) - { - int areaIndex = classElement.FindElement(AZ_CRC("AreaSize", 0x287b852c)); - - if (areaIndex < 0) - { - return false; - } - - //Get the size - AZ::SerializeContext::DataElementNode& area = classElement.GetSubElement(areaIndex); - AZ::Vector3 size; - - area.GetData(size); - - //Create width and height - int areaWidthIndex = classElement.AddElement(context, "AreaWidth"); - int areaHeightIndex = classElement.AddElement(context, "AreaHeight"); - - AZ::SerializeContext::DataElementNode& areaWidth = classElement.GetSubElement(areaWidthIndex); - AZ::SerializeContext::DataElementNode& areaHeight = classElement.GetSubElement(areaHeightIndex); - - //Set width and height data to x and y from the old size - areaWidth.SetData(context, size.GetX()); - areaHeight.SetData(context, size.GetY()); - classElement.RemoveElement(areaIndex); - } - - // conversion from version 3: - // - MaxDistance turned into PointMaxDistance and AreaMaxDistance - // - AttenuationBulbSize turned into PointAttenuationBulbSize and ProjectorAttenuationBulbSize - // - Apply old area size to new probe area - if (classElement.GetVersion() <= 3) - { - int maxDistanceIndex = classElement.FindElement(AZ_CRC("MaxDistance", 0xfc2921b8)); - int attenBulbIndex = classElement.FindElement(AZ_CRC("AttenuationBulbSize", 0x3ca0f5c0)); - int areaWidthIndex = classElement.FindElement(AZ_CRC("AreaWidth", 0x137a1a2b)); - int areaHeightIndex = classElement.FindElement(AZ_CRC("AreaHeight", 0xf2bf4149)); - - if (maxDistanceIndex < 0 || attenBulbIndex < 0 || areaWidthIndex < 0 || areaHeightIndex < 0) - { - return false; - } - - //Get some values - AZ::SerializeContext::DataElementNode& maxDistance = classElement.GetSubElement(maxDistanceIndex); - AZ::SerializeContext::DataElementNode& attenBulbSize = classElement.GetSubElement(attenBulbIndex); - AZ::SerializeContext::DataElementNode& areaWidth = classElement.GetSubElement(areaWidthIndex); - AZ::SerializeContext::DataElementNode& areaHeight = classElement.GetSubElement(attenBulbIndex); - - float maxDistVal, attenBulbVal, areaWidthVal, areaHeightVal; - - maxDistance.GetData(maxDistVal); - attenBulbSize.GetData(attenBulbVal); - areaWidth.GetData(areaWidthVal); - areaHeight.GetData(areaHeightVal); - - //Create AreaMaxDistance, PointMaxDistance, PointAttenuationBulbSize and ProjectorAttenuationBulbSize - int areaMaxDistIndex = classElement.AddElement(context, "AreaMaxDistance"); - int pointMaxDistIndex = classElement.AddElement(context, "PointMaxDistance"); - int pointAttenBulbIndex = classElement.AddElement(context, "PointAttenuationBulbSize"); - int projectorAttenBulbIndex = classElement.AddElement(context, "ProjectorAttenuationBulbSize"); - int areaXYZIndex = classElement.AddElement(context, "Area X,Y,Z"); - - AZ::SerializeContext::DataElementNode& areaMaxDist = classElement.GetSubElement(areaMaxDistIndex); - AZ::SerializeContext::DataElementNode& pointMaxDist = classElement.GetSubElement(pointMaxDistIndex); - AZ::SerializeContext::DataElementNode& pointAttenBulb = classElement.GetSubElement(pointAttenBulbIndex); - AZ::SerializeContext::DataElementNode& projectorAttenBulb = classElement.GetSubElement(projectorAttenBulbIndex); - AZ::SerializeContext::DataElementNode& areaXYZ = classElement.GetSubElement(areaXYZIndex); - - //Set width and height data to x and y from the old size - areaMaxDist.SetData(context, maxDistVal); - pointMaxDist.SetData(context, maxDistVal); - pointAttenBulb.SetData(context, attenBulbVal); - projectorAttenBulb.SetData(context, attenBulbVal); - - //Set new area XYZ values based on existing area values - areaXYZ.SetData(context, AZ::Vector3(maxDistVal, areaWidthVal, areaHeightVal)); - - //Remove old MaxDistance and AttenuationBulbSize - classElement.RemoveElement(maxDistanceIndex); - classElement.RemoveElement(attenBulbIndex); - } - - // conversion from version 4: - // m_color: AZ::Vector4 -> AZ::Color - if (classElement.GetVersion() <= 4) - { - int colorIndex = classElement.FindElement(AZ_CRC("Color", 0x665648e9)); - if (colorIndex == -1) - { - return false; - } - - AZ::SerializeContext::DataElementNode& color = classElement.GetSubElement(colorIndex); - AZ::Vector4 colorVec; - color.GetData(colorVec); - AZ::Color colorVal(colorVec.GetX(), colorVec.GetY(), colorVec.GetZ(), colorVec.GetW()); - color.Convert(context); - color.SetData(context, colorVal); - } - - // conversion from version 6 to version 7: - // - Need to rename IgnoreVisAreas to UseVisAreas - // UseVisAreas is the Inverse of IgnoreVisAreas - if (classElement.GetVersion() <= 6) - { - int ignoreVisAreasIndex = classElement.FindElement(AZ_CRC("IgnoreVisAreas", 0x01823201)); - - if (ignoreVisAreasIndex < 0) - { - return false; - } - - AZ::SerializeContext::DataElementNode& useVisAreasNode = classElement.GetSubElement(ignoreVisAreasIndex); - useVisAreasNode.SetName("UseVisAreas"); - - bool ignoreVisAreas = true; - if (!useVisAreasNode.GetData(ignoreVisAreas)) - { - return false; - } - - if (!useVisAreasNode.SetData(context, !ignoreVisAreas)) - { - return false; - } - } - - if (classElement.GetVersion() <= 7) - { - AZ::SerializeContext::DataElementNode* cubemapTexture = classElement.FindSubElement(AZ_CRC("CubemapTexture", 0xbf6d8df4)); - - if (!cubemapTexture) - { - return false; - } - - AZStd::string cubemapPath; - - if (!cubemapTexture->GetData(cubemapPath)) - { - return false; - } - - AzFramework::SimpleAssetReference cubemapSimpleAsset; - - cubemapSimpleAsset.SetAssetPath(cubemapPath.c_str()); - - if (!classElement.RemoveElementByName(AZ_CRC("CubemapTexture", 0xbf6d8df4))) - { - return false; - } - - if (!classElement.AddElementWithData>(context, "CubemapTexture", cubemapSimpleAsset)) - { - return false; - } - } - - return true; - } - - bool LightComponent::TurnOnLight() - { - bool success = m_light.TurnOn(); - if (success) - { - EBUS_EVENT_ID(GetEntityId(), LightComponentNotificationBus, LightTurnedOn); - } - return success; - } - - bool LightComponent::TurnOffLight() - { - bool success = m_light.TurnOff(); - if (success) - { - EBUS_EVENT_ID(GetEntityId(), LightComponentNotificationBus, LightTurnedOff); - } - return success; - } - - /////////////////////////////////////////////////////////////////////// - // Modifiers - void LightComponent::SetVisible(bool isVisible) - { - if (isVisible != m_configuration.m_visible) - { - m_configuration.m_visible = isVisible; - - if (m_configuration.m_visible) - { - if (!TurnOnLight()) - { - // unable to turn on light. This happens when trying to turn on a light was was previously not visible. Use UpdateRenderLight to - // update the light's visibility (by recreating it) to turn it on. - m_light.UpdateRenderLight(m_configuration); - } - } - else - { - TurnOffLight(); - } - } - } - - bool LightComponent::GetVisible() - { - return m_light.IsOn(); - } - - void LightComponent::SetColor(const AZ::Color& newColor) - { - if (m_configuration.m_color != newColor) - { - m_configuration.m_color = newColor; - m_light.UpdateRenderLight(m_configuration); - } - } - - const AZ::Color LightComponent::GetColor() - { - return m_configuration.m_color; - } - - void LightComponent::SetDiffuseMultiplier(float newMultiplier) - { - if (m_configuration.m_diffuseMultiplier != newMultiplier) - { - m_configuration.m_diffuseMultiplier = newMultiplier; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetDiffuseMultiplier() - { - return m_configuration.m_diffuseMultiplier; - } - - void LightComponent::SetSpecularMultiplier(float newMultiplier) - { - if (m_configuration.m_specMultiplier != newMultiplier) - { - m_configuration.m_specMultiplier = newMultiplier; - m_light.UpdateRenderLight(m_configuration); - } - } - - float LightComponent::GetSpecularMultiplier() - { - return m_configuration.m_specMultiplier; - } - - void LightComponent::SetAmbient(bool isAmbient) - { - if (isAmbient != m_configuration.m_ambient) - { - m_configuration.m_ambient = isAmbient; - m_light.UpdateRenderLight(m_configuration); - } - } - bool LightComponent::GetAmbient() - { - return m_configuration.m_ambient; - } - - void LightComponent::SetPointMaxDistance(float newMaxDistance) - { - if (newMaxDistance != m_configuration.m_pointMaxDistance) - { - m_configuration.m_pointMaxDistance = newMaxDistance; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetPointMaxDistance() - { - return m_configuration.m_pointMaxDistance; - } - - void LightComponent::SetPointAttenuationBulbSize(float newAttenuationBulbSize) - { - if (newAttenuationBulbSize != m_configuration.m_pointAttenuationBulbSize) - { - m_configuration.m_pointAttenuationBulbSize = newAttenuationBulbSize; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetPointAttenuationBulbSize() - { - return m_configuration.m_pointAttenuationBulbSize; - } - - void LightComponent::SetAreaMaxDistance(float newMaxDistance) - { - if (newMaxDistance != m_configuration.m_areaMaxDistance) - { - m_configuration.m_areaMaxDistance = newMaxDistance; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetAreaMaxDistance() - { - return m_configuration.m_areaMaxDistance; - } - - void LightComponent::SetAreaWidth(float newWidth) - { - if (newWidth != m_configuration.m_areaWidth) - { - m_configuration.m_areaWidth = newWidth; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetAreaWidth() - { - return m_configuration.m_areaWidth; - } - - void LightComponent::SetAreaHeight(float newHeight) - { - if (newHeight != m_configuration.m_areaHeight) - { - m_configuration.m_areaHeight = newHeight; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetAreaHeight() - { - return m_configuration.m_areaHeight; - } - - void LightComponent::SetAreaFOV(float newFOV) - { - if (newFOV != m_configuration.m_areaFOV) - { - m_configuration.m_areaFOV = newFOV; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetAreaFOV() - { - return m_configuration.m_areaFOV; - } - - void LightComponent::SetProjectorMaxDistance(float newMaxDistance) - { - if (newMaxDistance != m_configuration.m_projectorRange) - { - m_configuration.m_projectorRange = newMaxDistance; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetProjectorMaxDistance() - { - return m_configuration.m_projectorRange; - } - - void LightComponent::SetProjectorAttenuationBulbSize(float newAttenuationBulbSize) - { - if (newAttenuationBulbSize != m_configuration.m_projectorAttenuationBulbSize) - { - m_configuration.m_projectorAttenuationBulbSize = newAttenuationBulbSize; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetProjectorAttenuationBulbSize() - { - return m_configuration.m_projectorAttenuationBulbSize; - } - - void LightComponent::SetProjectorFOV(float newFOV) - { - if (newFOV != m_configuration.m_projectorFOV) - { - m_configuration.m_projectorFOV = newFOV; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetProjectorFOV() - { - return m_configuration.m_projectorFOV; - } - - void LightComponent::SetProjectorNearPlane(float newNearPlane) - { - if (newNearPlane != m_configuration.m_projectorNearPlane) - { - m_configuration.m_projectorNearPlane = newNearPlane; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetProjectorNearPlane() - { - return m_configuration.m_projectorNearPlane; - } - - void LightComponent::SetProbeAreaDimensions(const AZ::Vector3& newDimensions) - { - if (newDimensions != m_configuration.m_probeArea) - { - m_configuration.m_probeArea = newDimensions; - m_light.UpdateRenderLight(m_configuration); - } - } - const AZ::Vector3 LightComponent::GetProbeAreaDimensions() - { - return m_configuration.m_probeArea; - } - - void LightComponent::SetProbeSortPriority(AZ::u32 newPriority) - { - if (newPriority != m_configuration.m_probeSortPriority) - { - m_configuration.m_probeSortPriority = newPriority; - m_light.UpdateRenderLight(m_configuration); - } - } - AZ::u32 LightComponent::GetProbeSortPriority() - { - return m_configuration.m_probeSortPriority; - } - - void LightComponent::SetProbeBoxProjected(bool isProbeBoxProjected) - { - if (isProbeBoxProjected != m_configuration.m_isBoxProjected) - { - m_configuration.m_isBoxProjected = isProbeBoxProjected; - m_light.UpdateRenderLight(m_configuration); - } - } - bool LightComponent::GetProbeBoxProjected() - { - return m_configuration.m_isBoxProjected; - } - - void LightComponent::SetProbeBoxHeight(float newHeight) - { - if (newHeight != m_configuration.m_boxHeight) - { - m_configuration.m_boxHeight = newHeight; - m_light.UpdateRenderLight(m_configuration); - } - } - float LightComponent::GetProbeBoxHeight() - { - return m_configuration.m_boxHeight; - } - - void LightComponent::SetProbeBoxLength(float newLength) - { - if (newLength != m_configuration.m_boxLength) - { - m_configuration.m_boxLength = newLength; - m_light.UpdateRenderLight(m_configuration); - } - } - - float LightComponent::GetProbeBoxLength() - { - return m_configuration.m_boxLength; - } - - void LightComponent::SetProbeBoxWidth(float newWidth) - { - if (newWidth != m_configuration.m_boxWidth) - { - m_configuration.m_boxWidth = newWidth; - m_light.UpdateRenderLight(m_configuration); - } - } - - float LightComponent::GetProbeBoxWidth() - { - return m_configuration.m_boxWidth; - } - - void LightComponent::SetProbeAttenuationFalloff(float newAttenuationFalloff) - { - if (newAttenuationFalloff != m_configuration.m_attenFalloffMax) - { - m_configuration.m_attenFalloffMax = newAttenuationFalloff; - m_light.UpdateRenderLight(m_configuration); - } - } - - float LightComponent::GetProbeAttenuationFalloff() - { - return m_configuration.m_attenFalloffMax; - } - - void LightComponent::SetProbeFade(float fade) - { - AZ_Warning("Lighting", 0.0f <= fade && fade <= 1.0f, "SetProbeFade value %f out of range. Clamping to [0,1]", fade); - fade = AZ::GetClamp(fade, 0.0f, 1.0f); - - if (fade != m_configuration.m_probeFade) - { - m_configuration.m_probeFade = fade; - m_light.UpdateRenderLight(m_configuration); - } - } - - float LightComponent::GetProbeFade() - { - return m_configuration.m_probeFade; - } - - /////////////////////////////////////////////////////////// - void LightComponent::ToggleLight() - { - if (m_light.IsOn()) - { - TurnOffLight(); - } - else - { - TurnOnLight(); - } - } - - void LightComponent::SetLightState(State state) - { - switch (state) - { - case LightComponentRequests::State::On: - { - TurnOnLight(); - } - break; - - case LightComponentRequests::State::Off: - { - TurnOffLight(); - } - break; - } - } - - IRenderNode* LightComponent::GetRenderNode() - { - return m_light.GetRenderNode(); - } - - float LightComponent::GetRenderNodeRequestBusOrder() const - { - return s_renderNodeRequestBusOrder; - } - - const float LightComponent::s_renderNodeRequestBusOrder = 500.f; - - LightComponent::LightComponent() - { - } - - LightComponent::~LightComponent() - { - } - - void LightComponent::Init() - { - } - - void LightComponent::Activate() - { - const AZ::EntityId entityId = GetEntityId(); - - m_light.SetEntity(entityId); - m_light.CreateRenderLight(m_configuration); - - LightComponentRequestBus::Handler::BusConnect(entityId); - RenderNodeRequestBus::Handler::BusConnect(entityId); - - if (m_configuration.m_onInitially) - { - m_light.TurnOn(); - } - else - { - m_light.TurnOff(); - } - } - - void LightComponent::Deactivate() - { - LightComponentRequestBus::Handler::BusDisconnect(); - RenderNodeRequestBus::Handler::BusDisconnect(); - m_light.DestroyRenderLight(); - m_light.SetEntity(AZ::EntityId()); - } - - LightConfiguration::LightConfiguration() - : m_lightType(LightType::Point) - , m_visible(true) - , m_onInitially(true) - , m_pointMaxDistance(2.f) - , m_pointAttenuationBulbSize(0.05f) - , m_areaMaxDistance(2.f) - , m_areaWidth(5.f) - , m_areaHeight(5.f) - , m_areaFOV(45.0f) - , m_projectorAttenuationBulbSize(0.05f) - , m_projectorRange(5.f) - , m_projectorFOV(90.f) - , m_projectorNearPlane(0) - , m_probeSortPriority(0) - , m_probeArea(20.0f, 20.0f, 20.0f) - , m_probeCubemapResolution(ResolutionSetting::ResDefault) - , m_isBoxProjected(false) - , m_boxWidth(20.0f) - , m_boxHeight(20.0f) - , m_boxLength(20.0f) - , m_attenFalloffMax(0.3f) - , m_probeFade(1.0f) - , m_minSpec(EngineSpec::Low) - , m_viewDistMultiplier(1.f) - , m_castShadowsSpec(EngineSpec::Never) - , m_voxelGIMode(IRenderNode::VM_None) - , m_color(1.f, 1.f, 1.f, 1.f) - , m_diffuseMultiplier(1.f) - , m_specMultiplier(1.f) - , m_affectsThisAreaOnly(true) - , m_useVisAreas(true) - , m_volumetricFog(true) - , m_volumetricFogOnly(false) - , m_indoorOnly(false) - , m_ambient(false) - , m_deferred(true) - , m_animIndex(0) - , m_animSpeed(1.f) - , m_animPhase(0.f) - , m_castTerrainShadows(false) - , m_shadowBias(1.f) - , m_shadowSlopeBias(1.f) - , m_shadowResScale(1.f) - , m_shadowUpdateMinRadius(10.f) - , m_shadowUpdateRatio(1.f) - , m_cubemapId(AZ::Uuid::Create()) - { - } -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LightComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/LightComponent.h deleted file mode 100644 index d562cf1701..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LightComponent.h +++ /dev/null @@ -1,303 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "LightInstance.h" - -#include - -namespace LmbrCentral -{ - /*! - * Stores configuration settings for engine lights. - * - Common color and shader settings - * - Common shadow-casting settings - * - Settings unique to different light types - */ - class LightConfiguration - { - public: - - AZ_TYPE_INFO(LightConfiguration, "{F4CC7BB4-C541-480C-88FC-C5A8F37CC67F}"); - - // LY renderer supported light types. - enum class LightType : AZ::u32 - { - Point = 0, ///> Omni-directional point light - Area, ///> Area/box light - Projector, ///> Texture projector light - Probe, ///> Environment probe - }; - - // Texture resolution settings. - enum class ResolutionSetting : AZ::u32 - { - ResDefault = 256, - Res32 = 32, - Res64 = 64, - Res128 = 128, - Res256 = 256, - Res512 = 512, - }; - - LightConfiguration(); - virtual ~LightConfiguration() {}; - - static void Reflect(AZ::ReflectContext* context); - - //! The type of render light (point/omni, projector, area, or environment probe). - LightType m_lightType; - - //! Turned on by default? - bool m_onInitially; - - //! Currently visible? - bool m_visible; - - //! Point light settings - float m_pointMaxDistance; - float m_pointAttenuationBulbSize; - - //! Settings for area lights - float m_areaWidth; - float m_areaHeight; - float m_areaMaxDistance; - float m_areaFOV; - - //! Settings for projector lights - float m_projectorRange; - float m_projectorAttenuationBulbSize; - float m_projectorFOV; - float m_projectorNearPlane; - AzFramework::SimpleAssetReference m_projectorTexture; - AzFramework::SimpleAssetReference m_material; - - //! Settings for environment lights (probes) - AZ::Vector3 m_probeArea; - AZ::u32 m_probeSortPriority; - ResolutionSetting m_probeCubemapResolution; - AzFramework::SimpleAssetReference m_probeCubemap; - //parameter to enable box projection - bool m_isBoxProjected; - float m_boxWidth; - float m_boxHeight; - float m_boxLength; - float m_attenFalloffMax; - float m_probeFade; - - //! Settings common to all LY engine lights - EngineSpec m_minSpec; - float m_viewDistMultiplier; - EngineSpec m_castShadowsSpec; - IRenderNode::EVoxelGIMode m_voxelGIMode; - - AZ::Color m_color; - float m_diffuseMultiplier; - float m_specMultiplier; - bool m_affectsThisAreaOnly; - bool m_useVisAreas; - bool m_indoorOnly; - bool m_ambient; - bool m_deferred; - AZ::u32 m_animIndex; - float m_animSpeed; - float m_animPhase; - bool m_volumetricFog; - bool m_volumetricFogOnly; - bool m_castTerrainShadows; - - //! Shadow settings - float m_shadowBias; - float m_shadowSlopeBias; - float m_shadowResScale; - float m_shadowUpdateMinRadius; - float m_shadowUpdateRatio; - - // Need to keep a unique Id to use as cubemap name - AZ::Uuid m_cubemapId; - - // \todo clip bounds - artists aren't using it. Includes fade dimensions. - - AZ::EntityId m_editorEntityId; // Editor-only, not reflected. - - // Property event-handlers implemented in editor component. - virtual AZ::Crc32 GetAmbientLightVisibility() const { return 0; } - virtual AZ::Crc32 GetPointLightVisibility() const { return 0; } - virtual AZ::Crc32 GetProjectorLightVisibility() const { return 0; } - virtual AZ::Crc32 GetProbeLightVisibility() const { return 0; } - virtual AZ::Crc32 GetShadowSpecVisibility() const { return 0; } - virtual AZ::Crc32 GetShadowSettingsVisibility() const { return 0; } - virtual AZ::Crc32 GetAreaSettingVisibility() const { return 0; } - virtual AZ::Crc32 MinorPropertyChanged() { return 0; } - virtual AZ::Crc32 MajorPropertyChanged() { return 0; } - virtual AZ::Crc32 OnAnimationSettingChanged() { return 0; } - virtual AZ::Crc32 OnCubemapAssetChanged() { return 0; } - virtual bool CanGenerateCubemap() const { return false; } - - private: - - static bool VersionConverter(AZ::SerializeContext& context, - AZ::SerializeContext::DataElementNode& classElement); - }; - - /*! - * In-game light component. - */ - class LightComponent - : public AZ::Component - , public LightComponentRequestBus::Handler - , public RenderNodeRequestBus::Handler - { - public: - - friend class EditorLightComponent; - - AZ_COMPONENT(LightComponent, "{6B9AB512-CA8A-4D2B-B570-DF128EA7CE6A}"); - - LightComponent(); - ~LightComponent() override; - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Init() override; - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // LightComponentRequests::Bus::Handler interface implementation - void SetLightState(State state) override; - bool TurnOnLight() override; - bool TurnOffLight() override; - void ToggleLight() override; - - //////////////////////////////////// - // Modifiers - void SetVisible(bool isVisible) override; - bool GetVisible() override; - - void SetColor(const AZ::Color& newColor) override; - const AZ::Color GetColor() override; - - void SetDiffuseMultiplier(float newMultiplier) override; - float GetDiffuseMultiplier() override; - - void SetSpecularMultiplier(float newMultiplier) override; - float GetSpecularMultiplier() override; - - void SetAmbient(bool isAmbient) override; - bool GetAmbient() override; - - void SetPointMaxDistance(float newMaxDistance) override; - float GetPointMaxDistance() override; - - void SetPointAttenuationBulbSize(float newAttenuationBulbSize) override; - float GetPointAttenuationBulbSize() override; - - void SetAreaMaxDistance(float newMaxDistance) override; - float GetAreaMaxDistance() override; - - void SetAreaWidth(float newWidth) override; - float GetAreaWidth() override; - - void SetAreaHeight(float newHeight) override; - float GetAreaHeight() override; - - void SetAreaFOV(float newFOV) override; - float GetAreaFOV() override; - - void SetProjectorMaxDistance(float newMaxDistance) override; - float GetProjectorMaxDistance() override; - - void SetProjectorAttenuationBulbSize(float newAttenuationBulbSize) override; - float GetProjectorAttenuationBulbSize() override; - - void SetProjectorFOV(float newFOV) override; - float GetProjectorFOV() override; - - void SetProjectorNearPlane(float newNearPlane) override; - float GetProjectorNearPlane() override; - - // Environment Probe Settings - void SetProbeAreaDimensions(const AZ::Vector3& newDimensions) override; - const AZ::Vector3 GetProbeAreaDimensions() override; - - void SetProbeSortPriority(AZ::u32 newPriority) override; - AZ::u32 GetProbeSortPriority() override; - - void SetProbeBoxProjected(bool isProbeBoxProjected) override; - bool GetProbeBoxProjected() override; - - void SetProbeBoxHeight(float newHeight) override; - float GetProbeBoxHeight() override; - - void SetProbeBoxLength(float newLength) override; - float GetProbeBoxLength() override; - - void SetProbeBoxWidth(float newWidth) override; - float GetProbeBoxWidth() override; - - void SetProbeAttenuationFalloff(float newAttenuationFalloff) override; - float GetProbeAttenuationFalloff() override; - - void SetProbeFade(float fade) override; - float GetProbeFade() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // RenderNodeRequestBus::Handler interface implementation - IRenderNode* GetRenderNode() override; - float GetRenderNodeRequestBusOrder() const override; - static const float s_renderNodeRequestBusOrder; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - provided.push_back(AZ_CRC("LightService", 0xfd7fa928)); - } - - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - required.push_back(AZ_CRC("TransformService", 0x8ee22c50)); - } - - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& /*dependent*/) - { - } - - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - incompatible.push_back(AZ_CRC("LightService", 0xfd7fa928)); - } - - static void Reflect(AZ::ReflectContext* context); - ////////////////////////////////////////////////////////////////////////// - - protected: - - LightConfiguration m_configuration; - LightInstance m_light; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LightInstance.cpp b/Gems/LmbrCentral/Code/Source/Rendering/LightInstance.cpp deleted file mode 100644 index 0c5da629ed..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LightInstance.cpp +++ /dev/null @@ -1,442 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#include "LmbrCentral_precompiled.h" - -#include -#include -#include -#include - -#include - -#include "LightInstance.h" -#include "LightComponent.h" -#include "LensFlareComponent.h" - -namespace -{ - const float kDefaultLightFrustumAngle = 45.f; - const uint8 kDefaultLensOpticsFrustumAngle = 255; - - void UpdateLightFlag(bool enable, int mask, unsigned int& flags) - { - if (enable) - { - flags |= mask; - } - else - { - flags &= ~mask; - } - } - - AZ::u32 CreateLightId(AZ::EntityId entityId) - { - // Renderer requires a non-zero value, but doesn't care what it actually means. - // This is used only for debug coloring and tie-breaking sorts. - // Use the timestamp half of our entity Id. - const AZ::u32 lowerEntityId = static_cast(static_cast(entityId) >> 32); - return lowerEntityId; - } - - const char* GetEntityName(AZ::EntityId entityId) - { - AZ::Entity* entity = nullptr; - EBUS_EVENT_RESULT(entity, AZ::ComponentApplicationBus, FindEntity, entityId); - return (entity ? entity->GetName().c_str() : ""); - } - - void LightConfigToLightParams(const LmbrCentral::LightConfiguration& configuration, AZ::EntityId entityId, int configSpec, CDLight& lightParams) - { - // The light cannot be ambient if it is an environment probe - bool ambient = configuration.m_ambient; - if (configuration.m_lightType == LmbrCentral::LightConfiguration::LightType::Probe) - { - ambient = false; - } - - lightParams.SetPosition(Vec3_Zero); - lightParams.m_fLightFrustumAngle = kDefaultLightFrustumAngle; - lightParams.m_Flags = 0; - lightParams.m_LensOpticsFrustumAngle = kDefaultLensOpticsFrustumAngle; - Vec3 color = AZColorToLYVec3(configuration.m_color); - color *= configuration.m_diffuseMultiplier; - lightParams.SetLightColor(ColorF(color.x, color.y, color.z, 1.f)); - lightParams.SetSpecularMult(configuration.m_specMultiplier); - - lightParams.m_nLightStyle = configuration.m_animIndex; // "light style" is really a light animation curve index - lightParams.SetAnimSpeed(configuration.m_animSpeed); // maps [0, 4] to [0, 255] - lightParams.m_nLightPhase = static_cast(configuration.m_animPhase * 255.f); // maps [0, 1] to [0, 255] - - lightParams.m_nEntityId = CreateLightId(entityId); - - UpdateLightFlag(!configuration.m_useVisAreas, DLF_IGNORES_VISAREAS, lightParams.m_Flags); - UpdateLightFlag(configuration.m_indoorOnly, DLF_INDOOR_ONLY, lightParams.m_Flags); - UpdateLightFlag(configuration.m_affectsThisAreaOnly, DLF_THIS_AREA_ONLY, lightParams.m_Flags); - UpdateLightFlag(ambient, DLF_AMBIENT, lightParams.m_Flags); - UpdateLightFlag(configuration.m_deferred, DLF_DEFERRED_LIGHT, lightParams.m_Flags); - UpdateLightFlag(configuration.m_volumetricFog, DLF_VOLUMETRIC_FOG, lightParams.m_Flags); - UpdateLightFlag(configuration.m_volumetricFogOnly, DLF_VOLUMETRIC_FOG_ONLY, lightParams.m_Flags); - UpdateLightFlag(configuration.m_castTerrainShadows, DLF_CAST_TERRAIN_SHADOWS, lightParams.m_Flags); - - if (static_cast(configSpec) >= static_cast(configuration.m_castShadowsSpec)) - { - lightParams.m_Flags |= DLF_CASTSHADOW_MAPS; - } - - //Probe won't cast shadow. Enable this flag wrongly for probe could lead to wrong bbox. - if (configuration.m_lightType == LmbrCentral::LightConfiguration::LightType::Probe) - { - lightParams.m_Flags &= ~DLF_CASTSHADOW_MAPS; - } - - lightParams.m_fShadowBias = configuration.m_shadowBias; - lightParams.m_fShadowSlopeBias = configuration.m_shadowSlopeBias; - lightParams.m_fShadowResolutionScale = configuration.m_shadowResScale; - lightParams.m_fShadowUpdateMinRadius = configuration.m_shadowUpdateMinRadius; - lightParams.m_nShadowUpdateRatio = max((uint16)1, (uint16)(configuration.m_shadowUpdateRatio * (1 << DL_SHADOW_UPDATE_SHIFT))); - - switch (configuration.m_lightType) - { - case LmbrCentral::LightConfiguration::LightType::Point: - { - lightParams.m_fRadius = configuration.m_pointMaxDistance; - lightParams.m_fAttenuationBulbSize = configuration.m_pointAttenuationBulbSize; - lightParams.m_Flags |= DLF_POINT; - } - break; - - case LmbrCentral::LightConfiguration::LightType::Area: - { - lightParams.m_fRadius = configuration.m_areaMaxDistance; - lightParams.m_fAreaWidth = configuration.m_areaWidth; - lightParams.m_fAreaHeight = configuration.m_areaHeight; - lightParams.m_fLightFrustumAngle = configuration.m_areaFOV; - lightParams.m_Flags |= DLF_AREA_LIGHT; - } - break; - - case LmbrCentral::LightConfiguration::LightType::Projector: - { - lightParams.m_fRadius = configuration.m_projectorRange; - lightParams.m_fLightFrustumAngle = configuration.m_projectorFOV * 0.5f; - lightParams.m_fProjectorNearPlane = configuration.m_projectorNearPlane; - lightParams.m_fAttenuationBulbSize = configuration.m_projectorAttenuationBulbSize; - lightParams.m_Flags |= DLF_PROJECT; - - const char* texturePath = configuration.m_projectorTexture.GetAssetPath().c_str(); - const int flags = FT_DONT_STREAM; - - if (gEnv->pRenderer) - { - lightParams.m_pLightImage = gEnv->pRenderer->EF_LoadTexture(texturePath, flags); - - if (!lightParams.m_pLightImage || !lightParams.m_pLightImage->IsTextureLoaded()) - { - GetISystem()->Warning(VALIDATOR_MODULE_RENDERER, VALIDATOR_WARNING, 0, texturePath, - "Light projector texture not found: %s", texturePath); - lightParams.m_pLightImage = gEnv->pRenderer->EF_LoadTexture("Textures/defaults/red.dds", flags); - } - } - } - break; - - case LmbrCentral::LightConfiguration::LightType::Probe: - { - lightParams.m_ProbeExtents.x = configuration.m_probeArea.GetX() / 2.0f; - lightParams.m_ProbeExtents.y = configuration.m_probeArea.GetY() / 2.0f; - lightParams.m_ProbeExtents.z = configuration.m_probeArea.GetZ() / 2.0f; - lightParams.m_fRadius = lightParams.m_ProbeExtents.len(); - lightParams.m_nSortPriority = configuration.m_probeSortPriority; - lightParams.m_fProbeAttenuation = configuration.m_probeFade; - - //projection - if (configuration.m_isBoxProjected) - { - //enable box projection - lightParams.m_Flags |= DLF_BOX_PROJECTED_CM; - } - lightParams.m_fBoxHeight = configuration.m_boxHeight; - lightParams.m_fBoxLength = configuration.m_boxLength; - lightParams.m_fBoxWidth = configuration.m_boxWidth; - lightParams.SetFalloffMax(configuration.m_attenFalloffMax); - - lightParams.ReleaseCubemaps(); - - const AZStd::string& specularMap = configuration.m_probeCubemap.GetAssetPath(); - - if (!specularMap.empty()) - { - AZStd::string diffuseMap = specularMap; - AZStd::string::size_type dotPos = specularMap.find_last_of('.'); - if (dotPos != AZStd::string::npos) - { - diffuseMap.insert(dotPos, "_diff"); - } - - if (gEnv->pRenderer) - { - lightParams.SetSpecularCubemap(gEnv->pRenderer->EF_LoadCubemapTexture(specularMap.c_str(), FT_DONT_STREAM)); - lightParams.SetDiffuseCubemap(gEnv->pRenderer->EF_LoadCubemapTexture(diffuseMap.c_str(), FT_DONT_STREAM)); - } - - if (lightParams.GetDiffuseCubemap() && lightParams.GetSpecularCubemap()) - { - lightParams.m_Flags |= DLF_DEFERRED_CUBEMAPS; - } - else - { - if (!lightParams.GetSpecularCubemap()) - { - AZ_Warning("Light", false, - "Failed to load specular cubemap \"%s\" for light \"%s\".", - specularMap.c_str(), - GetEntityName(entityId)); - } - - if (!lightParams.GetDiffuseCubemap()) - { - AZ_Warning("Light", false, - "Failed to load diffuse cubemap \"%s\" for light \"%s\".", - diffuseMap.c_str(), - GetEntityName(entityId)); - } - - lightParams.m_Flags &= ~DLF_DEFERRED_CUBEMAPS; - lightParams.m_Flags |= DLF_POINT; - lightParams.ReleaseCubemaps(); - } - } - else - { - // Disable the light - lightParams.m_Flags = DLF_FAKE; - } - } - break; - } - } - - void LensFlareConfigToLightParams(const LmbrCentral::LensFlareConfiguration& configuration, [[maybe_unused]] AZ::EntityId entityId, int, CDLight& lightParams) - { - lightParams.m_Flags |= DLF_FAKE; // As long as deferred lights are separate components disable the actual deferred light - - ColorF color = AZVec3ToLYVec3(configuration.m_tint); - color.a = configuration.m_tintAlpha / 255.0f; - lightParams.SetLightColor(ColorF(1.f, 1.f, 1.f, 1.f)); //Set the light color to white. We can tint the lens flare directly - - if (configuration.m_syncAnimWithLight) - { - lightParams.m_nLightStyle = static_cast(configuration.m_syncAnimIndex); // This is really a light animation curve ID - lightParams.SetAnimSpeed(configuration.m_syncAnimSpeed); // maps [0, 4] to [0, 255] - lightParams.m_nLightPhase = static_cast(configuration.m_syncAnimPhase * 255.f); // maps [0, 1] to [0, 255] - } - else if (configuration.m_attachToSun) - { - gEnv->p3DEngine->SetSunAnimIndex(static_cast(configuration.m_animIndex)); // This is really a light animation curve ID - gEnv->p3DEngine->SetSunAnimSpeed(configuration.m_animSpeed); // maps [0, 4] to [0, 255] - gEnv->p3DEngine->SetSunAnimPhase(static_cast(configuration.m_animPhase * 255.f)); // maps [0, 1] to [0, 255] - } - else - { - lightParams.m_nLightStyle = static_cast(configuration.m_animIndex); // This is really a light animation curve ID - lightParams.SetAnimSpeed(configuration.m_animSpeed); // maps [0, 4] to [0, 255] - lightParams.m_nLightPhase = static_cast(configuration.m_animPhase * 255.f); // maps [0, 1] to [0, 255] - } - - lightParams.m_LensOpticsFrustumAngle = static_cast(configuration.m_lensFlareFrustumAngle / 360.f * 255.f); - - UpdateLightFlag(configuration.m_affectsThisAreaOnly, DLF_THIS_AREA_ONLY, lightParams.m_Flags); - UpdateLightFlag(!configuration.m_useVisAreas, DLF_IGNORES_VISAREAS, lightParams.m_Flags); - UpdateLightFlag(configuration.m_indoorOnly, DLF_INDOOR_ONLY, lightParams.m_Flags); - UpdateLightFlag(configuration.m_attachToSun, DLF_ATTACH_TO_SUN, lightParams.m_Flags); - - if (!configuration.m_lensFlare.empty()) - { - int lensOpticsID = 0; - if (gEnv->pOpticsManager->Load(configuration.m_lensFlare.c_str(), lensOpticsID)) - { - IOpticsElementBase* flare = gEnv->pOpticsManager->GetOptics(lensOpticsID); - lightParams.SetLensOpticsElement(flare); - lightParams.SetOpticsParams({ configuration.m_brightness, configuration.m_size, { color.r, color.g, color.b, color.a }, true }); - } - else - { - AZ_Warning("LensFlare", false, "Failed to load lens flare \"%s\" for entity \"%s\".", configuration.m_lensFlare.c_str(), GetEntityName(entityId)); - } - } - } -} - -namespace LmbrCentral -{ - LightInstance::LightInstance() - : m_renderLight(nullptr) - { - } - - LightInstance::~LightInstance() - { - DestroyRenderLight(); - } - - void LightInstance::SetEntity(AZ::EntityId entityId) - { - if (m_entityId.IsValid()) - { - AZ::TransformNotificationBus::Handler::BusDisconnect(); - } - - m_entityId = entityId; - - if (m_entityId.IsValid()) - { - AZ::TransformNotificationBus::Handler::BusConnect(m_entityId); - } - } - - void LightInstance::OnTransformChanged(const AZ::Transform&, const AZ::Transform& world) - { - if (m_renderLight) - { - CDLight* lightProperties = &m_renderLight->GetLightProperties(); - Matrix34 worldMatrix = AZTransformToLYTransform(world); - worldMatrix.OrthonormalizeFast(); // Lights do not support scale. - lightProperties->SetPosition(worldMatrix.GetTranslation()); - lightProperties->SetMatrix(worldMatrix); - m_renderLight->SetMatrix(worldMatrix); - } - } - - bool LightInstance::TurnOn() - { - if (!m_renderLight) - { - return false; - } - - m_renderLight->SetRndFlags(ERF_HIDDEN, false); - return true; - } - - bool LightInstance::TurnOff() - { - if (!m_renderLight) - { - return false; - } - - m_renderLight->SetRndFlags(ERF_HIDDEN, true); - return true; - } - - bool LightInstance::IsOn() const - { - if (!m_renderLight) - { - return false; - } - - return 0 == (m_renderLight->GetRndFlags() & ERF_HIDDEN); - } - - void LightInstance::CreateRenderLight(const LightConfiguration& configuration) - { - CreateRenderLightInternal(configuration, LightConfigToLightParams); - -#if defined(FEATURE_SVO_GI) - if (m_renderLight) - { - m_renderLight->SetDesiredVoxelGIMode(configuration.m_voxelGIMode); - } -#endif - } - - void LightInstance::CreateRenderLight(const LensFlareConfiguration& configuration) - { - CreateRenderLightInternal(configuration, LensFlareConfigToLightParams); - } - - void LightInstance::UpdateRenderLight(const LightConfiguration& configuration) - { - // ERF_HIDDEN is used to turn on/off the light, so cache it here and set it back later - bool isHidden = m_renderLight ? (m_renderLight->GetRndFlags() & ERF_HIDDEN) == ERF_HIDDEN : false; - DestroyRenderLight(); - CreateRenderLight(configuration); - if (m_renderLight) - { - m_renderLight->SetRndFlags(ERF_HIDDEN, isHidden); - } - } - - void LightInstance::UpdateRenderLight(const LensFlareConfiguration& configuration) - { - // ERF_HIDDEN is used to turn on/off the light, so cache it here and set it back later - bool isHidden = m_renderLight ? (m_renderLight->GetRndFlags() & ERF_HIDDEN) == ERF_HIDDEN : false; - DestroyRenderLight(); - CreateRenderLight(configuration); - if (m_renderLight) - { - m_renderLight->SetRndFlags(ERF_HIDDEN, isHidden); - } - } - - void LightInstance::DestroyRenderLight() - { - if (m_renderLight) - { - m_renderLight->ReleaseNode(); - m_renderLight = nullptr; - } - } - - IRenderNode* LightInstance::GetRenderNode() - { - return m_renderLight; - } - - template - void LightInstance::CreateRenderLightInternal(const ConfigurationType& configuration, ConfigToLightParamsFunc configToLightParams) - { - if (m_renderLight || !configuration.m_visible || !gEnv->p3DEngine) - { - return; - } - - ICVar* cvarSysSpecLight = gEnv->pConsole->GetCVar("e_LightQuality"); - const int configSpec = cvarSysSpecLight ? cvarSysSpecLight->GetIVal() : gEnv->pSystem->GetConfigSpec(true); - - if (static_cast(configSpec) < static_cast(configuration.m_minSpec)) - { - // Light is disabled in the active system spec. - return; - } - - CDLight lightParams; - configToLightParams(configuration, m_entityId, configSpec, lightParams); - - m_renderLight = gEnv->p3DEngine->CreateLightSource(); - - if (!configuration.m_material.GetAssetPath().empty()) - { - m_renderLight->SetMaterial(gEnv->p3DEngine->GetMaterialManager()->LoadMaterial(configuration.m_material.GetAssetPath().c_str())); - } - - m_renderLight->SetLightProperties(lightParams); - m_renderLight->SetMinSpec(static_cast(configuration.m_minSpec)); - m_renderLight->SetViewDistanceMultiplier(configuration.m_viewDistMultiplier); - - AZ::Transform parentTransform = AZ::Transform::CreateIdentity(); - EBUS_EVENT_ID_RESULT(parentTransform, m_entityId, AZ::TransformBus, GetWorldTM); - OnTransformChanged(AZ::Transform::CreateIdentity(), parentTransform); - } -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/LightInstance.h b/Gems/LmbrCentral/Code/Source/Rendering/LightInstance.h deleted file mode 100644 index 694aa3a227..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/LightInstance.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include -#include - -struct ILightSource; -struct IRenderNode; -class CDLight; - -namespace LmbrCentral -{ - class LightConfiguration; - class LensFlareConfiguration; - - /*! - * Renderer specific implementation of a Renderer light - */ - class LightInstance final - : private AZ::TransformNotificationBus::Handler - { - public: - - AZ_TYPE_INFO(LightInstance, "{844D6585-6613-4E0D-BBA7-C37073B84F5F}"); - - LightInstance(); - ~LightInstance(); - - void SetEntity(AZ::EntityId id); - - void CreateRenderLight(const LightConfiguration& configuration); - void UpdateRenderLight(const LightConfiguration& configuration); - - void CreateRenderLight(const LensFlareConfiguration& configuration); - void UpdateRenderLight(const LensFlareConfiguration& configuration); - - void DestroyRenderLight(); - - IRenderNode* GetRenderNode(); - - bool IsOn() const; - - bool TurnOn(); - bool TurnOff(); - - ////////////////////////////////////////////////////////////////////////// - // AZ::TransformNotificationBus::Handler interface implementation - void OnTransformChanged(const AZ::Transform& local, const AZ::Transform& world) override; - ////////////////////////////////////////////////////////////////////////// - - private: - template - void CreateRenderLightInternal(const ConfigurationType& configuration, ConfigToLightParamsFunc configToLightParams); - - AZ::EntityId m_entityId; - ILightSource* m_renderLight; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.cpp b/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.cpp index c478c22b43..18b9003e4f 100644 --- a/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.cpp +++ b/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.cpp @@ -262,119 +262,4 @@ namespace LmbrCentral extensions.push_back(CRY_GEOMETRY_FILE_EXT); } - GeomCacheAssetHandler::~GeomCacheAssetHandler() - { - Unregister(); - } - - AZ::Data::AssetPtr GeomCacheAssetHandler::CreateAsset([[maybe_unused]] const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) - { - (void)type; - - AZ_Assert(type == AZ::AzTypeInfo::Uuid(), "Invalid asset type! We handle only 'GeomCacheAsset'"); - - return aznew GeomCacheAsset(); - } - - void GeomCacheAssetHandler::GetCustomAssetStreamInfoForLoad(AZ::Data::AssetStreamInfo& streamInfo) - { - // The GeomCache system only takes in a file name for loading, not a memory buffer. - // If we set our stream data length to 0, the asset system will skip any file I/O for reading the data, and will instead - // go directly into the AssetHandler for processing. - streamInfo.m_dataLen = 0; - } - - AZ::Data::AssetHandler::LoadResult GeomCacheAssetHandler::LoadAssetData( - const AZ::Data::Asset& asset, - AZStd::shared_ptr stream, - const AZ::Data::AssetFilterCB& /*assetLoadFilterCB*/) - { - const char* assetPath = stream->GetFilename(); - - AZ_Assert(asset.GetType() == AZ::AzTypeInfo::Uuid(), "Invalid asset type! We only load 'GeomCacheAsset'"); - if (GeomCacheAsset* geomCacheAsset = asset.GetAs()) - { - AZ_Assert(!geomCacheAsset->m_geomCache.get(), "Attempting to create geom cache without cleaning up the old one."); - - // Strip the alias. GeomCache instances are stored in a dictionary by their path, - // so to share instances with legacy cry entities, we need to use the same un-aliased format. - StripAssetAlias(assetPath); - - //Load GeomCaches synchronously, there is no Async support currently in the 3DEngine. - //Assets can stream asynchronously but this load step must be synchronous. - - _smart_ptr geomCache = gEnv->p3DEngine->LoadGeomCache(assetPath); - - if (geomCache) - { - geomCache->SetProcessedByRenderNode(false); - geomCacheAsset->m_geomCache = geomCache; - } - else - { -#if defined(AZ_ENABLE_TRACING) - AZStd::string assetDescription = asset.ToString(); - AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetDescription, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetPathById, asset.GetId()); - AZ_Error("GeomCacheAssetHandler", false, "Failed to load geom cache asset %s", assetDescription.c_str()); -#endif // AZ_ENABLE_TRACING - } - - return AZ::Data::AssetHandler::LoadResult::LoadComplete; - } - return AZ::Data::AssetHandler::LoadResult::Error; - } - - void GeomCacheAssetHandler::DestroyAsset(AZ::Data::AssetPtr ptr) - { - delete ptr; - } - - void GeomCacheAssetHandler::GetHandledAssetTypes(AZStd::vector& assetTypes) - { - assetTypes.push_back(AZ::AzTypeInfo::Uuid()); - } - - void GeomCacheAssetHandler::Register() - { - AZ_Assert(AZ::Data::AssetManager::IsReady(), "Asset manager isn't ready!"); - AZ::Data::AssetManager::Instance().RegisterHandler(this, AZ::AzTypeInfo::Uuid()); - - AZ::AssetTypeInfoBus::Handler::BusConnect(AZ::AzTypeInfo::Uuid()); - } - - void GeomCacheAssetHandler::Unregister() - { - AZ::AssetTypeInfoBus::Handler::BusDisconnect(AZ::AzTypeInfo::Uuid()); - - if (AZ::Data::AssetManager::IsReady()) - { - AZ::Data::AssetManager::Instance().UnregisterHandler(this); - } - } - - AZ::Data::AssetType GeomCacheAssetHandler::GetAssetType() const - { - return AZ::AzTypeInfo::Uuid(); - } - - const char* GeomCacheAssetHandler::GetAssetTypeDisplayName() const - { - return "Geom Cache"; - } - - const char* GeomCacheAssetHandler::GetGroup() const - { - return "Geometry"; - } - - AZ::Uuid GeomCacheAssetHandler::GetComponentTypeId() const - { - return AZ::Uuid("{045C0C58-C13E-49B0-A471-D4AC5D3FC6BD}"); - } - - void GeomCacheAssetHandler::GetAssetTypeExtensions(AZStd::vector& extensions) - { - extensions.push_back(CRY_GEOM_CACHE_FILE_EXT); - } - } // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.h b/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.h index f0ccdf7410..00936316f5 100644 --- a/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.h +++ b/Gems/LmbrCentral/Code/Source/Rendering/MeshAssetHandler.h @@ -94,40 +94,4 @@ namespace LmbrCentral AZ::Data::AssetId m_missingMeshAssetId; }; - - /** - * Handler for Alembic Geometry Caches (cax) - */ - class GeomCacheAssetHandler - : public AZ::Data::AssetHandler - , public AZ::AssetTypeInfoBus::Handler - , private MeshAssetHandlerHelper - { - public: - - AZ_CLASS_ALLOCATOR(GeomCacheAssetHandler, AZ::SystemAllocator, 0); - - ~GeomCacheAssetHandler() override; - - // AZ::Data::AssetHandler - AZ::Data::AssetPtr CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) override; - void GetCustomAssetStreamInfoForLoad(AZ::Data::AssetStreamInfo& streamInfo) override; - AZ::Data::AssetHandler::LoadResult LoadAssetData( - const AZ::Data::Asset& asset, - AZStd::shared_ptr stream, - const AZ::Data::AssetFilterCB& assetLoadFilterCB) override; - void DestroyAsset(AZ::Data::AssetPtr ptr) override; - void GetHandledAssetTypes(AZStd::vector& assetTypes) override; - - // AZ::AssetTypeInfoBus::Handler - AZ::Data::AssetType GetAssetType() const override; - const char* GetAssetTypeDisplayName() const override; - const char* GetGroup() const override; - AZ::Uuid GetComponentTypeId() const override; - void GetAssetTypeExtensions(AZStd::vector& extensions) override; - - void Register(); - void Unregister(); - }; - } // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Source/Rendering/StereoRendererComponent.cpp b/Gems/LmbrCentral/Code/Source/Rendering/StereoRendererComponent.cpp deleted file mode 100644 index 44b78e5578..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/StereoRendererComponent.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" -#include -#include -#include - -#include "StereoRendererComponent.h" - - -namespace LmbrCentral -{ - void StereoRendererComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class() - ->Version(1); - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(context); - if (behaviorContext) - { - behaviorContext->EBus("StereoRendererRequestBus") - ->Event("IsRenderingToHMD", &AZ::StereoRendererRequestBus::Events::IsRenderingToHMD); - } - } -} diff --git a/Gems/LmbrCentral/Code/Source/Rendering/StereoRendererComponent.h b/Gems/LmbrCentral/Code/Source/Rendering/StereoRendererComponent.h deleted file mode 100644 index 262c3cc5da..0000000000 --- a/Gems/LmbrCentral/Code/Source/Rendering/StereoRendererComponent.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include - -/* -This class exposes functionality from the renderer to lua -*/ - -namespace LmbrCentral -{ - class StereoRendererComponent : - public AZ::Component - { - public: - AZ_COMPONENT(StereoRendererComponent, "{BBFE0965-5564-4739-8219-AFE8209A5E57}"); - - StereoRendererComponent() {}; - ~StereoRendererComponent() override {}; - - void Activate() override {}; - void Deactivate() override {}; - - static void Reflect(AZ::ReflectContext* context); - }; -} diff --git a/Gems/LmbrCentral/Code/Tests/EditorLensFlareComponentTests.cpp b/Gems/LmbrCentral/Code/Tests/EditorLensFlareComponentTests.cpp deleted file mode 100644 index 5c1fc214fa..0000000000 --- a/Gems/LmbrCentral/Code/Tests/EditorLensFlareComponentTests.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include "LmbrCentral_precompiled.h" -#include "Source/Rendering/EditorLensFlareComponent.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using ::testing::NiceMock; - -namespace UnitTest -{ - // Provides public access to protected/private members to allow for testing. - class Test_EditorLensFlareComponent : - public LmbrCentral::EditorLensFlareComponent - { - public: - AZ_COMPONENT(Test_EditorLensFlareComponent, "{2FB6C076-BB92-47A3-93C1-6ED7E622D7E0}", LmbrCentral::EditorLensFlareComponent); - - Test_EditorLensFlareComponent() : EditorLensFlareComponent() - { - - } - - ~Test_EditorLensFlareComponent() override - { - - } - - static void Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - - if (serializeContext) - { - serializeContext->Class()-> - Version(1); - } - } - - LmbrCentral::EditorLensFlareConfiguration Public_GetEditorLensFlareConfiguration() const - { - return GetEditorLensFlareConfiguration(); - } - }; - - class MockLensFlareHandlerAndCatalog - : public AZ::Data::AssetHandler - , public AZ::Data::AssetCatalog - { - public: - AZ_CLASS_ALLOCATOR(MockLensFlareHandlerAndCatalog, AZ::SystemAllocator, 0); - - AZ::Data::AssetPtr CreateAsset([[maybe_unused]] const AZ::Data::AssetId& id, const AZ::Data::AssetType& /*type*/) override - { - return aznew LmbrCentral::LensFlareAsset(); - } - - AZ::Data::AssetHandler::LoadResult LoadAssetData( - const AZ::Data::Asset& /*asset*/, - AZStd::shared_ptr /*stream*/, - const AZ::Data::AssetFilterCB& /*assetLoadFilterCB*/) override - { - return AZ::Data::AssetHandler::LoadResult::LoadComplete; - } - - void DestroyAsset(AZ::Data::AssetPtr ptr) override - { - delete ptr; - } - - void GetHandledAssetTypes(AZStd::vector& assetTypes) override - { - assetTypes.push_back(AZ::AzTypeInfo::Uuid()); - } - - AZ::Data::AssetStreamInfo GetStreamInfoForLoad(const AZ::Data::AssetId& assetId, const AZ::Data::AssetType& /*type*/) override - { - AZ::Data::AssetStreamInfo info; - // Set valid stream info. This ensures the asset load doesn't result in an - // error on another thread that can occur during shutdown. - info.m_streamName = AZStd::string::format("MockLensFlareHandlerAndCatalog%s", assetId.ToString().c_str()); - info.m_dataOffset = 0; - info.m_streamFlags = AZ::IO::OpenMode::ModeRead; - return info; - } - }; - - class EditorLensFlareComponentTests - : public ::testing::Test - , public UnitTest::TraceBusRedirector - , public AZ::Data::AssetBus::MultiHandler - { - protected: - ////////////////////////////////////////////////////////////////////////// - // AZ::Data::AssetBus::MultiHandler - - void OnAssetReady(AZ::Data::Asset asset) override - { - EXPECT_EQ(asset.GetId(), m_waitForAssetIdLoad); - m_waitForAssetIdLoad.SetInvalid(); - AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - } - - void OnAssetCanceled(AZ::Data::AssetId assetId) override - { - // With the right timing, it's possible for the asset to get canceled if the test ends - // before the load actually starts. Make sure that if this case happens, we still clear out - // the pending asset Id and disconnect from the bus. - EXPECT_EQ(assetId, m_waitForAssetIdLoad); - m_waitForAssetIdLoad.SetInvalid(); - AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - } - - void OnAssetError([[maybe_unused]] AZ::Data::Asset asset) override - { - // No asset errors should happen during this test. - EXPECT_TRUE(false); - } - - ////////////////////////////////////////////////////////////////////////// - void SetUp() override - { - m_app.Start(m_descriptor); - - // Mock up the File I/O system - m_priorFileIO = AZ::IO::FileIOBase::GetInstance(); - // for FileIO, you must set the instance to null before changing it. - // this is a way to tell the singleton system that you mean to replace a singleton and its - // not a mistake. - AZ::IO::FileIOBase::SetInstance(nullptr); - AZ::IO::FileIOBase::SetInstance(&m_fileIOMock); - AZ::IO::MockFileIOBase::InstallDefaultReturns(m_fileIOMock); - - AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); - - m_EditorLensFlareComponentDescriptor = LmbrCentral::EditorLensFlareComponent::CreateDescriptor(); - m_testEditorLensFlareComponentDescriptor = Test_EditorLensFlareComponent::CreateDescriptor(); - m_lensFlareComponentDescriptor = LmbrCentral::LensFlareComponent::CreateDescriptor(); - - m_testEditorLensFlareComponentDescriptor->Reflect(m_app.GetSerializeContext()); - m_lensFlareComponentDescriptor->Reflect(m_app.GetSerializeContext()); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - AZ::Data::AssetManager::Instance().RegisterHandler(&m_lensFlareHandlerAndCatalog, AZ::AzTypeInfo::Uuid()); - AZ::Data::AssetManager::Instance().RegisterCatalog(&m_lensFlareHandlerAndCatalog, AZ::AzTypeInfo::Uuid()); - - EXPECT_CALL(m_system, GetConfigSpec(::testing::_)) - .WillRepeatedly(::testing::Return(CONFIG_AUTO_SPEC)); - - // Setup Mocks on a stub environment - m_stubEnv.pConsole = &m_console; - m_stubEnv.pSystem = &m_system; - m_priorEnv = gEnv; - gEnv = &m_stubEnv; - } - void TearDown() override - { - gEnv = m_priorEnv; - - if (m_waitForAssetIdLoad.IsValid()) - { - const int assetLoadSleepMS = 20; - int totalWaitTimeMS = 5000; - while (m_waitForAssetIdLoad.IsValid() && totalWaitTimeMS > 0) - { - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(assetLoadSleepMS)); - AZ::SystemTickBus::Broadcast(&AZ::SystemTickBus::Events::OnSystemTick); - if (m_waitForAssetIdLoad.IsValid()) - { - totalWaitTimeMS -= assetLoadSleepMS; - } - } - EXPECT_GT(totalWaitTimeMS, 0); - EXPECT_FALSE(m_waitForAssetIdLoad.IsValid()); - AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - } - - AZ::Data::AssetManager::Instance().UnregisterHandler(&m_lensFlareHandlerAndCatalog); - AZ::Data::AssetManager::Instance().UnregisterCatalog(&m_lensFlareHandlerAndCatalog); - - m_EditorLensFlareComponentDescriptor->ReleaseDescriptor(); - m_testEditorLensFlareComponentDescriptor->ReleaseDescriptor(); - m_lensFlareComponentDescriptor->ReleaseDescriptor(); - - AZ::IO::FileIOBase::SetInstance(nullptr); - AZ::IO::FileIOBase::SetInstance(m_priorFileIO); - - m_app.Stop(); - - // Disconnect last, ToolsApplication::Stop() can result in messages that we are using - // TraceMessageBus to handle. - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - void SetupLensFlareEntity(AZ::Entity& entity) - { - entity.CreateComponent(); - entity.CreateComponent(); - - entity.Init(); - entity.Activate(); - } - - AzToolsFramework::ToolsApplication m_app; - AZ::ComponentApplication::Descriptor m_descriptor; - - MockLensFlareHandlerAndCatalog m_lensFlareHandlerAndCatalog; - - AZ::ComponentDescriptor* m_EditorLensFlareComponentDescriptor = nullptr; - AZ::ComponentDescriptor* m_testEditorLensFlareComponentDescriptor = nullptr; - AZ::ComponentDescriptor* m_lensFlareComponentDescriptor = nullptr; - - // If this is set to a valid asset ID, teardown won't finish until - // this asset has been loaded. If this takes too long, teardown will error out. - AZ::Data::AssetId m_waitForAssetIdLoad; - - SSystemGlobalEnvironment m_stubEnv; - NiceMock m_system; - NiceMock m_console; - SSystemGlobalEnvironment* m_priorEnv = nullptr; - AZ::IO::FileIOBase* m_priorFileIO = nullptr; - ::testing::NiceMock m_fileIOMock; - }; - - TEST_F(EditorLensFlareComponentTests, EditorLensFlareComponent_AddEditorLensFlareComponent_ComponentExists) - { - AZ::Entity entity; - SetupLensFlareEntity(entity); - - Test_EditorLensFlareComponent* lensFlareComponent = - entity.FindComponent(); - EXPECT_TRUE(lensFlareComponent != nullptr); - } - - TEST_F(EditorLensFlareComponentTests, EditorLensFlareComponent_SetAssetId_GetAssetIdMatchesSet) - { - AZ::Entity entity; - SetupLensFlareEntity(entity); - - // Use an arbitrary, non-default asset ID to verify the set & get work. - AZ::Data::AssetId assetIdToSet(AZ::Uuid("{377939BD-57BB-4476-B7B5-35A162B1335E}"), 5); - AZ::Data::AssetInfo assetInfo; - assetInfo.m_assetType = azrtti_typeid(); - assetInfo.m_assetId = assetIdToSet; - AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::RegisterAsset, assetIdToSet, assetInfo); - - // m_waitForAssetIdLoad is cleared when the asset load finishes, so keep a local copy of the asset ID. - m_waitForAssetIdLoad = assetIdToSet; - AZ::Data::AssetBus::MultiHandler::BusConnect(m_waitForAssetIdLoad); - - Test_EditorLensFlareComponent* lensFlareComponent = - entity.FindComponent(); - lensFlareComponent->SetPrimaryAsset(assetIdToSet); - - LmbrCentral::EditorLensFlareConfiguration lensFlareConfiguration = - lensFlareComponent->Public_GetEditorLensFlareConfiguration(); - EXPECT_EQ(lensFlareConfiguration.m_asset.GetId(), assetIdToSet); - } - - TEST_F(EditorLensFlareComponentTests, EditorLensFlareComponent_SetAssetIdBuildGameEntity_GameEntityHasAssetId) - { - AZ::Entity entity; - SetupLensFlareEntity(entity); - - // Use an arbitrary, non-default asset ID to verify the set & get work. - AZ::Data::AssetId assetIdToSet(AZ::Uuid("{BC7C7A76-C5F2-44E2-8E32-3CE03C3C5ADE}"), 6); - AZ::Data::AssetInfo assetInfo; - assetInfo.m_assetType = azrtti_typeid(); - assetInfo.m_assetId = assetIdToSet; - AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::RegisterAsset, assetIdToSet, assetInfo); - // m_waitForAssetIdLoad is cleared when the asset load finishes, so keep a local copy of the asset ID. - m_waitForAssetIdLoad = assetIdToSet; - AZ::Data::AssetBus::MultiHandler::BusConnect(m_waitForAssetIdLoad); - - Test_EditorLensFlareComponent* lensFlareComponent = - entity.FindComponent(); - lensFlareComponent->SetPrimaryAsset(assetIdToSet); - - AZ::Entity gameEntity; - lensFlareComponent->BuildGameEntity(&gameEntity); - LmbrCentral::LensFlareComponent* gameComponent = - gameEntity.FindComponent(); - EXPECT_TRUE(gameComponent != nullptr); - EXPECT_EQ(gameComponent->GetLensFlareConfiguration().m_asset.GetId(), assetIdToSet); - - } -} // namespace UnitTest diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GeomCacheComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GeomCacheComponentBus.h deleted file mode 100644 index 4418856e7e..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GeomCacheComponentBus.h +++ /dev/null @@ -1,366 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include - -#include - -namespace LmbrCentral -{ - //Forward decl - enum class StandinType : AZ::u32; - - class EditorGeometryCacheComponentRequests - : public AZ::ComponentBus - { - public: - // EBus Traits overrides (Configuring this EBus) - // Using Defaults - - virtual ~EditorGeometryCacheComponentRequests() {} - - /** - * Sets the minimum spec for the Geometry Cache - * - * The geom cache will not render when the current graphics spec is - * below this minimum spec. - */ - virtual void SetMinSpec(EngineSpec minSpec) = 0; - //! Gets the minimum spec for the Geom Cache - virtual EngineSpec GetMinSpec() = 0; - - /** - * Sets whether or not the Geom Cache's animation will play on start - * - * When set to true the Geometry Cache will play in the editor. In game - * mode the Geom Cache will begin playing immediately. - */ - virtual void SetPlayOnStart(bool playOnStart) = 0; - //! Gets whether or not the Geom Cache's animation will play on start - virtual bool GetPlayOnStart() = 0; - - /** - * Sets the max view distance that this Geom Cache will be visible from - * - * The actual max view distance is calculated from - * maxViewDistance * viewDistanceMultiplier. - */ - virtual void SetMaxViewDistance(float maxViewDistance) = 0; - /** - * Gets the max view distance that the Geom Cache will be visible from - * - * This is the max view distance without the view distance multiplier - */ - virtual float GetMaxViewDistance() = 0; - - /** - * Sets the view distance multiplier - * - * The view distance multiplier is multiplied into the max view distance - * to determine how far you can be from the Geom Cache before it stops - * being rendered. - * - * A value of 1.0 will leave the max view distance as the actual max view distance. - */ - virtual void SetViewDistanceMultiplier(float viewDistanceMultiplier) = 0; - //! Gets the view distance multiplier - virtual float GetViewDistanceMultiplier() = 0; - - /** - * Sets the LOD Distance Ratio - * - * The LOD Distance ratio affects how LODs are chosen. A lower value means - * less detailed LODs are used at shorter view distances. - */ - virtual void SetLODDistanceRatio(AZ::u32 lodDistanceRatio) = 0; - //! Gets the LOD Distance Ratio - virtual AZ::u32 GetLODDistanceRatio() = 0; - - //! Sets whether or not the Geometry Cache will cast shadows - virtual void SetCastShadows(bool castShadows) = 0; - //! Gets whether or not the Geometry Cache casts shadows - virtual bool GetCastShadows() = 0; - - //! Sets whether or not the Geometry Cache will be affected by VisAreas and Portals - virtual void SetUseVisAreas(bool useVisAreas) = 0; - //! Gets whether or not the Geometry Cache is affected by VisAreas and Portals - virtual bool GetUseVisAreas() = 0; - }; - - using EditorGeometryCacheComponentRequestBus = AZ::EBus; - - class GeometryCacheComponentRequests - : public AZ::ComponentBus - { - public: - // EBus Traits overrides (Configuring this EBus) - // Using Defaults - - virtual ~GeometryCacheComponentRequests() {} - - /** - * Begins Geometry Cache animation playback - * - * If the animation is already playing, this does nothing. - * This may be the case if PlayOnStart was set during edit mode. - */ - virtual void Play() = 0; - //! Pauses Geometry Cache animation playback - virtual void Pause() = 0; - /** - * Stops Geometry Cache animation playback - * - * This will reset the playback time to 0. This means - * that when Play is called again that the animation - * will start from StartTime. - */ - virtual void Stop() = 0; - - /** - * Gets how much time remains in the animation - * - * Returns -1.0 if the animation is paused or stopped. - * - * @return How much time in seconds is left in the animation - */ - virtual float GetTimeRemaining() = 0; - - /** - * Gets the type of the stand-in that's currently in use - * - * If no stand-in is in use this will return - * StandinType::None. - * - * @return The type of stand-in currently in use - */ - virtual StandinType GetCurrentStandinType() = 0; - - /** - * Sets the geom cache asset to be rendered - */ - virtual void SetGeomCacheAsset(const AZ::Data::AssetId& id) = 0; - - /** - * Gets the geom cache asset in use by this component - */ - virtual AZ::Data::Asset GetGeomCacheAsset() = 0; - - /** - * Sets whether or not the Geometry Cache will be processed for rendering - * - * If Visibility is turned off, all Stand-ins for this - * Geometry Cache will also be turned off. - * - * This does not mean that the Geometry Cache is visible in the current - * frame or the next frame. This just means that it will be - * submitted to the visibility system for rendering. It can still - * be culled. - * - * @param visible Pass True for the Geometry Cache to render - */ - virtual void SetVisible(bool visible) = 0; - /** - * Gets whether or not the Geometry Cache will be processed for rendering - * - * If this returns false then all related Stand-ins should also - * not be visible. - * - * @return True if the Geometry Cache should be rendered. - */ - virtual bool GetVisible() = 0; - - /** - * Sets whether or not the Geometry Cache animation should loop - * - * The Last Frame Stand-in will never be visible as long as this remains - * true. - * - * @param loop Pass true if you want the Geometry Cache animation to loop - */ - virtual void SetLoop(bool loop) = 0; - /** - * Gets whether or not the Geometry Cache animation is set to loop - * - * @return True if the Geometry Cache animation will loop - */ - virtual bool GetLoop() = 0; - - /** - * Sets the time point that the Geometry Cache animation should start at - * - * Changing the start time of the animation will restart the animation. - * - * @param startTime The starting time point in seconds. - */ - virtual void SetStartTime(float startTime) = 0; - /** - * Gets the current start time point for the Geometry Cache animation - * - * @return The Geometry Cache's animation start time in seconds. - */ - virtual float GetStartTime() = 0; - - /** - * Sets the distance threshold that controls Geometry Cache streaming - * - * When the distance between the center of the Geometry Cache and the - * current camera is greater than this value the Geometry Cache's animation - * will begin to stream into memory. - * - * @param streamInDistance The distance threshold for Geometry Cache streaming - */ - virtual void SetStreamInDistance(float streamInDistance) = 0; - /** - * Gets the distance threshold that controls when the Geometry Cache will stream to memory - * - * @return The distance threshold for Geometry Cache streaming - */ - virtual float GetStreamInDistance() = 0; - - /** - * Sets the entity to be used for the First Frame Stand-in - * - * It's assumed that the entityId points to an entity that has - * a MeshComponent attached. The stand-in is controlled by the - * visibility parameter of the MeshComponent. - * - * The given entity will not be transformed or moved at all. The - * only change that will be made to it will be when it's made - * visible/invisible as a stand-in. - * - * Invalid entity ids will be ignored. - * - * This stand-in will be used until the Geometry Cache animation - * starts playing. - * - * @param entityId The ID of the Entity to use as the First Frame Stand-in - */ - virtual void SetFirstFrameStandIn(AZ::EntityId entityId) = 0; - /** - * Gets the entity that is used as the First Frame Stand-in - * - * @return The entity with a mesh component that's used as the First Frame Stand-in - */ - virtual AZ::EntityId GetFirstFrameStandIn() = 0; - - /** - * Sets the entity to be used for the Last Frame Stand-in - * - * It's assumed that the entityId points to an entity that has - * a MeshComponent attached. The stand-in is controlled by the - * visibility parameter of the MeshComponent. - * - * The given entity will not be transformed or moved at all. The - * only change that will be made to it will be when it's made - * visible/invisible as a stand-in. - * - * Invalid entity ids will be ignored. - * - * This stand-in will never be used if the Loop parameter is set to true. - * - * @param entityId The ID of the Entity to use as the Last Frame Stand-in - */ - virtual void SetLastFrameStandIn(AZ::EntityId entityId) = 0; - /** - * Gets the entity that is used as the Last Frame Stand-in - * - * @return The entity with a mesh component that's used as the Last Frame Stand-in - */ - virtual AZ::EntityId GetLastFrameStandIn() = 0; - - /** - * Sets the entity to be used for the distance-based Stand-in - * - * It's assumed that the entityId points to an entity that has - * a MeshComponent attached. The stand-in is controlled by the - * visibility parameter of the MeshComponent. - * - * The given entity will not be transformed or moved at all. The - * only change that will be made to it will be when it's made - * visible/invisible as a stand-in. - * - * Invalid entity ids will be ignored. - * - * This Stand-in will be used as long as the distance between the - * Geometry Cache's center and the current camera's position is larger - * than the Stand-in Distance parameter. - * - * @param entityId The ID of the Entity to use as the distance-based Stand-in - */ - virtual void SetStandIn(AZ::EntityId entityId) = 0; - /** - * Gets the entity that is used as the distance-based Stand-in - * - * @return The entity with a mesh component that's used as the distance-based Stand-in - */ - virtual AZ::EntityId GetStandIn() = 0; - - /** - * Sets the distance threshold that controls the visibility of the stand-in - * - * The stand-in will be used when the distance between the center of the - * Geometry Cache and the current camera is greater than this value. - * - * @param standInDistance The distance threshold for the stand-in - */ - virtual void SetStandInDistance(float standInDistance) = 0; - /** - * Gets the distance threshold that controls the visibility of the stand-in - * - * @return The distance threshold for the stand-in - */ - virtual float GetStandInDistance() = 0; - - /** - * Gets the Geometry Cache's render node - * - * This method is only exposed to C++. - * - * @return A pointer to the geometry cache's internal render node - */ - virtual IGeomCacheRenderNode* GetGeomCacheRenderNode() = 0; - }; - - using GeometryCacheComponentRequestBus = AZ::EBus; - - class GeometryCacheComponentNotifications - : public AZ::EBusTraits - { - public: - // EBus Traits overrides (Configuring this EBus) - // Using Defaults - - virtual ~GeometryCacheComponentNotifications() {} - - //! Event that triggers when Geometry Cache playback starts - virtual void OnPlaybackStart() = 0; - //! Event that triggers when Geometry Cache playback pauses - virtual void OnPlaybackPause() = 0; - //! Event that triggers when Geometry Cache playback stops - virtual void OnPlaybackStop() = 0; - - /** - * Event that triggers when the Geometry Cache changes which stand-in is in use - * - * This does fire if a stand-in is turned off and the Geometry Cache becomes - * active instead. - * - * @param standinType The new stand-in type that will be used - */ - virtual void OnStandinChanged(StandinType standinType) = 0; - }; - - using GeometryCacheComponentNotificationBus = AZ::EBus; - -} //namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/HighQualityShadowComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/HighQualityShadowComponentBus.h deleted file mode 100644 index e738f9b0b2..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/HighQualityShadowComponentBus.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include - -namespace LmbrCentral -{ - /*! - * Messages serviced by the unique shadow component. - */ - class HighQualityShadowComponentRequests - : public AZ::ComponentBus - { - public: - - virtual void SetEnabled(bool enabled) = 0; - virtual bool GetEnabled() = 0; - }; - - using HighQualityShadowComponentRequestBus = AZ::EBus; - - /*! - * Messages serviced by the unique shadow editor component. - */ - class EditorHighQualityShadowComponentRequests - : public AZ::ComponentBus - { - public: - - virtual void RefreshProperties() = 0; - }; - - using EditorHighQualityShadowComponentRequestBus = AZ::EBus; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareComponentBus.h deleted file mode 100644 index 988e26831a..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareComponentBus.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -#pragma once - -#include - -namespace LmbrCentral -{ - /*! - * LensFlareComponentRequestsBus - * Messages serviced by the Lens Flare component. - */ - class LensFlareComponentRequests - : public AZ::ComponentBus - { - public: - enum class State - { - Off, - On, - }; - - virtual ~LensFlareComponentRequests() {} - - //! Control lens flare state. - virtual void SetLensFlareState(State state) { (void)state; } - - //! Turns lens flare on - virtual void TurnOnLensFlare() {} - - //! Turns lens flare off - virtual void TurnOffLensFlare() {} - - //! Toggles lens flare state. - virtual void ToggleLensFlare() {} - }; - - using LensFlareComponentRequestBus = AZ::EBus; - - - /*! - * LensFlareEditorRequestBus - * Editor/UI messages serviced by the Lens Flare component. - */ - class EditorLensFlareComponentRequests - : public AZ::ComponentBus - { - public: - virtual ~EditorLensFlareComponentRequests() {} - - //! Recreates the lens flare. - virtual void RefreshLensFlare() = 0; - }; - - using EditorLensFlareComponentRequestBus = AZ::EBus; - - /*! - * LensFlareComponentEventBus - * Events dispatched by the Lens Flare component. - */ - class LensFlareComponentNotifications - : public AZ::ComponentBus - { - public: - virtual ~LensFlareComponentNotifications() {} - - //! Lens flare has been turned on - virtual void LensFlareTurnedOn() {} - - //! Lens flare has been turned off - virtual void LensFlareTurnedOff() {} - }; - - using LensFlareComponentNotificationBus = AZ::EBus; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake index ab245a07f4..8d9e70478a 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake @@ -40,26 +40,8 @@ set(FILES Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderComponent.cpp Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.h Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp - Source/Rendering/EditorDecalComponent.h - Source/Rendering/EditorDecalComponent.cpp - Source/Rendering/EditorLensFlareComponent.h - Source/Rendering/EditorLensFlareComponent.cpp - Source/Rendering/EditorLightComponent.h - Source/Rendering/EditorLightComponent.cpp - Source/Rendering/EditorPointLightComponent.h - Source/Rendering/EditorPointLightComponent.cpp - Source/Rendering/EditorAreaLightComponent.h - Source/Rendering/EditorAreaLightComponent.cpp - Source/Rendering/EditorProjectorLightComponent.h - Source/Rendering/EditorProjectorLightComponent.cpp - Source/Rendering/EditorEnvProbeComponent.h - Source/Rendering/EditorEnvProbeComponent.cpp Source/Rendering/EditorMeshComponent.h Source/Rendering/EditorMeshComponent.cpp - Source/Rendering/EditorHighQualityShadowComponent.h - Source/Rendering/EditorHighQualityShadowComponent.cpp - Source/Rendering/EditorGeomCacheComponent.h - Source/Rendering/EditorGeomCacheComponent.cpp Source/Scripting/EditorLookAtComponent.h Source/Scripting/EditorLookAtComponent.cpp Source/Scripting/EditorRandomTimedSpawnerComponent.cpp diff --git a/Gems/LmbrCentral/Code/lmbrcentral_editor_tests_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_editor_tests_files.cmake index 648840c7c8..a96f0ac4ab 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_editor_tests_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_editor_tests_files.cmake @@ -14,7 +14,6 @@ set(FILES Tests/LmbrCentralReflectionTest.h Tests/LmbrCentralReflectionTest.cpp Tests/EditorBoxShapeComponentTests.cpp - Tests/EditorLensFlareComponentTests.cpp Tests/EditorSphereShapeComponentTests.cpp Tests/EditorCapsuleShapeComponentTests.cpp Tests/EditorCompoundShapeComponentTests.cpp diff --git a/Gems/LmbrCentral/Code/lmbrcentral_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_files.cmake index d0df6c7dd0..99d1adda14 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_files.cmake @@ -35,8 +35,6 @@ set(FILES include/LmbrCentral/Physics/ForceVolumeRequestBus.h include/LmbrCentral/Physics/WaterNotificationBus.h include/LmbrCentral/Rendering/DecalComponentBus.h - include/LmbrCentral/Rendering/LensFlareAsset.h - include/LmbrCentral/Rendering/LensFlareComponentBus.h include/LmbrCentral/Rendering/LightComponentBus.h include/LmbrCentral/Rendering/MaterialAsset.h include/LmbrCentral/Rendering/MaterialHandle.h @@ -45,8 +43,6 @@ set(FILES include/LmbrCentral/Rendering/MeshComponentBus.h include/LmbrCentral/Rendering/MeshModificationBus.h include/LmbrCentral/Rendering/RenderNodeBus.h - include/LmbrCentral/Rendering/HighQualityShadowComponentBus.h - include/LmbrCentral/Rendering/GeomCacheComponentBus.h include/LmbrCentral/Rendering/GiRegistrationBus.h include/LmbrCentral/Rendering/RenderBoundsBus.h include/LmbrCentral/Rendering/Utils/MaterialOwnerRequestBusHandlerImpl.h @@ -103,27 +99,11 @@ set(FILES Source/Events/ReflectScriptableEvents.cpp Source/Geometry/GeometrySystemComponent.h Source/Geometry/GeometrySystemComponent.cpp - Source/Rendering/DecalComponent.h - Source/Rendering/DecalComponent.cpp - Source/Rendering/LensFlareAssetHandler.h - Source/Rendering/LensFlareAssetHandler.cpp - Source/Rendering/LensFlareComponent.h - Source/Rendering/LensFlareComponent.cpp - Source/Rendering/LightComponent.h - Source/Rendering/LightComponent.cpp - Source/Rendering/LightInstance.h - Source/Rendering/LightInstance.cpp Source/Rendering/MaterialHandle.cpp Source/Rendering/MeshAssetHandler.h Source/Rendering/MeshAssetHandler.cpp Source/Rendering/MeshComponent.h Source/Rendering/MeshComponent.cpp - Source/Rendering/StereoRendererComponent.h - Source/Rendering/StereoRendererComponent.cpp - Source/Rendering/HighQualityShadowComponent.h - Source/Rendering/HighQualityShadowComponent.cpp - Source/Rendering/GeomCacheComponent.h - Source/Rendering/GeomCacheComponent.cpp Source/Rendering/EntityDebugDisplayComponent.h Source/Rendering/EntityDebugDisplayComponent.cpp Source/Scripting/LookAtComponent.h