Show traits in group outliner
This commit is contained in:
parent
beb1c8fb10
commit
1642b2ebf8
|
@ -2009,7 +2009,7 @@ class ArmoryExporter:
|
|||
for group in bpy.data.groups:
|
||||
# Blender automatically stores physics objects in this group,
|
||||
# can cause stuck unused objects, skip for now
|
||||
if group.name.startswith('RigidBodyWorld'):
|
||||
if group.name.startswith('RigidBodyWorld') or group.name.startswith('Trait|'):
|
||||
continue
|
||||
o = {}
|
||||
o['name'] = group.name
|
||||
|
|
|
@ -253,6 +253,8 @@ def on_load_post(context):
|
|||
import blender
|
||||
blender.register()
|
||||
|
||||
arm.utils.update_trait_groups()
|
||||
|
||||
@persistent
|
||||
def on_save_pre(context):
|
||||
props.init_properties_on_save()
|
||||
|
|
|
@ -13,19 +13,36 @@ def trigger_recompile(self, context):
|
|||
wrd = bpy.data.worlds['Arm']
|
||||
wrd.arm_recompile = True
|
||||
|
||||
class ArmTraitListItem(bpy.types.PropertyGroup):
|
||||
# Group of properties representing an item in the list
|
||||
name = bpy.props.StringProperty(
|
||||
name="Name",
|
||||
description="A name for this item",
|
||||
default="")
|
||||
|
||||
enabled_prop = bpy.props.BoolProperty(
|
||||
name="",
|
||||
description="A name for this item",
|
||||
default=True,
|
||||
update=trigger_recompile)
|
||||
def update_trait_group(self, context):
|
||||
o = context.object
|
||||
if o == None:
|
||||
return
|
||||
i = o.arm_traitlist_index
|
||||
if i >= 0 and i < len(o.arm_traitlist):
|
||||
t = o.arm_traitlist[i]
|
||||
if t.type_prop == 'Haxe Script' or t.type_prop == 'Bundled Prop':
|
||||
t.name = t.class_name_prop
|
||||
elif t.type_prop == 'WebAssembly':
|
||||
t.name = t.webassembly_prop
|
||||
elif t.type_prop == 'UI Canvas':
|
||||
t.name = t.canvas_name_prop
|
||||
elif t.type_prop == 'Logic Nodes':
|
||||
t.name = t.nodes_name_prop
|
||||
# Clean
|
||||
for g in bpy.data.groups:
|
||||
if g.name.startswith('Trait|') and o.name in g.objects:
|
||||
g.objects.unlink(o)
|
||||
# Readd
|
||||
for t in o.arm_traitlist:
|
||||
if 'Trait|' + t.name not in bpy.data.groups:
|
||||
g = bpy.data.groups.new('Trait|' + t.name)
|
||||
else:
|
||||
g = bpy.data.groups['Trait|' + t.name]
|
||||
g.objects.link(o)
|
||||
|
||||
class ArmTraitListItem(bpy.types.PropertyGroup):
|
||||
name = bpy.props.StringProperty(name="Name", description="A name for this item", default="")
|
||||
enabled_prop = bpy.props.BoolProperty(name="", description="A name for this item", default=True, update=trigger_recompile)
|
||||
type_prop = bpy.props.EnumProperty(
|
||||
items = [('Haxe Script', 'Haxe Script', 'Haxe Script'),
|
||||
('WebAssembly', 'WebAssembly', 'WebAssembly'),
|
||||
|
@ -34,30 +51,13 @@ class ArmTraitListItem(bpy.types.PropertyGroup):
|
|||
('Logic Nodes', 'Logic Nodes', 'Logic Nodes')
|
||||
],
|
||||
name = "Type")
|
||||
|
||||
class_name_prop = bpy.props.StringProperty(
|
||||
name="Class",
|
||||
description="A name for this item",
|
||||
default="")
|
||||
|
||||
canvas_name_prop = bpy.props.StringProperty(
|
||||
name="Canvas",
|
||||
description="A name for this item",
|
||||
default="")
|
||||
|
||||
webassembly_prop = bpy.props.StringProperty(
|
||||
name="Text",
|
||||
description="A name for this item",
|
||||
default="")
|
||||
|
||||
nodes_name_prop = bpy.props.StringProperty(
|
||||
name="Nodes",
|
||||
description="A name for this item",
|
||||
default="")
|
||||
class_name_prop = bpy.props.StringProperty(name="Class", description="A name for this item", default="", update=update_trait_group)
|
||||
canvas_name_prop = bpy.props.StringProperty(name="Canvas", description="A name for this item", default="", update=update_trait_group)
|
||||
webassembly_prop = bpy.props.StringProperty(name="Text", description="A name for this item", default="", update=update_trait_group)
|
||||
nodes_name_prop = bpy.props.StringProperty(name="Nodes", description="A name for this item", default="", update=update_trait_group)
|
||||
|
||||
arm_traitparamslist = bpy.props.CollectionProperty(type=ArmTraitParamListItem)
|
||||
arm_traitparamslist_index = bpy.props.IntProperty(name="Index for my_list", default=0)
|
||||
|
||||
arm_traitpropslist = bpy.props.CollectionProperty(type=ArmTraitPropListItem)
|
||||
arm_traitpropslist_index = bpy.props.IntProperty(name="Index for my_list", default=0)
|
||||
|
||||
|
@ -117,6 +117,7 @@ class ArmTraitListDeleteItem(bpy.types.Operator):
|
|||
return{'FINISHED'}
|
||||
|
||||
lst.remove(index)
|
||||
update_trait_group(self, context)
|
||||
|
||||
if index > 0:
|
||||
index = index - 1
|
||||
|
@ -547,9 +548,9 @@ def register():
|
|||
bpy.utils.register_class(ArmTraitsPanel)
|
||||
bpy.utils.register_class(ArmSceneTraitsPanel)
|
||||
bpy.types.Object.arm_traitlist = bpy.props.CollectionProperty(type=ArmTraitListItem)
|
||||
bpy.types.Object.arm_traitlist_index = bpy.props.IntProperty(name="Index for my_list", default=0)
|
||||
bpy.types.Object.arm_traitlist_index = bpy.props.IntProperty(name="Index for arm_traitlist", default=0)
|
||||
bpy.types.Scene.arm_traitlist = bpy.props.CollectionProperty(type=ArmTraitListItem)
|
||||
bpy.types.Scene.arm_traitlist_index = bpy.props.IntProperty(name="Index for my_list", default=0)
|
||||
bpy.types.Scene.arm_traitlist_index = bpy.props.IntProperty(name="Index for arm_traitlist", default=0)
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(ArmTraitListItem)
|
||||
|
|
|
@ -276,12 +276,24 @@ def fetch_prop(o):
|
|||
f = found.name.replace(')', '').split('(')
|
||||
|
||||
# Default value added and current value is blank (no override)
|
||||
if(not found.value and defaults[i]):
|
||||
if (not found.value and defaults[i]):
|
||||
prop.value = defaults[i]
|
||||
# Type has changed, update displayed name
|
||||
if(len(f) == 1 or (len(f) > 1 and f[1] != p[1])):
|
||||
if (len(f) == 1 or (len(f) > 1 and f[1] != p[1])):
|
||||
prop.name = p[0] + ('(' + p[1] + ')' if p[1] else '')
|
||||
|
||||
def update_trait_groups():
|
||||
for g in bpy.data.groups:
|
||||
if g.name.startswith('Trait|'):
|
||||
bpy.data.groups.remove(g)
|
||||
for o in bpy.data.objects:
|
||||
for t in o.arm_traitlist:
|
||||
if 'Trait|' + t.name not in bpy.data.groups:
|
||||
g = bpy.data.groups.new('Trait|' + t.name)
|
||||
else:
|
||||
g = bpy.data.groups['Trait|' + t.name]
|
||||
g.objects.link(o)
|
||||
|
||||
def to_hex(val):
|
||||
return '#%02x%02x%02x%02x' % (int(val[3] * 255), int(val[0] * 255), int(val[1] * 255), int(val[2] * 255))
|
||||
|
||||
|
|
|
@ -533,7 +533,7 @@ def write_traithx(class_name):
|
|||
f.write(
|
||||
"""package """ + arm.utils.safestr(wrd.arm_project_package) + """;
|
||||
|
||||
class """ + class_name + """ extends armory.Trait {
|
||||
class """ + class_name + """ extends iron.Trait {
|
||||
\tpublic function new() {
|
||||
\t\tsuper();
|
||||
|
||||
|
|
Loading…
Reference in a new issue