I'm writing a custom node and noticed that overridden OnDelete method is not called when I delete the node. So I tracked down and found out that "node.OnDelete();" in IssueOnDeleteNode method is written inside in Callback Receivers loop.
public static void IssueOnDeleteNode (Node node)
{
if (OnDeleteNode != null)
OnDeleteNode.Invoke (node);
for (int cnt = 0; cnt < receiverCount; cnt++)
{
if (callbackReceiver [cnt] == null)
callbackReceiver.RemoveAt (cnt--);
else
{
callbackReceiver [cnt].OnDeleteNode (node);
node.OnDelete (); // WRONG LINE
}
}
}
This way node's OnDelete called for every Callback Receiver, which results it does not even called if there is no Callback Receiver or called more than once if there are multiple Callback Receivers.
I'm a newcomer and I don't exactly know if this was written intentionally. So please correct me if I'm wrong. I guess the code should be something like:
public static void IssueOnDeleteNode (Node node)
{
if (OnDeleteNode != null)
OnDeleteNode.Invoke (node);
for (int cnt = 0; cnt < receiverCount; cnt++)
{
if (callbackReceiver [cnt] == null)
callbackReceiver.RemoveAt (cnt--);
else
{
callbackReceiver [cnt].OnDeleteNode (node);
}
}
node.OnDelete(); // CORRECTED LINE
}
I'm writing a custom node and noticed that overridden OnDelete method is not called when I delete the node. So I tracked down and found out that "node.OnDelete();" in IssueOnDeleteNode method is written inside in Callback Receivers loop.
This way node's OnDelete called for every Callback Receiver, which results it does not even called if there is no Callback Receiver or called more than once if there are multiple Callback Receivers.
I'm a newcomer and I don't exactly know if this was written intentionally. So please correct me if I'm wrong. I guess the code should be something like: