LYN-8403 Prevent the same Surface Tag from getting reused
Signed-off-by: Sergey Pereslavtsev <pereslav@amazon.com>
This commit is contained in:
@@ -21,4 +21,38 @@ namespace Terrain
|
||||
typename BaseClassType::WrappedConfigType, 1>
|
||||
);
|
||||
}
|
||||
|
||||
void EditorTerrainPhysicsColliderComponent::Activate()
|
||||
{
|
||||
UpdateConfigurationTagProvider();
|
||||
BaseClassType::Activate();
|
||||
}
|
||||
|
||||
AZStd::unordered_set<AZ::u32> EditorTerrainPhysicsColliderComponent::GetSurfaceTagsInUse() const
|
||||
{
|
||||
AZStd::unordered_set<AZ::u32> tagsInUse;
|
||||
|
||||
for (const TerrainPhysicsSurfaceMaterialMapping& mapping : m_configuration.m_surfaceMaterialMappings)
|
||||
{
|
||||
AZ::u32 crc = mapping.m_surfaceTag;
|
||||
tagsInUse.insert(crc);
|
||||
}
|
||||
|
||||
return AZStd::move(tagsInUse);
|
||||
}
|
||||
|
||||
AZ::u32 EditorTerrainPhysicsColliderComponent::ConfigurationChanged()
|
||||
{
|
||||
UpdateConfigurationTagProvider();
|
||||
return BaseClassType::ConfigurationChanged();
|
||||
}
|
||||
|
||||
void EditorTerrainPhysicsColliderComponent::UpdateConfigurationTagProvider()
|
||||
{
|
||||
for (TerrainPhysicsSurfaceMaterialMapping& mapping : m_configuration.m_surfaceMaterialMappings)
|
||||
{
|
||||
mapping.SetTagListProvider(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,22 +11,34 @@
|
||||
#include <Components/TerrainPhysicsColliderComponent.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorComponentBase.h>
|
||||
#include <LmbrCentral/Component/EditorWrappedComponentBase.h>
|
||||
#include <EditorSelectableTagListProvider.h>
|
||||
|
||||
namespace Terrain
|
||||
{
|
||||
class EditorTerrainPhysicsColliderComponent
|
||||
: public LmbrCentral::EditorWrappedComponentBase<TerrainPhysicsColliderComponent, TerrainPhysicsColliderConfig>
|
||||
, public EditorSelectableTagListProvider
|
||||
{
|
||||
public:
|
||||
using BaseClassType = LmbrCentral::EditorWrappedComponentBase<TerrainPhysicsColliderComponent, TerrainPhysicsColliderConfig>;
|
||||
AZ_EDITOR_COMPONENT(EditorTerrainPhysicsColliderComponent, "{C43FAB8F-3968-46A6-920E-E84AEDED3DF5}", BaseClassType);
|
||||
static void Reflect(AZ::ReflectContext* context);
|
||||
|
||||
// AZ::Component interface implementation
|
||||
void Activate() override;
|
||||
|
||||
static constexpr auto s_categoryName = "Terrain";
|
||||
static constexpr auto s_componentName = "Terrain Physics Heightfield Collider";
|
||||
static constexpr auto s_componentDescription = "Provides terrain data to a physics collider in the form of a heightfield and surface->material mapping.";
|
||||
static constexpr auto s_icon = "Editor/Icons/Components/TerrainPhysicsCollider.svg";
|
||||
static constexpr auto s_viewportIcon = "Editor/Icons/Components/Viewport/TerrainPhysicsCollider.svg";
|
||||
static constexpr auto s_helpUrl = "";
|
||||
|
||||
private:
|
||||
// EditorSelectableTagListProvider interface implementation
|
||||
AZStd::unordered_set<AZ::u32> GetSurfaceTagsInUse() const override;
|
||||
|
||||
AZ::u32 ConfigurationChanged() override;
|
||||
void UpdateConfigurationTagProvider();
|
||||
};
|
||||
}
|
||||
|
||||
+33
@@ -20,4 +20,37 @@ namespace Terrain
|
||||
typename BaseClassType::WrappedConfigType, 1>
|
||||
);
|
||||
}
|
||||
|
||||
void EditorTerrainSurfaceGradientListComponent::Activate()
|
||||
{
|
||||
UpdateConfigurationTagProvider();
|
||||
BaseClassType::Activate();
|
||||
}
|
||||
|
||||
AZ::u32 EditorTerrainSurfaceGradientListComponent::ConfigurationChanged()
|
||||
{
|
||||
UpdateConfigurationTagProvider();
|
||||
return BaseClassType::ConfigurationChanged();
|
||||
}
|
||||
|
||||
void EditorTerrainSurfaceGradientListComponent::UpdateConfigurationTagProvider()
|
||||
{
|
||||
for (TerrainSurfaceGradientMapping& mapping : m_configuration.m_gradientSurfaceMappings)
|
||||
{
|
||||
mapping.SetTagListProvider(this);
|
||||
}
|
||||
}
|
||||
|
||||
AZStd::unordered_set<AZ::u32> EditorTerrainSurfaceGradientListComponent::GetSurfaceTagsInUse() const
|
||||
{
|
||||
AZStd::unordered_set<AZ::u32> tagsInUse;
|
||||
|
||||
for (const TerrainSurfaceGradientMapping& mapping : m_configuration.m_gradientSurfaceMappings)
|
||||
{
|
||||
AZ::u32 crc = mapping.m_surfaceTag;
|
||||
tagsInUse.insert(crc);
|
||||
}
|
||||
|
||||
return AZStd::move(tagsInUse);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,22 +11,34 @@
|
||||
#include <Components/TerrainSurfaceGradientListComponent.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorComponentBase.h>
|
||||
#include <LmbrCentral/Component/EditorWrappedComponentBase.h>
|
||||
#include <EditorSelectableTagListProvider.h>
|
||||
|
||||
namespace Terrain
|
||||
{
|
||||
class EditorTerrainSurfaceGradientListComponent
|
||||
: public LmbrCentral::EditorWrappedComponentBase<TerrainSurfaceGradientListComponent, TerrainSurfaceGradientListConfig>
|
||||
, public EditorSelectableTagListProvider
|
||||
{
|
||||
public:
|
||||
using BaseClassType = LmbrCentral::EditorWrappedComponentBase<TerrainSurfaceGradientListComponent, TerrainSurfaceGradientListConfig>;
|
||||
AZ_EDITOR_COMPONENT(EditorTerrainSurfaceGradientListComponent, "{49831E91-A11F-4EFF-A824-6D85C284B934}", BaseClassType);
|
||||
static void Reflect(AZ::ReflectContext* context);
|
||||
|
||||
// AZ::Component interface implementation
|
||||
void Activate() override;
|
||||
|
||||
static constexpr const char* const s_categoryName = "Terrain";
|
||||
static constexpr const char* const s_componentName = "Terrain Surface Gradient List";
|
||||
static constexpr const char* const s_componentDescription = "Provides a mapping between gradients and surface tags for use by the terrain system.";
|
||||
static constexpr const char* const s_icon = "Editor/Icons/Components/TerrainSurfaceGradientList.svg";
|
||||
static constexpr const char* const s_viewportIcon = "Editor/Icons/Components/Viewport/TerrainSurfaceGradientList.svg";
|
||||
static constexpr const char* const s_helpUrl = "https://o3de.org/docs/user-guide/components/reference/terrain/surface-gradient-list/";
|
||||
|
||||
private:
|
||||
// EditorSelectableTagListProvider interface implementation
|
||||
AZStd::unordered_set<AZ::u32> GetSurfaceTagsInUse() const override;
|
||||
|
||||
AZ::u32 ConfigurationChanged() override;
|
||||
void UpdateConfigurationTagProvider();
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user