@ -103,6 +103,7 @@ class PlasmaResponderNode(PlasmaVersionedNode, bpy.types.Node):
self . states = [ ]
self . states = [ ]
self . parent = respNode
self . parent = respNode
self . responder = respMod
self . responder = respMod
self . has_pfm = respNode . find_output ( " keyref " ) is not None
def convert_states ( self , exporter , so ) :
def convert_states ( self , exporter , so ) :
# This could implicitly export more states...
# This could implicitly export more states...
@ -269,6 +270,21 @@ class PlasmaResponderStateNode(PlasmaNodeBase, bpy.types.Node):
self . _generate_command ( exporter , so , stateMgr . responder , commands , i )
self . _generate_command ( exporter , so , stateMgr . responder , commands , i )
commands . save ( state )
commands . save ( state )
# If the responder is linked to a PythonFile node, we need to automatically generate
# the callback message command node...
# YES! This SHOULD indeed be below the command manager save :)
if stateMgr . has_pfm :
pfmNotify = plNotifyMsg ( )
pfmNotify . BCastFlags | = plMessage . kLocalPropagate
pfmNotify . sender = stateMgr . responder . key
pfmNotify . state = 1.0
pfmNotify . addEvent ( proCallbackEventData ( ) )
# This command needs to send at the end of the state, so after all waits
# have elapsed. Since waits are serial, we can just take the highest.
lastWait = len ( commands . waits ) - 1 if commands . waits else - 1
state . addCommand ( pfmNotify , lastWait )
def _generate_command ( self , exporter , so , responder , commandMgr , msgNode , waitOn = - 1 ) :
def _generate_command ( self , exporter , so , responder , commandMgr , msgNode , waitOn = - 1 ) :
def prepare_message ( exporter , so , responder , commandMgr , waitOn , msg ) :
def prepare_message ( exporter , so , responder , commandMgr , waitOn , msg ) :
idx , command = commandMgr . add_command ( self , waitOn )
idx , command = commandMgr . add_command ( self , waitOn )
@ -290,8 +306,7 @@ class PlasmaResponderStateNode(PlasmaNodeBase, bpy.types.Node):
msg = msgNode . convert_message ( exporter , so )
msg = msgNode . convert_message ( exporter , so )
idx , command = prepare_message ( exporter , so , responder , commandMgr , waitOn , msg )
idx , command = prepare_message ( exporter , so , responder , commandMgr , waitOn , msg )
# If the callback message node is not properly set up for event callbacks, we don't want to
if msgNode . has_callbacks :
if msgNode . has_callbacks and msgNode . find_output ( " msgs " ) :
childWaitOn = commandMgr . add_wait ( idx )
childWaitOn = commandMgr . add_wait ( idx )
msgNode . convert_callback_message ( exporter , so , msg , responder . key , childWaitOn )
msgNode . convert_callback_message ( exporter , so , msg , responder . key , childWaitOn )
else :
else :