Fix calling OnParentChanged in Actor load

This commit is contained in:
Wojtek Figat
2021-02-02 12:52:21 +01:00
parent c00b32364a
commit d2dba5680b
6 changed files with 30 additions and 8 deletions

View File

@@ -948,11 +948,19 @@ void Actor::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
const auto parent = Scripting::FindObject<Actor>(parentId);
if (_parent != parent)
{
if (_parent)
_parent->Children.RemoveKeepOrder(this);
_parent = parent;
if (_parent)
_parent->Children.Add(this);
if (IsDuringPlay())
{
SetParent(parent, false, false);
}
else
{
if (_parent)
_parent->Children.RemoveKeepOrder(this);
_parent = parent;
if (_parent)
_parent->Children.Add(this);
OnParentChanged();
}
}
else if (!parent && parentId.IsValid())
{
@@ -1044,6 +1052,10 @@ void Actor::OnDisable()
}
}
void Actor::OnParentChanged()
{
}
void Actor::OnTransformChanged()
{
ASSERT_LOW_LAYER(!_localTransform.IsNanOrInfinity());

View File

@@ -918,9 +918,7 @@ public:
/// <summary>
/// Called when actor parent gets changed.
/// </summary>
virtual void OnParentChanged()
{
}
virtual void OnParentChanged();
/// <summary>
/// Called when actor transform gets changed.

View File

@@ -104,6 +104,9 @@ void BoneSocket::OnParentChanged()
{
// Base
Actor::OnParentChanged();
if (!IsDuringPlay())
return;
_index = -1;
UpdateTransformation();

View File

@@ -272,6 +272,9 @@ void BoxBrush::OnParentChanged()
{
// Base
Actor::OnParentChanged();
if (!IsDuringPlay())
return;
// Fire event
OnBrushModified();

View File

@@ -295,6 +295,9 @@ void Joint::OnParentChanged()
// Base
Actor::OnParentChanged();
if (!IsDuringPlay())
return;
// Check reparenting Joint case
const auto parent = dynamic_cast<IPhysicsActor*>(GetParent());
if (parent == nullptr)

View File

@@ -156,6 +156,9 @@ void UIControl::OnParentChanged()
// Base
Actor::OnParentChanged();
if (!IsDuringPlay())
return;
UICONTROL_INVOKE(ParentChanged);
}