74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from lnx.logicnode.lnx_nodes import *
 | |
| 
 | |
| 
 | |
| class OnEventNode(LnxLogicTreeNode):
 | |
|     """Activates the output when the given event is received.
 | |
| 
 | |
|     @seeNode Send Event to Object
 | |
|     @seeNode Send Global Event"""
 | |
|     bl_idname = 'LNOnEventNode'
 | |
|     bl_label = 'On Event'
 | |
|     lnx_version = 2
 | |
|     lnx_section = 'custom'
 | |
| 
 | |
|     operators = {
 | |
|         'init': 'Init',
 | |
|         'update': 'Update',
 | |
|         'custom': 'Custom'
 | |
|     }
 | |
| 
 | |
|     def set_mode(self, context):
 | |
|         if self.property1 != 'custom':
 | |
|             if len(self.inputs) > 1:
 | |
|                 self.inputs.remove(self.inputs[0])
 | |
|         else:
 | |
|             if len(self.inputs) < 2:
 | |
|                 self.add_input('LnxNodeSocketAction', 'In')
 | |
|                 self.inputs.move(1, 0)
 | |
| 
 | |
|     # Use a new property to preserve compatibility
 | |
|     property1: HaxeEnumProperty(
 | |
|         'property1',
 | |
|         items=[
 | |
|             ('init', 'Init', 'Assigns an Event listener at runtime'),
 | |
|             ('update', 'Update', 'Assigns an Event listener continuously'),
 | |
|             None,
 | |
|             ('custom', 'Custom', 'Assigns an Event listener everytime input is detected'),
 | |
|         ],
 | |
|         name='',
 | |
|         description='Chosen method for assigning an Event listener',
 | |
|         default='init',
 | |
|         update=set_mode
 | |
|     )
 | |
| 
 | |
|     def lnx_init(self, context):
 | |
|         self.add_input('LnxStringSocket', 'String In')
 | |
| 
 | |
|         self.add_output('LnxNodeSocketAction', 'Out')
 | |
| 
 | |
|         self.set_mode(context)
 | |
| 
 | |
|     def draw_buttons(self, context, layout):
 | |
|         layout.prop(self, 'property1', text='')
 | |
| 
 | |
|     def draw_label(self) -> str:
 | |
|         if self.inputs[0].is_linked:
 | |
|             return self.bl_label
 | |
|         return f'{self.bl_label}: {self.inputs[0].get_default_value()}'
 | |
| 
 | |
|     def get_replacement_node(self, node_tree: bpy.types.NodeTree):
 | |
|         if self.lnx_version not in (0, 1):
 | |
|             raise LookupError()
 | |
| 
 | |
|         newnode = node_tree.nodes.new('LNOnEventNode')
 | |
| 
 | |
|         try:
 | |
|             newnode.inputs[0].default_value_raw = self["property0"]
 | |
|         except:
 | |
|             pass
 | |
| 
 | |
|         for link in self.outputs[0].links:
 | |
|             node_tree.links.new(newnode.outputs[0], link.to_socket)
 | |
| 
 | |
|         return newnode
 |