From f687b6a9a0ebc88003559fa57129b2ca8e922b7d Mon Sep 17 00:00:00 2001 From: Shauna Gordon Date: Mon, 4 Mar 2024 12:17:35 -0500 Subject: [PATCH 1/4] Make SurfacePointList a proper out This fixes the issue where SurfacePointList displayed as an input instead of an output on the ScriptCanvas node Signed-off-by: Shauna Gordon --- .../Source/SurfaceDataSystemComponent.cpp | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp index ae5ca20ac78c..c70e7d83cc4f 100644 --- a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp +++ b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp @@ -59,7 +59,23 @@ namespace SurfaceData ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) ->Attribute(AZ::Script::Attributes::Category, "Vegetation") ->Attribute(AZ::Script::Attributes::Module, "surface_data") - ->Event("GetSurfacePoints", &SurfaceDataSystemRequestBus::Events::GetSurfacePoints) + // ->Event("GetSurfacePoints", &SurfaceDataSystemRequestBus::Events::GetSurfacePoints) + ->Event( + "GetSurfacePoints", + [](SurfaceData::SurfaceDataSystem* handler, const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags) -> SurfaceData::SurfacePointList + { + SurfaceData::SurfacePointList result; + handler->GetSurfacePoints(inPosition, desiredTags, result); + return result; + }) + ->Event("GetFirstSurfacePoint", + [](SurfaceData::SurfaceDataSystem* handler, const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags) -> AzFramework::SurfaceData::SurfacePoint + { + SurfaceData::SurfacePointList surfacePointList; + handler->GetSurfacePoints(inPosition, desiredTags, surfacePointList); + + return surfacePointList.GetFirstSurfacePoint(); + }) ->Event("RefreshSurfaceData", &SurfaceDataSystemRequestBus::Events::RefreshSurfaceData) ->Event("GetSurfaceDataProviderHandle", &SurfaceDataSystemRequestBus::Events::GetSurfaceDataProviderHandle) ->Event("GetSurfaceDataModifierHandle", &SurfaceDataSystemRequestBus::Events::GetSurfaceDataModifierHandle) @@ -238,7 +254,7 @@ namespace SurfaceData auto entryItr = m_registeredSurfaceDataProviders.find(providerHandle); if (entryItr != m_registeredSurfaceDataProviders.end()) { - // Get the set of surface tags that can be affected by refreshing a surface data provider. + // Get the set of surface tags that can be affected by refreshing a surface data provider. // This includes all of the provider's tags, as well as any surface modifier tags that exist in the bounds, // because the affected surface points have the potential of getting the modifier tags applied as well. SurfaceTagSet affectedSurfaceTags = GetAffectedSurfaceTags(dirtyBounds, entryItr->second.m_tags); @@ -283,6 +299,12 @@ namespace SurfaceData AZStd::span(&inPosition, 1), AZ::Aabb::CreateFromPoint(inPosition), desiredTags, surfacePointList); } + void SurfaceDataSystemComponent::GetFirstSurfacePoint(const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags, SurfacePointList& surfacePointList) const + { + GetSurfacePointsFromListInternal( + AZStd::span(&inPosition, 1), AZ::Aabb::CreateFromPoint(inPosition), desiredTags, surfacePointList); + } + void SurfaceDataSystemComponent::GetSurfacePointsFromRegion(const AZ::Aabb& inRegion, const AZ::Vector2 stepSize, const SurfaceTagVector& desiredTags, SurfacePointList& surfacePointLists) const { From 2f55c83874605c856818b6b206f83a502d2486a2 Mon Sep 17 00:00:00 2001 From: Shauna Gordon Date: Wed, 13 Mar 2024 13:16:23 -0400 Subject: [PATCH 2/4] Remove unnecessary and vestigial stuff Signed-off-by: Shauna Gordon --- .../Code/Source/SurfaceDataSystemComponent.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp index c70e7d83cc4f..92518741395c 100644 --- a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp +++ b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp @@ -59,7 +59,6 @@ namespace SurfaceData ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) ->Attribute(AZ::Script::Attributes::Category, "Vegetation") ->Attribute(AZ::Script::Attributes::Module, "surface_data") - // ->Event("GetSurfacePoints", &SurfaceDataSystemRequestBus::Events::GetSurfacePoints) ->Event( "GetSurfacePoints", [](SurfaceData::SurfaceDataSystem* handler, const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags) -> SurfaceData::SurfacePointList @@ -68,14 +67,6 @@ namespace SurfaceData handler->GetSurfacePoints(inPosition, desiredTags, result); return result; }) - ->Event("GetFirstSurfacePoint", - [](SurfaceData::SurfaceDataSystem* handler, const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags) -> AzFramework::SurfaceData::SurfacePoint - { - SurfaceData::SurfacePointList surfacePointList; - handler->GetSurfacePoints(inPosition, desiredTags, surfacePointList); - - return surfacePointList.GetFirstSurfacePoint(); - }) ->Event("RefreshSurfaceData", &SurfaceDataSystemRequestBus::Events::RefreshSurfaceData) ->Event("GetSurfaceDataProviderHandle", &SurfaceDataSystemRequestBus::Events::GetSurfaceDataProviderHandle) ->Event("GetSurfaceDataModifierHandle", &SurfaceDataSystemRequestBus::Events::GetSurfaceDataModifierHandle) @@ -299,11 +290,6 @@ namespace SurfaceData AZStd::span(&inPosition, 1), AZ::Aabb::CreateFromPoint(inPosition), desiredTags, surfacePointList); } - void SurfaceDataSystemComponent::GetFirstSurfacePoint(const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags, SurfacePointList& surfacePointList) const - { - GetSurfacePointsFromListInternal( - AZStd::span(&inPosition, 1), AZ::Aabb::CreateFromPoint(inPosition), desiredTags, surfacePointList); - } void SurfaceDataSystemComponent::GetSurfacePointsFromRegion(const AZ::Aabb& inRegion, const AZ::Vector2 stepSize, const SurfaceTagVector& desiredTags, SurfacePointList& surfacePointLists) const From fb472f5c5db215cfe2a80ba96ae36b99a03faf58 Mon Sep 17 00:00:00 2001 From: Shauna Gordon Date: Thu, 14 Mar 2024 11:47:38 -0400 Subject: [PATCH 3/4] Remove extraneous whitespace Signed-off-by: Shauna Gordon --- Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp index 92518741395c..fb75650e1edf 100644 --- a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp +++ b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp @@ -290,7 +290,6 @@ namespace SurfaceData AZStd::span(&inPosition, 1), AZ::Aabb::CreateFromPoint(inPosition), desiredTags, surfacePointList); } - void SurfaceDataSystemComponent::GetSurfacePointsFromRegion(const AZ::Aabb& inRegion, const AZ::Vector2 stepSize, const SurfaceTagVector& desiredTags, SurfacePointList& surfacePointLists) const { From e668ff1efda2ccbdb5c218c3ade6436afca153e1 Mon Sep 17 00:00:00 2001 From: Shauna Gordon Date: Wed, 20 Mar 2024 13:52:22 -0400 Subject: [PATCH 4/4] Rework GetSurfacePoints to return an actual list of SurfacePoints Signed-off-by: Shauna Gordon --- .../Source/SurfaceDataSystemComponent.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp index fb75650e1edf..52158910b37c 100644 --- a/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp +++ b/Gems/SurfaceData/Code/Source/SurfaceDataSystemComponent.cpp @@ -61,10 +61,23 @@ namespace SurfaceData ->Attribute(AZ::Script::Attributes::Module, "surface_data") ->Event( "GetSurfacePoints", - [](SurfaceData::SurfaceDataSystem* handler, const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags) -> SurfaceData::SurfacePointList + [](SurfaceData::SurfaceDataSystem* handler, const AZ::Vector3& inPosition, const SurfaceTagVector& desiredTags) -> AZStd::vector { - SurfaceData::SurfacePointList result; - handler->GetSurfacePoints(inPosition, desiredTags, result); + AZStd::vector result; + SurfaceData::SurfacePointList surfacePointList; + handler->GetSurfacePoints(inPosition, desiredTags, surfacePointList); + surfacePointList.EnumeratePoints( + [&result]( + [[maybe_unused]] size_t inPositionIndex, const AZ::Vector3& position, const AZ::Vector3& normal, const SurfaceData::SurfaceTagWeights& masks)-> bool + { + AzFramework::SurfaceData::SurfacePoint point; + point.m_position = position; + point.m_normal = normal; + point.m_surfaceTags = masks.GetSurfaceTagWeightList(); + + result.emplace_back(point); + return true; + }); return result; }) ->Event("RefreshSurfaceData", &SurfaceDataSystemRequestBus::Events::RefreshSurfaceData)