Fix crash on scripting reload when using Anim Graph with custom nodes

This commit is contained in:
Wojtek Figat
2021-01-03 23:18:53 +01:00
parent c1a83662d9
commit 786f057971
2 changed files with 19 additions and 2 deletions

View File

@@ -119,8 +119,9 @@ bool AnimGraph::Load(ReadStream* stream, bool loadMeta)
// Register for scripts reloading events (only if using any custom nodes)
// Handle load event always because anim graph asset may be loaded before game scripts
if (_customNodes.HasItems())
if (_customNodes.HasItems() && !_isRegisteredForScriptingEvents)
{
_isRegisteredForScriptingEvents = true;
#if USE_EDITOR
Scripting::ScriptsReloading.Bind<AnimGraph, &AnimGraph::OnScriptsReloading>(this);
Scripting::ScriptsReloaded.Bind<AnimGraph, &AnimGraph::OnScriptsReloaded>(this);
@@ -131,6 +132,19 @@ bool AnimGraph::Load(ReadStream* stream, bool loadMeta)
return false;
}
AnimGraph::~AnimGraph()
{
// Unregister for scripts reloading events (only if using any custom nodes)
if (_isRegisteredForScriptingEvents)
{
#if USE_EDITOR
Scripting::ScriptsReloading.Unbind<AnimGraph, &AnimGraph::OnScriptsReloading>(this);
Scripting::ScriptsReloaded.Unbind<AnimGraph, &AnimGraph::OnScriptsReloaded>(this);
#endif
Scripting::ScriptsLoaded.Unbind<AnimGraph, &AnimGraph::OnScriptsLoaded>(this);
}
}
bool AnimGraph::onParamCreated(Parameter* p)
{
if (p->Identifier == ANIM_GRAPH_PARAM_BASE_MODEL_ID)

View File

@@ -733,7 +733,7 @@ private:
typedef void (*InitBucketHandler)(AnimGraphInstanceData::Bucket&);
bool _isFunction;
bool _isFunction, _isRegisteredForScriptingEvents;
int32 _bucketsCounter;
Array<InitBucketHandler> _bucketInitializerList;
Array<Node*> _customNodes;
@@ -751,9 +751,12 @@ public:
, _isFunction(isFunction)
, _bucketInitializerList(64)
, _owner(owner)
, _isRegisteredForScriptingEvents(false)
{
}
~AnimGraph();
public:
/// <summary>