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)
|
// 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
|
// 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
|
#if USE_EDITOR
|
||||||
Scripting::ScriptsReloading.Bind<AnimGraph, &AnimGraph::OnScriptsReloading>(this);
|
Scripting::ScriptsReloading.Bind<AnimGraph, &AnimGraph::OnScriptsReloading>(this);
|
||||||
Scripting::ScriptsReloaded.Bind<AnimGraph, &AnimGraph::OnScriptsReloaded>(this);
|
Scripting::ScriptsReloaded.Bind<AnimGraph, &AnimGraph::OnScriptsReloaded>(this);
|
||||||
@@ -131,6 +132,19 @@ bool AnimGraph::Load(ReadStream* stream, bool loadMeta)
|
|||||||
return false;
|
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)
|
bool AnimGraph::onParamCreated(Parameter* p)
|
||||||
{
|
{
|
||||||
if (p->Identifier == ANIM_GRAPH_PARAM_BASE_MODEL_ID)
|
if (p->Identifier == ANIM_GRAPH_PARAM_BASE_MODEL_ID)
|
||||||
|
|||||||
@@ -733,7 +733,7 @@ private:
|
|||||||
|
|
||||||
typedef void (*InitBucketHandler)(AnimGraphInstanceData::Bucket&);
|
typedef void (*InitBucketHandler)(AnimGraphInstanceData::Bucket&);
|
||||||
|
|
||||||
bool _isFunction;
|
bool _isFunction, _isRegisteredForScriptingEvents;
|
||||||
int32 _bucketsCounter;
|
int32 _bucketsCounter;
|
||||||
Array<InitBucketHandler> _bucketInitializerList;
|
Array<InitBucketHandler> _bucketInitializerList;
|
||||||
Array<Node*> _customNodes;
|
Array<Node*> _customNodes;
|
||||||
@@ -751,9 +751,12 @@ public:
|
|||||||
, _isFunction(isFunction)
|
, _isFunction(isFunction)
|
||||||
, _bucketInitializerList(64)
|
, _bucketInitializerList(64)
|
||||||
, _owner(owner)
|
, _owner(owner)
|
||||||
|
, _isRegisteredForScriptingEvents(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~AnimGraph();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user