Use PointerProperty to prevent whitespace issues

This commit is contained in:
luboslenco 2019-02-08 12:50:12 +01:00
parent 9ae5e897d4
commit c6a26a0dad
6 changed files with 47 additions and 25 deletions

View file

@ -14,7 +14,7 @@ class CallGroupNode(Node, ArmLogicTreeNode):
def property0(self):
return arm.utils.safesrc(bpy.data.worlds['Arm'].arm_project_package) + '.node.' + arm.utils.safesrc(self.property0_)
property0_: StringProperty(name='Group', default='')
property0_: PointerProperty(name='Group', type=bpy.types.NodeTree)
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')

View file

@ -37,14 +37,15 @@ class ArmArraySocket(bpy.types.NodeSocket):
class ArmObjectSocket(bpy.types.NodeSocket):
bl_idname = 'ArmNodeSocketObject'
bl_label = 'Object Socket'
default_value: StringProperty(name='Object', default='')
default_value_get: PointerProperty(name='Object', type=bpy.types.Object)
default_value: StringProperty(name='Object', default='') # TODO: deprecated, using PointerProperty now
def get_default_value(self):
if self.default_value == '':
if self.default_value_get == None:
return ''
if self.default_value not in bpy.data.objects:
return self.default_value
return arm.utils.asset_name(bpy.data.objects[self.default_value])
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
@ -59,7 +60,7 @@ class ArmObjectSocket(bpy.types.NodeSocket):
layout.label(text=self.name)
else:
row = layout.row(align=True)
row.prop_search(self, 'default_value', bpy.context.scene, 'objects', icon='NONE', text='')
row.prop_search(self, 'default_value_get', bpy.context.scene, 'objects', icon='NONE', text='')
op = row.operator('arm.node_eyedrop', text='', icon='EYEDROPPER', emboss=True)
op.socket_index = str(id(self))
@ -76,20 +77,21 @@ class ArmNodeEyedropButton(bpy.types.Operator):
global object_sockets
obj = bpy.context.active_object
if obj != None:
object_sockets[self.socket_index].default_value = obj.name
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: StringProperty(name='Action', default='')
default_value_get: PointerProperty(name='Action', type=bpy.types.Action)
default_value: StringProperty(name='Action', default='') # TODO: deprecated, using PointerProperty now
def get_default_value(self):
if self.default_value == '':
if self.default_value_get == None:
return ''
if self.default_value not in bpy.data.actions:
return self.default_value
name = arm.utils.asset_name(bpy.data.actions[self.default_value])
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):
@ -98,7 +100,7 @@ class ArmAnimActionSocket(bpy.types.NodeSocket):
elif self.is_linked:
layout.label(text=self.name)
else:
layout.prop_search(self, 'default_value', bpy.data, 'actions', icon='NONE', text='')
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)

View file

@ -12,11 +12,13 @@ class MaterialNode(Node, ArmLogicTreeNode):
@property
def property0_get(self):
if self.property0 not in bpy.data.materials:
return self.property0
return arm.utils.asset_name(bpy.data.materials[self.property0])
property0: StringProperty(name='', default='')
if self.property0 == None:
return ''
if self.property0.name not in bpy.data.materials:
return self.property0.name
return arm.utils.asset_name(bpy.data.materials[self.property0.name])
property0: PointerProperty(name='', type=bpy.types.Material)
def init(self, context):
self.outputs.new('NodeSocketShader', 'Material')

View file

@ -8,13 +8,14 @@ class MeshNode(Node, ArmLogicTreeNode):
bl_idname = 'LNMeshNode'
bl_label = 'Mesh'
bl_icon = 'QUESTION'
property0: StringProperty(name='', default='')
property0_get: PointerProperty(name='', type=bpy.types.Mesh)
property0: StringProperty(name='Mesh', default='') # TODO: deprecated, using PointerProperty now
def init(self, context):
self.outputs.new('NodeSocketShader', 'Mesh')
def draw_buttons(self, context, layout):
layout.prop_search(self, 'property0', bpy.data, 'meshes', icon='NONE', text='')
layout.prop_search(self, 'property0_get', bpy.data, 'meshes', icon='NONE', text='')
add_node(MeshNode, category='Variable')

View file

@ -9,12 +9,13 @@ class SceneNode(Node, ArmLogicTreeNode):
bl_label = 'Scene'
bl_icon = 'QUESTION'
property0: StringProperty(name='', default='')
property0_get: PointerProperty(name='', type=bpy.types.Scene)
property0: StringProperty(name='Scene', default='') # TODO: deprecated, using PointerProperty now
def init(self, context):
self.outputs.new('NodeSocketShader', 'Scene')
def draw_buttons(self, context, layout):
layout.prop_search(self, 'property0', bpy.data, 'scenes', icon='NONE', text='')
layout.prop_search(self, 'property0_get', bpy.data, 'scenes', icon='NONE', text='')
add_node(SceneNode, category='Variable')

View file

@ -317,7 +317,6 @@ def init_properties_on_load():
trait.node_tree_prop == None and \
trait.name in bpy.data.node_groups:
trait.node_tree_prop = bpy.data.node_groups[trait.name]
for scn in bpy.data.scenes: # TODO: deprecated
# Scene traits
for trait in scn.arm_traitlist:
@ -332,6 +331,23 @@ def init_properties_on_load():
item.obj == None and \
item.object_name in scn.collection.all_objects:
item.obj = scn.collection.all_objects[item.object_name]
# Update StringProperty to PointerProperty
for node_group in bpy.data.node_groups: # TODO: deprecated
if node_group.bl_idname == 'ArmLogicTreeType':
for node in node_group.nodes:
if hasattr(node, 'property0_get') and node.property0 != '':
if node.bl_idname == 'LNMeshNode':
node.property0_get = bpy.data.meshes[node.property0.strip()]
elif node.bl_idname == 'LNSceneNode':
node.property0_get = bpy.data.scenes[node.property0.strip()]
node.property0 = ''
for inp in node.inputs:
if inp.bl_idname == 'ArmNodeSocketObject' and inp.default_value != '':
inp.default_value_get = bpy.data.objects[inp.default_value]
inp.default_value = ''
elif inp.bl_idname == 'ArmNodeSocketAnimAction' and inp.default_value != '':
inp.default_value_get = bpy.data.actions[inp.default_value]
inp.default_value = ''
print('Project updated to sdk v' + arm_version + ' (' + arm_commit + ')')
wrd.arm_version = arm_version