forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
58
leenkx/blender/lnx/logicnode/math/LN_bitwise_math.py
Normal file
58
leenkx/blender/lnx/logicnode/math/LN_bitwise_math.py
Normal file
@ -0,0 +1,58 @@
|
||||
from lnx.logicnode.lnx_nodes import *
|
||||
|
||||
|
||||
class BitwiseMathNode(LnxLogicTreeNode):
|
||||
"""Perform bitwise math on integer values."""
|
||||
bl_idname = 'LNBitwiseMathNode'
|
||||
bl_label = 'Bitwise Math'
|
||||
lnx_version = 1
|
||||
|
||||
operators = {
|
||||
'negation': '~',
|
||||
'and': '&',
|
||||
'or': '|',
|
||||
'xor': '^',
|
||||
'left_shift': '<<',
|
||||
'right_shift': '>>',
|
||||
'unsigned_right_shift': '>>>'
|
||||
}
|
||||
|
||||
def set_mode(self, context):
|
||||
if self.property0 == 'negation':
|
||||
self.inputs[0].name = 'Operand'
|
||||
self.inputs.remove(self.inputs[1])
|
||||
else:
|
||||
self.inputs[0].name = 'Operand 1'
|
||||
if len(self.inputs) < 2:
|
||||
self.add_input('LnxIntSocket', 'Operand 2')
|
||||
|
||||
property0: HaxeEnumProperty(
|
||||
'property0',
|
||||
items=[
|
||||
('negation', 'Negation (~)', 'Performs bitwise negation on the input, so a 0-bit becomes a 1-bit and vice versa'),
|
||||
None,
|
||||
('and', 'And (&)', 'A bit in the result is 1 if both bits at the same digit in the operands are 1, else it is 0'),
|
||||
('or', 'Or (|)', 'A bit in the result is 1 if at least one bit at the same digit in the operands is 1, else it is 0'),
|
||||
('xor', 'Xor (^)', 'A bit in the result is 1 if exactly one bit at the same digit in the operands is 1, else it is 0'),
|
||||
None,
|
||||
('left_shift', 'Left Shift (<<)', 'Shifts the bits of operand 1 to the left by the amount of operand 2. The result is undefined if operand 2 is negative'),
|
||||
('right_shift', 'Right Shift (>>)', 'Shifts the bits of operand 1 to the right by the amount of operand 2 and keeps the sign of operand 1 (the most significant bit does not change). The result is undefined if operand 2 is negative'),
|
||||
('unsigned_right_shift', 'Unsigned Right Shift (>>>)', 'Shifts the bits of operand 1 to the right by the amount of operand 2, and the most significant bit is set to 0. The result is undefined if operand 2 is negative'),
|
||||
],
|
||||
name='Operation',
|
||||
description='The operation to perform on the input(s)',
|
||||
default='negation',
|
||||
update=set_mode
|
||||
)
|
||||
|
||||
def lnx_init(self, context):
|
||||
self.add_input('LnxIntSocket', 'Operand 1')
|
||||
self.add_output('LnxIntSocket', 'Result')
|
||||
|
||||
self.set_mode(context)
|
||||
|
||||
def draw_buttons(self, context, layout):
|
||||
layout.prop(self, 'property0', text='')
|
||||
|
||||
def draw_label(self) -> str:
|
||||
return f'{self.bl_label}: {self.operators[self.property0]}'
|
Reference in New Issue
Block a user