Move socket classes to own module and remove now obsolete eye drop operator

This commit is contained in:
Moritz Brückner 2020-09-07 01:13:00 +02:00
parent dfb0c566c7
commit b248f2c8e8
3 changed files with 113 additions and 110 deletions

View file

@ -7,120 +7,17 @@ import bpy.types
from bpy.props import *
from nodeitems_utils import NodeItem
import arm.utils
nodes = []
category_items: ODict[str, List['ArmNodeCategory']] = OrderedDict()
object_sockets = dict()
array_nodes = dict()
class ArmLogicTreeNode:
@classmethod
def poll(cls, ntree):
return ntree.bl_idname == 'ArmLogicTreeType'
class ArmActionSocket(bpy.types.NodeSocket):
bl_idname = 'ArmNodeSocketAction'
bl_label = 'Action Socket'
def draw(self, context, layout, node, text):
layout.label(text=self.name)
def draw_color(self, context, node):
return (0.8, 0.3, 0.3, 1)
class ArmCustomSocket(bpy.types.NodeSocket):
"""
A custom socket that can be used to define more socket types for
logic node packs. Do not use this type directly (it is not
registered)!
"""
bl_idname = 'ArmCustomSocket'
bl_label = 'Custom Socket'
def get_default_value(self):
"""Override this for values of unconnected input sockets."""
return None
class ArmArraySocket(bpy.types.NodeSocket):
bl_idname = 'ArmNodeSocketArray'
bl_label = 'Array Socket'
def draw(self, context, layout, node, text):
layout.label(text=self.name)
def draw_color(self, context, node):
return (0.8, 0.4, 0.0, 1)
class ArmObjectSocket(bpy.types.NodeSocket):
bl_idname = 'ArmNodeSocketObject'
bl_label = 'Object Socket'
default_value_get: PointerProperty(name='Object', type=bpy.types.Object)
def get_default_value(self):
if self.default_value_get == None:
return ''
if self.default_value_get.name not in bpy.data.objects:
return self.default_value_get.name
return arm.utils.asset_name(bpy.data.objects[self.default_value_get.name])
def __init__(self):
global object_sockets
# Buckle up..
# Match id strings to socket dict to retrieve socket in eyedropper operator
object_sockets[str(id(self))] = self
def draw(self, context, layout, node, text):
if self.is_output:
layout.label(text=self.name)
elif self.is_linked:
layout.label(text=self.name)
else:
row = layout.row(align=True)
row.prop_search(self, 'default_value_get', bpy.context.scene, 'objects', icon='NONE', text=self.name)
op = row.operator('arm.node_eyedrop', text='', icon='EYEDROPPER', emboss=True)
op.socket_index = str(id(self))
def draw_color(self, context, node):
return (0.15, 0.55, 0.75, 1)
class ArmNodeEyedropButton(bpy.types.Operator):
'''Pick selected object'''
bl_idname = 'arm.node_eyedrop'
bl_label = 'Eyedrop'
socket_index: StringProperty(name='Socket Index', default='')
def execute(self, context):
global object_sockets
obj = bpy.context.active_object
if obj != None:
object_sockets[self.socket_index].default_value_get = obj
return{'FINISHED'}
class ArmAnimActionSocket(bpy.types.NodeSocket):
bl_idname = 'ArmNodeSocketAnimAction'
bl_label = 'Action Socket'
default_value_get: PointerProperty(name='Action', type=bpy.types.Action)
def get_default_value(self):
if self.default_value_get == None:
return ''
if self.default_value_get.name not in bpy.data.actions:
return self.default_value_get.name
name = arm.utils.asset_name(bpy.data.actions[self.default_value_get.name])
return arm.utils.safestr(name)
def draw(self, context, layout, node, text):
if self.is_output:
layout.label(text=self.name)
elif self.is_linked:
layout.label(text=self.name)
else:
layout.prop_search(self, 'default_value_get', bpy.data, 'actions', icon='NONE', text='')
def draw_color(self, context, node):
return (0.8, 0.8, 0.8, 1)
class ArmNodeAddInputButton(bpy.types.Operator):
'''Add new input'''
@ -395,12 +292,7 @@ def add_node(node_type: Type[bpy.types.Node], category: str, section: str = 'def
node_type.bl_icon = node_category.icon
bpy.utils.register_class(ArmActionSocket)
bpy.utils.register_class(ArmNodeSearch)
bpy.utils.register_class(ArmArraySocket)
bpy.utils.register_class(ArmObjectSocket)
bpy.utils.register_class(ArmNodeEyedropButton)
bpy.utils.register_class(ArmAnimActionSocket)
bpy.utils.register_class(ArmNodeAddInputButton)
bpy.utils.register_class(ArmNodeAddInputValueButton)
bpy.utils.register_class(ArmNodeRemoveInputButton)

View file

@ -0,0 +1,105 @@
import bpy
from bpy.props import PointerProperty
from bpy.types import NodeSocket
import arm.utils
class ArmActionSocket(NodeSocket):
bl_idname = 'ArmNodeSocketAction'
bl_label = 'Action Socket'
def draw(self, context, layout, node, text):
layout.label(text=self.name)
def draw_color(self, context, node):
return 0.8, 0.3, 0.3, 1
class ArmAnimActionSocket(NodeSocket):
bl_idname = 'ArmNodeSocketAnimAction'
bl_label = 'Action Socket'
default_value_get: PointerProperty(name='Action', type=bpy.types.Action)
def get_default_value(self):
if self.default_value_get is None:
return ''
if self.default_value_get.name not in bpy.data.actions:
return self.default_value_get.name
name = arm.utils.asset_name(bpy.data.actions[self.default_value_get.name])
return arm.utils.safestr(name)
def draw(self, context, layout, node, text):
if self.is_output:
layout.label(text=self.name)
elif self.is_linked:
layout.label(text=self.name)
else:
layout.prop_search(self, 'default_value_get', bpy.data, 'actions', icon='NONE', text='')
def draw_color(self, context, node):
return 0.8, 0.8, 0.8, 1
class ArmArraySocket(NodeSocket):
bl_idname = 'ArmNodeSocketArray'
bl_label = 'Array Socket'
def draw(self, context, layout, node, text):
layout.label(text=self.name)
def draw_color(self, context, node):
return 0.8, 0.4, 0.0, 1
class ArmCustomSocket(NodeSocket):
"""
A custom socket that can be used to define more socket types for
logic node packs. Do not use this type directly (it is not
registered)!
"""
bl_idname = 'ArmCustomSocket'
bl_label = 'Custom Socket'
def get_default_value(self):
"""Override this for values of unconnected input sockets."""
return None
class ArmObjectSocket(NodeSocket):
bl_idname = 'ArmNodeSocketObject'
bl_label = 'Object Socket'
default_value_get: PointerProperty(name='Object', type=bpy.types.Object)
def get_default_value(self):
if self.default_value_get is None:
return ''
if self.default_value_get.name not in bpy.data.objects:
return self.default_value_get.name
return arm.utils.asset_name(bpy.data.objects[self.default_value_get.name])
def draw(self, context, layout, node, text):
if self.is_output:
layout.label(text=self.name)
elif self.is_linked:
layout.label(text=self.name)
else:
row = layout.row(align=True)
row.prop_search(self, 'default_value_get', context.scene, 'objects', icon='NONE', text=self.name)
def draw_color(self, context, node):
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)
def unregister():
bpy.utils.unregister_class(ArmObjectSocket)
bpy.utils.unregister_class(ArmArraySocket)
bpy.utils.unregister_class(ArmAnimActionSocket)
bpy.utils.unregister_class(ArmActionSocket)

