2015-10-30 13:23:09 +01:00
|
|
|
import bpy
|
|
|
|
from bpy.types import NodeTree, Node, NodeSocket
|
|
|
|
from bpy.props import *
|
2016-10-19 13:28:06 +02:00
|
|
|
|
2016-01-11 21:10:33 +01:00
|
|
|
class CGTree(NodeTree):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Logic nodes'''
|
|
|
|
bl_idname = 'ArmLogicTreeType'
|
|
|
|
bl_label = 'Logic Node Tree'
|
|
|
|
bl_icon = 'GAME'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class ArmLogicTreeNode:
|
2016-09-28 00:00:59 +02:00
|
|
|
@classmethod
|
|
|
|
def poll(cls, ntree):
|
|
|
|
return ntree.bl_idname == 'ArmLogicTreeType'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class TransformNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Transform node'''
|
|
|
|
bl_idname = 'TransformNodeType'
|
|
|
|
bl_label = 'Transform'
|
|
|
|
bl_icon = 'SOUND'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketVector', "Position")
|
|
|
|
self.inputs.new('NodeSocketVector', "Rotation")
|
|
|
|
self.inputs.new('NodeSocketVector', "Scale")
|
|
|
|
self.inputs[-1].default_value = [1.0, 1.0, 1.0]
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
self.outputs.new('NodeSocketString', "Transform")
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class TimeNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Time node'''
|
|
|
|
bl_idname = 'TimeNodeType'
|
|
|
|
bl_label = 'Time'
|
|
|
|
bl_icon = 'TIME'
|
|
|
|
|
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketFloat', "Start")
|
|
|
|
self.inputs.new('NodeSocketFloat', "Stop")
|
|
|
|
self.inputs[-1].default_value = -1
|
|
|
|
self.inputs.new('NodeSocketBool', "Enabled")
|
|
|
|
self.inputs[-1].default_value = True
|
|
|
|
self.inputs.new('NodeSocketBool', "Loop")
|
|
|
|
self.inputs.new('NodeSocketBool', "Reflect")
|
|
|
|
|
|
|
|
self.outputs.new('NodeSocketFloat', "Time")
|
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class VectorNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Vector node'''
|
|
|
|
bl_idname = 'VectorNodeType'
|
|
|
|
# Label for nice name display
|
|
|
|
bl_label = 'Vector'
|
|
|
|
# Icon identifier
|
|
|
|
bl_icon = 'CURVE_PATH'
|
|
|
|
|
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketFloat', "X")
|
|
|
|
self.inputs.new('NodeSocketFloat', "Y")
|
|
|
|
self.inputs.new('NodeSocketFloat', "Z")
|
|
|
|
|
|
|
|
self.outputs.new('NodeSocketVector', "Vector")
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class ScaleValueNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Scale value node'''
|
|
|
|
bl_idname = 'ScaleValueNodeType'
|
|
|
|
bl_label = 'ScaleValue'
|
|
|
|
bl_icon = 'CURVE_PATH'
|
|
|
|
|
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketFloat', "Factor")
|
|
|
|
self.inputs[-1].default_value = 1.0
|
|
|
|
self.inputs.new('NodeSocketFloat', "Value")
|
|
|
|
|
|
|
|
self.outputs.new('NodeSocketFloat', "Value")
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class SineNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Sine node'''
|
|
|
|
bl_idname = 'SineNodeType'
|
|
|
|
bl_label = 'Sine'
|
|
|
|
bl_icon = 'CURVE_PATH'
|
|
|
|
|
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketFloat', "Value")
|
|
|
|
|
|
|
|
self.outputs.new('NodeSocketFloat', "Value")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
class ThisNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''This node'''
|
|
|
|
bl_idname = 'ThisNodeType'
|
|
|
|
bl_label = 'This'
|
|
|
|
bl_icon = 'GAME'
|
|
|
|
|
|
|
|
def init(self, context):
|
|
|
|
self.outputs.new('NodeSocketShader', "Target")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
class PickerNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Picker node'''
|
|
|
|
bl_idname = 'PickerNodeType'
|
|
|
|
bl_label = 'Picker'
|
|
|
|
bl_icon = 'GAME'
|
|
|
|
property0 = StringProperty(name = "Object", default="")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
def init(self, context):
|
|
|
|
self.outputs.new('NodeSocketShader', "Target")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
def draw_buttons(self, context, layout):
|
|
|
|
layout.prop_search(self, "property0", context.scene, "objects", text = "")
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class SetTransformNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Set transform node'''
|
|
|
|
bl_idname = 'SetTransformNodeType'
|
|
|
|
bl_label = 'Set Transform'
|
|
|
|
bl_icon = 'GAME'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketShader', "Target")
|
|
|
|
self.inputs.new('NodeSocketShader', "Transform")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
class SetVisibleNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Set visible node'''
|
|
|
|
bl_idname = 'SetVisibleNodeType'
|
|
|
|
bl_label = 'Set Visible'
|
|
|
|
bl_icon = 'GAME'
|
2016-08-14 21:08:01 +02:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketShader', "Target")
|
|
|
|
self.inputs.new('NodeSocketShader', "Bool")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
class GreaterThanNode(Node, ArmLogicTreeNode):
|
2016-09-28 00:00:59 +02:00
|
|
|
'''Greater than node'''
|
|
|
|
bl_idname = 'GreaterThanNodeType'
|
|
|
|
bl_label = 'Greater Than'
|
|
|
|
bl_icon = 'GAME'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-09-28 00:00:59 +02:00
|
|
|
def init(self, context):
|
|
|
|
self.inputs.new('NodeSocketFloat', "Value 1")
|
|
|
|
self.inputs.new('NodeSocketFloat', "Value 2")
|
|
|
|
self.outputs.new('NodeSocketBool', "Bool")
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
### Node Categories ###
|
2015-10-30 13:23:09 +01:00
|
|
|
import nodeitems_utils
|
|
|
|
from nodeitems_utils import NodeCategory, NodeItem
|
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class ObjectNodeCategory(NodeCategory):
|
2016-09-28 00:00:59 +02:00
|
|
|
@classmethod
|
|
|
|
def poll(cls, context):
|
|
|
|
return context.space_data.tree_type == 'ArmLogicTreeType'
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
class TypeNodeCategory(NodeCategory):
|
2016-09-28 00:00:59 +02:00
|
|
|
@classmethod
|
|
|
|
def poll(cls, context):
|
|
|
|
return context.space_data.tree_type == 'ArmLogicTreeType'
|
2016-08-14 21:08:01 +02:00
|
|
|
|
|
|
|
class MathNodeCategory(NodeCategory):
|
2016-09-28 00:00:59 +02:00
|
|
|
@classmethod
|
|
|
|
def poll(cls, context):
|
|
|
|
return context.space_data.tree_type == 'ArmLogicTreeType'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
2016-08-14 21:08:01 +02:00
|
|
|
class LogicNodeCategory(NodeCategory):
|
2016-09-28 00:00:59 +02:00
|
|
|
@classmethod
|
|
|
|
def poll(cls, context):
|
|
|
|
return context.space_data.tree_type == 'ArmLogicTreeType'
|
2015-10-30 13:23:09 +01:00
|
|
|
|
|
|
|
node_categories = [
|
2016-09-28 00:00:59 +02:00
|
|
|
ObjectNodeCategory("LOGICTARGETNODES", "Target", items=[
|
|
|
|
NodeItem("ThisNodeType"),
|
|
|
|
NodeItem("PickerNodeType"),
|
|
|
|
NodeItem("SetTransformNodeType"),
|
|
|
|
NodeItem("SetVisibleNodeType"),
|
|
|
|
]),
|
|
|
|
TypeNodeCategory("LOGICTYPENODES", "Type", items=[
|
|
|
|
NodeItem("TransformNodeType"),
|
|
|
|
NodeItem("VectorNodeType"),
|
|
|
|
]),
|
|
|
|
MathNodeCategory("LOGICMATHNODES", "Math", items=[
|
|
|
|
NodeItem("TimeNodeType"),
|
|
|
|
NodeItem("ScaleValueNodeType"),
|
|
|
|
NodeItem("SineNodeType"),
|
|
|
|
]),
|
|
|
|
LogicNodeCategory("LOGICLOGICNODES", "Logic", items=[
|
|
|
|
NodeItem("GreaterThanNodeType"),
|
|
|
|
]),
|
2016-08-14 21:08:01 +02:00
|
|
|
]
|
2015-10-30 13:23:09 +01:00
|
|
|
|
|
|
|
def register():
|
2016-09-28 00:00:59 +02:00
|
|
|
bpy.utils.register_module(__name__)
|
|
|
|
try:
|
|
|
|
nodeitems_utils.register_node_categories("ARM_LOGIC_NODES", node_categories)
|
|
|
|
except:
|
|
|
|
pass
|
2015-10-30 13:23:09 +01:00
|
|
|
|
|
|
|
def unregister():
|
2016-09-28 00:00:59 +02:00
|
|
|
nodeitems_utils.unregister_node_categories("ARM_LOGIC_NODES")
|
|
|
|
bpy.utils.unregister_module(__name__)
|