forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from lnx.logicnode.lnx_nodes import *
 | |
| 
 | |
| 
 | |
| class MouseLookNode(LnxLogicTreeNode):
 | |
|     """Controls object rotation based on mouse movement for FPS-style camera control.
 | |
|     
 | |
|     Features:
 | |
|     - Sub-pixel interpolation (always enabled) for optimal precision and smooth low-sensitivity movement
 | |
|     - Resolution-adaptive scaling for consistent feel across different screen resolutions
 | |
|     """
 | |
|     bl_idname = 'LNMouseLookNode'
 | |
|     bl_label = 'Mouse Look'
 | |
|     lnx_section = 'mouse'
 | |
|     lnx_version = 1
 | |
| 
 | |
|     # Front axis property
 | |
|     property0: HaxeEnumProperty(
 | |
|         'property0',
 | |
|         items=[('X', 'X Axis', 'X Axis as front'),
 | |
|                ('Y', 'Y Axis', 'Y Axis as front'),
 | |
|                ('Z', 'Z Axis', 'Z Axis as front')],
 | |
|         name='Front', default='Y')
 | |
|     
 | |
|     # Hide Locked property
 | |
|     property1: HaxeBoolProperty(
 | |
|         'property1',
 | |
|         name='Hide Locked',
 | |
|         description='Automatically center and lock the mouse cursor',
 | |
|         default=True)
 | |
|     
 | |
|     # Invert X property
 | |
|     property2: HaxeBoolProperty(
 | |
|         'property2',
 | |
|         name='Invert X',
 | |
|         description='Invert horizontal mouse movement',
 | |
|         default=False)
 | |
|     
 | |
|     # Invert Y property  
 | |
|     property3: HaxeBoolProperty(
 | |
|         'property3',
 | |
|         name='Invert Y',
 | |
|         description='Invert vertical mouse movement',
 | |
|         default=False)
 | |
|     
 | |
|     # Cap Left/Right property
 | |
|     property4: HaxeBoolProperty(
 | |
|         'property4',
 | |
|         name='Cap Left / Right',
 | |
|         description='Limit horizontal rotation',
 | |
|         default=False)
 | |
|     
 | |
|     # Cap Up/Down property
 | |
|     property5: HaxeBoolProperty(
 | |
|         'property5',
 | |
|         name='Cap Up / Down',
 | |
|         description='Limit vertical rotation',
 | |
|         default=True)
 | |
| 
 | |
|     # Strategy toggles
 | |
|     property6: HaxeBoolProperty(
 | |
|         'property6',
 | |
|         name='Resolution Adaptive',
 | |
|         description='Scale sensitivity based on screen resolution',
 | |
|         default=False)
 | |
|     
 | |
| 
 | |
|     
 | |
| 
 | |
| 
 | |
|     def lnx_init(self, context):
 | |
|         self.add_input('LnxNodeSocketAction', 'In')
 | |
|         self.add_input('LnxNodeSocketObject', 'Body')
 | |
|         self.add_input('LnxNodeSocketObject', 'Head')
 | |
|         self.add_input('LnxFloatSocket', 'Sensitivity', default_value=0.5)
 | |
|         self.add_input('LnxFloatSocket', 'Smoothing', default_value=0.0)
 | |
| 
 | |
|         self.add_output('LnxNodeSocketAction', 'Out')
 | |
| 
 | |
|     def draw_buttons(self, context, layout):
 | |
|         layout.prop(self, 'property0', text='Front')
 | |
|         layout.prop(self, 'property1', text='Hide Locked')
 | |
|         
 | |
|         # Invert XY section
 | |
|         col = layout.column(align=True)
 | |
|         col.label(text="Invert XY:")
 | |
|         row = col.row(align=True)
 | |
|         row.prop(self, 'property2', text='X', toggle=True)
 | |
|         row.prop(self, 'property3', text='Y', toggle=True)
 | |
|         
 | |
|         # Cap rotations section
 | |
|         col = layout.column(align=True)
 | |
|         col.prop(self, 'property4', text='Cap Left / Right')
 | |
|         col.prop(self, 'property5', text='Cap Up / Down')
 | |
|         
 | |
|         # Separator
 | |
|         layout.separator()
 | |
|         
 | |
|         # Enhancement strategies section
 | |
|         col = layout.column(align=True)
 | |
|         col.label(text="Enhancement Strategies:")
 | |
|         col.prop(self, 'property6', text='Resolution Adaptive')  |