Add recursive methods for layers

This commit is contained in:
Wiktor Kocielski
2023-08-04 09:59:45 +03:00
parent f29cd1b7b8
commit 7b44075ac8
2 changed files with 35 additions and 0 deletions

View File

@@ -456,6 +456,19 @@ void Actor::SetLayerName(const StringView& value)
LOG(Warning, "Unknown layer name '{0}'", value);
}
void Actor::SetLayerNameRecursive(const StringView& value)
{
for (int32 i = 0; i < 32; i++)
{
if (Level::Layers[i] == value)
{
SetLayerRecursive(i);
return;
}
}
LOG(Warning, "Unknown layer name '{0}'", value);
}
bool Actor::HasTag() const
{
return Tags.Count() != 0;
@@ -500,6 +513,17 @@ void Actor::SetLayer(int32 layerIndex)
OnLayerChanged();
}
void Actor::SetLayerRecursive(int32 layerIndex)
{
layerIndex = Math::Clamp(layerIndex, 0, 31);
for (const auto& child : Children)
child->SetLayerRecursive(layerIndex);
if (layerIndex == _layer)
return;
_layer = layerIndex;
OnLayerChanged();
}
void Actor::SetName(const StringView& value)
{
if (_name == value)

View File

@@ -102,6 +102,12 @@ public:
/// <param name="layerIndex">The index of the layer.</param>
API_PROPERTY() void SetLayer(int32 layerIndex);
/// <summary>
/// Sets the layer recursively for all underlying children.
/// </summary>
/// <param name="layerIndex">The index of the layer.</param>
API_FUNCTION() void SetLayerRecursive(int32 layerIndex);
/// <summary>
/// Gets the name of the layer.
/// </summary>
@@ -113,6 +119,11 @@ public:
/// </summary>
API_PROPERTY() void SetLayerName(const StringView& value);
/// <summary>
/// Sets the name of the layer recursively for all underlying children.
/// </summary>
API_FUNCTION() void SetLayerNameRecursive(const StringView& value);
/// <summary>
/// Determines whether this actor has any tag assigned.
/// </summary>