Use custom sockets for default data types

This allows to listen for socket updates for the live patch system
This commit is contained in:
Moritz Brückner 2021-07-10 21:46:44 +02:00
parent a6ec652d5f
commit 96aa0ee890
284 changed files with 1122 additions and 834 deletions

View file

@ -12,6 +12,6 @@ class BlendActionNode(ArmLogicTreeNode):
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('ArmNodeSocketAnimAction', 'Action 1')
self.add_input('ArmNodeSocketAnimAction', 'Action 2')
self.add_input('NodeSocketFloat', 'Factor', default_value = 0.5)
self.add_input('ArmFloatSocket', 'Factor', default_value = 0.5)
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -11,7 +11,7 @@ class BoneFKNode(ArmLogicTreeNode):
super(BoneFKNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketString', 'Bone')
self.add_input('NodeSocketShader', 'Transform')
self.add_input('ArmStringSocket', 'Bone')
self.add_input('ArmDynamicSocket', 'Transform')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -11,7 +11,7 @@ class BoneIKNode(ArmLogicTreeNode):
super(BoneIKNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketString', 'Bone')
self.add_input('NodeSocketVector', 'Goal')
self.add_input('ArmStringSocket', 'Bone')
self.add_input('ArmVectorSocket', 'Goal')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -10,6 +10,6 @@ class AnimationStateNode(ArmLogicTreeNode):
super(AnimationStateNode, self).init(context)
self.add_input('ArmNodeSocketObject', 'Object')
self.add_output('NodeSocketString', 'Action')
self.add_output('NodeSocketInt', 'Frame')
self.add_output('NodeSocketBool', 'Is Paused')
self.add_output('ArmStringSocket', 'Action')
self.add_output('ArmIntSocket', 'Frame')
self.add_output('ArmBoolSocket', 'Is Paused')

View file

@ -11,6 +11,6 @@ class GetTilesheetStateNode(ArmLogicTreeNode):
super(GetTilesheetStateNode, self).init(context)
self.add_input('ArmNodeSocketObject', 'Object')
self.add_output('NodeSocketString', 'Name')
self.add_output('NodeSocketInt', 'Frame')
self.add_output('NodeSocketBool', 'Is Paused')
self.add_output('ArmStringSocket', 'Name')
self.add_output('ArmIntSocket', 'Frame')
self.add_output('ArmBoolSocket', 'Is Paused')

View file

@ -9,6 +9,6 @@ class OnActionMarkerNode(ArmLogicTreeNode):
def init(self, context):
super(OnActionMarkerNode, self).init(context)
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketString', 'Marker')
self.add_input('ArmStringSocket', 'Marker')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -11,10 +11,10 @@ class PlayActionFromNode(ArmLogicTreeNode):
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('ArmNodeSocketAnimAction', 'Action')
self.add_input('NodeSocketInt', 'Start Frame')
self.add_input('NodeSocketFloat', 'Blend', default_value = 0.25)
self.add_input('NodeSocketFloat', 'Speed', default_value = 1.0)
self.add_input('NodeSocketBool', 'Loop', default_value = False)
self.add_input('ArmIntSocket', 'Start Frame')
self.add_input('ArmFloatSocket', 'Blend', default_value = 0.25)
self.add_input('ArmFloatSocket', 'Speed', default_value = 1.0)
self.add_input('ArmBoolSocket', 'Loop', default_value = False)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('ArmNodeSocketAction', 'Done')

View file

@ -11,7 +11,7 @@ class PlayTilesheetNode(ArmLogicTreeNode):
super(PlayTilesheetNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketString', 'Name')
self.add_input('ArmStringSocket', 'Name')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('ArmNodeSocketAction', 'Done')

View file

@ -10,6 +10,6 @@ class SetActionPausedNode(ArmLogicTreeNode):
super(SetActionPausedNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketBool', 'Paused')
self.add_input('ArmBoolSocket', 'Paused')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -10,6 +10,6 @@ class SetActionSpeedNode(ArmLogicTreeNode):
super(SetActionSpeedNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketFloat', 'Speed', default_value=1.0)
self.add_input('ArmFloatSocket', 'Speed', default_value=1.0)
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -12,6 +12,6 @@ class SetParentBoneNode(ArmLogicTreeNode):
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('ArmNodeSocketObject', 'Parent', default_value='Parent')
self.add_input('NodeSocketString', 'Bone', default_value='Bone')
self.add_input('ArmStringSocket', 'Bone', default_value='Bone')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -10,6 +10,6 @@ class SetParticleSpeedNode(ArmLogicTreeNode):
super(SetParticleSpeedNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketFloat', 'Speed', default_value=1.0)
self.add_input('ArmFloatSocket', 'Speed', default_value=1.0)
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -11,6 +11,6 @@ class SetTilesheetPausedNode(ArmLogicTreeNode):
super(SetTilesheetPausedNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketBool', 'Paused')
self.add_input('ArmBoolSocket', 'Paused')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -61,6 +61,9 @@ class ArmLogicTreeNode(bpy.types.Node):
"""
arm.live_patch.send_event('ln_update_prop', (self, prop_name))
def on_socket_val_update(self, context: bpy.types.Context, socket: bpy.types.NodeSocket):
pass
def insert_link(self, link: bpy.types.NodeLink):
"""Called on *both* nodes when a link between two nodes is created."""
arm.live_patch.send_event('ln_insert_link', (self, link))
@ -132,7 +135,7 @@ class ArmNodeAddInputButton(bpy.types.Operator):
bl_options = {'UNDO', 'INTERNAL'}
node_index: StringProperty(name='Node Index', default='')
socket_type: StringProperty(name='Socket Type', default='NodeSocketShader')
socket_type: StringProperty(name='Socket Type', default='ArmDynamicSocket')
name_format: StringProperty(name='Name Format', default='Input {0}')
index_name_offset: IntProperty(name='Index Name Offset', default=0)
@ -143,7 +146,7 @@ class ArmNodeAddInputButton(bpy.types.Operator):
# Reset to default again for subsequent calls of this operator
self.node_index = ''
self.socket_type = 'NodeSocketShader'
self.socket_type = 'ArmDynamicSocket'
self.name_format = 'Input {0}'
self.index_name_offset = 0
@ -155,7 +158,7 @@ class ArmNodeAddInputValueButton(bpy.types.Operator):
bl_label = 'Add Input'
bl_options = {'UNDO', 'INTERNAL'}
node_index: StringProperty(name='Node Index', default='')
socket_type: StringProperty(name='Socket Type', default='NodeSocketShader')
socket_type: StringProperty(name='Socket Type', default='ArmDynamicSocket')
def execute(self, context):
global array_nodes
@ -202,7 +205,7 @@ class ArmNodeAddOutputButton(bpy.types.Operator):
bl_options = {'UNDO', 'INTERNAL'}
node_index: StringProperty(name='Node Index', default='')
socket_type: StringProperty(name='Socket Type', default='NodeSocketShader')
socket_type: StringProperty(name='Socket Type', default='ArmDynamicSocket')
name_format: StringProperty(name='Name Format', default='Output {0}')
index_name_offset: IntProperty(name='Index Name Offset', default=0)
@ -213,7 +216,7 @@ class ArmNodeAddOutputButton(bpy.types.Operator):
# Reset to default again for subsequent calls of this operator
self.node_index = ''
self.socket_type = 'NodeSocketShader'
self.socket_type = 'ArmDynamicSocket'
self.name_format = 'Output {0}'
self.index_name_offset = 0
@ -242,8 +245,8 @@ class ArmNodeAddInputOutputButton(bpy.types.Operator):
bl_options = {'UNDO', 'INTERNAL'}
node_index: StringProperty(name='Node Index', default='')
in_socket_type: StringProperty(name='In Socket Type', default='NodeSocketShader')
out_socket_type: StringProperty(name='Out Socket Type', default='NodeSocketShader')
in_socket_type: StringProperty(name='In Socket Type', default='ArmDynamicSocket')
out_socket_type: StringProperty(name='Out Socket Type', default='ArmDynamicSocket')
in_name_format: StringProperty(name='In Name Format', default='Input {0}')
out_name_format: StringProperty(name='Out Name Format', default='Output {0}')
in_index_name_offset: IntProperty(name='Index Name Offset', default=0)
@ -258,8 +261,8 @@ class ArmNodeAddInputOutputButton(bpy.types.Operator):
# Reset to default again for subsequent calls of this operator
self.node_index = ''
self.in_socket_type = 'NodeSocketShader'
self.out_socket_type = 'NodeSocketShader'
self.in_socket_type = 'ArmDynamicSocket'
self.out_socket_type = 'ArmDynamicSocket'
self.in_name_format = 'Input {0}'
self.out_name_format = 'Output {0}'
self.in_index_name_offset = 0

View file

@ -1,10 +1,14 @@
import bpy
from bpy.props import PointerProperty
from bpy.props import *
from bpy.types import NodeSocket
import arm.utils
def _on_update_socket(self, context):
self.node.on_socket_val_update(context, self)
class ArmCustomSocket(NodeSocket):
"""
A custom socket that can be used to define more socket types for
@ -41,7 +45,7 @@ class ArmAnimActionSocket(ArmCustomSocket):
arm_socket_type = 'STRING'
default_value_get: PointerProperty(name='Action', type=bpy.types.Action) # legacy version of the line after this one
default_value_raw: PointerProperty(name='Action', type=bpy.types.Action)
default_value_raw: PointerProperty(name='Action', type=bpy.types.Action, update=_on_update_socket)
def __init__(self):
super().__init__()
@ -81,13 +85,114 @@ class ArmArraySocket(ArmCustomSocket):
return 0.8, 0.4, 0.0, 1
class ArmBoolSocket(ArmCustomSocket):
bl_idname = 'ArmBoolSocket'
bl_label = 'Boolean Socket'
arm_socket_type = 'BOOLEAN'
default_value_raw: BoolProperty(
name='Value',
description='Input value used for unconnected socket',
update=_on_update_socket
)
def draw(self, context, layout, node, text):
draw_socket_layout(self, layout)
def draw_color(self, context, node):
return 0.8, 0.651, 0.839, 1
def get_default_value(self):
return self.default_value_raw
class ArmColorSocket(ArmCustomSocket):
bl_idname = 'ArmColorSocket'
bl_label = 'Color Socket'
arm_socket_type = 'RGBA'
default_value_raw: FloatVectorProperty(
name='Value',
size=4,
subtype='COLOR',
min=0.0,
max=1.0,
description='Input value used for unconnected socket',
update=_on_update_socket
)
def draw(self, context, layout, node, text):
draw_socket_layout(self, layout)
def draw_color(self, context, node):
return 0.78, 0.78, 0.161, 1
def get_default_value(self):
return self.default_value_raw
class ArmDynamicSocket(ArmCustomSocket):
bl_idname = 'ArmDynamicSocket'
bl_label = 'Dynamic Socket'
arm_socket_type = 'NONE'
def draw(self, context, layout, node, text):
layout.label(text=self.name)
def draw_color(self, context, node):
return 0.388, 0.78, 0.388, 1
class ArmFloatSocket(ArmCustomSocket):
bl_idname = 'ArmFloatSocket'
bl_label = 'Float Socket'
arm_socket_type = 'VALUE'
default_value_raw: FloatProperty(
name='Value',
description='Input value used for unconnected socket',
precision=3,
update=_on_update_socket
)
def draw(self, context, layout, node, text):
draw_socket_layout(self, layout)
def draw_color(self, context, node):
return 0.631, 0.631, 0.631, 1
def get_default_value(self):
return self.default_value_raw
class ArmIntSocket(ArmCustomSocket):
bl_idname = 'ArmIntSocket'
bl_label = 'Integer Socket'
arm_socket_type = 'INT'
default_value_raw: IntProperty(
name='Value',
description='Input value used for unconnected socket',
update=_on_update_socket
)
def draw(self, context, layout, node, text):
draw_socket_layout(self, layout)
def draw_color(self, context, node):
return 0.059, 0.522, 0.149, 1
def get_default_value(self):
return self.default_value_raw
class ArmObjectSocket(ArmCustomSocket):
bl_idname = 'ArmNodeSocketObject'
bl_label = 'Object Socket'
arm_socket_type = 'OBJECT'
default_value_get: PointerProperty(name='Object', type=bpy.types.Object) # legacy version of the line after this one
default_value_raw: PointerProperty(name='Object', type=bpy.types.Object)
default_value_raw: PointerProperty(name='Object', type=bpy.types.Object, update=_on_update_socket)
def __init__(self):
super().__init__()
@ -115,15 +220,82 @@ class ArmObjectSocket(ArmCustomSocket):
return 0.15, 0.55, 0.75, 1
def register():
bpy.utils.register_class(ArmActionSocket)
bpy.utils.register_class(ArmAnimActionSocket)
bpy.utils.register_class(ArmArraySocket)
bpy.utils.register_class(ArmObjectSocket)
class ArmStringSocket(ArmCustomSocket):
bl_idname = 'ArmStringSocket'
bl_label = 'String Socket'
arm_socket_type = 'STRING'
default_value_raw: StringProperty(
name='Value',
description='Input value used for unconnected socket',
update=_on_update_socket
)
def draw(self, context, layout, node, text):
draw_socket_layout_split(self, layout)
def draw_color(self, context, node):
return 0.439, 0.698, 1, 1
def get_default_value(self):
return self.default_value_raw
def unregister():
bpy.utils.unregister_class(ArmObjectSocket)
bpy.utils.unregister_class(ArmArraySocket)
bpy.utils.unregister_class(ArmAnimActionSocket)
bpy.utils.unregister_class(ArmActionSocket)
class ArmVectorSocket(ArmCustomSocket):
bl_idname = 'ArmVectorSocket'
bl_label = 'Vector Socket'
arm_socket_type = 'VECTOR'
default_value_raw: FloatVectorProperty(
name='Value',
size=3,
description='Input value used for unconnected socket',
update=_on_update_socket
)
def draw(self, context, layout, node, text):
if not self.is_output and not self.is_linked:
col = layout.column(align=True)
col.prop(self, 'default_value_raw', text='')
else:
layout.label(text=self.name)
def draw_color(self, context, node):
return 0.388, 0.388, 0.78, 1
def get_default_value(self):
return self.default_value_raw
def draw_socket_layout(socket: bpy.types.NodeSocket, layout: bpy.types.UILayout, prop_name='default_value_raw'):
if not socket.is_output and not socket.is_linked:
layout.prop(socket, prop_name, text=socket.name)
else:
layout.label(text=socket.name)
def draw_socket_layout_split(socket: bpy.types.NodeSocket, layout: bpy.types.UILayout, prop_name='default_value_raw'):
if not socket.is_output and not socket.is_linked:
# Blender layouts use 0.4 splits
layout = layout.split(factor=0.4, align=True)
layout.label(text=socket.name)
if not socket.is_output and not socket.is_linked:
layout.prop(socket, prop_name, text='')
REG_CLASSES = (
ArmActionSocket,
ArmAnimActionSocket,
ArmArraySocket,
ArmBoolSocket,
ArmColorSocket,
ArmDynamicSocket,
ArmFloatSocket,
ArmIntSocket,
ArmObjectSocket,
ArmStringSocket,
ArmVectorSocket,
)
register, unregister = bpy.utils.register_classes_factory(REG_CLASSES)

View file

@ -13,14 +13,14 @@ class ArrayNode(ArmLogicTreeNode):
def init(self, context):
super(ArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketShader'
op.socket_type = 'ArmDynamicSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -19,9 +19,9 @@ class ArrayAddNode(ArmLogicTreeNode):
super(ArrayAddNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketBool', 'Modify Original', default_value=True)
self.add_input('NodeSocketBool', 'Unique Values')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmBoolSocket', 'Modify Original', default_value=True)
self.add_input('ArmBoolSocket', 'Unique Values')
self.add_input('ArmDynamicSocket', 'Value')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('ArmNodeSocketArray', 'Array')
@ -31,6 +31,6 @@ class ArrayAddNode(ArmLogicTreeNode):
op = row.operator('arm.node_add_input_value', text='Add Input', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketShader'
op.socket_type = 'ArmDynamicSocket'
op2 = row.operator('arm.node_remove_input_value', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -14,14 +14,14 @@ class BooleanArrayNode(ArmLogicTreeNode):
def init(self, context):
super(BooleanArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketBool'
op.socket_type = 'ArmBoolSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -14,14 +14,14 @@ class ColorArrayNode(ArmLogicTreeNode):
def init(self, context):
super(ColorArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketColor'
op.socket_type = 'ArmColorSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -9,6 +9,6 @@ class ArrayContainsNode(ArmLogicTreeNode):
def init(self, context):
super(ArrayContainsNode, self).init(context)
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmDynamicSocket', 'Value')
self.add_output('NodeSocketBool', 'Contains')
self.add_output('ArmBoolSocket', 'Contains')

View file

@ -14,14 +14,14 @@ class FloatArrayNode(ArmLogicTreeNode):
def init(self, context):
super(FloatArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketFloat'
op.socket_type = 'ArmFloatSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -9,6 +9,6 @@ class ArrayGetNode(ArmLogicTreeNode):
def init(self, context):
super(ArrayGetNode, self).init(context)
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketInt', 'Index')
self.add_input('ArmIntSocket', 'Index')
self.add_output('NodeSocketShader', 'Value')
self.add_output('ArmDynamicSocket', 'Value')

View file

@ -14,14 +14,14 @@ class IntegerArrayNode(ArmLogicTreeNode):
def init(self, context):
super(IntegerArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array')
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketInt'
op.socket_type = 'ArmIntSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -10,4 +10,4 @@ class ArrayLengthNode(ArmLogicTreeNode):
super(ArrayLengthNode, self).init(context)
self.add_input('ArmNodeSocketArray', 'Array')
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')

View file

@ -13,6 +13,6 @@ class ArrayLoopNode(ArmLogicTreeNode):
self.add_input('ArmNodeSocketArray', 'Array')
self.add_output('ArmNodeSocketAction', 'Loop')
self.add_output('NodeSocketShader', 'Value')
self.add_output('NodeSocketInt', 'Index')
self.add_output('ArmDynamicSocket', 'Value')
self.add_output('ArmIntSocket', 'Index')
self.add_output('ArmNodeSocketAction', 'Done')

View file

@ -14,7 +14,7 @@ class ObjectArrayNode(ArmLogicTreeNode):
def init(self, context):
super(ObjectArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)

View file

@ -12,4 +12,4 @@ class ArrayPopNode(ArmLogicTreeNode):
super(ArrayPopNode, self).init(context)
self.add_input('ArmNodeSocketArray', 'Array')
self.add_output('NodeSocketShader', 'Value')
self.add_output('ArmDynamicSocket', 'Value')

View file

@ -12,7 +12,7 @@ class ArrayRemoveIndexNode(ArmLogicTreeNode):
super(ArrayRemoveIndexNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketInt', 'Index')
self.add_input('ArmIntSocket', 'Index')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketShader', 'Value')
self.add_output('ArmDynamicSocket', 'Value')

View file

@ -15,16 +15,16 @@ class ArrayRemoveValueNode(ArmLogicTreeNode):
super(ArrayRemoveValueNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmDynamicSocket', 'Value')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketShader', 'Value')
self.add_output('ArmDynamicSocket', 'Value')
# def draw_buttons(self, context, layout):
# row = layout.row(align=True)
# op = row.operator('arm.node_add_input_value', text='New', icon='PLUS', emboss=True)
# op.node_index = str(id(self))
# op.socket_type = 'NodeSocketShader'
# op.socket_type = 'ArmDynamicSocket'
# op2 = row.operator('arm.node_remove_input_value', text='', icon='X', emboss=True)
# op2.node_index = str(id(self))

View file

@ -10,7 +10,7 @@ class ArraySetNode(ArmLogicTreeNode):
super(ArraySetNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketInt', 'Index')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmIntSocket', 'Index')
self.add_input('ArmDynamicSocket', 'Value')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -12,4 +12,4 @@ class ArrayShiftNode(ArmLogicTreeNode):
super(ArrayShiftNode, self).init(context)
self.add_input('ArmNodeSocketArray', 'Array')
self.add_output('NodeSocketShader', 'Value')
self.add_output('ArmDynamicSocket', 'Value')

View file

@ -11,7 +11,7 @@ class ArraySliceNode(ArmLogicTreeNode):
def init(self, context):
super(ArraySliceNode, self).init(context)
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketInt', 'Index')
self.add_input('NodeSocketInt', 'End')
self.add_input('ArmIntSocket', 'Index')
self.add_input('ArmIntSocket', 'End')
self.add_output('ArmNodeSocketArray', 'Array')

View file

@ -12,7 +12,7 @@ class ArraySpliceNode(ArmLogicTreeNode):
super(ArraySpliceNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketArray', 'Array')
self.add_input('NodeSocketInt', 'Index')
self.add_input('NodeSocketInt', 'Length')
self.add_input('ArmIntSocket', 'Index')
self.add_input('ArmIntSocket', 'Length')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -14,14 +14,14 @@ class StringArrayNode(ArmLogicTreeNode):
def init(self, context):
super(StringArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketString'
op.socket_type = 'ArmStringSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -14,14 +14,14 @@ class VectorArrayNode(ArmLogicTreeNode):
def init(self, context):
super(VectorArrayNode, self).init(context)
self.add_output('ArmNodeSocketArray', 'Array', is_var=True)
self.add_output('NodeSocketInt', 'Length')
self.add_output('ArmIntSocket', 'Length')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketVector'
op.socket_type = 'ArmVectorSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -12,4 +12,4 @@ class GetCameraFovNode(ArmLogicTreeNode):
super(GetCameraFovNode, self).init(context)
self.add_input('ArmNodeSocketObject', 'Object')
self.add_output('NodeSocketFloat', 'FOV')
self.add_output('ArmFloatSocket', 'FOV')

View file

@ -12,6 +12,6 @@ class SetCameraFovNode(ArmLogicTreeNode):
super(SetCameraFovNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Camera')
self.add_input('NodeSocketFloat', 'FOV', default_value=0.9)
self.add_input('ArmFloatSocket', 'FOV', default_value=0.9)
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -8,6 +8,6 @@ class CanvasGetCheckboxNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetCheckboxNode, self).init(context)
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('NodeSocketBool', 'Is Checked')
self.add_output('ArmBoolSocket', 'Is Checked')

View file

@ -8,6 +8,6 @@ class CanvasGetInputTextNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetInputTextNode, self).init(context)
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('NodeSocketString', 'Text')
self.add_output('ArmStringSocket', 'Text')

View file

@ -9,8 +9,8 @@ class CanvasGetLocationNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetLocationNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketInt', 'X')
self.add_output('NodeSocketInt', 'Y')
self.add_output('ArmIntSocket', 'X')
self.add_output('ArmIntSocket', 'Y')

View file

@ -8,6 +8,6 @@ class CanvasGetPositionNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetPositionNode, self).init(context)
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('NodeSocketInt', 'Position')
self.add_output('ArmIntSocket', 'Position')

View file

@ -9,8 +9,8 @@ class CanvasGetPBNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetPBNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketInt', 'At')
self.add_output('NodeSocketInt', 'Max')
self.add_output('ArmIntSocket', 'At')
self.add_output('ArmIntSocket', 'Max')

View file

@ -9,7 +9,7 @@ class CanvasGetRotationNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetRotationNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketFloat', 'Rad')
self.add_output('ArmFloatSocket', 'Rad')

View file

@ -9,8 +9,8 @@ class CanvasGetScaleNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetScaleNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketInt', 'Height')
self.add_output('NodeSocketInt', 'Width')
self.add_output('ArmIntSocket', 'Height')
self.add_output('ArmIntSocket', 'Width')

View file

@ -8,6 +8,6 @@ class CanvasGetSliderNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetSliderNode, self).init(context)
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('NodeSocketFloat', 'Float')
self.add_output('ArmFloatSocket', 'Float')

View file

@ -11,6 +11,6 @@ class CanvasGetVisibleNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasGetVisibleNode, self).init(context)
self.inputs.new('NodeSocketString', 'Element')
self.inputs.new('ArmStringSocket', 'Element')
self.outputs.new('NodeSocketBool', 'Is Visible')
self.outputs.new('ArmBoolSocket', 'Is Visible')

View file

@ -26,7 +26,7 @@ class OnCanvasElementNode(ArmLogicTreeNode):
def init(self, context):
super(OnCanvasElementNode, self).init(context)
self.add_input('NodeSocketString', 'Element')
self.add_input('ArmStringSocket', 'Element')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,7 +9,7 @@ class CanvasSetAssetNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetAssetNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketString', 'Asset')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmStringSocket', 'Asset')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,7 +9,7 @@ class CanvasSetCheckBoxNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetCheckBoxNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketBool', 'Check')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmBoolSocket', 'Check')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,8 +9,8 @@ class CanvasSetLocationNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetLocationNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketFloat', 'X')
self.add_input('NodeSocketFloat', 'Y')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmFloatSocket', 'X')
self.add_input('ArmFloatSocket', 'Y')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,8 +9,8 @@ class CanvasSetPBNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetPBNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketInt', 'At')
self.add_input('NodeSocketInt', 'Max')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmIntSocket', 'At')
self.add_input('ArmIntSocket', 'Max')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,7 +9,7 @@ class CanvasSetRotationNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetRotationNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketFloat', 'Rad')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmFloatSocket', 'Rad')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,8 +9,8 @@ class CanvasSetScaleNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetScaleNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketInt', 'Height')
self.add_input('NodeSocketInt', 'Width')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmIntSocket', 'Height')
self.add_input('ArmIntSocket', 'Width')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,7 +9,7 @@ class CanvasSetSliderNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetSliderNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketFloat', 'Float')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmFloatSocket', 'Float')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,7 +9,7 @@ class CanvasSetTextNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetTextNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketString', 'Text')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmStringSocket', 'Text')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,10 +9,10 @@ class CanvasSetTextColorNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetTextColorNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketFloat', 'R')
self.add_input('NodeSocketFloat', 'G')
self.add_input('NodeSocketFloat', 'B')
self.add_input('NodeSocketFloat', 'A')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmFloatSocket', 'R')
self.add_input('ArmFloatSocket', 'G')
self.add_input('ArmFloatSocket', 'B')
self.add_input('ArmFloatSocket', 'A')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -9,7 +9,7 @@ class CanvasSetVisibleNode(ArmLogicTreeNode):
def init(self, context):
super(CanvasSetVisibleNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Element')
self.add_input('NodeSocketBool', 'Visible')
self.add_input('ArmStringSocket', 'Element')
self.add_input('ArmBoolSocket', 'Visible')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -16,7 +16,7 @@ class GetMouseLockNode(ArmLogicTreeNode):
def init(self, context):
super(GetMouseLockNode, self).init(context)
self.outputs.new('NodeSocketBool', 'Is Locked')
self.outputs.new('ArmBoolSocket', 'Is Locked')
def get_replacement_node(self, node_tree: bpy.types.NodeTree):
if self.arm_version not in (0, 1):

View file

@ -16,7 +16,7 @@ class GetMouseVisibleNode(ArmLogicTreeNode):
def init(self, context):
super(GetMouseVisibleNode, self).init(context)
self.outputs.new('NodeSocketBool', 'Is Visible')
self.outputs.new('ArmBoolSocket', 'Is Visible')
def get_replacement_node(self, node_tree: bpy.types.NodeTree):
if self.arm_version not in (0, 1):

View file

@ -13,9 +13,9 @@ class MouseCoordsNode(ArmLogicTreeNode):
def init(self, context):
super(MouseCoordsNode, self).init(context)
self.add_output('NodeSocketVector', 'Coords')
self.add_output('NodeSocketVector', 'Movement')
self.add_output('NodeSocketInt', 'Wheel')
self.add_output('ArmVectorSocket', 'Coords')
self.add_output('ArmVectorSocket', 'Movement')
self.add_output('ArmIntSocket', 'Wheel')
def get_replacement_node(self, node_tree: bpy.types.NodeTree):
if self.arm_version not in (0, 1):

View file

@ -45,7 +45,7 @@ class OnGamepadNode(ArmLogicTreeNode):
def init(self, context):
super(OnGamepadNode, self).init(context)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_input('NodeSocketInt', 'Gamepad')
self.add_input('ArmIntSocket', 'Gamepad')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')

View file

@ -13,5 +13,5 @@ class PauseTraitNode(ArmLogicTreeNode):
def init(self, context):
super(PauseTraitNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Trait')
self.add_input('ArmDynamicSocket', 'Trait')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -15,6 +15,6 @@ class PlayActionNode(ArmLogicTreeNode):
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('ArmNodeSocketAnimAction', 'Action')
self.add_input('NodeSocketFloat', 'Blend', default_value=0.2)
self.add_input('ArmFloatSocket', 'Blend', default_value=0.2)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('ArmNodeSocketAction', 'Done')

View file

@ -13,5 +13,5 @@ class ResumeTraitNode(ArmLogicTreeNode):
def init(self, context):
super(ResumeTraitNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Trait')
self.add_input('ArmDynamicSocket', 'Trait')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -15,8 +15,8 @@ class RotateObjectAroundAxisNode(ArmLogicTreeNode):
super(RotateObjectAroundAxisNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketVector', 'Axis', default_value=[0, 0, 1])
self.add_input('NodeSocketFloat', 'Angle')
self.add_input('ArmVectorSocket', 'Axis', default_value=[0, 0, 1])
self.add_input('ArmFloatSocket', 'Angle')
self.add_output('ArmNodeSocketAction', 'Out')
def get_replacement_node(self, node_tree: bpy.types.NodeTree):

View file

@ -15,5 +15,5 @@ class ScaleObjectNode(ArmLogicTreeNode):
super(ScaleObjectNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketVector', 'Scale')
self.add_input('ArmVectorSocket', 'Scale')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -14,7 +14,7 @@ class SetMouseLockNode(ArmLogicTreeNode):
def init(self, context):
super(SetMouseLockNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketBool', 'Lock')
self.add_input('ArmBoolSocket', 'Lock')
self.add_output('ArmNodeSocketAction', 'Out')
def get_replacement_node(self, node_tree: bpy.types.NodeTree):

View file

@ -14,7 +14,7 @@ class ShowMouseNode(ArmLogicTreeNode):
def init(self, context):
super(ShowMouseNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketBool', 'Show')
self.add_input('ArmBoolSocket', 'Show')
self.add_output('ArmNodeSocketAction', 'Out')
def get_replacement_node(self, node_tree: bpy.types.NodeTree):

View file

@ -14,5 +14,5 @@ class SetMaterialNode(ArmLogicTreeNode):
super(SetMaterialNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_input('NodeSocketShader', 'Material')
self.add_input('ArmDynamicSocket', 'Material')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -14,5 +14,5 @@ class SurfaceCoordsNode(ArmLogicTreeNode):
def init(self, context):
super(SurfaceCoordsNode, self).init(context)
self.add_output('NodeSocketVector', 'Coords')
self.add_output('NodeSocketVector', 'Movement')
self.add_output('ArmVectorSocket', 'Coords')
self.add_output('ArmVectorSocket', 'Movement')

View file

@ -11,7 +11,7 @@ class OnTimerNode(ArmLogicTreeNode):
def init(self, context):
super(OnTimerNode, self).init(context)
self.add_input('NodeSocketFloat', 'Duration')
self.add_input('NodeSocketBool', 'Repeat')
self.add_input('ArmFloatSocket', 'Duration')
self.add_input('ArmBoolSocket', 'Repeat')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -16,7 +16,7 @@ class SendEventNode(ArmLogicTreeNode):
def init(self, context):
super(SendEventNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Event')
self.add_input('ArmStringSocket', 'Event')
self.add_input('ArmNodeSocketObject', 'Object')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -15,6 +15,6 @@ class SendGlobalEventNode(ArmLogicTreeNode):
def init(self, context):
super(SendGlobalEventNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketString', 'Event')
self.add_input('ArmStringSocket', 'Event')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -49,9 +49,9 @@ class GamepadNode(ArmLogicTreeNode):
def init(self, context):
super(GamepadNode, self).init(context)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketBool', 'State')
self.add_output('ArmBoolSocket', 'State')
self.add_input('NodeSocketInt', 'Gamepad')
self.add_input('ArmIntSocket', 'Gamepad')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')

View file

@ -13,11 +13,11 @@ class GamepadCoordsNode(ArmLogicTreeNode):
def init(self, context):
super(GamepadCoordsNode, self).init(context)
self.add_output('NodeSocketVector', 'Left Stick')
self.add_output('NodeSocketVector', 'Right Stick')
self.add_output('NodeSocketVector', 'Left Movement')
self.add_output('NodeSocketVector', 'Right Movement')
self.add_output('NodeSocketFloat', 'Left Trigger')
self.add_output('NodeSocketFloat', 'Right Trigger')
self.add_output('ArmVectorSocket', 'Left Stick')
self.add_output('ArmVectorSocket', 'Right Stick')
self.add_output('ArmVectorSocket', 'Left Movement')
self.add_output('ArmVectorSocket', 'Right Movement')
self.add_output('ArmFloatSocket', 'Left Trigger')
self.add_output('ArmFloatSocket', 'Right Trigger')
self.add_input('NodeSocketInt', 'Gamepad')
self.add_input('ArmIntSocket', 'Gamepad')

View file

@ -9,7 +9,7 @@ class GetCursorLocationNode(ArmLogicTreeNode):
def init(self, context):
super(GetCursorLocationNode, self).init(context)
self.add_output('NodeSocketInt', 'X')
self.add_output('NodeSocketInt', 'Y')
self.add_output('NodeSocketInt', 'Inverted X')
self.add_output('NodeSocketInt', 'Inverted Y')
self.add_output('ArmIntSocket', 'X')
self.add_output('ArmIntSocket', 'Y')
self.add_output('ArmIntSocket', 'Inverted X')
self.add_output('ArmIntSocket', 'Inverted Y')

View file

@ -18,6 +18,6 @@ class GetCursorStateNode(ArmLogicTreeNode):
def init(self, context):
super(GetCursorStateNode, self).init(context)
self.outputs.new('NodeSocketBool', 'Is Hidden Locked')
self.outputs.new('NodeSocketBool', 'Is Hidden')
self.outputs.new('NodeSocketBool', 'Is Locked')
self.outputs.new('ArmBoolSocket', 'Is Hidden Locked')
self.outputs.new('ArmBoolSocket', 'Is Hidden')
self.outputs.new('ArmBoolSocket', 'Is Locked')

View file

@ -12,13 +12,13 @@ class GetMouseMovementNode(ArmLogicTreeNode):
def init(self, context):
super(GetMouseMovementNode, self).init(context)
self.add_input('NodeSocketFloat', 'X Multiplier', default_value=-1.0)
self.add_input('NodeSocketFloat', 'Y Multiplier', default_value=-1.0)
self.add_input('NodeSocketFloat', 'Wheel Delta Multiplier', default_value=-1.0)
self.add_input('ArmFloatSocket', 'X Multiplier', default_value=-1.0)
self.add_input('ArmFloatSocket', 'Y Multiplier', default_value=-1.0)
self.add_input('ArmFloatSocket', 'Wheel Delta Multiplier', default_value=-1.0)
self.add_output('NodeSocketFloat', 'X')
self.add_output('NodeSocketFloat', 'Y')
self.add_output('NodeSocketFloat', 'Multiplied X')
self.add_output('NodeSocketFloat', 'Multiplied Y')
self.add_output('NodeSocketInt', 'Wheel Delta')
self.add_output('NodeSocketFloat', 'Multiplied Wheel Delta')
self.add_output('ArmFloatSocket', 'X')
self.add_output('ArmFloatSocket', 'Y')
self.add_output('ArmFloatSocket', 'Multiplied X')
self.add_output('ArmFloatSocket', 'Multiplied Y')
self.add_output('ArmIntSocket', 'Wheel Delta')
self.add_output('ArmFloatSocket', 'Multiplied Wheel Delta')

View file

@ -9,7 +9,7 @@ class GetTouchLocationNode(ArmLogicTreeNode):
def init(self, context):
super(GetTouchLocationNode, self).init(context)
self.add_output('NodeSocketInt', 'X')
self.add_output('NodeSocketInt', 'Y')
self.add_output('NodeSocketInt', 'Inverted X')
self.add_output('NodeSocketInt', 'Inverted Y')
self.add_output('ArmIntSocket', 'X')
self.add_output('ArmIntSocket', 'Y')
self.add_output('ArmIntSocket', 'Inverted X')
self.add_output('ArmIntSocket', 'Inverted Y')

View file

@ -9,10 +9,10 @@ class GetTouchMovementNode(ArmLogicTreeNode):
def init(self, context):
super(GetTouchMovementNode, self).init(context)
self.add_input('NodeSocketFloat', 'X Multiplier', default_value=-1.0)
self.add_input('NodeSocketFloat', 'Y Multiplier', default_value=-1.0)
self.add_input('ArmFloatSocket', 'X Multiplier', default_value=-1.0)
self.add_input('ArmFloatSocket', 'Y Multiplier', default_value=-1.0)
self.add_output('NodeSocketFloat', 'X')
self.add_output('NodeSocketFloat', 'Y')
self.add_output('NodeSocketFloat', 'Multiplied X')
self.add_output('NodeSocketFloat', 'Multiplied Y')
self.add_output('ArmFloatSocket', 'X')
self.add_output('ArmFloatSocket', 'Y')
self.add_output('ArmFloatSocket', 'Multiplied X')
self.add_output('ArmFloatSocket', 'Multiplied Y')

View file

@ -73,7 +73,7 @@ class KeyboardNode(ArmLogicTreeNode):
def init(self, context):
super(KeyboardNode, self).init(context)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketBool', 'State')
self.add_output('ArmBoolSocket', 'State')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')

View file

@ -24,7 +24,7 @@ class MouseNode(ArmLogicTreeNode):
def init(self, context):
super(MouseNode, self).init(context)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketBool', 'State')
self.add_output('ArmBoolSocket', 'State')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')

View file

@ -7,7 +7,7 @@ class NodeAddOutputButton(bpy.types.Operator):
bl_label = 'Add 4 States'
bl_options = {'UNDO', 'INTERNAL'}
node_index: StringProperty(name='Node Index', default='')
socket_type: StringProperty(name='Socket Type', default='NodeSocketShader')
socket_type: StringProperty(name='Socket Type', default='ArmDynamicSocket')
name_format: StringProperty(name='Name Format', default='Output {0}')
index_name_offset: IntProperty(name='Index Name Offset', default=0)
@ -21,10 +21,10 @@ class NodeAddOutputButton(bpy.types.Operator):
global array_nodes
node = array_nodes[self.node_index]
outs = node.outputs
outs.new('NodeSocketBool', self.get_name_state(len(outs), node.min_outputs))
outs.new('NodeSocketBool', self.get_name_state(len(outs), node.min_outputs))
outs.new('NodeSocketBool', self.get_name_state(len(outs), node.min_outputs))
outs.new('NodeSocketBool', self.get_name_state(len(outs), node.min_outputs))
outs.new('ArmBoolSocket', self.get_name_state(len(outs), node.min_outputs))
outs.new('ArmBoolSocket', self.get_name_state(len(outs), node.min_outputs))
outs.new('ArmBoolSocket', self.get_name_state(len(outs), node.min_outputs))
outs.new('ArmBoolSocket', self.get_name_state(len(outs), node.min_outputs))
return{'FINISHED'}
# Custom class for remove output parameters (in 4 directions)
@ -61,14 +61,14 @@ class OnSwipeNode(ArmLogicTreeNode):
def init(self, context):
super(OnSwipeNode, self).init(context)
self.inputs.new('NodeSocketFloat', 'Time')
self.inputs.new('ArmFloatSocket', 'Time')
self.inputs[-1].default_value = 0.15
self.inputs.new('NodeSocketInt', 'Min Length (px)')
self.inputs.new('ArmIntSocket', 'Min Length (px)')
self.inputs[-1].default_value = 100
self.outputs.new('ArmNodeSocketAction', 'Out')
self.outputs.new('NodeSocketVector', 'Direction')
self.outputs.new('NodeSocketInt', 'Length (px)')
self.outputs.new('NodeSocketInt', 'Angle (0-360)')
self.outputs.new('ArmVectorSocket', 'Direction')
self.outputs.new('ArmIntSocket', 'Length (px)')
self.outputs.new('ArmIntSocket', 'Angle (0-360)')
# Draw node buttons
def draw_buttons(self, context, layout):

View file

@ -20,15 +20,15 @@ class OnTapScreen(ArmLogicTreeNode):
def init(self, context):
super(OnTapScreen, self).init(context)
self.add_input('NodeSocketFloat', 'Duration')
self.add_input('ArmFloatSocket', 'Duration')
self.inputs[-1].default_value = 0.3
self.add_input('NodeSocketFloat', 'Interval')
self.add_input('ArmFloatSocket', 'Interval')
self.inputs[-1].default_value = 0.0
self.add_input('NodeSocketInt', 'Repeat')
self.add_input('ArmIntSocket', 'Repeat')
self.inputs[-1].default_value = 2
self.add_output('ArmNodeSocketAction', 'Done')
self.add_output('ArmNodeSocketAction', 'Fail')
self.add_output('ArmNodeSocketAction', 'Tap')
self.add_output('NodeSocketInt', 'Tap Number')
self.add_output('NodeSocketVector', 'Coords')
self.add_output('ArmIntSocket', 'Tap Number')
self.add_output('ArmVectorSocket', 'Coords')

View file

@ -9,4 +9,4 @@ class SensorCoordsNode(ArmLogicTreeNode):
def init(self, context):
super(SensorCoordsNode, self).init(context)
self.add_output('NodeSocketVector', 'Coords')
self.add_output('ArmVectorSocket', 'Coords')

View file

@ -25,7 +25,7 @@ class SetCursorStateNode(ArmLogicTreeNode):
def init(self, context):
super(SetCursorStateNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketBool', 'State')
self.add_input('ArmBoolSocket', 'State')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -18,7 +18,7 @@ class SurfaceNode(ArmLogicTreeNode):
def init(self, context):
super(SurfaceNode, self).init(context)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketBool', 'State')
self.add_output('ArmBoolSocket', 'State')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')

View file

@ -18,7 +18,7 @@ class VirtualButtonNode(ArmLogicTreeNode):
def init(self, context):
super(VirtualButtonNode, self).init(context)
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketBool', 'State')
self.add_output('ArmBoolSocket', 'State')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')

View file

@ -10,6 +10,6 @@ class SetLightColorNode(ArmLogicTreeNode):
super(SetLightColorNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Light')
self.add_input('NodeSocketColor', 'Color', default_value=[1.0, 1.0, 1.0, 1.0])
self.add_input('ArmColorSocket', 'Color', default_value=[1.0, 1.0, 1.0, 1.0])
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -10,6 +10,6 @@ class SetLightStrengthNode(ArmLogicTreeNode):
super(SetLightStrengthNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('ArmNodeSocketObject', 'Light')
self.add_input('NodeSocketFloat', 'Strength', default_value=250)
self.add_input('ArmFloatSocket', 'Strength', default_value=250)
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -11,7 +11,7 @@ class BranchNode(ArmLogicTreeNode):
def init(self, context):
super(BranchNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketBool', 'Bool')
self.add_input('ArmBoolSocket', 'Bool')
self.add_output('ArmNodeSocketAction', 'True')
self.add_output('ArmNodeSocketAction', 'False')

View file

@ -16,17 +16,17 @@ class CallFunctionNode(ArmLogicTreeNode):
def init(self, context):
super(CallFunctionNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Trait/Any')
self.add_input('NodeSocketString', 'Function')
self.add_input('ArmDynamicSocket', 'Trait/Any')
self.add_input('ArmStringSocket', 'Function')
self.add_output('ArmNodeSocketAction', 'Out')
self.add_output('NodeSocketShader', 'Result')
self.add_output('ArmDynamicSocket', 'Result')
def draw_buttons(self, context, layout):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='Add Arg', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketShader'
op.socket_type = 'ArmDynamicSocket'
op.name_format = "Arg {0}"
op.index_name_offset = -2
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)

View file

@ -27,7 +27,7 @@ class FunctionNode(ArmLogicTreeNode):
row = layout.row(align=True)
op = row.operator('arm.node_add_output', text='Add Arg', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketShader'
op.socket_type = 'ArmDynamicSocket'
op.name_format = "Arg {0}"
op.index_name_offset = 0
op2 = row.operator('arm.node_remove_output', text='', icon='X', emboss=True)

View file

@ -13,7 +13,7 @@ class FunctionOutputNode(ArmLogicTreeNode):
def init(self, context):
super(FunctionOutputNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmDynamicSocket', 'Value')
function_name: StringProperty(name="Name")

View file

@ -41,8 +41,8 @@ class GateNode(ArmLogicTreeNode):
def init(self, context):
super(GateNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Input 1')
self.add_input('NodeSocketShader', 'Input 2')
self.add_input('ArmDynamicSocket', 'Input 1')
self.add_input('ArmDynamicSocket', 'Input 2')
self.add_output('ArmNodeSocketAction', 'True')
self.add_output('ArmNodeSocketAction', 'False')
@ -57,6 +57,6 @@ class GateNode(ArmLogicTreeNode):
row = layout.row(align=True)
op = row.operator('arm.node_add_input', text='New', icon='PLUS', emboss=True)
op.node_index = str(id(self))
op.socket_type = 'NodeSocketShader'
op.socket_type = 'ArmDynamicSocket'
op2 = row.operator('arm.node_remove_input', text='', icon='X', emboss=True)
op2.node_index = str(id(self))

View file

@ -8,6 +8,6 @@ class NotNode(ArmLogicTreeNode):
def init(self, context):
super(NotNode, self).init(context)
self.add_input('NodeSocketBool', 'Bool In')
self.add_input('ArmBoolSocket', 'Bool In')
self.add_output('NodeSocketBool', 'Bool Out')
self.add_output('ArmBoolSocket', 'Bool Out')

View file

@ -13,6 +13,6 @@ class IsFalseNode(ArmLogicTreeNode):
def init(self, context):
super(IsFalseNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketBool', 'Bool')
self.add_input('ArmBoolSocket', 'Bool')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -12,6 +12,6 @@ class IsNotNoneNode(ArmLogicTreeNode):
def init(self, context):
super(IsNotNoneNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmDynamicSocket', 'Value')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -13,6 +13,6 @@ class IsNoneNode(ArmLogicTreeNode):
def init(self, context):
super(IsNoneNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketShader', 'Value')
self.add_input('ArmDynamicSocket', 'Value')
self.add_output('ArmNodeSocketAction', 'Out')

View file

@ -12,6 +12,6 @@ class IsTrueNode(ArmLogicTreeNode):
def init(self, context):
super(IsTrueNode, self).init(context)
self.add_input('ArmNodeSocketAction', 'In')
self.add_input('NodeSocketBool', 'Bool')
self.add_input('ArmBoolSocket', 'Bool')
self.add_output('ArmNodeSocketAction', 'Out')

Some files were not shown because too many files have changed in this diff Show more