diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp index 182cb84541..27c47b70c8 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp @@ -252,6 +252,20 @@ AZStd::vector TerrainSystem::GenerateInputPositionsFromRegion( return inPositions; } +AZStd::vector TerrainSystem::GenerateInputPositionsFromListOfVector2( + const AZStd::span& inPositionsVec2) const +{ + AZStd::vector inPositions; + inPositions.reserve(inPositionsVec2.size()); + + for (auto& pos : inPositionsVec2) + { + inPositions.emplace_back(AZ::Vector3(pos.GetX(), pos.GetY(), 0.0f)); + } + + return inPositions; +} + void TerrainSystem::MakeBulkQueries( const AZStd::span inPositions, AZStd::span outPositions, @@ -1043,14 +1057,9 @@ void TerrainSystem::ProcessHeightsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - surfacePoint.m_position.SetZ(GetHeightFromVector2(position, sampleFilter, &terrainExists)); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessHeightsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } void TerrainSystem::ProcessNormalsFromListOfVector2( @@ -1063,14 +1072,9 @@ void TerrainSystem::ProcessNormalsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - surfacePoint.m_normal = GetNormalFromVector2(position, sampleFilter, &terrainExists); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessNormalsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } void TerrainSystem::ProcessSurfaceWeightsFromListOfVector2( @@ -1083,14 +1087,9 @@ void TerrainSystem::ProcessSurfaceWeightsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - GetSurfaceWeightsFromVector2(position, surfacePoint.m_surfaceTags, sampleFilter, &terrainExists); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessSurfaceWeightsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } void TerrainSystem::ProcessSurfacePointsFromListOfVector2( @@ -1103,14 +1102,9 @@ void TerrainSystem::ProcessSurfacePointsFromListOfVector2( return; } - AzFramework::SurfaceData::SurfacePoint surfacePoint; - for (const auto& position : inPositions) - { - bool terrainExists = false; - surfacePoint.m_position.Set(position.GetX(), position.GetY(), 0.0f); - GetSurfacePointFromVector2(position, surfacePoint, sampleFilter, &terrainExists); - perPositionCallback(surfacePoint, terrainExists); - } + AZStd::vector inPositionsVec3 = GenerateInputPositionsFromListOfVector2(inPositions); + + ProcessSurfacePointsFromList(inPositionsVec3, perPositionCallback, sampleFilter); } AZStd::pair TerrainSystem::GetNumSamplesFromRegion( diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h index 502a89f711..cfc805fdce 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h @@ -321,6 +321,8 @@ namespace Terrain AZStd::vector GenerateInputPositionsFromRegion( const AZ::Aabb& inRegion, const AZ::Vector2& stepSize) const; + AZStd::vector GenerateInputPositionsFromListOfVector2( + const AZStd::span& inPositionsVec2) const; // AZ::TickBus::Handler overrides ... void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;