armory/blender/arm/nodes_logic.py

89 lines
3.3 KiB
Python
Raw Normal View History

2015-10-30 13:23:09 +01:00
import bpy
2017-03-06 02:29:03 +01:00
from bpy.types import NodeTree
2015-10-30 13:23:09 +01:00
from bpy.props import *
2017-03-06 02:29:03 +01:00
import nodeitems_utils
from nodeitems_utils import NodeCategory
2017-03-15 12:30:14 +01:00
from arm.logicnode import *
2017-04-10 21:17:17 +02:00
import webbrowser
2017-03-06 02:29:03 +01:00
registered_nodes = []
2016-10-19 13:28:06 +02:00
2017-03-06 02:29:03 +01:00
class ArmLogicTree(NodeTree):
'''Logic nodes'''
bl_idname = 'ArmLogicTreeType'
bl_label = 'Logic Node Tree'
bl_icon = 'GAME'
2015-10-30 13:23:09 +01:00
2017-03-06 02:29:03 +01:00
class LogicNodeCategory(NodeCategory):
@classmethod
def poll(cls, context):
return context.space_data.tree_type == 'ArmLogicTreeType'
2016-08-14 21:08:01 +02:00
2017-03-06 02:29:03 +01:00
def register_nodes():
global registered_nodes
2016-08-14 21:08:01 +02:00
2017-03-06 02:29:03 +01:00
# Re-register all nodes for now..
if len(registered_nodes) > 0:
unregister_nodes()
2015-10-30 13:23:09 +01:00
2017-03-06 02:29:03 +01:00
for n in arm_nodes.nodes:
registered_nodes.append(n)
bpy.utils.register_class(n)
node_categories = [
2017-04-10 21:17:17 +02:00
LogicNodeCategory('LogicLogicNodes', 'Logic', items=arm_nodes.category_items['Logic']),
2017-04-04 23:11:31 +02:00
LogicNodeCategory('LogicEventNodes', 'Event', items=arm_nodes.category_items['Event']),
2017-04-10 21:17:17 +02:00
LogicNodeCategory('LogicActionNodes', 'Action', items=arm_nodes.category_items['Action']),
2017-04-04 23:11:31 +02:00
LogicNodeCategory('LogicValueNodes', 'Value', items=arm_nodes.category_items['Value']),
2017-04-10 21:17:17 +02:00
LogicNodeCategory('LogicVariableNodes', 'Variable', items=arm_nodes.category_items['Variable']),
2017-04-08 00:34:45 +02:00
LogicNodeCategory('LogicInputNodes', 'Input', items=arm_nodes.category_items['Input']),
2017-04-10 21:17:17 +02:00
LogicNodeCategory('LogicAnimationNodes', 'Animation', items=arm_nodes.category_items['Animation']),
2017-04-04 23:11:31 +02:00
LogicNodeCategory('LogicPhysicsNodes', 'Physics', items=arm_nodes.category_items['Physics']),
LogicNodeCategory('LogicNavmeshNodes', 'Navmesh', items=arm_nodes.category_items['Navmesh']),
2017-04-08 00:34:45 +02:00
LogicNodeCategory('LogicSoundNodes', 'Sound', items=arm_nodes.category_items['Sound']),
2017-04-10 21:17:17 +02:00
LogicNodeCategory('LogicNativeNodes', 'Native', items=arm_nodes.category_items['Native']),
2017-03-06 02:29:03 +01:00
]
2017-04-04 23:11:31 +02:00
nodeitems_utils.register_node_categories('ArmLogicNodes', node_categories)
2015-10-30 13:23:09 +01:00
2017-03-06 02:29:03 +01:00
def unregister_nodes():
global registered_nodes
for n in registered_nodes:
bpy.utils.unregister_class(n)
registered_nodes = []
2017-04-04 23:11:31 +02:00
nodeitems_utils.unregister_node_categories('ArmLogicNodes')
2015-10-30 13:23:09 +01:00
2017-04-10 21:17:17 +02:00
class ArmLogicNodePanel(bpy.types.Panel):
bl_label = 'Armory Logic Nodes'
bl_idname = 'ArmLogicNodePanel'
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
def draw(self, context):
layout = self.layout
if context.active_node != None and context.active_node.bl_idname.startswith('LN'):
layout.operator('arm.open_node_source')
class ArmOpenNodeSource(bpy.types.Operator):
'''Expose Haxe source'''
bl_idname = 'arm.open_node_source'
bl_label = 'Open Node Source'
def execute(self, context):
if context.active_node != None and context.active_node.bl_idname.startswith('LN'):
name = context.active_node.bl_idname[2:]
webbrowser.open('https://github.com/armory3d/armory/tree/master/Sources/armory/logicnode/' + name + '.hx')
return{'FINISHED'}
2015-10-30 13:23:09 +01:00
def register():
2017-03-15 12:30:14 +01:00
bpy.utils.register_class(ArmLogicTree)
2017-04-10 21:17:17 +02:00
bpy.utils.register_class(ArmLogicNodePanel)
bpy.utils.register_class(ArmOpenNodeSource)
2017-03-06 02:29:03 +01:00
register_nodes()
2015-10-30 13:23:09 +01:00
def unregister():
2017-03-06 02:29:03 +01:00
unregister_nodes()
2017-03-15 12:30:14 +01:00
bpy.utils.unregister_class(ArmLogicTree)
2017-04-10 21:17:17 +02:00
bpy.utils.unregister_class(ArmLogicNodePanel)
bpy.utils.unregister_class(ArmOpenNodeSource)