View file

@ -8,6 +8,7 @@ import nodeitems_utils
from arm.logicnode import *
from arm.logicnode import arm_nodes
from arm.logicnode.arm_nodes import ArmNodeCategory
from arm.logicnode import arm_sockets
registered_nodes = []
registered_categories = []
@ -343,6 +344,8 @@ class ReplaceNodesOperator(bpy.types.Operator):
# add_replacement(Replacement("LNOnGamepadNode", "LNMergedGamepadNode", {0: 0}, {0: 0}, {"property0": "property0", "property1": "property1"}))
def register():
arm_sockets.register()
bpy.utils.register_class(ArmLogicTree)
bpy.utils.register_class(ARM_PT_LogicNodePanel)
bpy.utils.register_class(ArmOpenNodeSource)
@ -355,9 +358,11 @@ def register():
register_nodes()
def unregister():
bpy.utils.unregister_class(ReplaceNodesOperator)
unregister_nodes()
bpy.utils.unregister_class(ReplaceNodesOperator)
bpy.utils.unregister_class(ArmLogicTree)
bpy.utils.unregister_class(ARM_PT_LogicNodePanel)
bpy.utils.unregister_class(ArmOpenNodeSource)
@ -366,3 +371,4 @@ def unregister():
bpy.utils.unregister_class(ARMAddSetVarNode)
bpy.utils.unregister_class(ARM_MT_NodeAddOverride)
arm_sockets.unregister()