Fix crash on scripting reload when using Anim Graph with custom nodes
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user