From 3a2952ced82b0dd343e39607ae5218f7e0350289 Mon Sep 17 00:00:00 2001 From: niacdoial Date: Sun, 6 Sep 2020 19:06:28 +0200 Subject: [PATCH 1/2] Added node versioning - changed the way custom node sockets are handled at several places - updated the `replaceAll` and `replace` functions used to perform node replacements - renamed and improved the NodeReplacement [new name] class, which represents a replacement task - added an arm_version property to all logic nodes, as well as a `get_replacement_node` method (to be overridden for each node) - added an option to declare a node as obselete in add_node() (useful in order to have the node defined, but out of the menu) - added classes for UI popups linked to node updates, as well as an operator dedicated to said node update Thanks to MoritzBrueckner for part of the ground work! --- blender/arm/logicnode/arm_nodes.py | 116 +++++++++- blender/arm/logicnode/arm_sockets.py | 136 +++++++----- .../logicnode/transform/LN_rotate_object.py | 2 + .../transform/LN_rotate_object_around_axis.py | 15 +- blender/arm/logicnode/variable/LN_vector.py | 1 - blender/arm/make_logic.py | 61 +++--- blender/arm/nodes_logic.py | 206 +++++++++++------- blender/arm/props.py | 1 + blender/arm/props_ui.py | 195 ++++++++++++++++- 9 files changed, 565 insertions(+), 168 deletions(-) diff --git a/blender/arm/logicnode/arm_nodes.py b/blender/arm/logicnode/arm_nodes.py index c9c3f49c..9df7bd58 100644 --- a/blender/arm/logicnode/arm_nodes.py +++ b/blender/arm/logicnode/arm_nodes.py @@ -1,6 +1,6 @@ import itertools from collections import OrderedDict -from typing import Any, Generator, List, Optional, Type +from typing import Any, Generator, List, Optional, Type, Dict from typing import OrderedDict as ODict # Prevent naming conflicts import bpy.types @@ -19,10 +19,41 @@ array_nodes = dict() class ArmLogicTreeNode(bpy.types.Node): + def init(self, context): + # make sure a given node knows the version of the NodeClass from when it was created + if isinstance(type(self).arm_version, int): + self.arm_version = type(self).arm_version + else: + self.arm_version = 1 + @classmethod def poll(cls, ntree): return ntree.bl_idname == 'ArmLogicTreeType' + def get_replacement_node(self, node_tree: bpy.types.NodeTree): + # needs to be overridden by individual node classes with arm_version>1 + """(only called if the node's version is inferior to the node class's version) + Help with the node replacement process, by explaining how a node (`self`) should be replaced. + This method can either return a NodeReplacement object (see `nodes_logic.py`), or a brand new node. + + If a new node is returned, then the following needs to be already set: + - the node's links to the other nodes + - the node's properties + - the node inputs's default values + + If more than one node need to be created (for example, if an input needs a type conversion after update), + please return all the nodes in a list. + + please raise a LookupError specifically when the node's version isn't handled by the function. + + note that the lowest 'defined' version should be 1. if the node's version is 0, it means that it has been saved before versioning was a thing. + NODES OF VERSION 1 AND VERSION 0 SHOULD HAVE THE SAME CONTENTS + """ + if self.arm_version==0 and type(self).arm_version == 1: + return NodeReplacement.Identity(self) # in case someone doesn't implement this function, but the node has version 0. + else: + raise LookupError(f"the current node class, {repr(type(self)):s}, does not implement the getReplacementNode method, even though it has updated") + def add_input(self, socket_type: str, socket_name: str, default_value: Any = None, is_var: bool = False) -> bpy.types.NodeSocket: """Adds a new input socket to the node. @@ -58,6 +89,82 @@ class ArmLogicTreeNode(bpy.types.Node): return socket +class NodeReplacement: + """ + Represents a simple replacement rule, this can replace nodes of one type to nodes of a second type. + However, it is fairly limited. For instance, it assumes there are no changes in the type of the inputs or outputs + Second, it also assumes that node properties (especially EnumProperties) keep the same possible values. + + - from_node, from_node_version: the type of node to be removed, and its version number + - to_node, to_node_version: the type of node which takes from_node's place, and its version number + - *_socket_mapping: a map which defines how the sockets of the old node shall be connected to the new node + {1: 2} means that anything connected to the socket with index 1 on the original node will be connected to the socket with index 2 on the new node + - property_mapping: the mapping used to transfer the values of the old node's properties to the new node's properties. + {"property0": "property1"} mean that the value of the new node's property1 should be the old node's property0's value. + - input_defaults: a mapping used to give default values to the inputs which aren't overridden otherwise. + - property_defaults: a mapping used to define the value of the new node's properties, when they aren't overridden otherwise. + """ + + def __init__(self, from_node: str, from_node_version: int, to_node: str, to_node_version: int, + in_socket_mapping: Dict[int, int], out_socket_mapping: Dict[int, int], property_mapping: Dict[str, str] = {}, + input_defaults: Dict[int, any] = {}, property_defaults: Dict[str, any]={}): + self.from_node = from_node + self.to_node = to_node + self.from_node_version = from_node_version + self.to_node_version = to_node_version + + self.in_socket_mapping = in_socket_mapping + self.out_socket_mapping = out_socket_mapping + self.property_mapping = property_mapping + + self.input_defaults = input_defaults + self.property_defaults = property_defaults + + @classmethod + def Identity(cls, node: ArmLogicTreeNode): + """returns a NodeReplacement that does nothing, while operating on a given node. + WARNING: it assumes that all node properties are called "property0", "property1", etc... + """ + in_socks = {i:i for i in range(len(node.inputs))} + out_socks = {i:i for i in range(len(node.outputs))} + props = {} + i=0 + while hasattr(node, f'property{i:d}'): + props[f'property{i:d}'] = f'property{i:d}' + i +=1 + return NodeReplacement( + node.bl_idname, node.arm_version, node.bl_idname, type(node).arm_version, + in_socket_mapping=in_socks, out_socket_mapping=out_socks, + property_mapping=props + ) + + def chain_with(self, other): + """modify the current NodeReplacement by "adding" a second replacement after it""" + if self.to_node != other.from_node or self.to_node_version != other.from_node_version: + raise TypeError('the given NodeReplacement-s could not be chained') + self.to_node = other.to_node + self.to_node_version = other.to_node_version + + for i1, i2 in self.in_socket_mapping.items(): + i3 = other.in_socket_mapping[i2] + self.in_socket_mapping[i1] = i3 + for i1, i2 in self.out_socket_mapping.items(): + i3 = other.out_socket_mapping[i2] + self.out_socket_mapping[i1] = i3 + for p1, p2 in self.property_mapping.items(): + p3 = other.property_mapping[p2] + self.property_mapping[p1] = p3 + + old_input_defaults = self.input_defaults + self.input_defaults = other.input_defaults.copy() + for i, x in old_input_defaults.items(): + self.input_defaults[ other.in_socket_mapping[i] ] = x + + old_property_defaults = self.property_defaults + self.property_defaults = other.property_defaults.copy() + for p, x in old_property_defaults.items(): + self.property_defaults[ other.property_mapping[p] ] = x + class ArmNodeAddInputButton(bpy.types.Operator): """Add new input""" bl_idname = 'arm.node_add_input' @@ -317,7 +424,7 @@ def add_category(category: str, section: str = 'default', icon: str = 'BLANK1', return None -def add_node(node_type: Type[bpy.types.Node], category: str, section: str = 'default') -> None: +def add_node(node_type: Type[bpy.types.Node], category: str, section: str = 'default', is_obselete: bool = False) -> None: """ Registers a node to the given category. If no section is given, the node is put into the default section that does always exist. @@ -330,6 +437,11 @@ def add_node(node_type: Type[bpy.types.Node], category: str, section: str = 'def nodes.append(node_type) node_category = get_category(category) + if is_obselete: + # We need the obselete nodes to be registered in order to have them replaced, + # but do not add them to the menu. + return + if node_category is None: node_category = add_category(category) diff --git a/blender/arm/logicnode/arm_sockets.py b/blender/arm/logicnode/arm_sockets.py index fd00380f..91f98476 100644 --- a/blender/arm/logicnode/arm_sockets.py +++ b/blender/arm/logicnode/arm_sockets.py @@ -5,78 +5,102 @@ 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' + # note: trying to use the `type` property will fail. All custom nodes will have "VALUE" as a type, because it is the default. + arm_socket_type = 'NONE' + # please also declare a property named "default_value_raw" of arm_socket_type isn't "NONE" 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) +class ArmActionSocket(ArmCustomSocket): + bl_idname = 'ArmNodeSocketAction' + bl_label = 'Action Socket' + arm_socket_type = 'NONE' + + 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(ArmCustomSocket): + bl_idname = 'ArmNodeSocketAnimAction' + bl_label = 'Action Socket' + arm_socket_type = 'STRING' + + default_value_get: PointerProperty(name='Action', type=bpy.types.Action) # legacy version of the line after this one + default_value_raw: PointerProperty(name='Action', type=bpy.types.Action) + + def __init__(self): + super().__init__() + if self.default_value_get is not None: + self.default_value_raw = self.default_value_get + self.default_value_get = None def get_default_value(self): - if self.default_value_get is None: + if self.default_value_raw 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]) + if self.default_value_raw.name not in bpy.data.actions: + return self.default_value_raw.name + name = arm.utils.asset_name(bpy.data.actions[self.default_value_raw.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_raw', bpy.data, 'actions', icon='NONE', text='') + + def draw_color(self, context, node): + return 0.8, 0.8, 0.8, 1 + + +class ArmArraySocket(ArmCustomSocket): + bl_idname = 'ArmNodeSocketArray' + bl_label = 'Array Socket' + arm_socket_type = 'NONE' + + 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(ArmCustomSocket): + bl_idname = 'ArmNodeSocketObject' + bl_label = 'Object Socket' + arm_socket_type = 'OBJECT' + + default_value_get: PointerProperty(name='Object', type=bpy.types.Object) # legacy version of the line after this one + default_value_raw: PointerProperty(name='Object', type=bpy.types.Object) + + def __init__(self): + super().__init__() + if self.default_value_get is not None: + self.default_value_raw = self.default_value_get + self.default_value_get = None + + def get_default_value(self): + if self.default_value_raw is None: + return '' + if self.default_value_raw.name not in bpy.data.objects: + return self.default_value_raw.name + return arm.utils.asset_name(bpy.data.objects[self.default_value_raw.name]) def draw(self, context, layout, node, text): if self.is_output: @@ -85,7 +109,7 @@ class ArmObjectSocket(NodeSocket): 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) + row.prop_search(self, 'default_value_raw', context.scene, 'objects', icon='NONE', text=self.name) def draw_color(self, context, node): return 0.15, 0.55, 0.75, 1 diff --git a/blender/arm/logicnode/transform/LN_rotate_object.py b/blender/arm/logicnode/transform/LN_rotate_object.py index 3bbf8c7c..e8612717 100644 --- a/blender/arm/logicnode/transform/LN_rotate_object.py +++ b/blender/arm/logicnode/transform/LN_rotate_object.py @@ -4,8 +4,10 @@ class RotateObjectNode(ArmLogicTreeNode): """Rotate object node""" bl_idname = 'LNRotateObjectNode' bl_label = 'Rotate Object' + arm_version = 1 def init(self, context): + super().init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Euler Angles') diff --git a/blender/arm/logicnode/transform/LN_rotate_object_around_axis.py b/blender/arm/logicnode/transform/LN_rotate_object_around_axis.py index 3afc9821..e3e2fc58 100644 --- a/blender/arm/logicnode/transform/LN_rotate_object_around_axis.py +++ b/blender/arm/logicnode/transform/LN_rotate_object_around_axis.py @@ -6,16 +6,29 @@ class RotateObjectAroundAxisNode(ArmLogicTreeNode): bl_label = 'Rotate Object Around Axis' bl_description = 'Rotate Object Around Axis (Depreciated: use "Rotate Object")' bl_icon = 'ERROR' + arm_version=2 def init(self, context): + super().init(context) + print("init() getting called") self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Axis', default_value=[0, 0, 1]) self.add_input('NodeSocketFloat', 'Angle') self.add_output('ArmNodeSocketAction', 'Out') + def get_replacement_node(self, node_tree: bpy.types.NodeTree): + if self.arm_version not in (0, 1): + raise LookupError() + + return NodeReplacement( + 'LNRotateObjectAroundAxisNode', self.arm_version, 'LNRotateObjectNode', 1, + in_socket_mapping = {0:0, 1:1, 2:2, 3:3}, out_socket_mapping={0:0}, + property_defaults={'property0': "Angle Axies (Radians)"} + ) + def draw_buttons(self, context, layout): row = layout.row(align=True) row.label(text='Depreciated. Consider using "Rotate Object"') -add_node(RotateObjectAroundAxisNode, category=MODULE_AS_CATEGORY, section='rotation') +add_node(RotateObjectAroundAxisNode, category=MODULE_AS_CATEGORY, section='rotation', is_obselete=True) diff --git a/blender/arm/logicnode/variable/LN_vector.py b/blender/arm/logicnode/variable/LN_vector.py index 7b660710..452b5b03 100644 --- a/blender/arm/logicnode/variable/LN_vector.py +++ b/blender/arm/logicnode/variable/LN_vector.py @@ -12,5 +12,4 @@ class VectorNode(ArmLogicTreeNode): self.add_output('NodeSocketVector', 'Vector', is_var=True) - add_node(VectorNode, category=MODULE_AS_CATEGORY) diff --git a/blender/arm/make_logic.py b/blender/arm/make_logic.py index 0cc8389e..139a0cba 100755 --- a/blender/arm/make_logic.py +++ b/blender/arm/make_logic.py @@ -246,40 +246,39 @@ def get_root_nodes(node_group): def build_default_node(inp: bpy.types.NodeSocket): """Creates a new node to give a not connected input socket a value""" - null_node = 'new armory.logicnode.NullNode(this)' - if isinstance(inp, arm.logicnode.arm_sockets.ArmCustomSocket): + is_custom_socket = isinstance(inp, arm.logicnode.arm_sockets.ArmCustomSocket) + + if is_custom_socket: # ArmCustomSockets need to implement get_default_value() default_value = inp.get_default_value() - if default_value is None: - return null_node if isinstance(default_value, str): - default_value = f'"{default_value}"' + default_value = '"{:s}"'.format( default_value.replace('"', '\\"') ) + inp_type = inp.arm_socket_type # any custom socket's `type` is "VALUE". might as well have valuable type information for custom nodes as well. + else: + default_value = inp.default_value + inp_type = inp.type + + if inp_type == 'VECTOR': + return f'new armory.logicnode.VectorNode(this, {default_value[0]}, {default_value[1]}, {default_value[2]})' + elif inp_type == 'RGBA': + return f'new armory.logicnode.ColorNode(this, {default_value[0]}, {default_value[1]}, {default_value[2]}, {default_value[3]})' + elif inp_type == 'RGB': + return f'new armory.logicnode.ColorNode(this, {default_value[0]}, {default_value[1]}, {default_value[2]})' + elif inp_type == 'VALUE': + return f'new armory.logicnode.FloatNode(this, {default_value})' + elif inp_type == 'INT': + return f'new armory.logicnode.IntegerNode(this, {default_value})' + elif inp_type == 'BOOLEAN': + return f'new armory.logicnode.BooleanNode(this, {str(default_value).lower()})' + elif inp_type == 'STRING': + return f'new armory.logicnode.StringNode(this, {default_value})' + elif inp_type == 'NONE': + return 'new armory.logicnode.NullNode(this)' + elif inp_type == 'OBJECT': + return f'new armory.logicnode.ObjectNode(this, {default_value})' + elif is_custom_socket: return f'new armory.logicnode.DynamicNode(this, {default_value})' - - if inp.bl_idname == 'ArmNodeSocketAction' or inp.bl_idname == 'ArmNodeSocketArray': - return null_node - if inp.bl_idname == 'ArmNodeSocketObject': - return f'new armory.logicnode.ObjectNode(this, "{inp.get_default_value()}")' - if inp.bl_idname == 'ArmNodeSocketAnimAction': - # Backslashes are not allowed in f-strings so we need this variable - default_value = inp.get_default_value().replace("\"", "\\\"") - return f'new armory.logicnode.StringNode(this, "{default_value}")' - if inp.type == 'VECTOR': - return f'new armory.logicnode.VectorNode(this, {inp.default_value[0]}, {inp.default_value[1]}, {inp.default_value[2]})' - elif inp.type == 'RGBA': - return f'new armory.logicnode.ColorNode(this, {inp.default_value[0]}, {inp.default_value[1]}, {inp.default_value[2]}, {inp.default_value[3]})' - elif inp.type == 'RGB': - return f'new armory.logicnode.ColorNode(this, {inp.default_value[0]}, {inp.default_value[1]}, {inp.default_value[2]})' - elif inp.type == 'VALUE': - return f'new armory.logicnode.FloatNode(this, {inp.default_value})' - elif inp.type == 'INT': - return f'new armory.logicnode.IntegerNode(this, {inp.default_value})' - elif inp.type == 'BOOLEAN': - return f'new armory.logicnode.BooleanNode(this, {str(inp.default_value).lower()})' - elif inp.type == 'STRING': - default_value = inp.default_value.replace("\"", "\\\"") - return f'new armory.logicnode.StringNode(this, "{default_value}")' - - return null_node + else: + return 'new armory.logicnode.NullNode(this)' diff --git a/blender/arm/nodes_logic.py b/blender/arm/nodes_logic.py index 97c0c718..3192a5fe 100755 --- a/blender/arm/nodes_logic.py +++ b/blender/arm/nodes_logic.py @@ -1,21 +1,23 @@ from typing import Callable +import os.path +import time import webbrowser import bpy from bpy.props import BoolProperty, StringProperty -from bpy.types import NodeTree +#from bpy.types import NodeTree, Node 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 +from arm.logicnode import * registered_nodes = [] registered_categories = [] -class ArmLogicTree(NodeTree): +class ArmLogicTree(bpy.types.NodeTree): """Logic nodes""" bl_idname = 'ArmLogicTreeType' bl_label = 'Logic Node Editor' @@ -278,89 +280,140 @@ class ARMAddSetVarNode(bpy.types.Operator): self.setNodeRef = setNode return({'FINISHED'}) -# node replacement code -replacements = {} -def add_replacement(item): - replacements[item.from_node] = item +def replace(tree: bpy.types.NodeTree, node: bpy.types.Node): + """Replaces the given node with its replacement.""" -def get_replaced_nodes(): - return replacements.keys() - -def get_replacement_for_node(node): - return replacements[node.bl_idname] - -class Replacement: - # represents a single replacement rule, this can replace exactly one node with another - # - # from_node: the node type to be removed - # to_node: the node type which takes from_node's place - # *SocketMapping: a map which defines how the sockets of the old node shall be connected to the new node - # {1: 2} means that anything connected to the socket with index 1 on the original node will be connected to the socket with index 2 on the new node - def __init__(self, from_node, to_node, in_socket_mapping, out_socket_mapping, property_mapping): - self.from_node = from_node - self.to_node = to_node - self.in_socket_mapping = in_socket_mapping - self.out_socket_mapping = out_socket_mapping - self.property_mapping = property_mapping - -# actual replacement code -def replace(tree, node): - replacement = get_replacement_for_node(node) - newnode = tree.nodes.new(replacement.to_node) - newnode.location = node.location - newnode.parent = node.parent - - parent = node.parent - while parent is not None: - newnode.location[0] += parent.location[0] - newnode.location[1] += parent.location[1] - parent = parent.parent + # the node can either return a NodeReplacement object (for simple replacements) + # or a brand new node, for more complex stuff. + response = node.get_replacement_node(tree) - - # map properties - for prop in replacement.property_mapping.keys(): - setattr(newnode, replacement.property_mapping.get(prop), getattr(node, prop)) + if isinstance(response, bpy.types.Node): + newnode = response + # some misc. properties + newnode.parent = node.parent + newnode.location = node.location + newnode.select = node.select + elif isinstance(response, list): # a list of nodes: + for node in response: + newnode.parent = node.parent + newnode.location = node.location + newnode.select = node.select + elif isinstance(response, arm_nodes.NodeReplacement): + replacement = response + # if the returned object is a NodeReplacement, check that it corresponds to the node (also, create the new node) + if node.bl_idname != replacement.from_node or node.arm_version != replacement.from_node_version: + raise LookupError("the provided NodeReplacement doesn't seem to correspond to the node needing replacement") + newnode = tree.nodes.new(response.to_node) + if newnode.arm_version != replacement.to_node_version: + raise LookupError("the provided NodeReplacement doesn't seem to correspond to the node needing replacement") - # map unconnected inputs - for in_socket in replacement.in_socket_mapping.keys(): - if not node.inputs[in_socket].is_linked: - newnode.inputs[replacement.in_socket_mapping.get(in_socket)].default_value = node.inputs[in_socket].default_value + # some misc. properties + newnode.parent = node.parent + newnode.location = node.location + newnode.select = node.select - # map connected inputs - for link in tree.links: - if link.from_node == node: - # this is an output link - for i in range(0, len(node.outputs)): - # check the outputs - # i represents the socket index - # do we want to remap it & is it the one referenced in the current link - if i in replacement.out_socket_mapping.keys() and node.outputs[i] == link.from_socket: - tree.links.new(newnode.outputs[replacement.out_socket_mapping.get(i)], link.to_socket) - - if link.to_node == node: - # this is an input link - for i in range(0, len(node.inputs)): - # check the inputs - # i represents the socket index - # do we want to remap it & is it the one referenced socket in the current link - if i in replacement.in_socket_mapping.keys() and node.inputs[i] == link.to_socket: - tree.links.new(newnode.inputs[replacement.in_socket_mapping.get(i)], link.from_socket) + # now, use the `replacement` to hook up the new node correctly + # start by applying defaults + for prop_name, prop_value in replacement.property_defaults.items(): + setattr(newnode, prop_name, prop_value) + for input_id, input_value in replacement.input_defaults.items(): + input_socket = newnode.inputs[input_id] + if isinstance(input_socket, arm_sockets.ArmCustomSocket): + if input_socket.arm_socket_type != 'NONE': + input_socket.default_value_raw = input_value + else: + input_socket.default_value = input_value + + # map properties + for src_prop_name, dest_prop_name in replacement.property_mapping.items(): + setattr(newnode, dest_prop_name, getattr(node, src_prop_name)) + + # map inputs + for src_socket_id, dest_socket_id in replacement.in_socket_mapping.items(): + src_socket = node.inputs[src_socket_id] + dest_socket = newnode.inputs[dest_socket_id] + if src_socket.is_linked: + # an input socket only has one link + datasource_socket = src_socket.links[0].from_socket + tree.links.new(datasource_socket, dest_socket) + else: + if isinstance(dest_socket, arm_sockets.ArmCustomSocket): + if dest_socket.arm_socket_type != 'NONE': + dest_socket.default_value_raw = src_socket.default_value_raw + else: + dest_socket.default_value = src_socket.default_value + + # map outputs + for src_socket_id, dest_socket_id in replacement.out_socket_mapping.items(): + dest_socket = newnode.outputs[dest_socket_id] + for link in node.outputs[src_socket_id].links: + tree.links.new(dest_socket, link.to_socket) + else: + print(response) tree.nodes.remove(node) + def replaceAll(): + print('replAll called') + global replacement_errors + list_of_errors = set() for tree in bpy.data.node_groups: if tree.bl_idname == "ArmLogicTreeType": for node in tree.nodes: - if node.bl_idname in get_replaced_nodes(): - print("Replacing "+ node.bl_idname+ " in Tree "+tree.name) - replace(tree, node) - - + if not isinstance(type(node).arm_version, int): + continue # TODO: that's a line to remove when all node classes will have their own version set. + if not node.is_registered_node_type(): + # node type deleted. That's unusual. Or it has been replaced for a looong time. + list_of_errors.add( ('unregistered', None, tree.name) ) + if node.arm_version < type(node).arm_version: + try: + print(f"Replacing {node.bl_idname} in tree {tree.name}") + replace(tree, node) + except LookupError as err: + list_of_errors.add( ('update failed', node.bl_idname, tree.name) ) + except Exception as err: + list_of_errors.add( ('misc.', node.bl_idname, tree.name) ) + elif node.arm_version > type(node).arm_version: + list_of_errors.add( ('future version', node.bl_idname, tree.name) ) + + # if possible, make a popup about the errors. + # also write an error report. + if len(list_of_errors) > 0: + print('there were errors in node replacement') + basedir = os.path.dirname(bpy.data.filepath) + reportfile = os.path.join( + basedir, 'node_update_failure.{:s}.txt'.format( + time.strftime("%Y-%m-%dT%H-%M-%S%z") + ) + ) + reportf = open(reportfile, 'w') + for error_type, node_class, tree_name in list_of_errors: + if error_type == 'unregistered': + print(f"A node whose class doesn't exist was found in node tree \"{tree_name}\"", file=reportf) + elif error_type == 'update failed': + print(f"A node of type {node_class} in tree \"{tree_name}\" failed to be updated, " + f"because update isn't implemented (anymore?) for this version of the node", file=reportf) + elif error_type == 'future version': + print(f"A node of type {node_class} in tree \"{tree_name}\" seemingly comes from a future version of armory. " + f"Please check whether your version of armory is up to date", file=reportf) + elif error_type == 'misc.': + print(f"", file=reportf) + else: + print(f"Whoops, we don't know what this error type (\"{error_type}\") means. You might want to report a bug here. " + f"All we know is that it comes form a node of class {node_class} in the node tree called \"{tree_name}\".", file=reportf) + reportf.close() + + replacement_errors = list_of_errors + bpy.ops.arm.show_node_update_errors() + replacement_errors = None + + class ReplaceNodesOperator(bpy.types.Operator): - '''Automatically replaces deprecated nodes.''' + """Automatically replaces deprecated nodes.""" bl_idname = "node.replace" bl_label = "Replace Nodes" + bl_description = "Replace deprecated nodes" def execute(self, context): replaceAll() @@ -368,11 +421,12 @@ class ReplaceNodesOperator(bpy.types.Operator): @classmethod def poll(cls, context): - return context.space_data != None and context.space_data.type == 'NODE_EDITOR' + return context.space_data is not None and context.space_data.type == 'NODE_EDITOR' -# TODO: deprecated -# Input Replacement Rules -# add_replacement(Replacement("LNOnGamepadNode", "LNMergedGamepadNode", {0: 0}, {0: 0}, {"property0": "property0", "property1": "property1"})) + +# Node Replacement Rules (TODO port them) +#add_replacement(NodeReplacement("LNOnGamepadNode", "LNMergedGamepadNode", {0: 0}, {0: 0}, {"property0": "property0", "property1": "property1"})) +#add_replacement(NodeReplacement("LNOnKeyboardNode", "LNMergedKeyboardNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) def register(): arm_sockets.register() diff --git a/blender/arm/props.py b/blender/arm/props.py index d2b63a9b..c1f8fc52 100755 --- a/blender/arm/props.py +++ b/blender/arm/props.py @@ -286,6 +286,7 @@ def init_properties(): bpy.types.Node.arm_material_param = BoolProperty(name="Parameter", description="Control this node from script", default=False) bpy.types.Node.arm_logic_id = StringProperty(name="ID", description="Nodes with equal identifier will share data", default='') bpy.types.Node.arm_watch = BoolProperty(name="Watch", description="Watch value of this node in debug console", default=False) + bpy.types.Node.arm_version = IntProperty(name="Node Version", description="The version of an instanced node", default=0) # Particles bpy.types.ParticleSettings.arm_count_mult = FloatProperty(name="Multiply Count", description="Multiply particle count when rendering in Armory", default=1.0) bpy.types.ParticleSettings.arm_loop = BoolProperty(name="Loop", description="Loop this particle system", default=False) diff --git a/blender/arm/props_ui.py b/blender/arm/props_ui.py index 52410d67..72024ca0 100644 --- a/blender/arm/props_ui.py +++ b/blender/arm/props_ui.py @@ -1,4 +1,5 @@ import os +import time import bpy @@ -9,6 +10,7 @@ import arm.make as make import arm.make_state as state import arm.props as props import arm.props_properties +import arm.nodes_logic import arm.proxy import arm.utils @@ -1773,6 +1775,191 @@ class ARM_PT_MaterialNodePanel(bpy.types.Panel): if n != None and (n.bl_idname == 'ShaderNodeRGB' or n.bl_idname == 'ShaderNodeValue' or n.bl_idname == 'ShaderNodeTexImage'): layout.prop(context.active_node, 'arm_material_param') +class ARM_OT_ShowFileVersionInfo(bpy.types.Operator): + bl_label = 'Show old file version info' + bl_idname = 'arm.show_old_file_version_info' + bl_description = ('Displays an info panel that warns about opening a file' + 'which was created in a previous version of Armory') + # bl_options = {'INTERNAL'} + + wrd = None + + def draw_message_box(self, context): + file_version = ARM_OT_ShowFileVersionInfo.wrd.arm_version + current_version = props.arm_version + + + layout = self.layout + layout = layout.column(align=True) + layout.alignment = 'EXPAND' + + if current_version == file_version: + layout.label('This file was saved in', icon='INFO') + layout.label('the current Armory version', icon='BLANK1') + layout.separator() + layout.label(f'(version: {current_version}') + row = layout.row(align=True) + row.active_default = True + row.operator('arm.discard_popup', text='Ok') + + # this will help order versions better, somewhat. + # note: this is NOT complete + current_version = tuple( current_version.split('.') ) + file_version = tuple( file_version.split('.') ) + + if current_version > file_version: + layout.label(text='Warning: This file was saved in a', icon='ERROR') + layout.label(text='previous version of Armory!', icon='BLANK1') + layout.separator() + + layout.label(text='Please inform yourself about breaking changes!', icon='BLANK1') + layout.label(text=f'File saved in: {file_version}', icon='BLANK1') + layout.label(text=f'Current version: {current_version}', icon='BLANK1') + layout.separator() + layout.separator() + layout.label(text='Should Armory try to automatically update', icon='BLANK1') + layout.label(text='the file to the current SDK version?', icon='BLANK1') + layout.separator() + + row = layout.row(align=True) + row.active_default = True + row.operator('arm.update_file_sdk', text='Yes') + row.active_default = False + row.operator('arm.discard_popup', text='No') + else: + layout.label(text='Warning: This file was saved in a', icon='ERROR') + layout.label(text='future version of Armory!', icon='BLANK1') + layout.separator() + + layout.label(text='It is impossible to downgrade a file,', icon='BLANK1') + layout.label(text='Something will probably be broken here.', icon='BLANK1') + layout.label(text=f'File saved in: {file_version}', icon='BLANK1') + layout.label(text=f'Current version: {current_version}', icon='BLANK1') + layout.separator() + layout.separator() + layout.label(text='Please check how this file was created', icon='BLANK1') + layout.separator() + + row = layout.row(align=True) + row.active_default = True + row.operator('arm.discard_popup', text='Ok') + + def execute(self, context): + ARM_OT_ShowFileVersionInfo.wrd = bpy.data.worlds['Arm'] + context.window_manager.popover(ARM_OT_ShowFileVersionInfo.draw_message_box, ui_units_x=16) + + return {"FINISHED"} + + +class ARM_OT_ShowNodeUpdateErrors(bpy.types.Operator): + bl_label = 'Show upgrade failure details' + bl_idname = 'arm.show_node_update_errors' + bl_description = ('Displays an info panel that shows the different errors that occurred when upgrading nodes') + + wrd = None # a helper internal variable + + def draw_message_box(self, context): + list_of_errors = arm.nodes_logic.replacement_errors.copy() + # note: list_of_errors is a set of tuples: `(error_type, node_class, tree_name)` + # where `error_type` can be "unregistered", "update failed", "future version" or "misc." + + file_version = ARM_OT_ShowNodeUpdateErrors.wrd.arm_version + current_version = props.arm_version + + # this will help order versions better, somewhat. + # note: this is NOT complete + current_version_2 = tuple( current_version.split('.') ) + file_version_2 = tuple( file_version.split('.') ) + is_armory_upgrade = (current_version_2 > file_version_2) + + error_types = set() + errored_trees = set() + errored_nodes = set() + for error_entry in list_of_errors: + error_types.add(error_entry[0]) + errored_nodes.add(error_entry[1]) + errored_trees.add(error_entry[2]) + + layout = self.layout + layout = layout.column(align=True) + layout.alignment = 'EXPAND' + + layout.label(text="Some nodes failed to be updated to the current armory version", icon="ERROR") + if current_version==file_version: + layout.label(text="(This might be because you are using a development snapshot, or a homemade version ;) )", icon='BLANK1') + elif not is_armory_upgrade: + layout.label(text="(Please note that it is not possible do downgrade nodes to a previous version either.", icon='BLANK1') + layout.label(text="This might be the cause of your problem.)", icon='BLANK1') + + layout.label(text=f'File saved in: {file_version}', icon='BLANK1') + layout.label(text=f'Current version: {current_version}', icon='BLANK1') + layout.separator() + + if 'update failed' in error_types: + layout.label(text="Some nodes do not have an update procedure to deal with the version saved in this file.", icon='BLANK1') + if current_version==file_version: + layout.label(text="(if you are a developer, this might be because you didn't implement it yet.)", icon='BLANK1') + if 'unregistered' in error_types: + if is_armory_upgrade: + layout.label(text='Some nodes seem to be too old to be understood by armory anymore', icon='BLANK1') + else: + layout.label(text="Some nodes are unknown to armory, either because they are too new or too old.", icon='BLANK1') + if 'future version' in error_types: + if is_armory_upgrade: + layout.label(text='Somehow, some nodes seem to have been created with a future version of armory.', icon='BLANK1') + else: + layout.label(text='Some nodes seem to have been created with a future version of armory.', icon='BLANK1') + if 'misc.' in error_types: + layout.label(text="Some nodes' update procedure failed to complete") + + layout.separator() + layout.label(text='the nodes impacted are the following:', icon='BLANK1') + for node in errored_nodes: + layout.label(text=f' {node}', icon='BLANK1') + layout.separator() + layout.label(text='the node trees impacted are the following:', icon='BLANK1') + for tree in errored_trees: + layout.label(text=f' "{tree}"', icon='BLANK1') + + layout.separator() + layout.label(text="A detailed error report has been saved next to the blender file.", icon='BLANK1') + layout.label(text="the file name is \"node_update_failure\", followed by the current time.", icon='BLANK1') + layout.separator() + + row = layout.row(align=True) + row.active_default = False + row.operator('arm.discard_popup', text='Ok') + + def execute(self, context): + ARM_OT_ShowNodeUpdateErrors.wrd = bpy.data.worlds['Arm'] + context.window_manager.popover(ARM_OT_ShowNodeUpdateErrors.draw_message_box, ui_units_x=32) + return {"FINISHED"} + + +class ARM_OT_UpdateFileSDK(bpy.types.Operator): + bl_idname = 'arm.update_file_sdk' + bl_label = 'Update file to current SDK version' + bl_description = bl_label + bl_options = {'INTERNAL'} + + def execute(self, context): + wrd = bpy.data.worlds['Arm'] + # This allows for seamless migration from ealier versions of Armory + for rp in wrd.arm_rplist: # TODO: deprecated + if rp.rp_gi != 'Off': + rp.rp_gi = 'Off' + rp.rp_voxelao = True + + # Replace deprecated nodes + arm.nodes_logic.replaceAll() + + wrd.arm_version = props.arm_version + wrd.arm_commit = props.arm_commit + + arm.make.clean() + print(f'Project updated to SDK {props.arm_version}. Please save the .blend file.') + + return {'FINISHED'} class ARM_OT_DiscardPopup(bpy.types.Operator): """Empty operator for discarding dialogs.""" @@ -1833,6 +2020,9 @@ def register(): bpy.utils.register_class(ArmSyncProxyButton) bpy.utils.register_class(ArmPrintTraitsButton) bpy.utils.register_class(ARM_PT_MaterialNodePanel) + bpy.utils.register_class(ARM_OT_UpdateFileSDK) + bpy.utils.register_class(ARM_OT_ShowFileVersionInfo) + bpy.utils.register_class(ARM_OT_ShowNodeUpdateErrors) bpy.utils.register_class(ARM_OT_DiscardPopup) bpy.types.VIEW3D_HT_header.append(draw_view3d_header) @@ -1844,6 +2034,9 @@ def unregister(): bpy.types.VIEW3D_HT_header.remove(draw_view3d_header) bpy.utils.unregister_class(ARM_OT_DiscardPopup) + bpy.utils.unregister_class(ARM_OT_ShowNodeUpdateErrors) + bpy.utils.unregister_class(ARM_OT_ShowFileVersionInfo) + bpy.utils.unregister_class(ARM_OT_UpdateFileSDK) bpy.utils.unregister_class(ARM_PT_ObjectPropsPanel) bpy.utils.unregister_class(ARM_PT_ModifiersPropsPanel) bpy.utils.unregister_class(ARM_PT_ParticlesPropsPanel) @@ -1890,4 +2083,4 @@ def unregister(): bpy.utils.unregister_class(ArmProxyApplyAllButton) bpy.utils.unregister_class(ArmSyncProxyButton) bpy.utils.unregister_class(ArmPrintTraitsButton) - bpy.utils.unregister_class(ARM_PT_MaterialNodePanel) \ No newline at end of file + bpy.utils.unregister_class(ARM_PT_MaterialNodePanel) From bdc33cb419e935e881813bbae9ca2dab045e217a Mon Sep 17 00:00:00 2001 From: niacdoial Date: Sun, 13 Sep 2020 11:27:58 +0200 Subject: [PATCH 2/2] added node versioning information to all node classes --- blender/arm/logicnode/animation/LN_action.py | 2 ++ .../arm/logicnode/animation/LN_animation_state.py | 2 ++ blender/arm/logicnode/animation/LN_blend_action.py | 2 ++ blender/arm/logicnode/animation/LN_bone_fk.py | 2 ++ blender/arm/logicnode/animation/LN_bone_ik.py | 2 ++ .../arm/logicnode/animation/LN_on_action_marker.py | 2 ++ blender/arm/logicnode/animation/LN_pause_action.py | 2 ++ .../arm/logicnode/animation/LN_pause_tilesheet.py | 2 ++ blender/arm/logicnode/animation/LN_play_action.py | 2 ++ .../arm/logicnode/animation/LN_play_action_from.py | 2 ++ .../arm/logicnode/animation/LN_play_tilesheet.py | 2 ++ blender/arm/logicnode/animation/LN_resume_action.py | 2 ++ .../arm/logicnode/animation/LN_resume_tilesheet.py | 2 ++ .../arm/logicnode/animation/LN_set_action_speed.py | 2 ++ .../arm/logicnode/animation/LN_set_parent_bone.py | 2 ++ .../logicnode/animation/LN_set_particle_speed.py | 2 ++ blender/arm/logicnode/array/LN_array.py | 2 ++ blender/arm/logicnode/array/LN_array_add.py | 2 ++ blender/arm/logicnode/array/LN_array_boolean.py | 2 ++ blender/arm/logicnode/array/LN_array_color.py | 2 ++ blender/arm/logicnode/array/LN_array_contains.py | 2 ++ blender/arm/logicnode/array/LN_array_float.py | 2 ++ blender/arm/logicnode/array/LN_array_get.py | 2 ++ blender/arm/logicnode/array/LN_array_integer.py | 2 ++ blender/arm/logicnode/array/LN_array_length.py | 2 ++ blender/arm/logicnode/array/LN_array_loop_node.py | 2 ++ blender/arm/logicnode/array/LN_array_object.py | 2 ++ blender/arm/logicnode/array/LN_array_pop.py | 2 ++ .../arm/logicnode/array/LN_array_remove_index.py | 2 ++ .../arm/logicnode/array/LN_array_remove_value.py | 2 ++ blender/arm/logicnode/array/LN_array_set.py | 2 ++ blender/arm/logicnode/array/LN_array_shift.py | 2 ++ blender/arm/logicnode/array/LN_array_slice.py | 2 ++ blender/arm/logicnode/array/LN_array_splice.py | 2 ++ blender/arm/logicnode/array/LN_array_string.py | 2 ++ blender/arm/logicnode/array/LN_array_vector.py | 2 ++ .../arm/logicnode/camera/LN_get_active_camera.py | 2 ++ blender/arm/logicnode/camera/LN_get_camera_fov.py | 2 ++ .../arm/logicnode/camera/LN_set_active_camera.py | 2 ++ blender/arm/logicnode/camera/LN_set_camera_fov.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_get_checkbox.py | 2 ++ .../logicnode/canvas/LN_canvas_get_input_text.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_get_location.py | 2 ++ blender/arm/logicnode/canvas/LN_canvas_get_pb.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_get_position.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_get_rotation.py | 2 ++ blender/arm/logicnode/canvas/LN_canvas_get_scale.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_get_slider.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_get_visible.py | 2 ++ blender/arm/logicnode/canvas/LN_canvas_set_asset.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_set_checkbox.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_set_location.py | 2 ++ blender/arm/logicnode/canvas/LN_canvas_set_pb.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_set_rotation.py | 2 ++ blender/arm/logicnode/canvas/LN_canvas_set_scale.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_set_slider.py | 2 ++ blender/arm/logicnode/canvas/LN_canvas_set_text.py | 2 ++ .../logicnode/canvas/LN_canvas_set_text_color.py | 2 ++ .../arm/logicnode/canvas/LN_canvas_set_visible.py | 2 ++ .../arm/logicnode/canvas/LN_on_canvas_element.py | 2 ++ blender/arm/logicnode/event/LN_on_event.py | 2 ++ blender/arm/logicnode/event/LN_on_init.py | 2 ++ blender/arm/logicnode/event/LN_on_timer.py | 2 ++ blender/arm/logicnode/event/LN_on_update.py | 2 ++ blender/arm/logicnode/event/LN_on_volume_trigger.py | 2 ++ blender/arm/logicnode/event/LN_send_event.py | 2 ++ blender/arm/logicnode/event/LN_send_global_event.py | 2 ++ blender/arm/logicnode/input/LN_gamepad.py | 2 ++ blender/arm/logicnode/input/LN_gamepad_coords.py | 2 ++ blender/arm/logicnode/input/LN_get_mouse_lock.py | 2 ++ blender/arm/logicnode/input/LN_get_mouse_visible.py | 2 ++ blender/arm/logicnode/input/LN_keyboard.py | 2 ++ blender/arm/logicnode/input/LN_mouse.py | 2 ++ blender/arm/logicnode/input/LN_mouse_coords.py | 2 ++ blender/arm/logicnode/input/LN_on_gamepad.py | 2 ++ blender/arm/logicnode/input/LN_on_keyboard.py | 2 ++ blender/arm/logicnode/input/LN_on_mouse.py | 2 ++ blender/arm/logicnode/input/LN_on_surface.py | 2 ++ blender/arm/logicnode/input/LN_on_virtual_button.py | 2 ++ blender/arm/logicnode/input/LN_sensor_coords.py | 2 ++ blender/arm/logicnode/input/LN_set_mouse_lock.py | 2 ++ blender/arm/logicnode/input/LN_show_mouse.py | 2 ++ blender/arm/logicnode/input/LN_surface.py | 2 ++ blender/arm/logicnode/input/LN_surface_coords.py | 2 ++ blender/arm/logicnode/input/LN_virtual_button.py | 2 ++ blender/arm/logicnode/light/LN_set_light_color.py | 2 ++ .../arm/logicnode/light/LN_set_light_strength.py | 2 ++ blender/arm/logicnode/logic/LN_alternate.py | 2 ++ blender/arm/logicnode/logic/LN_branch.py | 2 ++ blender/arm/logicnode/logic/LN_call_function.py | 2 ++ blender/arm/logicnode/logic/LN_function.py | 2 ++ blender/arm/logicnode/logic/LN_function_output.py | 2 ++ blender/arm/logicnode/logic/LN_gate.py | 2 ++ blender/arm/logicnode/logic/LN_inverse.py | 2 ++ blender/arm/logicnode/logic/LN_is_false.py | 2 ++ blender/arm/logicnode/logic/LN_is_none.py | 2 ++ blender/arm/logicnode/logic/LN_is_not_none.py | 2 ++ blender/arm/logicnode/logic/LN_is_true.py | 2 ++ blender/arm/logicnode/logic/LN_loop.py | 2 ++ blender/arm/logicnode/logic/LN_loop_break.py | 2 ++ blender/arm/logicnode/logic/LN_merge.py | 2 ++ blender/arm/logicnode/logic/LN_none.py | 2 ++ blender/arm/logicnode/logic/LN_not.py | 2 ++ blender/arm/logicnode/logic/LN_sequence.py | 2 ++ blender/arm/logicnode/logic/LN_switch.py | 2 ++ blender/arm/logicnode/logic/LN_to_bool.py | 2 ++ blender/arm/logicnode/logic/LN_while.py | 2 ++ blender/arm/logicnode/material/LN_get_material.py | 2 ++ blender/arm/logicnode/material/LN_material.py | 2 ++ blender/arm/logicnode/material/LN_set_material.py | 2 ++ .../material/LN_set_material_image_param.py | 2 ++ .../logicnode/material/LN_set_material_rgb_param.py | 2 ++ .../arm/logicnode/material/LN_set_material_slot.py | 2 ++ .../material/LN_set_material_value_param.py | 2 ++ blender/arm/logicnode/math/LN_compare.py | 2 ++ blender/arm/logicnode/math/LN_deg_to_rad.py | 2 ++ blender/arm/logicnode/math/LN_math.py | 2 ++ blender/arm/logicnode/math/LN_matrix_math.py | 2 ++ blender/arm/logicnode/math/LN_mix.py | 2 ++ blender/arm/logicnode/math/LN_rad_to_deg.py | 2 ++ .../arm/logicnode/math/LN_screen_to_world_space.py | 2 ++ blender/arm/logicnode/math/LN_separate_color.py | 2 ++ blender/arm/logicnode/math/LN_separate_vector.py | 2 ++ .../arm/logicnode/math/LN_vector_clamp_to_size.py | 2 ++ blender/arm/logicnode/math/LN_vector_math.py | 2 ++ blender/arm/logicnode/math/LN_vector_mix.py | 2 ++ .../arm/logicnode/math/LN_world_to_screen_space.py | 2 ++ .../arm/logicnode/miscellaneous/LN_call_group.py | 2 ++ .../arm/logicnode/miscellaneous/LN_display_info.py | 2 ++ .../arm/logicnode/miscellaneous/LN_group_output.py | 2 ++ .../logicnode/miscellaneous/LN_set_time_scale.py | 2 ++ blender/arm/logicnode/miscellaneous/LN_sleep.py | 2 ++ blender/arm/logicnode/miscellaneous/LN_time.py | 2 ++ blender/arm/logicnode/miscellaneous/LN_timer.py | 2 ++ .../arm/logicnode/miscellaneous/LN_window_info.py | 2 ++ blender/arm/logicnode/native/LN_call_haxe_static.py | 2 ++ blender/arm/logicnode/native/LN_expression.py | 2 ++ .../arm/logicnode/native/LN_get_haxe_property.py | 2 ++ blender/arm/logicnode/native/LN_loadUrl.py | 2 ++ blender/arm/logicnode/native/LN_print.py | 2 ++ blender/arm/logicnode/native/LN_read_file.py | 2 ++ blender/arm/logicnode/native/LN_read_json.py | 2 ++ blender/arm/logicnode/native/LN_read_storage.py | 2 ++ blender/arm/logicnode/native/LN_script.py | 2 ++ .../arm/logicnode/native/LN_set_haxe_property.py | 2 ++ blender/arm/logicnode/native/LN_shutdown.py | 2 ++ blender/arm/logicnode/native/LN_write_file.py | 2 ++ blender/arm/logicnode/native/LN_write_json.py | 2 ++ blender/arm/logicnode/native/LN_write_storage.py | 2 ++ blender/arm/logicnode/navmesh/LN_goto_location.py | 2 ++ .../arm/logicnode/navmesh/LN_navigable_location.py | 2 ++ blender/arm/logicnode/navmesh/LN_pick_location.py | 2 ++ blender/arm/logicnode/navmesh/LN_stop_agent.py | 2 ++ blender/arm/logicnode/object/LN_clear_parent.py | 2 ++ blender/arm/logicnode/object/LN_get_child.py | 2 ++ blender/arm/logicnode/object/LN_get_children.py | 2 ++ blender/arm/logicnode/object/LN_get_distance.py | 2 ++ blender/arm/logicnode/object/LN_get_mesh.py | 2 ++ blender/arm/logicnode/object/LN_get_name.py | 2 ++ blender/arm/logicnode/object/LN_get_object.py | 2 ++ blender/arm/logicnode/object/LN_get_parent.py | 2 ++ blender/arm/logicnode/object/LN_get_property.py | 2 ++ blender/arm/logicnode/object/LN_get_visible.py | 2 ++ blender/arm/logicnode/object/LN_mesh.py | 2 ++ blender/arm/logicnode/object/LN_object.py | 2 ++ blender/arm/logicnode/object/LN_remove_object.py | 2 ++ blender/arm/logicnode/object/LN_self_object.py | 2 ++ blender/arm/logicnode/object/LN_set_mesh.py | 2 ++ blender/arm/logicnode/object/LN_set_name.py | 2 ++ blender/arm/logicnode/object/LN_set_parent.py | 2 ++ blender/arm/logicnode/object/LN_set_property.py | 2 ++ blender/arm/logicnode/object/LN_set_visible.py | 2 ++ blender/arm/logicnode/object/LN_spawn_object.py | 2 ++ blender/arm/logicnode/physics/LN_apply_force.py | 2 ++ .../logicnode/physics/LN_apply_force_at_location.py | 2 ++ blender/arm/logicnode/physics/LN_apply_impulse.py | 2 ++ .../physics/LN_apply_impulse_at_location.py | 2 ++ blender/arm/logicnode/physics/LN_apply_torque.py | 2 ++ .../logicnode/physics/LN_apply_torque_impulse.py | 2 ++ blender/arm/logicnode/physics/LN_get_contacts.py | 2 ++ .../arm/logicnode/physics/LN_get_first_contact.py | 2 ++ blender/arm/logicnode/physics/LN_get_gravity.py | 2 ++ blender/arm/logicnode/physics/LN_get_velocity.py | 2 ++ blender/arm/logicnode/physics/LN_has_contact.py | 2 ++ .../arm/logicnode/physics/LN_has_contact_array.py | 2 ++ blender/arm/logicnode/physics/LN_on_contact.py | 2 ++ .../arm/logicnode/physics/LN_on_contact_array.py | 2 ++ blender/arm/logicnode/physics/LN_pick_object.py | 2 ++ blender/arm/logicnode/physics/LN_ray_cast.py | 2 ++ blender/arm/logicnode/physics/LN_remove_physics.py | 2 ++ .../logicnode/physics/LN_set_activation_state.py | 2 ++ blender/arm/logicnode/physics/LN_set_friction.py | 2 ++ blender/arm/logicnode/physics/LN_set_gravity.py | 2 ++ .../arm/logicnode/physics/LN_set_gravity_enabled.py | 2 ++ blender/arm/logicnode/physics/LN_set_velocity.py | 2 ++ .../postprocess/LN_colorgrading_get_global_node.py | 2 ++ .../LN_colorgrading_get_highlight_node.py | 2 ++ .../postprocess/LN_colorgrading_get_midtone_node.py | 2 ++ .../postprocess/LN_colorgrading_get_shadow_node.py | 2 ++ .../postprocess/LN_colorgrading_set_global_node.py | 2 ++ .../LN_colorgrading_set_highlight_node.py | 2 ++ .../postprocess/LN_colorgrading_set_midtone_node.py | 2 ++ .../postprocess/LN_colorgrading_set_shadow_node.py | 2 ++ blender/arm/logicnode/postprocess/LN_get_bloom.py | 2 ++ blender/arm/logicnode/postprocess/LN_get_camera.py | 2 ++ .../postprocess/LN_get_chromatic_aberration.py | 2 ++ blender/arm/logicnode/postprocess/LN_get_ssao.py | 2 ++ blender/arm/logicnode/postprocess/LN_get_ssr.py | 2 ++ .../arm/logicnode/postprocess/LN_lenstexture_get.py | 2 ++ .../arm/logicnode/postprocess/LN_lenstexture_set.py | 2 ++ blender/arm/logicnode/postprocess/LN_set_bloom.py | 2 ++ blender/arm/logicnode/postprocess/LN_set_camera.py | 2 ++ .../postprocess/LN_set_chromatic_aberration.py | 2 ++ blender/arm/logicnode/postprocess/LN_set_ssao.py | 2 ++ blender/arm/logicnode/postprocess/LN_set_ssr.py | 2 ++ blender/arm/logicnode/random/LN_random_boolean.py | 2 ++ blender/arm/logicnode/random/LN_random_color.py | 2 ++ blender/arm/logicnode/random/LN_random_float.py | 2 ++ blender/arm/logicnode/random/LN_random_integer.py | 2 ++ blender/arm/logicnode/random/LN_random_vector.py | 2 ++ blender/arm/logicnode/renderpath/LN_rp_config.py | 2 ++ blender/arm/logicnode/renderpath/LN_rp_msaa.py | 2 ++ .../logicnode/renderpath/LN_rp_shadow_quality.py | 2 ++ .../arm/logicnode/renderpath/LN_rp_super_sample.py | 2 ++ blender/arm/logicnode/scene/LN_active_scene.py | 2 ++ blender/arm/logicnode/scene/LN_create_collection.py | 2 ++ blender/arm/logicnode/scene/LN_get_group.py | 2 ++ blender/arm/logicnode/scene/LN_global_object.py | 2 ++ blender/arm/logicnode/scene/LN_group.py | 2 ++ .../arm/logicnode/scene/LN_remove_active_scene.py | 2 ++ blender/arm/logicnode/scene/LN_remove_group.py | 2 ++ blender/arm/logicnode/scene/LN_scene.py | 2 ++ blender/arm/logicnode/scene/LN_scene_root.py | 2 ++ blender/arm/logicnode/scene/LN_set_scene.py | 2 ++ blender/arm/logicnode/scene/LN_spawn_collection.py | 2 ++ blender/arm/logicnode/scene/LN_spawn_scene.py | 2 ++ blender/arm/logicnode/sound/LN_pause_speaker.py | 2 ++ blender/arm/logicnode/sound/LN_play_sound.py | 2 ++ blender/arm/logicnode/sound/LN_play_speaker.py | 2 ++ blender/arm/logicnode/sound/LN_stop_speaker.py | 2 ++ blender/arm/logicnode/string/LN_case_string.py | 2 ++ .../arm/logicnode/string/LN_concatenate_string.py | 2 ++ blender/arm/logicnode/string/LN_contains_string.py | 2 ++ blender/arm/logicnode/string/LN_length_string.py | 2 ++ blender/arm/logicnode/string/LN_parse_float.py | 2 ++ blender/arm/logicnode/string/LN_split_string.py | 2 ++ blender/arm/logicnode/string/LN_string.py | 2 ++ blender/arm/logicnode/string/LN_sub_string.py | 2 ++ blender/arm/logicnode/trait/LN_add_trait.py | 2 ++ blender/arm/logicnode/trait/LN_get_trait.py | 2 ++ blender/arm/logicnode/trait/LN_pause_trait.py | 2 ++ blender/arm/logicnode/trait/LN_remove_trait.py | 2 ++ blender/arm/logicnode/trait/LN_resume_trait.py | 2 ++ blender/arm/logicnode/trait/LN_self_trait.py | 2 ++ blender/arm/logicnode/trait/LN_trait.py | 2 ++ .../arm/logicnode/transform/LN_append_transform.py | 2 ++ blender/arm/logicnode/transform/LN_get_location.py | 2 ++ blender/arm/logicnode/transform/LN_get_rotation.py | 2 ++ blender/arm/logicnode/transform/LN_get_scale.py | 2 ++ blender/arm/logicnode/transform/LN_get_transform.py | 2 ++ blender/arm/logicnode/transform/LN_get_world.py | 2 ++ blender/arm/logicnode/transform/LN_look_at.py | 2 ++ blender/arm/logicnode/transform/LN_quaternion.py | 2 ++ blender/arm/logicnode/transform/LN_scale_object.py | 2 ++ .../logicnode/transform/LN_separate_quaternion.py | 2 ++ .../logicnode/transform/LN_separate_transform.py | 2 ++ blender/arm/logicnode/transform/LN_set_location.py | 2 ++ blender/arm/logicnode/transform/LN_set_rotation.py | 2 ++ blender/arm/logicnode/transform/LN_set_scale.py | 2 ++ blender/arm/logicnode/transform/LN_set_transform.py | 2 ++ blender/arm/logicnode/transform/LN_transform.py | 2 ++ .../arm/logicnode/transform/LN_transform_math.py | 2 ++ .../arm/logicnode/transform/LN_translate_object.py | 2 ++ .../transform/LN_translate_on_local_axis.py | 2 ++ .../logicnode/transform/LN_vector_from_transform.py | 2 ++ .../arm/logicnode/transform/LN_volume_trigger.py | 2 ++ blender/arm/logicnode/variable/LN_boolean.py | 2 ++ blender/arm/logicnode/variable/LN_color.py | 2 ++ blender/arm/logicnode/variable/LN_dynamic.py | 2 ++ blender/arm/logicnode/variable/LN_float.py | 2 ++ blender/arm/logicnode/variable/LN_integer.py | 2 ++ blender/arm/logicnode/variable/LN_mask.py | 2 ++ blender/arm/logicnode/variable/LN_set_variable.py | 2 ++ blender/arm/logicnode/variable/LN_vector.py | 2 ++ blender/arm/nodes_logic.py | 13 +++++++++---- blender/arm/props_ui.py | 4 +++- 286 files changed, 580 insertions(+), 5 deletions(-) diff --git a/blender/arm/logicnode/animation/LN_action.py b/blender/arm/logicnode/animation/LN_action.py index c12cc096..934ec7fa 100644 --- a/blender/arm/logicnode/animation/LN_action.py +++ b/blender/arm/logicnode/animation/LN_action.py @@ -4,8 +4,10 @@ class AnimActionNode(ArmLogicTreeNode): """Anim action node""" bl_idname = 'LNAnimActionNode' bl_label = 'Action' + arm_version = 1 def init(self, context): + super(AnimActionNode, self).init(context) self.add_input('ArmNodeSocketAnimAction', 'Action') self.add_output('ArmNodeSocketAnimAction', 'Action', is_var=True) diff --git a/blender/arm/logicnode/animation/LN_animation_state.py b/blender/arm/logicnode/animation/LN_animation_state.py index 9a964483..fd1e3f11 100644 --- a/blender/arm/logicnode/animation/LN_animation_state.py +++ b/blender/arm/logicnode/animation/LN_animation_state.py @@ -4,8 +4,10 @@ class AnimationStateNode(ArmLogicTreeNode): """Animation state node""" bl_idname = 'LNAnimationStateNode' bl_label = 'Animation State' + arm_version = 1 def init(self, context): + super(AnimationStateNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketBool', 'Is Playing') self.add_output('NodeSocketString', 'Action') diff --git a/blender/arm/logicnode/animation/LN_blend_action.py b/blender/arm/logicnode/animation/LN_blend_action.py index 1230456e..947e64bb 100644 --- a/blender/arm/logicnode/animation/LN_blend_action.py +++ b/blender/arm/logicnode/animation/LN_blend_action.py @@ -4,8 +4,10 @@ class BlendActionNode(ArmLogicTreeNode): """Blend action node""" bl_idname = 'LNBlendActionNode' bl_label = 'Blend Action' + arm_version = 1 def init(self, context): + super(BlendActionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketAnimAction', 'Action 1') diff --git a/blender/arm/logicnode/animation/LN_bone_fk.py b/blender/arm/logicnode/animation/LN_bone_fk.py index 15fc881a..254f7700 100644 --- a/blender/arm/logicnode/animation/LN_bone_fk.py +++ b/blender/arm/logicnode/animation/LN_bone_fk.py @@ -4,8 +4,10 @@ class BoneFKNode(ArmLogicTreeNode): """Bone Forward Kinematics node""" bl_idname = 'LNBoneFKNode' bl_label = 'Bone FK' + arm_version = 1 def init(self, context): + super(BoneFKNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Bone') diff --git a/blender/arm/logicnode/animation/LN_bone_ik.py b/blender/arm/logicnode/animation/LN_bone_ik.py index 71975284..67f1e4f0 100644 --- a/blender/arm/logicnode/animation/LN_bone_ik.py +++ b/blender/arm/logicnode/animation/LN_bone_ik.py @@ -4,8 +4,10 @@ class BoneIKNode(ArmLogicTreeNode): """Bone Inverse Kinematics node""" bl_idname = 'LNBoneIKNode' bl_label = 'Bone IK' + arm_version = 1 def init(self, context): + super(BoneIKNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Bone') diff --git a/blender/arm/logicnode/animation/LN_on_action_marker.py b/blender/arm/logicnode/animation/LN_on_action_marker.py index fc08bd4e..384ab785 100644 --- a/blender/arm/logicnode/animation/LN_on_action_marker.py +++ b/blender/arm/logicnode/animation/LN_on_action_marker.py @@ -4,8 +4,10 @@ class OnActionMarkerNode(ArmLogicTreeNode): """On action marker node""" bl_idname = 'LNOnActionMarkerNode' bl_label = 'On Action Marker' + arm_version = 1 def init(self, context): + super(OnActionMarkerNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Marker') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/animation/LN_pause_action.py b/blender/arm/logicnode/animation/LN_pause_action.py index ec8dbd80..ebbe6b77 100644 --- a/blender/arm/logicnode/animation/LN_pause_action.py +++ b/blender/arm/logicnode/animation/LN_pause_action.py @@ -4,8 +4,10 @@ class PauseActionNode(ArmLogicTreeNode): """Pause action node""" bl_idname = 'LNPauseActionNode' bl_label = 'Pause Action' + arm_version = 1 def init(self, context): + super(PauseActionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/animation/LN_pause_tilesheet.py b/blender/arm/logicnode/animation/LN_pause_tilesheet.py index 5312e238..3ece170a 100644 --- a/blender/arm/logicnode/animation/LN_pause_tilesheet.py +++ b/blender/arm/logicnode/animation/LN_pause_tilesheet.py @@ -4,8 +4,10 @@ class PauseTilesheetNode(ArmLogicTreeNode): """Pause tilesheet node""" bl_idname = 'LNPauseTilesheetNode' bl_label = 'Pause Tilesheet' + arm_version = 1 def init(self, context): + super(PauseTilesheetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/animation/LN_play_action.py b/blender/arm/logicnode/animation/LN_play_action.py index 59d673ef..38b4067c 100644 --- a/blender/arm/logicnode/animation/LN_play_action.py +++ b/blender/arm/logicnode/animation/LN_play_action.py @@ -4,8 +4,10 @@ class PlayActionNode(ArmLogicTreeNode): """Play action node""" bl_idname = 'LNPlayActionNode' bl_label = 'Play Action' + arm_version = 1 def init(self, context): + super(PlayActionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketAnimAction', 'Action') diff --git a/blender/arm/logicnode/animation/LN_play_action_from.py b/blender/arm/logicnode/animation/LN_play_action_from.py index 73fe45ff..3f676cbe 100644 --- a/blender/arm/logicnode/animation/LN_play_action_from.py +++ b/blender/arm/logicnode/animation/LN_play_action_from.py @@ -4,8 +4,10 @@ class PlayActionFromNode(ArmLogicTreeNode): """Play action from node""" bl_idname = 'LNPlayActionFromNode' bl_label = 'Play Action From' + arm_version = 1 def init(self, context): + super(PlayActionFromNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketAnimAction', 'Action') diff --git a/blender/arm/logicnode/animation/LN_play_tilesheet.py b/blender/arm/logicnode/animation/LN_play_tilesheet.py index 8a3fc9a5..2a8ce90a 100644 --- a/blender/arm/logicnode/animation/LN_play_tilesheet.py +++ b/blender/arm/logicnode/animation/LN_play_tilesheet.py @@ -4,8 +4,10 @@ class PlayTilesheetNode(ArmLogicTreeNode): """Play tilesheet node""" bl_idname = 'LNPlayTilesheetNode' bl_label = 'Play Tilesheet' + arm_version = 1 def init(self, context): + super(PlayTilesheetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Action') diff --git a/blender/arm/logicnode/animation/LN_resume_action.py b/blender/arm/logicnode/animation/LN_resume_action.py index c97e0a6e..c941a84f 100644 --- a/blender/arm/logicnode/animation/LN_resume_action.py +++ b/blender/arm/logicnode/animation/LN_resume_action.py @@ -4,8 +4,10 @@ class ResumeActionNode(ArmLogicTreeNode): """Resume action node""" bl_idname = 'LNResumeActionNode' bl_label = 'Resume Action' + arm_version = 1 def init(self, context): + super(ResumeActionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/animation/LN_resume_tilesheet.py b/blender/arm/logicnode/animation/LN_resume_tilesheet.py index 06207122..a1682075 100644 --- a/blender/arm/logicnode/animation/LN_resume_tilesheet.py +++ b/blender/arm/logicnode/animation/LN_resume_tilesheet.py @@ -4,8 +4,10 @@ class ResumeTilesheetNode(ArmLogicTreeNode): """Resume tilesheet node""" bl_idname = 'LNResumeTilesheetNode' bl_label = 'Resume Tilesheet' + arm_version = 1 def init(self, context): + super(ResumeTilesheetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/animation/LN_set_action_speed.py b/blender/arm/logicnode/animation/LN_set_action_speed.py index 807db322..7e6a8bd0 100644 --- a/blender/arm/logicnode/animation/LN_set_action_speed.py +++ b/blender/arm/logicnode/animation/LN_set_action_speed.py @@ -4,8 +4,10 @@ class SetActionSpeedNode(ArmLogicTreeNode): """Set action speed node""" bl_idname = 'LNSetActionSpeedNode' bl_label = 'Set Action Speed' + arm_version = 1 def init(self, context): + super(SetActionSpeedNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketFloat', 'Speed', default_value=1.0) diff --git a/blender/arm/logicnode/animation/LN_set_parent_bone.py b/blender/arm/logicnode/animation/LN_set_parent_bone.py index 2f268756..7fd48042 100644 --- a/blender/arm/logicnode/animation/LN_set_parent_bone.py +++ b/blender/arm/logicnode/animation/LN_set_parent_bone.py @@ -4,8 +4,10 @@ class SetParentBoneNode(ArmLogicTreeNode): """Set parent bone node""" bl_idname = 'LNSetParentBoneNode' bl_label = 'Set Parent Bone' + arm_version = 1 def init(self, context): + super(SetParentBoneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketObject', 'Parent', default_value='Parent') diff --git a/blender/arm/logicnode/animation/LN_set_particle_speed.py b/blender/arm/logicnode/animation/LN_set_particle_speed.py index a679d9b0..0a33a3c7 100644 --- a/blender/arm/logicnode/animation/LN_set_particle_speed.py +++ b/blender/arm/logicnode/animation/LN_set_particle_speed.py @@ -4,8 +4,10 @@ class SetParticleSpeedNode(ArmLogicTreeNode): """Set particle speed node""" bl_idname = 'LNSetParticleSpeedNode' bl_label = 'Set Particle Speed' + arm_version = 1 def init(self, context): + super(SetParticleSpeedNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketFloat', 'Speed', default_value=1.0) diff --git a/blender/arm/logicnode/array/LN_array.py b/blender/arm/logicnode/array/LN_array.py index 52eacd72..b4506169 100644 --- a/blender/arm/logicnode/array/LN_array.py +++ b/blender/arm/logicnode/array/LN_array.py @@ -4,11 +4,13 @@ class ArrayNode(ArmLogicTreeNode): """Array node""" bl_idname = 'LNArrayNode' bl_label = 'Array Dynamic' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(ArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_add.py b/blender/arm/logicnode/array/LN_array_add.py index 906a4b52..34fc41cb 100644 --- a/blender/arm/logicnode/array/LN_array_add.py +++ b/blender/arm/logicnode/array/LN_array_add.py @@ -4,11 +4,13 @@ class ArrayAddNode(ArmLogicTreeNode): """Array add node""" bl_idname = 'LNArrayAddNode' bl_label = 'Array Add' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(ArrayAddNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketBool', 'Unique Values') diff --git a/blender/arm/logicnode/array/LN_array_boolean.py b/blender/arm/logicnode/array/LN_array_boolean.py index cc858f98..58040e68 100644 --- a/blender/arm/logicnode/array/LN_array_boolean.py +++ b/blender/arm/logicnode/array/LN_array_boolean.py @@ -4,11 +4,13 @@ class BooleanArrayNode(ArmLogicTreeNode): """Boolean array node""" bl_idname = 'LNArrayBooleanNode' bl_label = 'Array Boolean' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(BooleanArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_color.py b/blender/arm/logicnode/array/LN_array_color.py index 030bfb8e..9b0fed0f 100644 --- a/blender/arm/logicnode/array/LN_array_color.py +++ b/blender/arm/logicnode/array/LN_array_color.py @@ -4,11 +4,13 @@ class ColorArrayNode(ArmLogicTreeNode): """Color array node""" bl_idname = 'LNArrayColorNode' bl_label = 'Array Color' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(ColorArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_contains.py b/blender/arm/logicnode/array/LN_array_contains.py index 8cdf6ef0..2f3a6d2e 100644 --- a/blender/arm/logicnode/array/LN_array_contains.py +++ b/blender/arm/logicnode/array/LN_array_contains.py @@ -4,8 +4,10 @@ class ArrayContainsNode(ArmLogicTreeNode): """Array contains node""" bl_idname = 'LNArrayInArrayNode' bl_label = 'Array Contains' + arm_version = 1 def init(self, context): + super(ArrayContainsNode, self).init(context) self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketShader', 'Value') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/array/LN_array_float.py b/blender/arm/logicnode/array/LN_array_float.py index 39fbbcbf..90225f28 100644 --- a/blender/arm/logicnode/array/LN_array_float.py +++ b/blender/arm/logicnode/array/LN_array_float.py @@ -4,11 +4,13 @@ class FloatArrayNode(ArmLogicTreeNode): """Float array node""" bl_idname = 'LNArrayFloatNode' bl_label = 'Array Float' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(FloatArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_get.py b/blender/arm/logicnode/array/LN_array_get.py index 1c43c1f6..0b579356 100644 --- a/blender/arm/logicnode/array/LN_array_get.py +++ b/blender/arm/logicnode/array/LN_array_get.py @@ -4,8 +4,10 @@ class ArrayGetNode(ArmLogicTreeNode): """Array get node""" bl_idname = 'LNArrayGetNode' bl_label = 'Array Get' + arm_version = 1 def init(self, context): + super(ArrayGetNode, self).init(context) self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketInt', 'Index') self.add_output('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/array/LN_array_integer.py b/blender/arm/logicnode/array/LN_array_integer.py index e622fa4d..185686fb 100644 --- a/blender/arm/logicnode/array/LN_array_integer.py +++ b/blender/arm/logicnode/array/LN_array_integer.py @@ -4,11 +4,13 @@ class IntegerArrayNode(ArmLogicTreeNode): """Integer array node""" bl_idname = 'LNArrayIntegerNode' bl_label = 'Array Integer' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(IntegerArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array') self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_length.py b/blender/arm/logicnode/array/LN_array_length.py index d56aa17e..770fc804 100644 --- a/blender/arm/logicnode/array/LN_array_length.py +++ b/blender/arm/logicnode/array/LN_array_length.py @@ -4,8 +4,10 @@ class ArrayLengthNode(ArmLogicTreeNode): """Array length node""" bl_idname = 'LNArrayLengthNode' bl_label = 'Array Length' + arm_version = 1 def init(self, context): + super(ArrayLengthNode, self).init(context) self.add_input('ArmNodeSocketArray', 'Array') self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_loop_node.py b/blender/arm/logicnode/array/LN_array_loop_node.py index c8019a60..ac5851c0 100644 --- a/blender/arm/logicnode/array/LN_array_loop_node.py +++ b/blender/arm/logicnode/array/LN_array_loop_node.py @@ -5,8 +5,10 @@ class ArrayLoopNode(ArmLogicTreeNode): """ArrayLoop node""" bl_idname = 'LNArrayLoopNode' bl_label = 'Array Loop' + arm_version = 1 def init(self, context): + super(ArrayLoopNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_output('ArmNodeSocketAction', 'Loop') diff --git a/blender/arm/logicnode/array/LN_array_object.py b/blender/arm/logicnode/array/LN_array_object.py index 2f72b775..5348926b 100644 --- a/blender/arm/logicnode/array/LN_array_object.py +++ b/blender/arm/logicnode/array/LN_array_object.py @@ -4,11 +4,13 @@ class ObjectArrayNode(ArmLogicTreeNode): """Object array node""" bl_idname = 'LNArrayObjectNode' bl_label = 'Array Object' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(ObjectArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_pop.py b/blender/arm/logicnode/array/LN_array_pop.py index a2c19e04..45967886 100644 --- a/blender/arm/logicnode/array/LN_array_pop.py +++ b/blender/arm/logicnode/array/LN_array_pop.py @@ -4,8 +4,10 @@ class ArrayPopNode(ArmLogicTreeNode): """Array pop node""" bl_idname = 'LNArrayPopNode' bl_label = 'Array Pop' + arm_version = 1 def init(self, context): + super(ArrayPopNode, self).init(context) self.add_input('ArmNodeSocketArray', 'Array') self.add_output('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/array/LN_array_remove_index.py b/blender/arm/logicnode/array/LN_array_remove_index.py index b494e7b6..ec19f501 100644 --- a/blender/arm/logicnode/array/LN_array_remove_index.py +++ b/blender/arm/logicnode/array/LN_array_remove_index.py @@ -4,8 +4,10 @@ class ArrayRemoveIndexNode(ArmLogicTreeNode): """Removes an element from an array given by its index.""" bl_idname = 'LNArrayRemoveNode' bl_label = 'Array Remove By Index' + arm_version = 1 def init(self, context): + super(ArrayRemoveIndexNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketInt', 'Index') diff --git a/blender/arm/logicnode/array/LN_array_remove_value.py b/blender/arm/logicnode/array/LN_array_remove_value.py index a9f79cdd..ba44e69c 100644 --- a/blender/arm/logicnode/array/LN_array_remove_value.py +++ b/blender/arm/logicnode/array/LN_array_remove_value.py @@ -4,11 +4,13 @@ class ArrayRemoveValueNode(ArmLogicTreeNode): """Removes an element from an array given by its value.""" bl_idname = 'LNArrayRemoveValueNode' bl_label = 'Array Remove By Value' + arm_version = 1 # def __init__(self): # array_nodes[str(id(self))] = self def init(self, context): + super(ArrayRemoveValueNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/array/LN_array_set.py b/blender/arm/logicnode/array/LN_array_set.py index 5ac4f22a..8e68feae 100644 --- a/blender/arm/logicnode/array/LN_array_set.py +++ b/blender/arm/logicnode/array/LN_array_set.py @@ -4,8 +4,10 @@ class ArraySetNode(ArmLogicTreeNode): """Array set node""" bl_idname = 'LNArraySetNode' bl_label = 'Array Set' + arm_version = 1 def init(self, context): + super(ArraySetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketInt', 'Index') diff --git a/blender/arm/logicnode/array/LN_array_shift.py b/blender/arm/logicnode/array/LN_array_shift.py index 426f83df..014650df 100644 --- a/blender/arm/logicnode/array/LN_array_shift.py +++ b/blender/arm/logicnode/array/LN_array_shift.py @@ -4,8 +4,10 @@ class ArrayShiftNode(ArmLogicTreeNode): """Array shift node""" bl_idname = 'LNArrayShiftNode' bl_label = 'Array Shift' + arm_version = 1 def init(self, context): + super(ArrayShiftNode, self).init(context) self.add_input('ArmNodeSocketArray', 'Array') self.add_output('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/array/LN_array_slice.py b/blender/arm/logicnode/array/LN_array_slice.py index f5337564..b8406589 100644 --- a/blender/arm/logicnode/array/LN_array_slice.py +++ b/blender/arm/logicnode/array/LN_array_slice.py @@ -4,8 +4,10 @@ class ArraySliceNode(ArmLogicTreeNode): """Array slice node""" bl_idname = 'LNArraySliceNode' bl_label = 'Array Slice' + arm_version = 1 def init(self, context): + super(ArraySliceNode, self).init(context) self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketInt', 'Index') self.add_input('NodeSocketInt', 'End') diff --git a/blender/arm/logicnode/array/LN_array_splice.py b/blender/arm/logicnode/array/LN_array_splice.py index 558ae6ff..d97e29c7 100644 --- a/blender/arm/logicnode/array/LN_array_splice.py +++ b/blender/arm/logicnode/array/LN_array_splice.py @@ -4,8 +4,10 @@ class ArraySpliceNode(ArmLogicTreeNode): """Array splice node""" bl_idname = 'LNArraySpliceNode' bl_label = 'Array Splice' + arm_version = 1 def init(self, context): + super(ArraySpliceNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketInt', 'Index') diff --git a/blender/arm/logicnode/array/LN_array_string.py b/blender/arm/logicnode/array/LN_array_string.py index a61af59f..8d025ec2 100644 --- a/blender/arm/logicnode/array/LN_array_string.py +++ b/blender/arm/logicnode/array/LN_array_string.py @@ -4,11 +4,13 @@ class StringArrayNode(ArmLogicTreeNode): """String array node""" bl_idname = 'LNArrayStringNode' bl_label = 'Array String' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(StringArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/array/LN_array_vector.py b/blender/arm/logicnode/array/LN_array_vector.py index 363fd1c8..64a4a1b4 100644 --- a/blender/arm/logicnode/array/LN_array_vector.py +++ b/blender/arm/logicnode/array/LN_array_vector.py @@ -4,11 +4,13 @@ class VectorArrayNode(ArmLogicTreeNode): """Vector array node""" bl_idname = 'LNArrayVectorNode' bl_label = 'Array Vector' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(VectorArrayNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array', is_var=True) self.add_output('NodeSocketInt', 'Length') diff --git a/blender/arm/logicnode/camera/LN_get_active_camera.py b/blender/arm/logicnode/camera/LN_get_active_camera.py index b070f91d..87368047 100644 --- a/blender/arm/logicnode/camera/LN_get_active_camera.py +++ b/blender/arm/logicnode/camera/LN_get_active_camera.py @@ -4,8 +4,10 @@ class ActiveCameraNode(ArmLogicTreeNode): """Get the active camera of the active scene.""" bl_idname = 'LNActiveCameraNode' bl_label = 'Get Active Camera' + arm_version = 1 def init(self, context): + super(ActiveCameraNode, self).init(context) self.add_output('ArmNodeSocketObject', 'Object') add_node(ActiveCameraNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/camera/LN_get_camera_fov.py b/blender/arm/logicnode/camera/LN_get_camera_fov.py index 92b5b6e2..33285796 100644 --- a/blender/arm/logicnode/camera/LN_get_camera_fov.py +++ b/blender/arm/logicnode/camera/LN_get_camera_fov.py @@ -4,8 +4,10 @@ class GetCameraFovNode(ArmLogicTreeNode): """Get camera FOV node""" bl_idname = 'LNGetCameraFovNode' bl_label = 'Get Camera FOV' + arm_version = 1 def init(self, context): + super(GetCameraFovNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketFloat', 'FOV') diff --git a/blender/arm/logicnode/camera/LN_set_active_camera.py b/blender/arm/logicnode/camera/LN_set_active_camera.py index e80b0f05..6e082bc3 100644 --- a/blender/arm/logicnode/camera/LN_set_active_camera.py +++ b/blender/arm/logicnode/camera/LN_set_active_camera.py @@ -4,8 +4,10 @@ class SetCameraNode(ArmLogicTreeNode): """Set the active camera of the active scene.""" bl_idname = 'LNSetCameraNode' bl_label = 'Set Active Camera' + arm_version = 1 def init(self, context): + super(SetCameraNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') diff --git a/blender/arm/logicnode/camera/LN_set_camera_fov.py b/blender/arm/logicnode/camera/LN_set_camera_fov.py index 3bc84e0b..3d8bd108 100644 --- a/blender/arm/logicnode/camera/LN_set_camera_fov.py +++ b/blender/arm/logicnode/camera/LN_set_camera_fov.py @@ -5,8 +5,10 @@ class SetCameraFovNode(ArmLogicTreeNode): bl_idname = 'LNSetCameraFovNode' bl_label = 'Set Camera FOV' bl_description = 'Set the camera\'s field of view' + arm_version = 1 def init(self, context): + super(SetCameraFovNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketFloat', 'FOV', default_value=0.85) diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_checkbox.py b/blender/arm/logicnode/canvas/LN_canvas_get_checkbox.py index 7a750ac9..d9eb4f47 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_checkbox.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_checkbox.py @@ -4,8 +4,10 @@ class CanvasGetCheckboxNode(ArmLogicTreeNode): """Get canvas checkbox value""" bl_idname = 'LNCanvasGetCheckboxNode' bl_label = 'Canvas Get Checkbox' + arm_version = 1 def init(self, context): + super(CanvasGetCheckboxNode, self).init(context) self.add_input('NodeSocketString', 'Element') self.add_output('NodeSocketBool', 'Value') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_input_text.py b/blender/arm/logicnode/canvas/LN_canvas_get_input_text.py index 80d33796..429bda8c 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_input_text.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_input_text.py @@ -4,8 +4,10 @@ class CanvasGetInputTextNode(ArmLogicTreeNode): """Get canvas input text""" bl_idname = 'LNCanvasGetInputTextNode' bl_label = 'Canvas Get Input Text' + arm_version = 1 def init(self, context): + super(CanvasGetInputTextNode, self).init(context) self.add_input('NodeSocketString', 'Element') self.add_output('NodeSocketString', 'Value') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_location.py b/blender/arm/logicnode/canvas/LN_canvas_get_location.py index 4c33db3e..aeb8aa15 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_location.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_location.py @@ -4,8 +4,10 @@ class CanvasGetLocationNode(ArmLogicTreeNode): """Get canvas element location""" bl_idname = 'LNCanvasGetLocationNode' bl_label = 'Canvas Get Location' + arm_version = 1 def init(self, context): + super(CanvasGetLocationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_pb.py b/blender/arm/logicnode/canvas/LN_canvas_get_pb.py index fd55c608..307192a5 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_pb.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_pb.py @@ -4,8 +4,10 @@ class CanvasGetPBNode(ArmLogicTreeNode): """Get canvas progress bar""" bl_idname = 'LNCanvasGetPBNode' bl_label = 'Canvas Get Progress Bar' + arm_version = 1 def init(self, context): + super(CanvasGetPBNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_position.py b/blender/arm/logicnode/canvas/LN_canvas_get_position.py index 1fbec991..eac0430a 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_position.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_position.py @@ -4,8 +4,10 @@ class CanvasGetPositionNode(ArmLogicTreeNode): """Get canvas radio and combo value""" bl_idname = 'LNCanvasGetPositionNode' bl_label = 'Canvas Get Position' + arm_version = 1 def init(self, context): + super(CanvasGetPositionNode, self).init(context) self.add_input('NodeSocketString', 'Element') self.add_output('NodeSocketInt', 'Value') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_rotation.py b/blender/arm/logicnode/canvas/LN_canvas_get_rotation.py index a21ab6fb..0acb3522 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_rotation.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_rotation.py @@ -4,8 +4,10 @@ class CanvasGetRotationNode(ArmLogicTreeNode): """Get canvas element rotation""" bl_idname = 'LNCanvasGetRotationNode' bl_label = 'Canvas Get Rotation' + arm_version = 1 def init(self, context): + super(CanvasGetRotationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_scale.py b/blender/arm/logicnode/canvas/LN_canvas_get_scale.py index 6106568b..8b89e896 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_scale.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_scale.py @@ -4,8 +4,10 @@ class CanvasGetScaleNode(ArmLogicTreeNode): """Get canvas element scale""" bl_idname = 'LNCanvasGetScaleNode' bl_label = 'Canvas Get Scale' + arm_version = 1 def init(self, context): + super(CanvasGetScaleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_slider.py b/blender/arm/logicnode/canvas/LN_canvas_get_slider.py index 6c677b03..b6a12105 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_slider.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_slider.py @@ -4,8 +4,10 @@ class CanvasGetSliderNode(ArmLogicTreeNode): """Set canvas text""" bl_idname = 'LNCanvasGetSliderNode' bl_label = 'Canvas Get Slider' + arm_version = 1 def init(self, context): + super(CanvasGetSliderNode, self).init(context) self.add_input('NodeSocketString', 'Element') self.add_output('NodeSocketFloat', 'Value') diff --git a/blender/arm/logicnode/canvas/LN_canvas_get_visible.py b/blender/arm/logicnode/canvas/LN_canvas_get_visible.py index 5b9da083..bb915076 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_get_visible.py +++ b/blender/arm/logicnode/canvas/LN_canvas_get_visible.py @@ -7,8 +7,10 @@ class CanvasGetVisibleNode(ArmLogicTreeNode): """Canvas Get Visible node""" bl_idname = 'LNCanvasGetVisibleNode' bl_label = 'Canvas Get Visible' + arm_version = 1 def init(self, context): + super(CanvasGetVisibleNode, self).init(context) self.inputs.new('NodeSocketString', 'Element') self.outputs.new('NodeSocketBool', 'Visible') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_asset.py b/blender/arm/logicnode/canvas/LN_canvas_set_asset.py index 1ac09f3d..755cb222 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_asset.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_asset.py @@ -4,8 +4,10 @@ class CanvasSetAssetNode(ArmLogicTreeNode): """Set canvas asset""" bl_idname = 'LNCanvasSetAssetNode' bl_label = 'Canvas Set Asset' + arm_version = 1 def init(self, context): + super(CanvasSetAssetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketString', 'Asset') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_checkbox.py b/blender/arm/logicnode/canvas/LN_canvas_set_checkbox.py index 18e64bb6..a676e007 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_checkbox.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_checkbox.py @@ -4,8 +4,10 @@ class CanvasSetCheckBoxNode(ArmLogicTreeNode): """Set canvas check box""" bl_idname = 'LNCanvasSetCheckBoxNode' bl_label = 'Canvas Set Checkbox' + arm_version = 1 def init(self, context): + super(CanvasSetCheckBoxNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketBool', 'Value') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_location.py b/blender/arm/logicnode/canvas/LN_canvas_set_location.py index af5a1128..dc08610e 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_location.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_location.py @@ -4,8 +4,10 @@ class CanvasSetLocationNode(ArmLogicTreeNode): """Set canvas element location""" bl_idname = 'LNCanvasSetLocationNode' bl_label = 'Canvas Set Location' + arm_version = 1 def init(self, context): + super(CanvasSetLocationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketFloat', 'X') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_pb.py b/blender/arm/logicnode/canvas/LN_canvas_set_pb.py index 6822a59b..28974f10 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_pb.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_pb.py @@ -4,8 +4,10 @@ class CanvasSetPBNode(ArmLogicTreeNode): """Set canvas progress bar""" bl_idname = 'LNCanvasSetPBNode' bl_label = 'Canvas Set Progress Bar' + arm_version = 1 def init(self, context): + super(CanvasSetPBNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketInt', 'At') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_rotation.py b/blender/arm/logicnode/canvas/LN_canvas_set_rotation.py index e08623fe..34847476 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_rotation.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_rotation.py @@ -4,8 +4,10 @@ class CanvasSetRotationNode(ArmLogicTreeNode): """Set canvas element rotation""" bl_idname = 'LNCanvasSetRotationNode' bl_label = 'Canvas Set Rotation' + arm_version = 1 def init(self, context): + super(CanvasSetRotationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketFloat', 'Rad') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_scale.py b/blender/arm/logicnode/canvas/LN_canvas_set_scale.py index e1410fec..8494357a 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_scale.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_scale.py @@ -4,8 +4,10 @@ class CanvasSetScaleNode(ArmLogicTreeNode): """Set canvas element scale""" bl_idname = 'LNCanvasSetScaleNode' bl_label = 'Canvas Set Scale' + arm_version = 1 def init(self, context): + super(CanvasSetScaleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketInt', 'Height') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_slider.py b/blender/arm/logicnode/canvas/LN_canvas_set_slider.py index dd60c1c5..20d547f4 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_slider.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_slider.py @@ -4,8 +4,10 @@ class CanvasSetSliderNode(ArmLogicTreeNode): """Set canvas text""" bl_idname = 'LNCanvasSetSliderNode' bl_label = 'Canvas Set Slider' + arm_version = 1 def init(self, context): + super(CanvasSetSliderNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketFloat', 'Value') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_text.py b/blender/arm/logicnode/canvas/LN_canvas_set_text.py index 1a4479bc..07586db3 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_text.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_text.py @@ -4,8 +4,10 @@ class CanvasSetTextNode(ArmLogicTreeNode): """Set canvas text""" bl_idname = 'LNCanvasSetTextNode' bl_label = 'Canvas Set Text' + arm_version = 1 def init(self, context): + super(CanvasSetTextNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketString', 'Text') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_text_color.py b/blender/arm/logicnode/canvas/LN_canvas_set_text_color.py index 6d6d13d3..d817b5e8 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_text_color.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_text_color.py @@ -4,8 +4,10 @@ class CanvasSetTextColorNode(ArmLogicTreeNode): """Set canvas text color""" bl_idname = 'LNCanvasSetTextColorNode' bl_label = 'Canvas Set Text Color' + arm_version = 1 def init(self, context): + super(CanvasSetTextColorNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketFloat', 'R') diff --git a/blender/arm/logicnode/canvas/LN_canvas_set_visible.py b/blender/arm/logicnode/canvas/LN_canvas_set_visible.py index b8bd8207..18f8f671 100644 --- a/blender/arm/logicnode/canvas/LN_canvas_set_visible.py +++ b/blender/arm/logicnode/canvas/LN_canvas_set_visible.py @@ -4,8 +4,10 @@ class CanvasSetVisibleNode(ArmLogicTreeNode): """Canvas Set Visible node""" bl_idname = 'LNCanvasSetVisibleNode' bl_label = 'Canvas Set Visible' + arm_version = 1 def init(self, context): + super(CanvasSetVisibleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Element') self.add_input('NodeSocketBool', 'Visible') diff --git a/blender/arm/logicnode/canvas/LN_on_canvas_element.py b/blender/arm/logicnode/canvas/LN_on_canvas_element.py index c8161fc4..40de94cd 100644 --- a/blender/arm/logicnode/canvas/LN_on_canvas_element.py +++ b/blender/arm/logicnode/canvas/LN_on_canvas_element.py @@ -4,6 +4,7 @@ class OnCanvasElementNode(ArmLogicTreeNode): """On canvas element node""" bl_idname = 'LNOnCanvasElementNode' bl_label = 'On Canvas Element' + arm_version = 1 property0: EnumProperty( items=[('click', 'Click', 'Listen to mouse clicks'), @@ -21,6 +22,7 @@ class OnCanvasElementNode(ArmLogicTreeNode): name='Mouse Button', default='left') def init(self, context): + super(OnCanvasElementNode, self).init(context) self.add_input('NodeSocketString', 'Element') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/event/LN_on_event.py b/blender/arm/logicnode/event/LN_on_event.py index 2a79456f..cbea19c3 100644 --- a/blender/arm/logicnode/event/LN_on_event.py +++ b/blender/arm/logicnode/event/LN_on_event.py @@ -4,9 +4,11 @@ class OnEventNode(ArmLogicTreeNode): """On event node""" bl_idname = 'LNOnEventNode' bl_label = 'On Event' + arm_version = 1 property0: StringProperty(name='', default='') def init(self, context): + super(OnEventNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/event/LN_on_init.py b/blender/arm/logicnode/event/LN_on_init.py index b09f2ec1..39e42778 100644 --- a/blender/arm/logicnode/event/LN_on_init.py +++ b/blender/arm/logicnode/event/LN_on_init.py @@ -4,8 +4,10 @@ class OnInitNode(ArmLogicTreeNode): """On init node""" bl_idname = 'LNOnInitNode' bl_label = 'On Init' + arm_version = 1 def init(self, context): + super(OnInitNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') add_node(OnInitNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/event/LN_on_timer.py b/blender/arm/logicnode/event/LN_on_timer.py index 7436b0d8..ea2451c4 100644 --- a/blender/arm/logicnode/event/LN_on_timer.py +++ b/blender/arm/logicnode/event/LN_on_timer.py @@ -4,8 +4,10 @@ class OnTimerNode(ArmLogicTreeNode): """On timer node""" bl_idname = 'LNOnTimerNode' bl_label = 'On Timer' + arm_version = 1 def init(self, context): + super(OnTimerNode, self).init(context) self.add_input('NodeSocketFloat', 'Duration') self.add_input('NodeSocketBool', 'Repeat') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/event/LN_on_update.py b/blender/arm/logicnode/event/LN_on_update.py index e9276f18..03ded5e9 100644 --- a/blender/arm/logicnode/event/LN_on_update.py +++ b/blender/arm/logicnode/event/LN_on_update.py @@ -4,6 +4,7 @@ class OnUpdateNode(ArmLogicTreeNode): """On update node""" bl_idname = 'LNOnUpdateNode' bl_label = 'On Update' + arm_version = 1 property0: EnumProperty( items = [('Update', 'Update', 'Update'), ('Late Update', 'Late Update', 'Late Update'), @@ -11,6 +12,7 @@ class OnUpdateNode(ArmLogicTreeNode): name='On', default='Update') def init(self, context): + super(OnUpdateNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/event/LN_on_volume_trigger.py b/blender/arm/logicnode/event/LN_on_volume_trigger.py index b35a96bb..706d73af 100644 --- a/blender/arm/logicnode/event/LN_on_volume_trigger.py +++ b/blender/arm/logicnode/event/LN_on_volume_trigger.py @@ -4,6 +4,7 @@ class OnVolumeTriggerNode(ArmLogicTreeNode): """On volume trigger node""" bl_idname = 'LNOnVolumeTriggerNode' bl_label = 'On Volume Trigger' + arm_version = 1 property0: EnumProperty( items = [('Enter', 'Enter', 'Enter'), ('Leave', 'Leave', 'Leave'), @@ -11,6 +12,7 @@ class OnVolumeTriggerNode(ArmLogicTreeNode): name='', default='Enter') def init(self, context): + super(OnVolumeTriggerNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketObject', 'Volume', default_value='Volume') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/event/LN_send_event.py b/blender/arm/logicnode/event/LN_send_event.py index 284f3702..3cdc7a32 100644 --- a/blender/arm/logicnode/event/LN_send_event.py +++ b/blender/arm/logicnode/event/LN_send_event.py @@ -4,8 +4,10 @@ class SendEventNode(ArmLogicTreeNode): """Send event node""" bl_idname = 'LNSendEventNode' bl_label = 'Send Event' + arm_version = 1 def init(self, context): + super(SendEventNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Event') self.add_input('ArmNodeSocketObject', 'Object') diff --git a/blender/arm/logicnode/event/LN_send_global_event.py b/blender/arm/logicnode/event/LN_send_global_event.py index c13bea6b..370720fd 100644 --- a/blender/arm/logicnode/event/LN_send_global_event.py +++ b/blender/arm/logicnode/event/LN_send_global_event.py @@ -4,8 +4,10 @@ class SendGlobalEventNode(ArmLogicTreeNode): """Send global event node""" bl_idname = 'LNSendGlobalEventNode' bl_label = 'Send Global Event' + arm_version = 1 def init(self, context): + super(SendGlobalEventNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Event') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/input/LN_gamepad.py b/blender/arm/logicnode/input/LN_gamepad.py index 4793db7c..a43a75dc 100644 --- a/blender/arm/logicnode/input/LN_gamepad.py +++ b/blender/arm/logicnode/input/LN_gamepad.py @@ -4,6 +4,7 @@ class GamepadNode(ArmLogicTreeNode): """Gamepad node""" bl_idname = 'LNMergedGamepadNode' bl_label = 'Gamepad' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), @@ -35,6 +36,7 @@ class GamepadNode(ArmLogicTreeNode): name='', default='cross') def init(self, context): + super(GamepadNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') self.add_output('NodeSocketBool', 'State') self.add_input('NodeSocketInt', 'Gamepad') diff --git a/blender/arm/logicnode/input/LN_gamepad_coords.py b/blender/arm/logicnode/input/LN_gamepad_coords.py index 1cd47ede..a8f4de4d 100644 --- a/blender/arm/logicnode/input/LN_gamepad_coords.py +++ b/blender/arm/logicnode/input/LN_gamepad_coords.py @@ -4,8 +4,10 @@ class GamepadCoordsNode(ArmLogicTreeNode): """Gamepad coords node""" bl_idname = 'LNGamepadCoordsNode' bl_label = 'Gamepad Coords' + arm_version = 1 def init(self, context): + super(GamepadCoordsNode, self).init(context) self.add_output('NodeSocketVector', 'Left Stick') self.add_output('NodeSocketVector', 'Right Stick') self.add_output('NodeSocketVector', 'Left Movement') diff --git a/blender/arm/logicnode/input/LN_get_mouse_lock.py b/blender/arm/logicnode/input/LN_get_mouse_lock.py index ce68bf17..f247d0c7 100644 --- a/blender/arm/logicnode/input/LN_get_mouse_lock.py +++ b/blender/arm/logicnode/input/LN_get_mouse_lock.py @@ -7,8 +7,10 @@ class GetMouseLockNode(ArmLogicTreeNode): """Get Mouse Lock node""" bl_idname = 'LNGetMouseLockNode' bl_label = 'Get Mouse Lock' + arm_version = 1 def init(self, context): + super(GetMouseLockNode, self).init(context) self.outputs.new('NodeSocketBool', 'Lock') add_node(GetMouseLockNode, category=PKG_AS_CATEGORY, section='mouse') diff --git a/blender/arm/logicnode/input/LN_get_mouse_visible.py b/blender/arm/logicnode/input/LN_get_mouse_visible.py index e5912bb8..c9f47913 100644 --- a/blender/arm/logicnode/input/LN_get_mouse_visible.py +++ b/blender/arm/logicnode/input/LN_get_mouse_visible.py @@ -7,8 +7,10 @@ class GetMouseVisibleNode(ArmLogicTreeNode): """Get Mouse Visible node""" bl_idname = 'LNGetMouseVisibleNode' bl_label = 'Get Mouse Visible' + arm_version = 1 def init(self, context): + super(GetMouseVisibleNode, self).init(context) self.outputs.new('NodeSocketBool', 'Visible') add_node(GetMouseVisibleNode, category=PKG_AS_CATEGORY, section='mouse') diff --git a/blender/arm/logicnode/input/LN_keyboard.py b/blender/arm/logicnode/input/LN_keyboard.py index 89c06d14..f10b1a8c 100644 --- a/blender/arm/logicnode/input/LN_keyboard.py +++ b/blender/arm/logicnode/input/LN_keyboard.py @@ -4,6 +4,7 @@ class KeyboardNode(ArmLogicTreeNode): """Keyboard node""" bl_idname = 'LNMergedKeyboardNode' bl_label = 'Keyboard' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), @@ -67,6 +68,7 @@ class KeyboardNode(ArmLogicTreeNode): name='', default='space') def init(self, context): + super(KeyboardNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') self.add_output('NodeSocketBool', 'State') diff --git a/blender/arm/logicnode/input/LN_mouse.py b/blender/arm/logicnode/input/LN_mouse.py index 1c8d018e..687f72ad 100644 --- a/blender/arm/logicnode/input/LN_mouse.py +++ b/blender/arm/logicnode/input/LN_mouse.py @@ -4,6 +4,7 @@ class MouseNode(ArmLogicTreeNode): """Mouse node""" bl_idname = 'LNMergedMouseNode' bl_label = 'Mouse' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), ('Started', 'Started', 'Started'), @@ -17,6 +18,7 @@ class MouseNode(ArmLogicTreeNode): name='', default='left') def init(self, context): + super(MouseNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') self.add_output('NodeSocketBool', 'State') diff --git a/blender/arm/logicnode/input/LN_mouse_coords.py b/blender/arm/logicnode/input/LN_mouse_coords.py index 50ca0434..ec712bbc 100644 --- a/blender/arm/logicnode/input/LN_mouse_coords.py +++ b/blender/arm/logicnode/input/LN_mouse_coords.py @@ -4,8 +4,10 @@ class MouseCoordsNode(ArmLogicTreeNode): """Mouse coords node""" bl_idname = 'LNMouseCoordsNode' bl_label = 'Mouse Coords' + arm_version = 1 def init(self, context): + super(MouseCoordsNode, self).init(context) self.add_output('NodeSocketVector', 'Coords') self.add_output('NodeSocketVector', 'Movement') self.add_output('NodeSocketInt', 'Wheel') diff --git a/blender/arm/logicnode/input/LN_on_gamepad.py b/blender/arm/logicnode/input/LN_on_gamepad.py index 3bd9c410..d38bee3e 100644 --- a/blender/arm/logicnode/input/LN_on_gamepad.py +++ b/blender/arm/logicnode/input/LN_on_gamepad.py @@ -4,6 +4,7 @@ class OnGamepadNode(ArmLogicTreeNode): """On gamepad node""" bl_idname = 'LNOnGamepadNode' bl_label = 'On Gamepad' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), @@ -35,6 +36,7 @@ class OnGamepadNode(ArmLogicTreeNode): name='', default='cross') def init(self, context): + super(OnGamepadNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') self.add_input('NodeSocketInt', 'Gamepad') diff --git a/blender/arm/logicnode/input/LN_on_keyboard.py b/blender/arm/logicnode/input/LN_on_keyboard.py index 3f5efb54..168b7c4f 100644 --- a/blender/arm/logicnode/input/LN_on_keyboard.py +++ b/blender/arm/logicnode/input/LN_on_keyboard.py @@ -4,6 +4,7 @@ class OnKeyboardNode(ArmLogicTreeNode): """On keyboard node""" bl_idname = 'LNOnKeyboardNode' bl_label = 'On Keyboard' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), @@ -67,6 +68,7 @@ class OnKeyboardNode(ArmLogicTreeNode): name='', default='space') def init(self, context): + super(OnKeyboardNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/input/LN_on_mouse.py b/blender/arm/logicnode/input/LN_on_mouse.py index 7ce39b79..305cc151 100644 --- a/blender/arm/logicnode/input/LN_on_mouse.py +++ b/blender/arm/logicnode/input/LN_on_mouse.py @@ -4,6 +4,7 @@ class OnMouseNode(ArmLogicTreeNode): """On mouse node""" bl_idname = 'LNOnMouseNode' bl_label = 'On Mouse' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), ('Started', 'Started', 'Started'), @@ -17,6 +18,7 @@ class OnMouseNode(ArmLogicTreeNode): name='', default='left') def init(self, context): + super(OnMouseNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/input/LN_on_surface.py b/blender/arm/logicnode/input/LN_on_surface.py index f7c259eb..33d8aeb1 100644 --- a/blender/arm/logicnode/input/LN_on_surface.py +++ b/blender/arm/logicnode/input/LN_on_surface.py @@ -4,6 +4,7 @@ class OnSurfaceNode(ArmLogicTreeNode): """On surface node""" bl_idname = 'LNOnSurfaceNode' bl_label = 'On Surface' + arm_version = 1 property0: EnumProperty( items = [('Touched', 'Touched', 'Touched'), ('Started', 'Started', 'Started'), @@ -12,6 +13,7 @@ class OnSurfaceNode(ArmLogicTreeNode): name='', default='Touched') def init(self, context): + super(OnSurfaceNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/input/LN_on_virtual_button.py b/blender/arm/logicnode/input/LN_on_virtual_button.py index 0a919437..167f6e2f 100644 --- a/blender/arm/logicnode/input/LN_on_virtual_button.py +++ b/blender/arm/logicnode/input/LN_on_virtual_button.py @@ -4,6 +4,7 @@ class OnVirtualButtonNode(ArmLogicTreeNode): """On virtual button node""" bl_idname = 'LNOnVirtualButtonNode' bl_label = 'On Virtual Button' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), ('Started', 'Started', 'Started'), @@ -12,6 +13,7 @@ class OnVirtualButtonNode(ArmLogicTreeNode): property1: StringProperty(name='', default='button') def init(self, context): + super(OnVirtualButtonNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/input/LN_sensor_coords.py b/blender/arm/logicnode/input/LN_sensor_coords.py index 28521fd2..fe72f290 100644 --- a/blender/arm/logicnode/input/LN_sensor_coords.py +++ b/blender/arm/logicnode/input/LN_sensor_coords.py @@ -4,8 +4,10 @@ class SensorCoordsNode(ArmLogicTreeNode): """Sensor coords node""" bl_idname = 'LNSensorCoordsNode' bl_label = 'Sensor Coords' + arm_version = 1 def init(self, context): + super(SensorCoordsNode, self).init(context) self.add_output('NodeSocketVector', 'Coords') add_node(SensorCoordsNode, category=PKG_AS_CATEGORY, section='sensor') diff --git a/blender/arm/logicnode/input/LN_set_mouse_lock.py b/blender/arm/logicnode/input/LN_set_mouse_lock.py index af4fd750..719575e8 100644 --- a/blender/arm/logicnode/input/LN_set_mouse_lock.py +++ b/blender/arm/logicnode/input/LN_set_mouse_lock.py @@ -4,8 +4,10 @@ class SetMouseLockNode(ArmLogicTreeNode): """Set Mouse Lock node""" bl_idname = 'LNSetMouseLockNode' bl_label = 'Set Mouse Lock' + arm_version = 1 def init(self, context): + super(SetMouseLockNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'Lock') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/input/LN_show_mouse.py b/blender/arm/logicnode/input/LN_show_mouse.py index 4c768561..03935d12 100644 --- a/blender/arm/logicnode/input/LN_show_mouse.py +++ b/blender/arm/logicnode/input/LN_show_mouse.py @@ -4,8 +4,10 @@ class ShowMouseNode(ArmLogicTreeNode): """Show Mouse node""" bl_idname = 'LNShowMouseNode' bl_label = 'Show Mouse' + arm_version = 1 def init(self, context): + super(ShowMouseNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'Show') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/input/LN_surface.py b/blender/arm/logicnode/input/LN_surface.py index b1c0be50..94e6c118 100644 --- a/blender/arm/logicnode/input/LN_surface.py +++ b/blender/arm/logicnode/input/LN_surface.py @@ -4,6 +4,7 @@ class SurfaceNode(ArmLogicTreeNode): """Surface node""" bl_idname = 'LNMergedSurfaceNode' bl_label = 'Surface' + arm_version = 1 property0: EnumProperty( items = [('Touched', 'Touched', 'Touched'), ('Started', 'Started', 'Started'), @@ -12,6 +13,7 @@ class SurfaceNode(ArmLogicTreeNode): name='', default='Touched') def init(self, context): + super(SurfaceNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') self.add_output('NodeSocketBool', 'State') diff --git a/blender/arm/logicnode/input/LN_surface_coords.py b/blender/arm/logicnode/input/LN_surface_coords.py index 3f609939..be32bed3 100644 --- a/blender/arm/logicnode/input/LN_surface_coords.py +++ b/blender/arm/logicnode/input/LN_surface_coords.py @@ -4,8 +4,10 @@ class SurfaceCoordsNode(ArmLogicTreeNode): """Surface coords node""" bl_idname = 'LNSurfaceCoordsNode' bl_label = 'Surface Coords' + arm_version = 1 def init(self, context): + super(SurfaceCoordsNode, self).init(context) self.add_output('NodeSocketVector', 'Coords') self.add_output('NodeSocketVector', 'Movement') diff --git a/blender/arm/logicnode/input/LN_virtual_button.py b/blender/arm/logicnode/input/LN_virtual_button.py index 85bd7128..0140b216 100644 --- a/blender/arm/logicnode/input/LN_virtual_button.py +++ b/blender/arm/logicnode/input/LN_virtual_button.py @@ -4,6 +4,7 @@ class VirtualButtonNode(ArmLogicTreeNode): """Virtual button node""" bl_idname = 'LNMergedVirtualButtonNode' bl_label = 'Virtual Button' + arm_version = 1 property0: EnumProperty( items = [('Down', 'Down', 'Down'), ('Started', 'Started', 'Started'), @@ -12,6 +13,7 @@ class VirtualButtonNode(ArmLogicTreeNode): property1: StringProperty(name='', default='button') def init(self, context): + super(VirtualButtonNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') self.add_output('NodeSocketBool', 'State') diff --git a/blender/arm/logicnode/light/LN_set_light_color.py b/blender/arm/logicnode/light/LN_set_light_color.py index 574bc75e..060beef6 100644 --- a/blender/arm/logicnode/light/LN_set_light_color.py +++ b/blender/arm/logicnode/light/LN_set_light_color.py @@ -4,8 +4,10 @@ class SetLightColorNode(ArmLogicTreeNode): """Set light color node""" bl_idname = 'LNSetLightColorNode' bl_label = 'Set Light Color' + arm_version = 1 def init(self, context): + super(SetLightColorNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketColor', 'Color', default_value=[1.0, 1.0, 1.0, 1.0]) diff --git a/blender/arm/logicnode/light/LN_set_light_strength.py b/blender/arm/logicnode/light/LN_set_light_strength.py index b81cb6f5..0cb42631 100644 --- a/blender/arm/logicnode/light/LN_set_light_strength.py +++ b/blender/arm/logicnode/light/LN_set_light_strength.py @@ -4,8 +4,10 @@ class SetLightStrengthNode(ArmLogicTreeNode): """Set light strength node""" bl_idname = 'LNSetLightStrengthNode' bl_label = 'Set Light Strength' + arm_version = 1 def init(self, context): + super(SetLightStrengthNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketFloat', 'Strength', default_value=100) diff --git a/blender/arm/logicnode/logic/LN_alternate.py b/blender/arm/logicnode/logic/LN_alternate.py index f4609ec1..6d7b6e91 100644 --- a/blender/arm/logicnode/logic/LN_alternate.py +++ b/blender/arm/logicnode/logic/LN_alternate.py @@ -5,8 +5,10 @@ class AlternateNode(ArmLogicTreeNode): """Alternate node""" bl_idname = 'LNAlternateNode' bl_label = 'Alternate' + arm_version = 1 def init(self, context): + super(AlternateNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', '0') self.add_output('ArmNodeSocketAction', '1') diff --git a/blender/arm/logicnode/logic/LN_branch.py b/blender/arm/logicnode/logic/LN_branch.py index 44d33e34..84455beb 100644 --- a/blender/arm/logicnode/logic/LN_branch.py +++ b/blender/arm/logicnode/logic/LN_branch.py @@ -5,8 +5,10 @@ class BranchNode(ArmLogicTreeNode): """Branch node""" bl_idname = 'LNBranchNode' bl_label = 'Branch' + arm_version = 1 def init(self, context): + super(BranchNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'Bool') self.add_output('ArmNodeSocketAction', 'True') diff --git a/blender/arm/logicnode/logic/LN_call_function.py b/blender/arm/logicnode/logic/LN_call_function.py index 2733b69f..016b343d 100644 --- a/blender/arm/logicnode/logic/LN_call_function.py +++ b/blender/arm/logicnode/logic/LN_call_function.py @@ -4,12 +4,14 @@ class CallFunctionNode(ArmLogicTreeNode): """Call Haxe function node""" bl_idname = 'LNCallFunctionNode' bl_label = 'Call Function' + arm_version = 1 min_inputs = 3 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(CallFunctionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Trait/Any') self.add_input('NodeSocketString', 'Function') diff --git a/blender/arm/logicnode/logic/LN_function.py b/blender/arm/logicnode/logic/LN_function.py index a26c9f9a..47eaf73d 100644 --- a/blender/arm/logicnode/logic/LN_function.py +++ b/blender/arm/logicnode/logic/LN_function.py @@ -5,12 +5,14 @@ class FunctionNode(ArmLogicTreeNode): """Function node""" bl_idname = 'LNFunctionNode' bl_label = 'Function' + arm_version = 1 min_outputs = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(FunctionNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') function_name: StringProperty(name="Name") diff --git a/blender/arm/logicnode/logic/LN_function_output.py b/blender/arm/logicnode/logic/LN_function_output.py index 14284da9..dac1f300 100644 --- a/blender/arm/logicnode/logic/LN_function_output.py +++ b/blender/arm/logicnode/logic/LN_function_output.py @@ -5,8 +5,10 @@ class FunctionOutputNode(ArmLogicTreeNode): """Function output node""" bl_idname = 'LNFunctionOutputNode' bl_label = 'Function Output' + arm_version = 1 def init(self, context): + super(FunctionOutputNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/logic/LN_gate.py b/blender/arm/logicnode/logic/LN_gate.py index d746f4ec..de54e6df 100644 --- a/blender/arm/logicnode/logic/LN_gate.py +++ b/blender/arm/logicnode/logic/LN_gate.py @@ -11,6 +11,7 @@ class GateNode(ArmLogicTreeNode): """Gate node""" bl_idname = 'LNGateNode' bl_label = 'Gate' + arm_version = 1 min_inputs = 3 property0: EnumProperty( @@ -30,6 +31,7 @@ class GateNode(ArmLogicTreeNode): array_nodes[str(id(self))] = self def init(self, context): + super(GateNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Value') self.add_input('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/logic/LN_inverse.py b/blender/arm/logicnode/logic/LN_inverse.py index 4b3b11e7..09793bb7 100644 --- a/blender/arm/logicnode/logic/LN_inverse.py +++ b/blender/arm/logicnode/logic/LN_inverse.py @@ -5,8 +5,10 @@ class InverseNode(ArmLogicTreeNode): """Inverse node""" bl_idname = 'LNInverseNode' bl_label = 'Inverse' + arm_version = 1 def init(self, context): + super(InverseNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/logic/LN_is_false.py b/blender/arm/logicnode/logic/LN_is_false.py index c4e1c25b..4666483e 100644 --- a/blender/arm/logicnode/logic/LN_is_false.py +++ b/blender/arm/logicnode/logic/LN_is_false.py @@ -5,8 +5,10 @@ class IsFalseNode(ArmLogicTreeNode): """Is False node""" bl_idname = 'LNIsFalseNode' bl_label = 'Is False' + arm_version = 1 def init(self, context): + super(IsFalseNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'Value') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/logic/LN_is_none.py b/blender/arm/logicnode/logic/LN_is_none.py index 48c7b0dc..27a5411d 100644 --- a/blender/arm/logicnode/logic/LN_is_none.py +++ b/blender/arm/logicnode/logic/LN_is_none.py @@ -5,8 +5,10 @@ class IsNoneNode(ArmLogicTreeNode): """Is none node""" bl_idname = 'LNIsNoneNode' bl_label = 'Is None' + arm_version = 1 def init(self, context): + super(IsNoneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Value') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/logic/LN_is_not_none.py b/blender/arm/logicnode/logic/LN_is_not_none.py index c8cc0809..c6002c53 100644 --- a/blender/arm/logicnode/logic/LN_is_not_none.py +++ b/blender/arm/logicnode/logic/LN_is_not_none.py @@ -4,8 +4,10 @@ class IsNotNoneNode(ArmLogicTreeNode): """Is not none node""" bl_idname = 'LNIsNotNoneNode' bl_label = 'Is Not None' + arm_version = 1 def init(self, context): + super(IsNotNoneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Value') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/logic/LN_is_true.py b/blender/arm/logicnode/logic/LN_is_true.py index d456b877..0e61b0bb 100644 --- a/blender/arm/logicnode/logic/LN_is_true.py +++ b/blender/arm/logicnode/logic/LN_is_true.py @@ -4,8 +4,10 @@ class IsTrueNode(ArmLogicTreeNode): """Is true node""" bl_idname = 'LNIsTrueNode' bl_label = 'Is True' + arm_version = 1 def init(self, context): + super(IsTrueNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'Value') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/logic/LN_loop.py b/blender/arm/logicnode/logic/LN_loop.py index 2eca6c97..85394c11 100644 --- a/blender/arm/logicnode/logic/LN_loop.py +++ b/blender/arm/logicnode/logic/LN_loop.py @@ -4,8 +4,10 @@ class LoopNode(ArmLogicTreeNode): """Loop node""" bl_idname = 'LNLoopNode' bl_label = 'Loop' + arm_version = 1 def init(self, context): + super(LoopNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketInt', 'From') self.add_input('NodeSocketInt', 'To') diff --git a/blender/arm/logicnode/logic/LN_loop_break.py b/blender/arm/logicnode/logic/LN_loop_break.py index c90150dd..14aff011 100644 --- a/blender/arm/logicnode/logic/LN_loop_break.py +++ b/blender/arm/logicnode/logic/LN_loop_break.py @@ -4,8 +4,10 @@ class LoopBreakNode(ArmLogicTreeNode): """Loop break node""" bl_idname = 'LNLoopBreakNode' bl_label = 'Loop Break' + arm_version = 1 def init(self, context): + super(LoopBreakNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') add_node(LoopBreakNode, category=PKG_AS_CATEGORY, section='flow') diff --git a/blender/arm/logicnode/logic/LN_merge.py b/blender/arm/logicnode/logic/LN_merge.py index bd3241cc..a9693ee1 100644 --- a/blender/arm/logicnode/logic/LN_merge.py +++ b/blender/arm/logicnode/logic/LN_merge.py @@ -4,11 +4,13 @@ class MergeNode(ArmLogicTreeNode): """Merge node""" bl_idname = 'LNMergeNode' bl_label = 'Merge' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(MergeNode, self).init(context) self.add_output('ArmNodeSocketAction', 'Out') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/logic/LN_none.py b/blender/arm/logicnode/logic/LN_none.py index 38c7770f..5f40fb50 100644 --- a/blender/arm/logicnode/logic/LN_none.py +++ b/blender/arm/logicnode/logic/LN_none.py @@ -4,8 +4,10 @@ class NoneNode(ArmLogicTreeNode): """None node""" bl_idname = 'LNNoneNode' bl_label = 'None' + arm_version = 1 def init(self, context): + super(NoneNode, self).init(context) self.add_output('NodeSocketShader', 'None') add_node(NoneNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/logic/LN_not.py b/blender/arm/logicnode/logic/LN_not.py index c5141210..3807be21 100644 --- a/blender/arm/logicnode/logic/LN_not.py +++ b/blender/arm/logicnode/logic/LN_not.py @@ -4,8 +4,10 @@ class NotNode(ArmLogicTreeNode): """Not node""" bl_idname = 'LNNotNode' bl_label = 'Not' + arm_version = 1 def init(self, context): + super(NotNode, self).init(context) self.add_input('NodeSocketBool', 'Value') self.add_output('NodeSocketBool', 'Value') diff --git a/blender/arm/logicnode/logic/LN_sequence.py b/blender/arm/logicnode/logic/LN_sequence.py index 4b7a773f..7a961770 100644 --- a/blender/arm/logicnode/logic/LN_sequence.py +++ b/blender/arm/logicnode/logic/LN_sequence.py @@ -4,11 +4,13 @@ class SequenceNode(ArmLogicTreeNode): """Sequence node""" bl_idname = 'LNSequenceNode' bl_label = 'Sequence' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(SequenceNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/logic/LN_switch.py b/blender/arm/logicnode/logic/LN_switch.py index b35dd236..32b15625 100644 --- a/blender/arm/logicnode/logic/LN_switch.py +++ b/blender/arm/logicnode/logic/LN_switch.py @@ -4,6 +4,7 @@ class SwitchNode(ArmLogicTreeNode): """Switch node""" bl_idname = 'LNSwitchNode' bl_label = 'Switch' + arm_version = 1 min_inputs = 2 min_outputs = 1 @@ -11,6 +12,7 @@ class SwitchNode(ArmLogicTreeNode): array_nodes[str(id(self))] = self def init(self, context): + super(SwitchNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Value') self.add_output('ArmNodeSocketAction', 'Default') diff --git a/blender/arm/logicnode/logic/LN_to_bool.py b/blender/arm/logicnode/logic/LN_to_bool.py index befb80be..c462fb46 100644 --- a/blender/arm/logicnode/logic/LN_to_bool.py +++ b/blender/arm/logicnode/logic/LN_to_bool.py @@ -4,8 +4,10 @@ class ToBoolNode(ArmLogicTreeNode): """To Bool Node""" bl_idname = 'LNToBoolNode' bl_label = 'To Bool' + arm_version = 1 def init(self, context): + super(ToBoolNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/logic/LN_while.py b/blender/arm/logicnode/logic/LN_while.py index a1fc4412..54304daa 100644 --- a/blender/arm/logicnode/logic/LN_while.py +++ b/blender/arm/logicnode/logic/LN_while.py @@ -4,8 +4,10 @@ class WhileNode(ArmLogicTreeNode): """While node""" bl_idname = 'LNWhileNode' bl_label = 'While' + arm_version = 1 def init(self, context): + super(WhileNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'Condition') self.add_output('ArmNodeSocketAction', 'Loop') diff --git a/blender/arm/logicnode/material/LN_get_material.py b/blender/arm/logicnode/material/LN_get_material.py index 47cbf052..be07eebc 100644 --- a/blender/arm/logicnode/material/LN_get_material.py +++ b/blender/arm/logicnode/material/LN_get_material.py @@ -4,8 +4,10 @@ class GetMaterialNode(ArmLogicTreeNode): """Get material node""" bl_idname = 'LNGetMaterialNode' bl_label = 'Get Material' + arm_version = 1 def init(self, context): + super(GetMaterialNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketShader', 'Material') diff --git a/blender/arm/logicnode/material/LN_material.py b/blender/arm/logicnode/material/LN_material.py index deb74d86..00659cf9 100644 --- a/blender/arm/logicnode/material/LN_material.py +++ b/blender/arm/logicnode/material/LN_material.py @@ -8,6 +8,7 @@ class MaterialNode(ArmLogicTreeNode): """Material node""" bl_idname = 'LNMaterialNode' bl_label = 'Material' + arm_version = 1 @property def property0_get(self): @@ -20,6 +21,7 @@ class MaterialNode(ArmLogicTreeNode): property0: PointerProperty(name='', type=bpy.types.Material) def init(self, context): + super(MaterialNode, self).init(context) self.add_output('NodeSocketShader', 'Material', is_var=True) def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/material/LN_set_material.py b/blender/arm/logicnode/material/LN_set_material.py index 8bc1006d..16c7f814 100644 --- a/blender/arm/logicnode/material/LN_set_material.py +++ b/blender/arm/logicnode/material/LN_set_material.py @@ -4,8 +4,10 @@ class SetMaterialNode(ArmLogicTreeNode): """Set material node""" bl_idname = 'LNSetMaterialNode' bl_label = 'Set Material' + arm_version = 1 def init(self, context): + super(SetMaterialNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Material') diff --git a/blender/arm/logicnode/material/LN_set_material_image_param.py b/blender/arm/logicnode/material/LN_set_material_image_param.py index eb49675c..015f674d 100644 --- a/blender/arm/logicnode/material/LN_set_material_image_param.py +++ b/blender/arm/logicnode/material/LN_set_material_image_param.py @@ -4,8 +4,10 @@ class SetMaterialImageParamNode(ArmLogicTreeNode): """Set material image param node""" bl_idname = 'LNSetMaterialImageParamNode' bl_label = 'Set Material Image Param' + arm_version = 1 def init(self, context): + super(SetMaterialImageParamNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Material') self.add_input('NodeSocketString', 'Node') diff --git a/blender/arm/logicnode/material/LN_set_material_rgb_param.py b/blender/arm/logicnode/material/LN_set_material_rgb_param.py index a5fcdaf8..9c07de4a 100644 --- a/blender/arm/logicnode/material/LN_set_material_rgb_param.py +++ b/blender/arm/logicnode/material/LN_set_material_rgb_param.py @@ -4,8 +4,10 @@ class SetMaterialRgbParamNode(ArmLogicTreeNode): """Set material rgb param node""" bl_idname = 'LNSetMaterialRgbParamNode' bl_label = 'Set Material RGB Param' + arm_version = 1 def init(self, context): + super(SetMaterialRgbParamNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Material') self.add_input('NodeSocketString', 'Node') diff --git a/blender/arm/logicnode/material/LN_set_material_slot.py b/blender/arm/logicnode/material/LN_set_material_slot.py index c44c0c95..0168742c 100644 --- a/blender/arm/logicnode/material/LN_set_material_slot.py +++ b/blender/arm/logicnode/material/LN_set_material_slot.py @@ -4,8 +4,10 @@ class SetMaterialSlotNode(ArmLogicTreeNode): """Set material slot node""" bl_idname = 'LNSetMaterialSlotNode' bl_label = 'Set Material Slot' + arm_version = 1 def init(self, context): + super(SetMaterialSlotNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Material') diff --git a/blender/arm/logicnode/material/LN_set_material_value_param.py b/blender/arm/logicnode/material/LN_set_material_value_param.py index 4544fb61..beee8b1c 100644 --- a/blender/arm/logicnode/material/LN_set_material_value_param.py +++ b/blender/arm/logicnode/material/LN_set_material_value_param.py @@ -4,8 +4,10 @@ class SetMaterialValueParamNode(ArmLogicTreeNode): """Set material value param node""" bl_idname = 'LNSetMaterialValueParamNode' bl_label = 'Set Material Value Param' + arm_version = 1 def init(self, context): + super(SetMaterialValueParamNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Material') self.add_input('NodeSocketString', 'Node') diff --git a/blender/arm/logicnode/math/LN_compare.py b/blender/arm/logicnode/math/LN_compare.py index 15774a70..92d3c8ed 100644 --- a/blender/arm/logicnode/math/LN_compare.py +++ b/blender/arm/logicnode/math/LN_compare.py @@ -9,6 +9,7 @@ class CompareNode(ArmLogicTreeNode): """Compare node""" bl_idname = 'LNCompareNode' bl_label = 'Compare' + arm_version = 1 property0: EnumProperty( items = [('Equal', 'Equal', 'Equal'), ('Almost Equal', 'Almost Equal', 'Almost Equal'), @@ -27,6 +28,7 @@ class CompareNode(ArmLogicTreeNode): array_nodes[str(id(self))] = self def init(self, context): + super(CompareNode, self).init(context) self.add_input('NodeSocketShader', 'Value') self.add_input('NodeSocketShader', 'Value') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/math/LN_deg_to_rad.py b/blender/arm/logicnode/math/LN_deg_to_rad.py index 5edc5e6d..ea845d34 100644 --- a/blender/arm/logicnode/math/LN_deg_to_rad.py +++ b/blender/arm/logicnode/math/LN_deg_to_rad.py @@ -4,8 +4,10 @@ class DegToRadNode(ArmLogicTreeNode): """Degrees to radians node""" bl_idname = 'LNDegToRadNode' bl_label = 'Deg to Rad' + arm_version = 1 def init(self, context): + super(DegToRadNode, self).init(context) self.add_input('NodeSocketFloat', 'Degrees') self.add_output('NodeSocketFloat', 'Radians') diff --git a/blender/arm/logicnode/math/LN_math.py b/blender/arm/logicnode/math/LN_math.py index 78244ae5..1033571f 100644 --- a/blender/arm/logicnode/math/LN_math.py +++ b/blender/arm/logicnode/math/LN_math.py @@ -4,6 +4,7 @@ class MathNode(ArmLogicTreeNode): """Math node""" bl_idname = 'LNMathNode' bl_label = 'Math' + arm_version = 1 property0: EnumProperty( items = [('Add', 'Add', 'Add'), ('Multiply', 'Multiply', 'Multiply'), @@ -40,6 +41,7 @@ class MathNode(ArmLogicTreeNode): property1_: BoolProperty(name='Clamp', default=False) def init(self, context): + super(MathNode, self).init(context) self.add_input('NodeSocketFloat', 'Value', default_value=0.5) self.add_input('NodeSocketFloat', 'Value', default_value=0.5) self.add_output('NodeSocketFloat', 'Value') diff --git a/blender/arm/logicnode/math/LN_matrix_math.py b/blender/arm/logicnode/math/LN_matrix_math.py index ae648ffc..b020b36d 100644 --- a/blender/arm/logicnode/math/LN_matrix_math.py +++ b/blender/arm/logicnode/math/LN_matrix_math.py @@ -4,11 +4,13 @@ class MatrixMathNode(ArmLogicTreeNode): """Matrix math node""" bl_idname = 'LNMatrixMathNode' bl_label = 'Matrix Math' + arm_version = 1 property0: EnumProperty( items = [('Multiply', 'Multiply', 'Multiply')], name='', default='Multiply') def init(self, context): + super(MatrixMathNode, self).init(context) self.add_input('NodeSocketShader', 'Matrix') self.add_input('NodeSocketShader', 'Matrix') self.add_output('NodeSocketShader', 'Matrix') diff --git a/blender/arm/logicnode/math/LN_mix.py b/blender/arm/logicnode/math/LN_mix.py index 54084e6a..8fca3e9a 100644 --- a/blender/arm/logicnode/math/LN_mix.py +++ b/blender/arm/logicnode/math/LN_mix.py @@ -4,6 +4,7 @@ class MixNode(ArmLogicTreeNode): """Mix node""" bl_idname = 'LNMixNode' bl_label = 'Interpolate' + arm_version = 1 property0: EnumProperty( items = [('Linear', 'Linear', 'Linear'), ('Sine', 'Sine', 'Sine'), @@ -30,6 +31,7 @@ class MixNode(ArmLogicTreeNode): property2_: BoolProperty(name='Clamp', default=False) def init(self, context): + super(MixNode, self).init(context) self.add_input('NodeSocketFloat', 'Factor', default_value=0.0) self.add_input('NodeSocketFloat', 'Value1', default_value=0.0) self.add_input('NodeSocketFloat', 'Value2', default_value=1.0) diff --git a/blender/arm/logicnode/math/LN_rad_to_deg.py b/blender/arm/logicnode/math/LN_rad_to_deg.py index 6941ba6a..20f8c001 100644 --- a/blender/arm/logicnode/math/LN_rad_to_deg.py +++ b/blender/arm/logicnode/math/LN_rad_to_deg.py @@ -4,8 +4,10 @@ class RadToDegNode(ArmLogicTreeNode): """Radians to degrees node""" bl_idname = 'LNRadToDegNode' bl_label = 'Rad to Deg' + arm_version = 1 def init(self, context): + super(RadToDegNode, self).init(context) self.add_input('NodeSocketFloat', 'Radians') self.add_output('NodeSocketFloat', 'Degrees') diff --git a/blender/arm/logicnode/math/LN_screen_to_world_space.py b/blender/arm/logicnode/math/LN_screen_to_world_space.py index 08aeac66..69aa7473 100644 --- a/blender/arm/logicnode/math/LN_screen_to_world_space.py +++ b/blender/arm/logicnode/math/LN_screen_to_world_space.py @@ -4,8 +4,10 @@ class ScreenToWorldSpaceNode(ArmLogicTreeNode): """Screen to world space node""" bl_idname = 'LNScreenToWorldSpaceNode' bl_label = 'Screen To World Space' + arm_version = 1 def init(self, context): + super(ScreenToWorldSpaceNode, self).init(context) self.add_input('NodeSocketVector', 'Vector') self.add_output('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/math/LN_separate_color.py b/blender/arm/logicnode/math/LN_separate_color.py index 9e9c6ad0..2837e7b8 100644 --- a/blender/arm/logicnode/math/LN_separate_color.py +++ b/blender/arm/logicnode/math/LN_separate_color.py @@ -4,8 +4,10 @@ class SeparateColorNode(ArmLogicTreeNode): """Separate color node""" bl_idname = 'LNSeparateColorNode' bl_label = 'Separate RGB' + arm_version = 1 def init(self, context): + super(SeparateColorNode, self).init(context) self.add_input('NodeSocketColor', 'Color', default_value=[0.8, 0.8, 0.8, 1]) self.add_output('NodeSocketFloat', 'R') diff --git a/blender/arm/logicnode/math/LN_separate_vector.py b/blender/arm/logicnode/math/LN_separate_vector.py index 6e5b44b8..c1a2a993 100644 --- a/blender/arm/logicnode/math/LN_separate_vector.py +++ b/blender/arm/logicnode/math/LN_separate_vector.py @@ -4,8 +4,10 @@ class SeparateVectorNode(ArmLogicTreeNode): """Separate vector node""" bl_idname = 'LNSeparateVectorNode' bl_label = 'Separate XYZ' + arm_version = 1 def init(self, context): + super(SeparateVectorNode, self).init(context) self.add_input('NodeSocketVector', 'Vector') self.add_output('NodeSocketFloat', 'X') self.add_output('NodeSocketFloat', 'Y') diff --git a/blender/arm/logicnode/math/LN_vector_clamp_to_size.py b/blender/arm/logicnode/math/LN_vector_clamp_to_size.py index 1ba6df12..14f6b345 100644 --- a/blender/arm/logicnode/math/LN_vector_clamp_to_size.py +++ b/blender/arm/logicnode/math/LN_vector_clamp_to_size.py @@ -4,8 +4,10 @@ class VectorClampToSizeNode(ArmLogicTreeNode): """Vector clamp to size node""" bl_idname = 'LNVectorClampToSizeNode' bl_label = 'Vector Clamp To Size' + arm_version = 1 def init(self, context): + super(VectorClampToSizeNode, self).init(context) self.add_input('NodeSocketVector', 'Vector', default_value=[0.5, 0.5, 0.5]) self.add_input('NodeSocketFloat', 'Min') self.add_input('NodeSocketFloat', 'Max') diff --git a/blender/arm/logicnode/math/LN_vector_math.py b/blender/arm/logicnode/math/LN_vector_math.py index 1bde9925..6875af87 100644 --- a/blender/arm/logicnode/math/LN_vector_math.py +++ b/blender/arm/logicnode/math/LN_vector_math.py @@ -4,6 +4,7 @@ class VectorMathNode(ArmLogicTreeNode): """Vector math node""" bl_idname = 'LNVectorMathNode' bl_label = 'Vector Math' + arm_version = 1 property0: EnumProperty( items = [('Add', 'Add', 'Add'), ('Dot Product', 'Dot Product', 'Dot Product'), @@ -19,6 +20,7 @@ class VectorMathNode(ArmLogicTreeNode): name='', default='Add') def init(self, context): + super(VectorMathNode, self).init(context) self.add_input('NodeSocketVector', 'Vector', default_value=[0.5, 0.5, 0.5]) self.add_input('NodeSocketVector', 'Vector', default_value=[0.5, 0.5, 0.5]) self.add_output('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/math/LN_vector_mix.py b/blender/arm/logicnode/math/LN_vector_mix.py index e5b5a3d0..5e0a0365 100644 --- a/blender/arm/logicnode/math/LN_vector_mix.py +++ b/blender/arm/logicnode/math/LN_vector_mix.py @@ -4,6 +4,7 @@ class VectorMixNode(ArmLogicTreeNode): """Vector mix node""" bl_idname = 'LNVectorMixNode' bl_label = 'Vector Mix' + arm_version = 1 property0: EnumProperty( items = [('Linear', 'Linear', 'Linear'), ('Sine', 'Sine', 'Sine'), @@ -30,6 +31,7 @@ class VectorMixNode(ArmLogicTreeNode): property2_: BoolProperty(name='Clamp', default=False) def init(self, context): + super(VectorMixNode, self).init(context) self.add_input('NodeSocketFloat', 'Factor', default_value=0.0) self.add_input('NodeSocketVector', 'Vector1', default_value=[0.0, 0.0, 0.0]) self.add_input('NodeSocketVector', 'Vector2', default_value=[1.0, 1.0, 1.0]) diff --git a/blender/arm/logicnode/math/LN_world_to_screen_space.py b/blender/arm/logicnode/math/LN_world_to_screen_space.py index 3c1add30..d4d93284 100644 --- a/blender/arm/logicnode/math/LN_world_to_screen_space.py +++ b/blender/arm/logicnode/math/LN_world_to_screen_space.py @@ -4,8 +4,10 @@ class WorldToScreenSpaceNode(ArmLogicTreeNode): """World to screen space node""" bl_idname = 'LNWorldToScreenSpaceNode' bl_label = 'World To Screen Space' + arm_version = 1 def init(self, context): + super(WorldToScreenSpaceNode, self).init(context) self.add_input('NodeSocketVector', 'Vector') self.add_output('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/miscellaneous/LN_call_group.py b/blender/arm/logicnode/miscellaneous/LN_call_group.py index 485699eb..ab62bf82 100644 --- a/blender/arm/logicnode/miscellaneous/LN_call_group.py +++ b/blender/arm/logicnode/miscellaneous/LN_call_group.py @@ -8,6 +8,7 @@ class CallGroupNode(ArmLogicTreeNode): """Call group node""" bl_idname = 'LNCallGroupNode' bl_label = 'Call Node Group' + arm_version = 1 @property def property0(self): @@ -16,6 +17,7 @@ class CallGroupNode(ArmLogicTreeNode): property0_: PointerProperty(name='Group', type=bpy.types.NodeTree) def init(self, context): + super(CallGroupNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/miscellaneous/LN_display_info.py b/blender/arm/logicnode/miscellaneous/LN_display_info.py index 097fd841..a7ff1631 100644 --- a/blender/arm/logicnode/miscellaneous/LN_display_info.py +++ b/blender/arm/logicnode/miscellaneous/LN_display_info.py @@ -4,8 +4,10 @@ class DisplayInfoNode(ArmLogicTreeNode): """Display info node""" bl_idname = 'LNDisplayInfoNode' bl_label = 'Display Info' + arm_version = 1 def init(self, context): + super(DisplayInfoNode, self).init(context) self.add_output('NodeSocketInt', 'Width') self.add_output('NodeSocketInt', 'Height') diff --git a/blender/arm/logicnode/miscellaneous/LN_group_output.py b/blender/arm/logicnode/miscellaneous/LN_group_output.py index 620a4033..f324234f 100644 --- a/blender/arm/logicnode/miscellaneous/LN_group_output.py +++ b/blender/arm/logicnode/miscellaneous/LN_group_output.py @@ -4,8 +4,10 @@ class GroupOutputNode(ArmLogicTreeNode): """Group output node""" bl_idname = 'LNGroupOutputNode' bl_label = 'Node Group Output' + arm_version = 1 def init(self, context): + super(GroupOutputNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') add_node(GroupOutputNode, category=PKG_AS_CATEGORY, section='group') diff --git a/blender/arm/logicnode/miscellaneous/LN_set_time_scale.py b/blender/arm/logicnode/miscellaneous/LN_set_time_scale.py index bad0b531..72093abe 100644 --- a/blender/arm/logicnode/miscellaneous/LN_set_time_scale.py +++ b/blender/arm/logicnode/miscellaneous/LN_set_time_scale.py @@ -4,8 +4,10 @@ class SetTimeScaleNode(ArmLogicTreeNode): """Set time scale node""" bl_idname = 'LNSetTimeScaleNode' bl_label = 'Set Time Scale' + arm_version = 1 def init(self, context): + super(SetTimeScaleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'Scale', default_value=1.0) self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/miscellaneous/LN_sleep.py b/blender/arm/logicnode/miscellaneous/LN_sleep.py index 89588789..eb2fa765 100644 --- a/blender/arm/logicnode/miscellaneous/LN_sleep.py +++ b/blender/arm/logicnode/miscellaneous/LN_sleep.py @@ -4,8 +4,10 @@ class SleepNode(ArmLogicTreeNode): """Sleep node""" bl_idname = 'LNSleepNode' bl_label = 'Sleep' + arm_version = 1 def init(self, context): + super(SleepNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'Time') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/miscellaneous/LN_time.py b/blender/arm/logicnode/miscellaneous/LN_time.py index 54c5a52a..b019006e 100644 --- a/blender/arm/logicnode/miscellaneous/LN_time.py +++ b/blender/arm/logicnode/miscellaneous/LN_time.py @@ -4,8 +4,10 @@ class TimeNode(ArmLogicTreeNode): """Time node""" bl_idname = 'LNTimeNode' bl_label = 'Time' + arm_version = 1 def init(self, context): + super(TimeNode, self).init(context) self.add_output('NodeSocketFloat', 'Time') self.add_output('NodeSocketFloat', 'Delta') diff --git a/blender/arm/logicnode/miscellaneous/LN_timer.py b/blender/arm/logicnode/miscellaneous/LN_timer.py index ec9ddb61..c4ce475a 100644 --- a/blender/arm/logicnode/miscellaneous/LN_timer.py +++ b/blender/arm/logicnode/miscellaneous/LN_timer.py @@ -4,8 +4,10 @@ class TimerNode(ArmLogicTreeNode): """Timer node""" bl_idname = 'LNTimerNode' bl_label = 'Timer' + arm_version = 1 def init(self, context): + super(TimerNode, self).init(context) self.add_input('ArmNodeSocketAction', 'Start') self.add_input('ArmNodeSocketAction', 'Pause') self.add_input('ArmNodeSocketAction', 'Stop') diff --git a/blender/arm/logicnode/miscellaneous/LN_window_info.py b/blender/arm/logicnode/miscellaneous/LN_window_info.py index 5f954788..13db674d 100644 --- a/blender/arm/logicnode/miscellaneous/LN_window_info.py +++ b/blender/arm/logicnode/miscellaneous/LN_window_info.py @@ -4,8 +4,10 @@ class WindowInfoNode(ArmLogicTreeNode): """Window info node""" bl_idname = 'LNWindowInfoNode' bl_label = 'Window Info' + arm_version = 1 def init(self, context): + super(WindowInfoNode, self).init(context) self.add_output('NodeSocketInt', 'Width') self.add_output('NodeSocketInt', 'Height') diff --git a/blender/arm/logicnode/native/LN_call_haxe_static.py b/blender/arm/logicnode/native/LN_call_haxe_static.py index dfd59f57..060e8179 100644 --- a/blender/arm/logicnode/native/LN_call_haxe_static.py +++ b/blender/arm/logicnode/native/LN_call_haxe_static.py @@ -4,8 +4,10 @@ class CallHaxeStaticNode(ArmLogicTreeNode): """Call static Haxe function node""" bl_idname = 'LNCallHaxeStaticNode' bl_label = 'Call Haxe Static' + arm_version = 1 def init(self, context): + super(CallHaxeStaticNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Function') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/native/LN_expression.py b/blender/arm/logicnode/native/LN_expression.py index d4789825..7d1bcf61 100644 --- a/blender/arm/logicnode/native/LN_expression.py +++ b/blender/arm/logicnode/native/LN_expression.py @@ -4,10 +4,12 @@ class ExpressionNode(ArmLogicTreeNode): """Expression node""" bl_idname = 'LNExpressionNode' bl_label = 'Expression' + arm_version = 1 property0: StringProperty(name='', default='') def init(self, context): + super(ExpressionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') self.add_output('NodeSocketShader', 'Result') diff --git a/blender/arm/logicnode/native/LN_get_haxe_property.py b/blender/arm/logicnode/native/LN_get_haxe_property.py index d95f6341..081f895d 100644 --- a/blender/arm/logicnode/native/LN_get_haxe_property.py +++ b/blender/arm/logicnode/native/LN_get_haxe_property.py @@ -4,8 +4,10 @@ class GetHaxePropertyNode(ArmLogicTreeNode): """Get haxe property node""" bl_idname = 'LNGetHaxePropertyNode' bl_label = 'Get Haxe Property' + arm_version = 1 def init(self, context): + super(GetHaxePropertyNode, self).init(context) self.add_input('NodeSocketShader', 'Dynamic') self.add_input('NodeSocketString', 'Property') self.add_output('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/native/LN_loadUrl.py b/blender/arm/logicnode/native/LN_loadUrl.py index 14492c51..86f10a83 100644 --- a/blender/arm/logicnode/native/LN_loadUrl.py +++ b/blender/arm/logicnode/native/LN_loadUrl.py @@ -4,8 +4,10 @@ class LoadUrlNode(ArmLogicTreeNode): """Load Url""" bl_idname = 'LNLoadUrlNode' bl_label = 'Load Url (Browser only)' + arm_version = 1 def init(self, context): + super(LoadUrlNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'URL') diff --git a/blender/arm/logicnode/native/LN_print.py b/blender/arm/logicnode/native/LN_print.py index 7f85644e..dd3ed8f0 100644 --- a/blender/arm/logicnode/native/LN_print.py +++ b/blender/arm/logicnode/native/LN_print.py @@ -4,8 +4,10 @@ class PrintNode(ArmLogicTreeNode): """Print node""" bl_idname = 'LNPrintNode' bl_label = 'Print' + arm_version = 1 def init(self, context): + super(PrintNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Value') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/native/LN_read_file.py b/blender/arm/logicnode/native/LN_read_file.py index 39f6165e..027617f9 100644 --- a/blender/arm/logicnode/native/LN_read_file.py +++ b/blender/arm/logicnode/native/LN_read_file.py @@ -4,8 +4,10 @@ class ReadFileNode(ArmLogicTreeNode): """Read File node""" bl_idname = 'LNReadFileNode' bl_label = 'Read File' + arm_version = 1 def init(self, context): + super(ReadFileNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'File') self.add_input('NodeSocketBool', 'Use cache', default_value=1) diff --git a/blender/arm/logicnode/native/LN_read_json.py b/blender/arm/logicnode/native/LN_read_json.py index 33bb8373..3fd29128 100644 --- a/blender/arm/logicnode/native/LN_read_json.py +++ b/blender/arm/logicnode/native/LN_read_json.py @@ -4,8 +4,10 @@ class ReadJsonNode(ArmLogicTreeNode): """Read JSON node""" bl_idname = 'LNReadJsonNode' bl_label = 'Read JSON' + arm_version = 1 def init(self, context): + super(ReadJsonNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'File') self.add_input('NodeSocketBool', 'Use cache', default_value=1) diff --git a/blender/arm/logicnode/native/LN_read_storage.py b/blender/arm/logicnode/native/LN_read_storage.py index 0c29a79b..8c74e135 100644 --- a/blender/arm/logicnode/native/LN_read_storage.py +++ b/blender/arm/logicnode/native/LN_read_storage.py @@ -4,8 +4,10 @@ class ReadStorageNode(ArmLogicTreeNode): """ReadStorage node""" bl_idname = 'LNReadStorageNode' bl_label = 'Read Storage' + arm_version = 1 def init(self, context): + super(ReadStorageNode, self).init(context) self.add_input('NodeSocketString', 'Key') self.add_input('NodeSocketString', 'Default') self.add_output('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/native/LN_script.py b/blender/arm/logicnode/native/LN_script.py index 6443630c..5d1c098c 100644 --- a/blender/arm/logicnode/native/LN_script.py +++ b/blender/arm/logicnode/native/LN_script.py @@ -7,6 +7,7 @@ class ScriptNode(ArmLogicTreeNode): """Script node""" bl_idname = 'LNScriptNode' bl_label = 'Script' + arm_version = 1 @property def property0(self): @@ -16,6 +17,7 @@ class ScriptNode(ArmLogicTreeNode): property0_: StringProperty(name='Text', default='') def init(self, context): + super(ScriptNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketArray', 'Array') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/native/LN_set_haxe_property.py b/blender/arm/logicnode/native/LN_set_haxe_property.py index fec066e1..9fd3a263 100644 --- a/blender/arm/logicnode/native/LN_set_haxe_property.py +++ b/blender/arm/logicnode/native/LN_set_haxe_property.py @@ -4,8 +4,10 @@ class SetHaxePropertyNode(ArmLogicTreeNode): """Set haxe property node""" bl_idname = 'LNSetHaxePropertyNode' bl_label = 'Set Haxe Property' + arm_version = 1 def init(self, context): + super(SetHaxePropertyNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Dynamic') self.add_input('NodeSocketString', 'Property') diff --git a/blender/arm/logicnode/native/LN_shutdown.py b/blender/arm/logicnode/native/LN_shutdown.py index c224d0f5..66eb2585 100644 --- a/blender/arm/logicnode/native/LN_shutdown.py +++ b/blender/arm/logicnode/native/LN_shutdown.py @@ -4,8 +4,10 @@ class ShutdownNode(ArmLogicTreeNode): """Shutdown node""" bl_idname = 'LNShutdownNode' bl_label = 'Shutdown' + arm_version = 1 def init(self, context): + super(ShutdownNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/native/LN_write_file.py b/blender/arm/logicnode/native/LN_write_file.py index e3e754e9..4dcc8315 100644 --- a/blender/arm/logicnode/native/LN_write_file.py +++ b/blender/arm/logicnode/native/LN_write_file.py @@ -4,8 +4,10 @@ class WriteFileNode(ArmLogicTreeNode): """Write File node""" bl_idname = 'LNWriteFileNode' bl_label = 'Write File' + arm_version = 1 def init(self, context): + super(WriteFileNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'File') self.add_input('NodeSocketString', 'String') diff --git a/blender/arm/logicnode/native/LN_write_json.py b/blender/arm/logicnode/native/LN_write_json.py index 0c8e64a1..74ea13f2 100644 --- a/blender/arm/logicnode/native/LN_write_json.py +++ b/blender/arm/logicnode/native/LN_write_json.py @@ -4,8 +4,10 @@ class WriteJsonNode(ArmLogicTreeNode): """Write JSON node""" bl_idname = 'LNWriteJsonNode' bl_label = 'Write JSON' + arm_version = 1 def init(self, context): + super(WriteJsonNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'File') self.add_input('NodeSocketShader', 'Dynamic') diff --git a/blender/arm/logicnode/native/LN_write_storage.py b/blender/arm/logicnode/native/LN_write_storage.py index 2ae750b6..cb9d7721 100644 --- a/blender/arm/logicnode/native/LN_write_storage.py +++ b/blender/arm/logicnode/native/LN_write_storage.py @@ -4,8 +4,10 @@ class WriteStorageNode(ArmLogicTreeNode): """WriteStorage node""" bl_idname = 'LNWriteStorageNode' bl_label = 'Write Storage' + arm_version = 1 def init(self, context): + super(WriteStorageNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Key') self.add_input('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/navmesh/LN_goto_location.py b/blender/arm/logicnode/navmesh/LN_goto_location.py index d3a827a8..60a47459 100644 --- a/blender/arm/logicnode/navmesh/LN_goto_location.py +++ b/blender/arm/logicnode/navmesh/LN_goto_location.py @@ -4,8 +4,10 @@ class GoToLocationNode(ArmLogicTreeNode): """Navigate to location node""" bl_idname = 'LNGoToLocationNode' bl_label = 'Go To Location' + arm_version = 1 def init(self, context): + super(GoToLocationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Location') diff --git a/blender/arm/logicnode/navmesh/LN_navigable_location.py b/blender/arm/logicnode/navmesh/LN_navigable_location.py index 5e0376e9..d057397b 100644 --- a/blender/arm/logicnode/navmesh/LN_navigable_location.py +++ b/blender/arm/logicnode/navmesh/LN_navigable_location.py @@ -4,8 +4,10 @@ class NavigableLocationNode(ArmLogicTreeNode): """Navigable location node""" bl_idname = 'LNNavigableLocationNode' bl_label = 'Navigable Location' + arm_version = 1 def init(self, context): + super(NavigableLocationNode, self).init(context) self.add_output('NodeSocketShader', 'Location') add_node(NavigableLocationNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/navmesh/LN_pick_location.py b/blender/arm/logicnode/navmesh/LN_pick_location.py index 69a66368..d21b2026 100644 --- a/blender/arm/logicnode/navmesh/LN_pick_location.py +++ b/blender/arm/logicnode/navmesh/LN_pick_location.py @@ -4,8 +4,10 @@ class PickLocationNode(ArmLogicTreeNode): """Pick location node""" bl_idname = 'LNPickLocationNode' bl_label = 'Pick Location' + arm_version = 1 def init(self, context): + super(PickLocationNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Navmesh') self.add_input('NodeSocketVector', 'Screen Coords') self.add_output('NodeSocketVector', 'Location') diff --git a/blender/arm/logicnode/navmesh/LN_stop_agent.py b/blender/arm/logicnode/navmesh/LN_stop_agent.py index e10dbd07..876e7059 100644 --- a/blender/arm/logicnode/navmesh/LN_stop_agent.py +++ b/blender/arm/logicnode/navmesh/LN_stop_agent.py @@ -4,8 +4,10 @@ class StopAgentNode(ArmLogicTreeNode): """Stop agent node""" bl_idname = 'LNStopAgentNode' bl_label = 'Stop Agent' + arm_version = 1 def init(self, context): + super(StopAgentNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/object/LN_clear_parent.py b/blender/arm/logicnode/object/LN_clear_parent.py index 6ebae02e..744a8027 100644 --- a/blender/arm/logicnode/object/LN_clear_parent.py +++ b/blender/arm/logicnode/object/LN_clear_parent.py @@ -4,8 +4,10 @@ class ClearParentNode(ArmLogicTreeNode): """Clear parent node""" bl_idname = 'LNClearParentNode' bl_label = 'Clear Parent' + arm_version = 1 def init(self, context): + super(ClearParentNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketBool', 'Keep Transform', default_value=True) diff --git a/blender/arm/logicnode/object/LN_get_child.py b/blender/arm/logicnode/object/LN_get_child.py index fdd38661..bb48250e 100644 --- a/blender/arm/logicnode/object/LN_get_child.py +++ b/blender/arm/logicnode/object/LN_get_child.py @@ -4,6 +4,7 @@ class GetChildNode(ArmLogicTreeNode): """Get child node""" bl_idname = 'LNGetChildNode' bl_label = 'Get Child' + arm_version = 1 property0: EnumProperty( items = [('By Name', 'By Name', 'By Name'), ('Contains', 'Contains', 'Contains'), @@ -13,6 +14,7 @@ class GetChildNode(ArmLogicTreeNode): name='', default='By Name') def init(self, context): + super(GetChildNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Child') self.add_output('ArmNodeSocketObject', 'Object') diff --git a/blender/arm/logicnode/object/LN_get_children.py b/blender/arm/logicnode/object/LN_get_children.py index a65f7c7f..b126a09a 100644 --- a/blender/arm/logicnode/object/LN_get_children.py +++ b/blender/arm/logicnode/object/LN_get_children.py @@ -4,8 +4,10 @@ class GetChildrenNode(ArmLogicTreeNode): """Get children node""" bl_idname = 'LNGetChildrenNode' bl_label = 'Get Children' + arm_version = 1 def init(self, context): + super(GetChildrenNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketArray', 'Array') diff --git a/blender/arm/logicnode/object/LN_get_distance.py b/blender/arm/logicnode/object/LN_get_distance.py index 22a0724c..8e3209f8 100644 --- a/blender/arm/logicnode/object/LN_get_distance.py +++ b/blender/arm/logicnode/object/LN_get_distance.py @@ -4,8 +4,10 @@ class GetDistanceNode(ArmLogicTreeNode): """Get distance node""" bl_idname = 'LNGetDistanceNode' bl_label = 'Get Distance' + arm_version = 1 def init(self, context): + super(GetDistanceNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketFloat', 'Distance') diff --git a/blender/arm/logicnode/object/LN_get_mesh.py b/blender/arm/logicnode/object/LN_get_mesh.py index fc6d298c..d8a8e242 100644 --- a/blender/arm/logicnode/object/LN_get_mesh.py +++ b/blender/arm/logicnode/object/LN_get_mesh.py @@ -4,8 +4,10 @@ class GetMeshNode(ArmLogicTreeNode): """Get mesh node""" bl_idname = 'LNGetMeshNode' bl_label = 'Get Mesh' + arm_version = 1 def init(self, context): + super(GetMeshNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketShader', 'Mesh') diff --git a/blender/arm/logicnode/object/LN_get_name.py b/blender/arm/logicnode/object/LN_get_name.py index a6c574fe..fb2bcfac 100644 --- a/blender/arm/logicnode/object/LN_get_name.py +++ b/blender/arm/logicnode/object/LN_get_name.py @@ -4,8 +4,10 @@ class GetNameNode(ArmLogicTreeNode): """Get name node""" bl_idname = 'LNGetNameNode' bl_label = 'Get Name' + arm_version = 1 def init(self, context): + super(GetNameNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketString', 'Name') diff --git a/blender/arm/logicnode/object/LN_get_object.py b/blender/arm/logicnode/object/LN_get_object.py index 985b8f0f..34c3226d 100644 --- a/blender/arm/logicnode/object/LN_get_object.py +++ b/blender/arm/logicnode/object/LN_get_object.py @@ -7,12 +7,14 @@ class GetObjectNode(ArmLogicTreeNode): """Get object node""" bl_idname = 'LNGetObjectNode' bl_label = 'Get Object' + arm_version = 1 property0: PointerProperty( type=bpy.types.Scene, name='Scene', description='The scene from which to take the object') def init(self, context): + super(GetObjectNode, self).init(context) self.add_input('NodeSocketString', 'Name') self.add_output('ArmNodeSocketObject', 'Object') diff --git a/blender/arm/logicnode/object/LN_get_parent.py b/blender/arm/logicnode/object/LN_get_parent.py index 69a11809..d192e5aa 100644 --- a/blender/arm/logicnode/object/LN_get_parent.py +++ b/blender/arm/logicnode/object/LN_get_parent.py @@ -4,8 +4,10 @@ class GetParentNode(ArmLogicTreeNode): """Get parent node""" bl_idname = 'LNGetParentNode' bl_label = 'Get Parent' + arm_version = 1 def init(self, context): + super(GetParentNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketObject', 'Object') diff --git a/blender/arm/logicnode/object/LN_get_property.py b/blender/arm/logicnode/object/LN_get_property.py index cadad90f..14d9697a 100644 --- a/blender/arm/logicnode/object/LN_get_property.py +++ b/blender/arm/logicnode/object/LN_get_property.py @@ -4,8 +4,10 @@ class GetPropertyNode(ArmLogicTreeNode): """Get property node""" bl_idname = 'LNGetPropertyNode' bl_label = 'Get Property' + arm_version = 1 def init(self, context): + super(GetPropertyNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Property') self.add_output('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/object/LN_get_visible.py b/blender/arm/logicnode/object/LN_get_visible.py index 75a7f754..a9c8889b 100644 --- a/blender/arm/logicnode/object/LN_get_visible.py +++ b/blender/arm/logicnode/object/LN_get_visible.py @@ -4,8 +4,10 @@ class GetVisibleNode(ArmLogicTreeNode): """Get visible node""" bl_idname = 'LNGetVisibleNode' bl_label = 'Get Visible' + arm_version = 1 def init(self, context): + super(GetVisibleNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketBool', 'Visible') diff --git a/blender/arm/logicnode/object/LN_mesh.py b/blender/arm/logicnode/object/LN_mesh.py index 9946f5ae..6a907390 100644 --- a/blender/arm/logicnode/object/LN_mesh.py +++ b/blender/arm/logicnode/object/LN_mesh.py @@ -7,10 +7,12 @@ class MeshNode(ArmLogicTreeNode): """Mesh node""" bl_idname = 'LNMeshNode' bl_label = 'Mesh' + arm_version = 1 property0_get: PointerProperty(name='', type=bpy.types.Mesh) def init(self, context): + super(MeshNode, self).init(context) self.add_output('NodeSocketShader', 'Mesh', is_var=True) def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/object/LN_object.py b/blender/arm/logicnode/object/LN_object.py index 9fd92dd8..6179ecfd 100644 --- a/blender/arm/logicnode/object/LN_object.py +++ b/blender/arm/logicnode/object/LN_object.py @@ -4,8 +4,10 @@ class ObjectNode(ArmLogicTreeNode): """Object node""" bl_idname = 'LNObjectNode' bl_label = 'Object' + arm_version = 1 def init(self, context): + super(ObjectNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketObject', 'Object', is_var=True) diff --git a/blender/arm/logicnode/object/LN_remove_object.py b/blender/arm/logicnode/object/LN_remove_object.py index 2340c316..37d30417 100644 --- a/blender/arm/logicnode/object/LN_remove_object.py +++ b/blender/arm/logicnode/object/LN_remove_object.py @@ -4,8 +4,10 @@ class RemoveObjectNode(ArmLogicTreeNode): """Remove object node""" bl_idname = 'LNRemoveObjectNode' bl_label = 'Remove Object' + arm_version = 1 def init(self, context): + super(RemoveObjectNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/object/LN_self_object.py b/blender/arm/logicnode/object/LN_self_object.py index f355fab2..3f4f7d28 100644 --- a/blender/arm/logicnode/object/LN_self_object.py +++ b/blender/arm/logicnode/object/LN_self_object.py @@ -4,8 +4,10 @@ class SelfObjectNode(ArmLogicTreeNode): """Returns the object that owns the current trait.""" bl_idname = 'LNSelfNode' bl_label = 'Self Object' + arm_version = 1 def init(self, context): + super(SelfObjectNode, self).init(context) self.add_output('ArmNodeSocketObject', 'Object') add_node(SelfObjectNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/object/LN_set_mesh.py b/blender/arm/logicnode/object/LN_set_mesh.py index 403f035e..93dc0f96 100644 --- a/blender/arm/logicnode/object/LN_set_mesh.py +++ b/blender/arm/logicnode/object/LN_set_mesh.py @@ -4,8 +4,10 @@ class SetMeshNode(ArmLogicTreeNode): """Set mesh node""" bl_idname = 'LNSetMeshNode' bl_label = 'Set Mesh' + arm_version = 1 def init(self, context): + super(SetMeshNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Mesh') diff --git a/blender/arm/logicnode/object/LN_set_name.py b/blender/arm/logicnode/object/LN_set_name.py index 7582d5c3..82fd8877 100644 --- a/blender/arm/logicnode/object/LN_set_name.py +++ b/blender/arm/logicnode/object/LN_set_name.py @@ -4,8 +4,10 @@ class SetNameNode(ArmLogicTreeNode): """Set name node""" bl_idname = 'LNSetNameNode' bl_label = 'Set Name' + arm_version = 1 def init(self, context): + super(SetNameNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Name') diff --git a/blender/arm/logicnode/object/LN_set_parent.py b/blender/arm/logicnode/object/LN_set_parent.py index 815ed259..b300ca34 100644 --- a/blender/arm/logicnode/object/LN_set_parent.py +++ b/blender/arm/logicnode/object/LN_set_parent.py @@ -4,8 +4,10 @@ class SetParentNode(ArmLogicTreeNode): """Set parent node""" bl_idname = 'LNSetParentNode' bl_label = 'Set Parent' + arm_version = 1 def init(self, context): + super(SetParentNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketObject', 'Parent', default_value='Parent') diff --git a/blender/arm/logicnode/object/LN_set_property.py b/blender/arm/logicnode/object/LN_set_property.py index 41c1a60d..b08db7d5 100644 --- a/blender/arm/logicnode/object/LN_set_property.py +++ b/blender/arm/logicnode/object/LN_set_property.py @@ -4,8 +4,10 @@ class SetPropertyNode(ArmLogicTreeNode): """Set property node""" bl_idname = 'LNSetPropertyNode' bl_label = 'Set Property' + arm_version = 1 def init(self, context): + super(SetPropertyNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Property') diff --git a/blender/arm/logicnode/object/LN_set_visible.py b/blender/arm/logicnode/object/LN_set_visible.py index 10ccc8bc..451c6281 100644 --- a/blender/arm/logicnode/object/LN_set_visible.py +++ b/blender/arm/logicnode/object/LN_set_visible.py @@ -4,8 +4,10 @@ class SetVisibleNode(ArmLogicTreeNode): """Set visible node""" bl_idname = 'LNSetVisibleNode' bl_label = 'Set Visible' + arm_version = 1 def init(self, context): + super(SetVisibleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketBool', 'Visible') diff --git a/blender/arm/logicnode/object/LN_spawn_object.py b/blender/arm/logicnode/object/LN_spawn_object.py index 7e3e2259..58d20cfc 100644 --- a/blender/arm/logicnode/object/LN_spawn_object.py +++ b/blender/arm/logicnode/object/LN_spawn_object.py @@ -4,8 +4,10 @@ class SpawnObjectNode(ArmLogicTreeNode): """Spawn object node""" bl_idname = 'LNSpawnObjectNode' bl_label = 'Spawn Object' + arm_version = 1 def init(self, context): + super(SpawnObjectNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/physics/LN_apply_force.py b/blender/arm/logicnode/physics/LN_apply_force.py index a526387a..338c3d0f 100644 --- a/blender/arm/logicnode/physics/LN_apply_force.py +++ b/blender/arm/logicnode/physics/LN_apply_force.py @@ -4,8 +4,10 @@ class ApplyForceNode(ArmLogicTreeNode): """Apply force node""" bl_idname = 'LNApplyForceNode' bl_label = 'Apply Force' + arm_version = 1 def init(self, context): + super(ApplyForceNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Force') diff --git a/blender/arm/logicnode/physics/LN_apply_force_at_location.py b/blender/arm/logicnode/physics/LN_apply_force_at_location.py index d7929769..79d9a24f 100644 --- a/blender/arm/logicnode/physics/LN_apply_force_at_location.py +++ b/blender/arm/logicnode/physics/LN_apply_force_at_location.py @@ -4,8 +4,10 @@ class ApplyForceAtLocationNode(ArmLogicTreeNode): """Apply force at location node""" bl_idname = 'LNApplyForceAtLocationNode' bl_label = 'Apply Force At Location' + arm_version = 1 def init(self, context): + super(ApplyForceAtLocationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Force') diff --git a/blender/arm/logicnode/physics/LN_apply_impulse.py b/blender/arm/logicnode/physics/LN_apply_impulse.py index 02908791..f65addf1 100644 --- a/blender/arm/logicnode/physics/LN_apply_impulse.py +++ b/blender/arm/logicnode/physics/LN_apply_impulse.py @@ -4,8 +4,10 @@ class ApplyImpulseNode(ArmLogicTreeNode): """Apply impulse node""" bl_idname = 'LNApplyImpulseNode' bl_label = 'Apply Impulse' + arm_version = 1 def init(self, context): + super(ApplyImpulseNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Impulse') diff --git a/blender/arm/logicnode/physics/LN_apply_impulse_at_location.py b/blender/arm/logicnode/physics/LN_apply_impulse_at_location.py index 72d3ffb2..221dccf5 100644 --- a/blender/arm/logicnode/physics/LN_apply_impulse_at_location.py +++ b/blender/arm/logicnode/physics/LN_apply_impulse_at_location.py @@ -4,8 +4,10 @@ class ApplyImpulseAtLocationNode(ArmLogicTreeNode): """Apply impulse at location node""" bl_idname = 'LNApplyImpulseAtLocationNode' bl_label = 'Apply Impulse At Location' + arm_version = 1 def init(self, context): + super(ApplyImpulseAtLocationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Impulse') diff --git a/blender/arm/logicnode/physics/LN_apply_torque.py b/blender/arm/logicnode/physics/LN_apply_torque.py index 96b5257f..bf88804a 100644 --- a/blender/arm/logicnode/physics/LN_apply_torque.py +++ b/blender/arm/logicnode/physics/LN_apply_torque.py @@ -4,8 +4,10 @@ class ApplyTorqueNode(ArmLogicTreeNode): """Apply torque node""" bl_idname = 'LNApplyTorqueNode' bl_label = 'Apply Torque' + arm_version = 1 def init(self, context): + super(ApplyTorqueNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Torque') diff --git a/blender/arm/logicnode/physics/LN_apply_torque_impulse.py b/blender/arm/logicnode/physics/LN_apply_torque_impulse.py index 45d3768a..0ef04301 100644 --- a/blender/arm/logicnode/physics/LN_apply_torque_impulse.py +++ b/blender/arm/logicnode/physics/LN_apply_torque_impulse.py @@ -4,8 +4,10 @@ class ApplyTorqueImpulseNode(ArmLogicTreeNode): """Apply torque node""" bl_idname = 'LNApplyTorqueImpulseNode' bl_label = 'Apply Torque Impulse' + arm_version = 1 def init(self, context): + super(ApplyTorqueImpulseNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Torque') diff --git a/blender/arm/logicnode/physics/LN_get_contacts.py b/blender/arm/logicnode/physics/LN_get_contacts.py index fa974b31..5139f8b5 100644 --- a/blender/arm/logicnode/physics/LN_get_contacts.py +++ b/blender/arm/logicnode/physics/LN_get_contacts.py @@ -4,8 +4,10 @@ class GetContactsNode(ArmLogicTreeNode): """Get contacts node""" bl_idname = 'LNGetContactsNode' bl_label = 'Get Contacts' + arm_version = 1 def init(self, context): + super(GetContactsNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketArray', 'Array') diff --git a/blender/arm/logicnode/physics/LN_get_first_contact.py b/blender/arm/logicnode/physics/LN_get_first_contact.py index 5c348b22..5b6973e6 100644 --- a/blender/arm/logicnode/physics/LN_get_first_contact.py +++ b/blender/arm/logicnode/physics/LN_get_first_contact.py @@ -4,8 +4,10 @@ class GetFirstContactNode(ArmLogicTreeNode): """Get first contact node""" bl_idname = 'LNGetFirstContactNode' bl_label = 'Get First Contact' + arm_version = 1 def init(self, context): + super(GetFirstContactNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('ArmNodeSocketObject', 'Object') diff --git a/blender/arm/logicnode/physics/LN_get_gravity.py b/blender/arm/logicnode/physics/LN_get_gravity.py index 27229dd7..58dadcbc 100644 --- a/blender/arm/logicnode/physics/LN_get_gravity.py +++ b/blender/arm/logicnode/physics/LN_get_gravity.py @@ -4,8 +4,10 @@ class GetGravityNode(ArmLogicTreeNode): """Get Gravity node""" bl_idname = 'LNGetGravityNode' bl_label = 'Get Gravity' + arm_version = 1 def init(self, context): + super(GetGravityNode, self).init(context) self.add_output('NodeSocketVector', 'Gravity') add_node(GetGravityNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/physics/LN_get_velocity.py b/blender/arm/logicnode/physics/LN_get_velocity.py index b540b07e..66582801 100644 --- a/blender/arm/logicnode/physics/LN_get_velocity.py +++ b/blender/arm/logicnode/physics/LN_get_velocity.py @@ -4,8 +4,10 @@ class GetVelocityNode(ArmLogicTreeNode): """Get velocity node""" bl_idname = 'LNGetVelocityNode' bl_label = 'Get Velocity' + arm_version = 1 def init(self, context): + super(GetVelocityNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketVector', 'Linear') # self.add_output('NodeSocketVector', 'Linear Factor') # TODO diff --git a/blender/arm/logicnode/physics/LN_has_contact.py b/blender/arm/logicnode/physics/LN_has_contact.py index 3890e761..ceba837e 100644 --- a/blender/arm/logicnode/physics/LN_has_contact.py +++ b/blender/arm/logicnode/physics/LN_has_contact.py @@ -4,8 +4,10 @@ class HasContactNode(ArmLogicTreeNode): """Has contact node""" bl_idname = 'LNHasContactNode' bl_label = 'Has Contact' + arm_version = 1 def init(self, context): + super(HasContactNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object 1') self.add_input('ArmNodeSocketObject', 'Object 2') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/physics/LN_has_contact_array.py b/blender/arm/logicnode/physics/LN_has_contact_array.py index 225618c4..0beb30ee 100644 --- a/blender/arm/logicnode/physics/LN_has_contact_array.py +++ b/blender/arm/logicnode/physics/LN_has_contact_array.py @@ -4,8 +4,10 @@ class HasContactArrayNode(ArmLogicTreeNode): """Has contact array node""" bl_idname = 'LNHasContactArrayNode' bl_label = 'Has Contact Array' + arm_version = 1 def init(self, context): + super(HasContactArrayNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object 1') self.add_input('ArmNodeSocketArray', 'Objects') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/physics/LN_on_contact.py b/blender/arm/logicnode/physics/LN_on_contact.py index 004ad463..c797f19d 100644 --- a/blender/arm/logicnode/physics/LN_on_contact.py +++ b/blender/arm/logicnode/physics/LN_on_contact.py @@ -4,6 +4,7 @@ class OnContactNode(ArmLogicTreeNode): """On contact node""" bl_idname = 'LNOnContactNode' bl_label = 'On Contact' + arm_version = 1 property0: EnumProperty( items = [('Begin', 'Begin', 'Begin'), ('End', 'End', 'End'), @@ -11,6 +12,7 @@ class OnContactNode(ArmLogicTreeNode): name='', default='Begin') def init(self, context): + super(OnContactNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object 1') self.add_input('ArmNodeSocketObject', 'Object 2') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/physics/LN_on_contact_array.py b/blender/arm/logicnode/physics/LN_on_contact_array.py index 6634f583..343e8335 100644 --- a/blender/arm/logicnode/physics/LN_on_contact_array.py +++ b/blender/arm/logicnode/physics/LN_on_contact_array.py @@ -4,6 +4,7 @@ class OnContactArrayNode(ArmLogicTreeNode): """On contact array node""" bl_idname = 'LNOnContactArrayNode' bl_label = 'On Contact Array' + arm_version = 1 property0: EnumProperty( items = [('Begin', 'Begin', 'Begin'), ('End', 'End', 'End'), @@ -11,6 +12,7 @@ class OnContactArrayNode(ArmLogicTreeNode): name='', default='Begin') def init(self, context): + super(OnContactArrayNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object 1') self.add_input('ArmNodeSocketArray', 'Objects') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/physics/LN_pick_object.py b/blender/arm/logicnode/physics/LN_pick_object.py index d70fb5ab..532f5f06 100644 --- a/blender/arm/logicnode/physics/LN_pick_object.py +++ b/blender/arm/logicnode/physics/LN_pick_object.py @@ -4,8 +4,10 @@ class PickObjectNode(ArmLogicTreeNode): """Pick closest object node""" bl_idname = 'LNPickObjectNode' bl_label = 'Pick Object' + arm_version = 1 def init(self, context): + super(PickObjectNode, self).init(context) self.add_input('NodeSocketVector', 'Screen Coords') self.add_output('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketVector', 'Hit') diff --git a/blender/arm/logicnode/physics/LN_ray_cast.py b/blender/arm/logicnode/physics/LN_ray_cast.py index 82a15d9c..d6010037 100644 --- a/blender/arm/logicnode/physics/LN_ray_cast.py +++ b/blender/arm/logicnode/physics/LN_ray_cast.py @@ -4,8 +4,10 @@ class RayCastNode(ArmLogicTreeNode): """Cast physics ray node""" bl_idname = 'LNCastPhysicsRayNode' bl_label = 'Ray Cast' + arm_version = 1 def init(self, context): + super(RayCastNode, self).init(context) self.add_input('NodeSocketVector', 'From') self.add_input('NodeSocketVector', 'To') self.add_input('NodeSocketInt', 'Collision Group Mask') diff --git a/blender/arm/logicnode/physics/LN_remove_physics.py b/blender/arm/logicnode/physics/LN_remove_physics.py index 792b5bdb..1021b973 100644 --- a/blender/arm/logicnode/physics/LN_remove_physics.py +++ b/blender/arm/logicnode/physics/LN_remove_physics.py @@ -7,8 +7,10 @@ class RemovePhysicsNode (ArmLogicTreeNode): """Remove Physics Node""" bl_idname = 'LNRemovePhysicsNode' bl_label = 'Remove Physics' + arm_version = 1 def init(self, context): + super(RemovePhysicsNode, self).init(context) self.inputs.new('ArmNodeSocketAction', 'In') self.inputs.new('ArmNodeSocketObject', 'Object') self.outputs.new('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/physics/LN_set_activation_state.py b/blender/arm/logicnode/physics/LN_set_activation_state.py index 56659c20..38bfb576 100644 --- a/blender/arm/logicnode/physics/LN_set_activation_state.py +++ b/blender/arm/logicnode/physics/LN_set_activation_state.py @@ -8,6 +8,7 @@ class SetActivationStateNode(ArmLogicTreeNode): bl_idname = 'LNSetActivationStateNode' bl_label = 'Set Activation State' bl_icon = 'NONE' + arm_version = 1 property0: EnumProperty( items = [('Inactive', 'Inactive', 'Inactive'), ('Active', 'Active', 'Active'), @@ -17,6 +18,7 @@ class SetActivationStateNode(ArmLogicTreeNode): name='', default='Inactive') def init(self, context): + super(SetActivationStateNode, self).init(context) self.inputs.new('ArmNodeSocketAction', 'In') self.inputs.new('ArmNodeSocketObject', 'Object') self.outputs.new('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/physics/LN_set_friction.py b/blender/arm/logicnode/physics/LN_set_friction.py index 5ad3400c..62205077 100644 --- a/blender/arm/logicnode/physics/LN_set_friction.py +++ b/blender/arm/logicnode/physics/LN_set_friction.py @@ -8,8 +8,10 @@ class SetFrictionNode (ArmLogicTreeNode): bl_idname = 'LNSetFrictionNode' bl_label = 'Set Friction' bl_icon = 'NONE' + arm_version = 1 def init(self, context): + super(SetFrictionNode, self).init(context) self.inputs.new('ArmNodeSocketAction', 'In') self.inputs.new('ArmNodeSocketObject', 'Object') self.inputs.new('NodeSocketFloat', 'Friction') diff --git a/blender/arm/logicnode/physics/LN_set_gravity.py b/blender/arm/logicnode/physics/LN_set_gravity.py index 7b8e4267..2ea9f5df 100644 --- a/blender/arm/logicnode/physics/LN_set_gravity.py +++ b/blender/arm/logicnode/physics/LN_set_gravity.py @@ -4,8 +4,10 @@ class SetGravityNode(ArmLogicTreeNode): """Set Gravity node""" bl_idname = 'LNSetGravityNode' bl_label = 'Set Gravity' + arm_version = 1 def init(self, context): + super(SetGravityNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketVector', 'Gravity') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/physics/LN_set_gravity_enabled.py b/blender/arm/logicnode/physics/LN_set_gravity_enabled.py index 1cc7bdde..c26d814f 100644 --- a/blender/arm/logicnode/physics/LN_set_gravity_enabled.py +++ b/blender/arm/logicnode/physics/LN_set_gravity_enabled.py @@ -4,8 +4,10 @@ class SetGravityEnabledNode(ArmLogicTreeNode): """Node to enable or disable gravity on a specific object.""" bl_idname = 'LNSetGravityEnabledNode' bl_label = 'Set Gravity Enabled' + arm_version = 1 def init(self, context): + super(SetGravityEnabledNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketBool', 'Enabled') diff --git a/blender/arm/logicnode/physics/LN_set_velocity.py b/blender/arm/logicnode/physics/LN_set_velocity.py index 16278faa..6a5e9a8a 100644 --- a/blender/arm/logicnode/physics/LN_set_velocity.py +++ b/blender/arm/logicnode/physics/LN_set_velocity.py @@ -4,8 +4,10 @@ class SetVelocityNode(ArmLogicTreeNode): """Set velocity node""" bl_idname = 'LNSetVelocityNode' bl_label = 'Set Velocity' + arm_version = 1 def init(self, context): + super(SetVelocityNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Linear') diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_get_global_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_get_global_node.py index 4b8d4538..0b06ddf2 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_get_global_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_get_global_node.py @@ -4,8 +4,10 @@ class ColorgradingGetGlobalNode(ArmLogicTreeNode): """Colorgrading Get Global node""" bl_idname = 'LNColorgradingGetGlobalNode' bl_label = 'Colorgrading Get Global' + arm_version = 1 def init(self, context): + super(ColorgradingGetGlobalNode, self).init(context) self.add_output('NodeSocketFloat', 'Whitebalance') self.add_output('NodeSocketVector', 'Tint') self.add_output('NodeSocketVector', 'Saturation') diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_get_highlight_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_get_highlight_node.py index d175afdf..ece578d3 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_get_highlight_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_get_highlight_node.py @@ -4,8 +4,10 @@ class ColorgradingGetHighlightNode(ArmLogicTreeNode): """Colorgrading Get Highlight node""" bl_idname = 'LNColorgradingGetHighlightNode' bl_label = 'Colorgrading Get Highlight' + arm_version = 1 def init(self, context): + super(ColorgradingGetHighlightNode, self).init(context) self.add_output('NodeSocketFloat', 'HightlightMin') self.add_output('NodeSocketVector', 'Saturation') self.add_output('NodeSocketVector', 'Contrast') diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_get_midtone_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_get_midtone_node.py index e1ce0222..93cf7639 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_get_midtone_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_get_midtone_node.py @@ -4,8 +4,10 @@ class ColorgradingGetMidtoneNode(ArmLogicTreeNode): """Colorgrading Get Midtone node""" bl_idname = 'LNColorgradingGetMidtoneNode' bl_label = 'Colorgrading Get Midtone' + arm_version = 1 def init(self, context): + super(ColorgradingGetMidtoneNode, self).init(context) self.add_output('NodeSocketVector', 'Saturation') self.add_output('NodeSocketVector', 'Contrast') self.add_output('NodeSocketVector', 'Gamma') diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_get_shadow_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_get_shadow_node.py index e09887cc..99003a56 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_get_shadow_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_get_shadow_node.py @@ -4,8 +4,10 @@ class ColorgradingGetShadowNode(ArmLogicTreeNode): """Colorgrading Get Shadow node""" bl_idname = 'LNColorgradingGetShadowNode' bl_label = 'Colorgrading Get Shadow' + arm_version = 1 def init(self, context): + super(ColorgradingGetShadowNode, self).init(context) self.add_output('NodeSocketFloat', 'ShadowMax') self.add_output('NodeSocketVector', 'Saturation') self.add_output('NodeSocketVector', 'Contrast') diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_set_global_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_set_global_node.py index 34cece9d..0e32ebe9 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_set_global_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_set_global_node.py @@ -28,6 +28,7 @@ class ColorgradingSetGlobalNode(ArmLogicTreeNode): """Colorgrading Set Global node""" bl_idname = 'LNColorgradingSetGlobalNode' bl_label = 'Colorgrading Set Global' + arm_version = 1 # TODO: RRESET FILE OPTION FOR THE BELOW property0 : EnumProperty( @@ -60,6 +61,7 @@ class ColorgradingSetGlobalNode(ArmLogicTreeNode): pass def init(self, context): + super(ColorgradingSetGlobalNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') self.draw_nodes_uniform(context) diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_set_highlight_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_set_highlight_node.py index 5fb05096..7f005e97 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_set_highlight_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_set_highlight_node.py @@ -28,6 +28,7 @@ class ColorgradingSetHighlightNode(ArmLogicTreeNode): """Colorgrading Set Highlight node""" bl_idname = 'LNColorgradingSetHighlightNode' bl_label = 'Colorgrading Set Highlight' + arm_version = 1 # TODO: RRESET FILE OPTION FOR THE BELOW property0 : EnumProperty( @@ -58,6 +59,7 @@ class ColorgradingSetHighlightNode(ArmLogicTreeNode): pass def init(self, context): + super(ColorgradingSetHighlightNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') self.draw_nodes_uniform(context) diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_set_midtone_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_set_midtone_node.py index d88ae5c8..6fe8f0f6 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_set_midtone_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_set_midtone_node.py @@ -28,6 +28,7 @@ class ColorgradingSetMidtoneNode(ArmLogicTreeNode): """Colorgrading Set Midtone node""" bl_idname = 'LNColorgradingSetMidtoneNode' bl_label = 'Colorgrading Set Midtone' + arm_version = 1 # TODO: RRESET FILE OPTION FOR THE BELOW property0 : EnumProperty( @@ -57,6 +58,7 @@ class ColorgradingSetMidtoneNode(ArmLogicTreeNode): pass def init(self, context): + super(ColorgradingSetMidtoneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') self.draw_nodes_uniform(context) diff --git a/blender/arm/logicnode/postprocess/LN_colorgrading_set_shadow_node.py b/blender/arm/logicnode/postprocess/LN_colorgrading_set_shadow_node.py index 05c29b4e..e79f2ad8 100644 --- a/blender/arm/logicnode/postprocess/LN_colorgrading_set_shadow_node.py +++ b/blender/arm/logicnode/postprocess/LN_colorgrading_set_shadow_node.py @@ -28,6 +28,7 @@ class ColorgradingSetShadowNode(ArmLogicTreeNode): """Colorgrading Set Shadow node""" bl_idname = 'LNColorgradingSetShadowNode' bl_label = 'Colorgrading Set Shadow' + arm_version = 1 # TODO: RRESET FILE OPTION FOR THE BELOW property0 : EnumProperty( @@ -58,6 +59,7 @@ class ColorgradingSetShadowNode(ArmLogicTreeNode): pass def init(self, context): + super(ColorgradingSetShadowNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') self.draw_nodes_uniform(context) diff --git a/blender/arm/logicnode/postprocess/LN_get_bloom.py b/blender/arm/logicnode/postprocess/LN_get_bloom.py index 331f2739..1bf3c52b 100644 --- a/blender/arm/logicnode/postprocess/LN_get_bloom.py +++ b/blender/arm/logicnode/postprocess/LN_get_bloom.py @@ -4,8 +4,10 @@ class BloomGetNode(ArmLogicTreeNode): """Get Bloom Effect""" bl_idname = 'LNBloomGetNode' bl_label = 'Get Bloom' + arm_version = 1 def init(self, context): + super(BloomGetNode, self).init(context) self.add_output('NodeSocketFloat', 'Threshold') self.add_output('NodeSocketFloat', 'Strength') self.add_output('NodeSocketFloat', 'Radius') diff --git a/blender/arm/logicnode/postprocess/LN_get_camera.py b/blender/arm/logicnode/postprocess/LN_get_camera.py index edb7d9a3..53063ebc 100644 --- a/blender/arm/logicnode/postprocess/LN_get_camera.py +++ b/blender/arm/logicnode/postprocess/LN_get_camera.py @@ -4,8 +4,10 @@ class CameraGetNode(ArmLogicTreeNode): """Get postprocessing effects of the camera.""" bl_idname = 'LNCameraGetNode' bl_label = 'Get Camera Postprocessing' + arm_version = 1 def init(self, context): + super(CameraGetNode, self).init(context) self.add_output('NodeSocketFloat', 'F-Stop') self.add_output('NodeSocketFloat', 'Shutter Time') self.add_output('NodeSocketFloat', 'ISO') diff --git a/blender/arm/logicnode/postprocess/LN_get_chromatic_aberration.py b/blender/arm/logicnode/postprocess/LN_get_chromatic_aberration.py index 592bb53c..2a783fd1 100644 --- a/blender/arm/logicnode/postprocess/LN_get_chromatic_aberration.py +++ b/blender/arm/logicnode/postprocess/LN_get_chromatic_aberration.py @@ -4,8 +4,10 @@ class ChromaticAberrationGetNode(ArmLogicTreeNode): """Get Chromatic Aberration Effect""" bl_idname = 'LNChromaticAberrationGetNode' bl_label = 'Get ChromaticAberration' + arm_version = 1 def init(self, context): + super(ChromaticAberrationGetNode, self).init(context) self.add_output('NodeSocketFloat', 'Strength') self.add_output('NodeSocketFloat', 'Samples') diff --git a/blender/arm/logicnode/postprocess/LN_get_ssao.py b/blender/arm/logicnode/postprocess/LN_get_ssao.py index 474948cb..a99558f4 100644 --- a/blender/arm/logicnode/postprocess/LN_get_ssao.py +++ b/blender/arm/logicnode/postprocess/LN_get_ssao.py @@ -4,8 +4,10 @@ class SSAOGetNode(ArmLogicTreeNode): """Get SSAO Effect""" bl_idname = 'LNSSAOGetNode' bl_label = 'Get SSAO' + arm_version = 1 def init(self, context): + super(SSAOGetNode, self).init(context) self.add_output('NodeSocketFloat', 'Radius') self.add_output('NodeSocketFloat', 'Strength') self.add_output('NodeSocketFloat', 'Max Steps') diff --git a/blender/arm/logicnode/postprocess/LN_get_ssr.py b/blender/arm/logicnode/postprocess/LN_get_ssr.py index b3717249..4698b9e3 100644 --- a/blender/arm/logicnode/postprocess/LN_get_ssr.py +++ b/blender/arm/logicnode/postprocess/LN_get_ssr.py @@ -4,8 +4,10 @@ class SSRGetNode(ArmLogicTreeNode): """Get SSR Effect""" bl_idname = 'LNSSRGetNode' bl_label = 'Get SSR' + arm_version = 1 def init(self, context): + super(SSRGetNode, self).init(context) self.add_output('NodeSocketFloat', 'SSR Step') self.add_output('NodeSocketFloat', 'SSR Step Min') self.add_output('NodeSocketFloat', 'SSR Search') diff --git a/blender/arm/logicnode/postprocess/LN_lenstexture_get.py b/blender/arm/logicnode/postprocess/LN_lenstexture_get.py index 0feeb514..4254e151 100644 --- a/blender/arm/logicnode/postprocess/LN_lenstexture_get.py +++ b/blender/arm/logicnode/postprocess/LN_lenstexture_get.py @@ -4,8 +4,10 @@ class LenstextureGetNode(ArmLogicTreeNode): """Get Tonemapper Effect""" bl_idname = 'LNLenstextureGetNode' bl_label = 'Get Lenstexture' + arm_version = 1 def init(self, context): + super(LenstextureGetNode, self).init(context) self.add_output('NodeSocketFloat', 'Center Min Clip') self.add_output('NodeSocketFloat', 'Center Max Clip') self.add_output('NodeSocketFloat', 'Luminance Min') diff --git a/blender/arm/logicnode/postprocess/LN_lenstexture_set.py b/blender/arm/logicnode/postprocess/LN_lenstexture_set.py index 36d8684f..34f73331 100644 --- a/blender/arm/logicnode/postprocess/LN_lenstexture_set.py +++ b/blender/arm/logicnode/postprocess/LN_lenstexture_set.py @@ -4,8 +4,10 @@ class LenstextureSetNode(ArmLogicTreeNode): """Set Lenstexture Effect""" bl_idname = 'LNLenstextureSetNode' bl_label = 'Set Lenstexture' + arm_version = 1 def init(self, context): + super(LenstextureSetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'Center Min Clip', default_value=0.1) self.add_input('NodeSocketFloat', 'Center Max Clip', default_value=0.5) diff --git a/blender/arm/logicnode/postprocess/LN_set_bloom.py b/blender/arm/logicnode/postprocess/LN_set_bloom.py index 282d6bbb..9901ef29 100644 --- a/blender/arm/logicnode/postprocess/LN_set_bloom.py +++ b/blender/arm/logicnode/postprocess/LN_set_bloom.py @@ -4,8 +4,10 @@ class BloomSetNode(ArmLogicTreeNode): """Set Bloom Effect""" bl_idname = 'LNBloomSetNode' bl_label = 'Set Bloom' + arm_version = 1 def init(self, context): + super(BloomSetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'Threshold', default_value=1.00) self.add_input('NodeSocketFloat', 'Strength', default_value=3.50) diff --git a/blender/arm/logicnode/postprocess/LN_set_camera.py b/blender/arm/logicnode/postprocess/LN_set_camera.py index e43e3d66..dcada6f9 100644 --- a/blender/arm/logicnode/postprocess/LN_set_camera.py +++ b/blender/arm/logicnode/postprocess/LN_set_camera.py @@ -4,8 +4,10 @@ class CameraSetNode(ArmLogicTreeNode): """Set postprocessing effects of the camera.""" bl_idname = 'LNCameraSetNode' bl_label = 'Set Camera Postprocessing' + arm_version = 1 def init(self, context): + super(CameraSetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'F-stop', default_value=2.0) self.add_input('NodeSocketFloat', 'Shutter Time', default_value=1.0) diff --git a/blender/arm/logicnode/postprocess/LN_set_chromatic_aberration.py b/blender/arm/logicnode/postprocess/LN_set_chromatic_aberration.py index 9fc4ef6f..f5c16a2e 100644 --- a/blender/arm/logicnode/postprocess/LN_set_chromatic_aberration.py +++ b/blender/arm/logicnode/postprocess/LN_set_chromatic_aberration.py @@ -4,8 +4,10 @@ class ChromaticAberrationSetNode(ArmLogicTreeNode): """Set Chromatic Aberration Effect""" bl_idname = 'LNChromaticAberrationSetNode' bl_label = 'Set ChromaticAberration' + arm_version = 1 def init(self, context): + super(ChromaticAberrationSetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'Strength', default_value=2.0) self.add_input('NodeSocketInt', 'Samples', default_value=32) diff --git a/blender/arm/logicnode/postprocess/LN_set_ssao.py b/blender/arm/logicnode/postprocess/LN_set_ssao.py index af94cdfd..c3fa2800 100644 --- a/blender/arm/logicnode/postprocess/LN_set_ssao.py +++ b/blender/arm/logicnode/postprocess/LN_set_ssao.py @@ -4,8 +4,10 @@ class SSAOSetNode(ArmLogicTreeNode): """Set SSAO Effect""" bl_idname = 'LNSSAOSetNode' bl_label = 'Set SSAO' + arm_version = 1 def init(self, context): + super(SSAOSetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'Radius', default_value=1.0) self.add_input('NodeSocketFloat', 'Strength', default_value=5.0) diff --git a/blender/arm/logicnode/postprocess/LN_set_ssr.py b/blender/arm/logicnode/postprocess/LN_set_ssr.py index 46c62706..33cbde2e 100644 --- a/blender/arm/logicnode/postprocess/LN_set_ssr.py +++ b/blender/arm/logicnode/postprocess/LN_set_ssr.py @@ -4,8 +4,10 @@ class SSRSetNode(ArmLogicTreeNode): """Set SSR Effect""" bl_idname = 'LNSSRSetNode' bl_label = 'Set SSR' + arm_version = 1 def init(self, context): + super(SSRSetNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketFloat', 'SSR Step', default_value=0.04) self.add_input('NodeSocketFloat', 'SSR Step Min', default_value=0.05) diff --git a/blender/arm/logicnode/random/LN_random_boolean.py b/blender/arm/logicnode/random/LN_random_boolean.py index 9105a974..3d6f39f9 100644 --- a/blender/arm/logicnode/random/LN_random_boolean.py +++ b/blender/arm/logicnode/random/LN_random_boolean.py @@ -5,8 +5,10 @@ class RandomBooleanNode(ArmLogicTreeNode): """Random boolean node""" bl_idname = 'LNRandomBooleanNode' bl_label = 'Random Boolean' + arm_version = 1 def init(self, context): + super(RandomBooleanNode, self).init(context) self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/random/LN_random_color.py b/blender/arm/logicnode/random/LN_random_color.py index e071bf3d..b8d34c33 100644 --- a/blender/arm/logicnode/random/LN_random_color.py +++ b/blender/arm/logicnode/random/LN_random_color.py @@ -5,8 +5,10 @@ class RandomColorNode(ArmLogicTreeNode): """Random color node""" bl_idname = 'LNRandomColorNode' bl_label = 'Random Color' + arm_version = 1 def init(self, context): + super(RandomColorNode, self).init(context) self.add_output('NodeSocketColor', 'Color') diff --git a/blender/arm/logicnode/random/LN_random_float.py b/blender/arm/logicnode/random/LN_random_float.py index 654a04d8..d2b9c456 100644 --- a/blender/arm/logicnode/random/LN_random_float.py +++ b/blender/arm/logicnode/random/LN_random_float.py @@ -5,8 +5,10 @@ class RandomFloatNode(ArmLogicTreeNode): """Random float node""" bl_idname = 'LNRandomFloatNode' bl_label = 'Random Float' + arm_version = 1 def init(self, context): + super(RandomFloatNode, self).init(context) self.add_input('NodeSocketFloat', 'Min') self.add_input('NodeSocketFloat', 'Max', default_value=1.0) # self.add_input('NodeSocketInt', 'Seed') diff --git a/blender/arm/logicnode/random/LN_random_integer.py b/blender/arm/logicnode/random/LN_random_integer.py index 3a42b418..a99c7d7a 100644 --- a/blender/arm/logicnode/random/LN_random_integer.py +++ b/blender/arm/logicnode/random/LN_random_integer.py @@ -5,8 +5,10 @@ class RandomIntegerNode(ArmLogicTreeNode): """Random integer node""" bl_idname = 'LNRandomIntegerNode' bl_label = 'Random Integer' + arm_version = 1 def init(self, context): + super(RandomIntegerNode, self).init(context) self.add_input('NodeSocketInt', 'Min') self.add_input('NodeSocketInt', 'Max', default_value=2) self.add_output('NodeSocketInt', 'Int') diff --git a/blender/arm/logicnode/random/LN_random_vector.py b/blender/arm/logicnode/random/LN_random_vector.py index 4ab2ce12..91f8d324 100644 --- a/blender/arm/logicnode/random/LN_random_vector.py +++ b/blender/arm/logicnode/random/LN_random_vector.py @@ -5,8 +5,10 @@ class RandomVectorNode(ArmLogicTreeNode): """Random vector node""" bl_idname = 'LNRandomVectorNode' bl_label = 'Random Vector' + arm_version = 1 def init(self, context): + super(RandomVectorNode, self).init(context) self.add_input('NodeSocketVector', 'Min', default_value=[-1.0, -1.0, -1.0]) self.add_input('NodeSocketVector', 'Max', default_value=[1.0, 1.0, 1.0]) self.add_output('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/renderpath/LN_rp_config.py b/blender/arm/logicnode/renderpath/LN_rp_config.py index c7fe0f75..dc86aaf5 100644 --- a/blender/arm/logicnode/renderpath/LN_rp_config.py +++ b/blender/arm/logicnode/renderpath/LN_rp_config.py @@ -4,6 +4,7 @@ class RpConfigNode(ArmLogicTreeNode): """Configure renderpath node""" bl_idname = 'LNRpConfigNode' bl_label = 'Rp Config' + arm_version = 1 property0: EnumProperty( items = [('SSGI', 'SSGI', 'SSGI'), ('SSR', 'SSR', 'SSR'), @@ -14,6 +15,7 @@ class RpConfigNode(ArmLogicTreeNode): name='', default='SSGI') def init(self, context): + super(RpConfigNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketBool', 'On') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/renderpath/LN_rp_msaa.py b/blender/arm/logicnode/renderpath/LN_rp_msaa.py index 2218de12..a468ab21 100644 --- a/blender/arm/logicnode/renderpath/LN_rp_msaa.py +++ b/blender/arm/logicnode/renderpath/LN_rp_msaa.py @@ -4,6 +4,7 @@ class RpMSAANode(ArmLogicTreeNode): """Configure multi-sample anti-aliasing node""" bl_idname = 'LNRpMSAANode' bl_label = 'Rp MSAA' + arm_version = 1 property0: EnumProperty( items = [('1', '1', '1'), ('2', '2', '2'), @@ -14,6 +15,7 @@ class RpMSAANode(ArmLogicTreeNode): name='', default='1') def init(self, context): + super(RpMSAANode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/renderpath/LN_rp_shadow_quality.py b/blender/arm/logicnode/renderpath/LN_rp_shadow_quality.py index 90dc071b..366bf3bd 100644 --- a/blender/arm/logicnode/renderpath/LN_rp_shadow_quality.py +++ b/blender/arm/logicnode/renderpath/LN_rp_shadow_quality.py @@ -4,6 +4,7 @@ class RpShadowQualityNode(ArmLogicTreeNode): """Configure shadow quality node""" bl_idname = 'LNRpShadowQualityNode' bl_label = 'Rp Shadow Quality' + arm_version = 1 property0: EnumProperty( items = [('High', 'High', 'High'), ('Medium', 'Medium', 'Medium'), @@ -12,6 +13,7 @@ class RpShadowQualityNode(ArmLogicTreeNode): name='', default='Medium') def init(self, context): + super(RpShadowQualityNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/renderpath/LN_rp_super_sample.py b/blender/arm/logicnode/renderpath/LN_rp_super_sample.py index ad632e87..0ba5a616 100644 --- a/blender/arm/logicnode/renderpath/LN_rp_super_sample.py +++ b/blender/arm/logicnode/renderpath/LN_rp_super_sample.py @@ -4,6 +4,7 @@ class RpSuperSampleNode(ArmLogicTreeNode): """Configure super sampling node""" bl_idname = 'LNRpSuperSampleNode' bl_label = 'Rp Super-sampling' + arm_version = 1 property0: EnumProperty( items = [('1', '1', '1'), ('1.5', '1.5', '1.5'), @@ -13,6 +14,7 @@ class RpSuperSampleNode(ArmLogicTreeNode): name='', default='1') def init(self, context): + super(RpSuperSampleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/scene/LN_active_scene.py b/blender/arm/logicnode/scene/LN_active_scene.py index d099ec9b..367f3ff0 100644 --- a/blender/arm/logicnode/scene/LN_active_scene.py +++ b/blender/arm/logicnode/scene/LN_active_scene.py @@ -4,8 +4,10 @@ class ActiveSceneNode(ArmLogicTreeNode): """Active scene node""" bl_idname = 'LNActiveSceneNode' bl_label = 'Active Scene' + arm_version = 1 def init(self, context): + super(ActiveSceneNode, self).init(context) self.add_output('NodeSocketShader', 'Scene') add_node(ActiveSceneNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/scene/LN_create_collection.py b/blender/arm/logicnode/scene/LN_create_collection.py index d84e5cb5..aff58b83 100644 --- a/blender/arm/logicnode/scene/LN_create_collection.py +++ b/blender/arm/logicnode/scene/LN_create_collection.py @@ -4,8 +4,10 @@ class CreateCollectionNode(ArmLogicTreeNode): """Add Group node""" bl_idname = 'LNAddGroupNode' bl_label = 'Create Collection' + arm_version = 1 def init(self, context): + super(CreateCollectionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Collection') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/scene/LN_get_group.py b/blender/arm/logicnode/scene/LN_get_group.py index c26a530d..c5bb6af6 100644 --- a/blender/arm/logicnode/scene/LN_get_group.py +++ b/blender/arm/logicnode/scene/LN_get_group.py @@ -4,8 +4,10 @@ class GetGroupNode(ArmLogicTreeNode): """Get group node""" bl_idname = 'LNGetGroupNode' bl_label = 'Get Collection' + arm_version = 1 def init(self, context): + super(GetGroupNode, self).init(context) self.add_input('NodeSocketString', 'Name') self.add_output('ArmNodeSocketArray', 'Array') diff --git a/blender/arm/logicnode/scene/LN_global_object.py b/blender/arm/logicnode/scene/LN_global_object.py index 62e1ed27..8d412b7b 100644 --- a/blender/arm/logicnode/scene/LN_global_object.py +++ b/blender/arm/logicnode/scene/LN_global_object.py @@ -4,8 +4,10 @@ class GlobalObjectNode(ArmLogicTreeNode): """Global object node""" bl_idname = 'LNGlobalObjectNode' bl_label = 'Global Object' + arm_version = 1 def init(self, context): + super(GlobalObjectNode, self).init(context) self.add_output('ArmNodeSocketObject', 'Object') add_node(GlobalObjectNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/scene/LN_group.py b/blender/arm/logicnode/scene/LN_group.py index 6c5c0bdc..9958d63e 100644 --- a/blender/arm/logicnode/scene/LN_group.py +++ b/blender/arm/logicnode/scene/LN_group.py @@ -7,10 +7,12 @@ class GroupNode(ArmLogicTreeNode): """Group node""" bl_idname = 'LNGroupNode' bl_label = 'Collection' + arm_version = 1 property0: PointerProperty(name='', type=bpy.types.Collection) def init(self, context): + super(GroupNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/scene/LN_remove_active_scene.py b/blender/arm/logicnode/scene/LN_remove_active_scene.py index af28d1d4..9f51750a 100644 --- a/blender/arm/logicnode/scene/LN_remove_active_scene.py +++ b/blender/arm/logicnode/scene/LN_remove_active_scene.py @@ -4,8 +4,10 @@ class RemoveActiveSceneNode(ArmLogicTreeNode): """Remove active scene node""" bl_idname = 'LNRemoveActiveSceneNode' bl_label = 'Remove Active Scene' + arm_version = 1 def init(self, context): + super(RemoveActiveSceneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/scene/LN_remove_group.py b/blender/arm/logicnode/scene/LN_remove_group.py index 18cb9b56..b3f243b7 100644 --- a/blender/arm/logicnode/scene/LN_remove_group.py +++ b/blender/arm/logicnode/scene/LN_remove_group.py @@ -4,8 +4,10 @@ class RemoveGroupNode(ArmLogicTreeNode): """Remove Group node""" bl_idname = 'LNRemoveGroupNode' bl_label = 'Remove Collection' + arm_version = 1 def init(self, context): + super(RemoveGroupNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketString', 'Collection') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/scene/LN_scene.py b/blender/arm/logicnode/scene/LN_scene.py index bda46a54..b8cd290a 100644 --- a/blender/arm/logicnode/scene/LN_scene.py +++ b/blender/arm/logicnode/scene/LN_scene.py @@ -7,10 +7,12 @@ class SceneNode(ArmLogicTreeNode): """Scene node""" bl_idname = 'LNSceneNode' bl_label = 'Scene' + arm_version = 1 property0_get: PointerProperty(name='', type=bpy.types.Scene) def init(self, context): + super(SceneNode, self).init(context) self.add_output('NodeSocketShader', 'Scene') def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/scene/LN_scene_root.py b/blender/arm/logicnode/scene/LN_scene_root.py index 993b220a..9c4bc502 100644 --- a/blender/arm/logicnode/scene/LN_scene_root.py +++ b/blender/arm/logicnode/scene/LN_scene_root.py @@ -4,8 +4,10 @@ class SceneRootNode(ArmLogicTreeNode): """Scene root node""" bl_idname = 'LNSceneRootNode' bl_label = 'Scene Root' + arm_version = 1 def init(self, context): + super(SceneRootNode, self).init(context) self.add_output('ArmNodeSocketObject', 'Object') add_node(SceneRootNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/scene/LN_set_scene.py b/blender/arm/logicnode/scene/LN_set_scene.py index 9b7d9b7a..e93565af 100644 --- a/blender/arm/logicnode/scene/LN_set_scene.py +++ b/blender/arm/logicnode/scene/LN_set_scene.py @@ -4,8 +4,10 @@ class SetSceneNode(ArmLogicTreeNode): """Set scene node""" bl_idname = 'LNSetSceneNode' bl_label = 'Set Scene' + arm_version = 1 def init(self, context): + super(SetSceneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Scene') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/scene/LN_spawn_collection.py b/blender/arm/logicnode/scene/LN_spawn_collection.py index f85752da..dda83ab2 100644 --- a/blender/arm/logicnode/scene/LN_spawn_collection.py +++ b/blender/arm/logicnode/scene/LN_spawn_collection.py @@ -7,10 +7,12 @@ class SpawnCollectionNode(ArmLogicTreeNode): """Spawns a collection to the current scene.""" bl_idname = 'LNSpawnCollectionNode' bl_label = 'Spawn Collection' + arm_version = 1 property0: PointerProperty(name='Collection', type=bpy.types.Collection) def init(self, context): + super(SpawnCollectionNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/scene/LN_spawn_scene.py b/blender/arm/logicnode/scene/LN_spawn_scene.py index 504cbf3e..70df5c77 100644 --- a/blender/arm/logicnode/scene/LN_spawn_scene.py +++ b/blender/arm/logicnode/scene/LN_spawn_scene.py @@ -4,8 +4,10 @@ class SpawnSceneNode(ArmLogicTreeNode): """Spawn scene node""" bl_idname = 'LNSpawnSceneNode' bl_label = 'Spawn Scene' + arm_version = 1 def init(self, context): + super(SpawnSceneNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Scene') self.add_input('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/sound/LN_pause_speaker.py b/blender/arm/logicnode/sound/LN_pause_speaker.py index c363e178..02ceb8e2 100644 --- a/blender/arm/logicnode/sound/LN_pause_speaker.py +++ b/blender/arm/logicnode/sound/LN_pause_speaker.py @@ -4,8 +4,10 @@ class PauseSpeakerNode(ArmLogicTreeNode): """Pause speaker node""" bl_idname = 'LNPauseSoundNode' bl_label = 'Pause Speaker' + arm_version = 1 def init(self, context): + super(PauseSpeakerNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Speaker') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/sound/LN_play_sound.py b/blender/arm/logicnode/sound/LN_play_sound.py index a3230f4e..4d592408 100644 --- a/blender/arm/logicnode/sound/LN_play_sound.py +++ b/blender/arm/logicnode/sound/LN_play_sound.py @@ -7,6 +7,7 @@ class PlaySoundNode(ArmLogicTreeNode): """Play sound node""" bl_idname = 'LNPlaySoundRawNode' bl_label = 'Play Sound' + arm_version = 1 property0: PointerProperty(name='', type=bpy.types.Sound) property1: BoolProperty( @@ -28,6 +29,7 @@ class PlaySoundNode(ArmLogicTreeNode): min=0) def init(self, context): + super(PlaySoundNode, self).init(context) self.add_input('ArmNodeSocketAction', 'Play') self.add_input('ArmNodeSocketAction', 'Pause') self.add_input('ArmNodeSocketAction', 'Stop') diff --git a/blender/arm/logicnode/sound/LN_play_speaker.py b/blender/arm/logicnode/sound/LN_play_speaker.py index a65c89a9..59f5c783 100644 --- a/blender/arm/logicnode/sound/LN_play_speaker.py +++ b/blender/arm/logicnode/sound/LN_play_speaker.py @@ -4,8 +4,10 @@ class PlaySpeakerNode(ArmLogicTreeNode): """Play speaker node""" bl_idname = 'LNPlaySoundNode' bl_label = 'Play Speaker' + arm_version = 1 def init(self, context): + super(PlaySpeakerNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Speaker') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/sound/LN_stop_speaker.py b/blender/arm/logicnode/sound/LN_stop_speaker.py index ad0e9aad..48818018 100644 --- a/blender/arm/logicnode/sound/LN_stop_speaker.py +++ b/blender/arm/logicnode/sound/LN_stop_speaker.py @@ -4,8 +4,10 @@ class StopSpeakerNode(ArmLogicTreeNode): """Stop speaker node""" bl_idname = 'LNStopSoundNode' bl_label = 'Stop Speaker' + arm_version = 1 def init(self, context): + super(StopSpeakerNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Speaker') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/string/LN_case_string.py b/blender/arm/logicnode/string/LN_case_string.py index 08bed632..bc36a95d 100644 --- a/blender/arm/logicnode/string/LN_case_string.py +++ b/blender/arm/logicnode/string/LN_case_string.py @@ -4,6 +4,7 @@ class CaseStringNode(ArmLogicTreeNode): """Converts strings's case node""" bl_idname = 'LNCaseStringNode' bl_label = 'Case String' + arm_version = 1 property0: EnumProperty( items = [('Upper Case', 'Upper Case', 'Upper Case'), ('Lower Case', 'Lower Case', 'Lower Case'), @@ -11,6 +12,7 @@ class CaseStringNode(ArmLogicTreeNode): name='', default='Upper Case') def init(self, context): + super(CaseStringNode, self).init(context) self.add_input('NodeSocketString', 'String') self.add_output('NodeSocketString', 'String') diff --git a/blender/arm/logicnode/string/LN_concatenate_string.py b/blender/arm/logicnode/string/LN_concatenate_string.py index 3856bb18..d188db2e 100644 --- a/blender/arm/logicnode/string/LN_concatenate_string.py +++ b/blender/arm/logicnode/string/LN_concatenate_string.py @@ -4,11 +4,13 @@ class ConcatenateStringNode(ArmLogicTreeNode): """Concatenate string node""" bl_idname = 'LNConcatenateStringNode' bl_label = 'Concatenate String' + arm_version = 1 def __init__(self): array_nodes[str(id(self))] = self def init(self, context): + super(ConcatenateStringNode, self).init(context) self.add_input('NodeSocketString', 'Input 0') self.add_output('NodeSocketString', 'String') diff --git a/blender/arm/logicnode/string/LN_contains_string.py b/blender/arm/logicnode/string/LN_contains_string.py index 3d2747b1..6ef309d8 100644 --- a/blender/arm/logicnode/string/LN_contains_string.py +++ b/blender/arm/logicnode/string/LN_contains_string.py @@ -4,6 +4,7 @@ class ContainsStringNode(ArmLogicTreeNode): """Contains string node""" bl_idname = 'LNContainsStringNode' bl_label = 'Contains String' + arm_version = 1 property0: EnumProperty( items = [('Contains', 'Contains', 'Contains'), ('Starts With', 'Starts With', 'Starts With'), @@ -12,6 +13,7 @@ class ContainsStringNode(ArmLogicTreeNode): name='', default='Contains') def init(self, context): + super(ContainsStringNode, self).init(context) self.add_input('NodeSocketString', 'String') self.add_input('NodeSocketString', 'Find') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/string/LN_length_string.py b/blender/arm/logicnode/string/LN_length_string.py index 79f73111..49cfa6e2 100644 --- a/blender/arm/logicnode/string/LN_length_string.py +++ b/blender/arm/logicnode/string/LN_length_string.py @@ -4,8 +4,10 @@ class LengthStringNode(ArmLogicTreeNode): """String Length node""" bl_idname = 'LNLengthStringNode' bl_label = 'String Length' + arm_version = 1 def init(self, context): + super(LengthStringNode, self).init(context) self.add_output('NodeSocketInt', 'length') self.add_input('NodeSocketString', 'String') diff --git a/blender/arm/logicnode/string/LN_parse_float.py b/blender/arm/logicnode/string/LN_parse_float.py index 974665dc..e70c1f39 100644 --- a/blender/arm/logicnode/string/LN_parse_float.py +++ b/blender/arm/logicnode/string/LN_parse_float.py @@ -4,8 +4,10 @@ class ParseFloatNode(ArmLogicTreeNode): """Parse float node""" bl_idname = 'LNParseFloatNode' bl_label = 'Parse Float' + arm_version = 1 def init(self, context): + super(ParseFloatNode, self).init(context) self.add_output('NodeSocketFloat', 'Float') self.add_input('NodeSocketString', 'String') diff --git a/blender/arm/logicnode/string/LN_split_string.py b/blender/arm/logicnode/string/LN_split_string.py index 614d7611..ca861547 100644 --- a/blender/arm/logicnode/string/LN_split_string.py +++ b/blender/arm/logicnode/string/LN_split_string.py @@ -4,8 +4,10 @@ class SplitStringNode(ArmLogicTreeNode): """Split string node""" bl_idname = 'LNSplitStringNode' bl_label = 'Split String' + arm_version = 1 def init(self, context): + super(SplitStringNode, self).init(context) self.add_output('ArmNodeSocketArray', 'Array') self.add_input('NodeSocketString', 'String') self.add_input('NodeSocketString', 'Split') diff --git a/blender/arm/logicnode/string/LN_string.py b/blender/arm/logicnode/string/LN_string.py index ffbe9be6..9299b3ad 100644 --- a/blender/arm/logicnode/string/LN_string.py +++ b/blender/arm/logicnode/string/LN_string.py @@ -4,8 +4,10 @@ class StringNode(ArmLogicTreeNode): """String node""" bl_idname = 'LNStringNode' bl_label = 'String' + arm_version = 1 def init(self, context): + super(StringNode, self).init(context) self.add_input('NodeSocketString', 'Value') self.add_output('NodeSocketString', 'String', is_var=True) diff --git a/blender/arm/logicnode/string/LN_sub_string.py b/blender/arm/logicnode/string/LN_sub_string.py index 78da3c1a..c7e65cbc 100644 --- a/blender/arm/logicnode/string/LN_sub_string.py +++ b/blender/arm/logicnode/string/LN_sub_string.py @@ -4,8 +4,10 @@ class SubStringNode(ArmLogicTreeNode): """Sub string node""" bl_idname = 'LNSubStringNode' bl_label = 'Sub String' + arm_version = 1 def init(self, context): + super(SubStringNode, self).init(context) self.add_output('NodeSocketString', 'String') self.add_input('NodeSocketString', 'String') self.add_input('NodeSocketInt', 'Start') diff --git a/blender/arm/logicnode/trait/LN_add_trait.py b/blender/arm/logicnode/trait/LN_add_trait.py index d4a7aab9..7a09945b 100644 --- a/blender/arm/logicnode/trait/LN_add_trait.py +++ b/blender/arm/logicnode/trait/LN_add_trait.py @@ -4,8 +4,10 @@ class AddTraitNode(ArmLogicTreeNode): """Add trait node""" bl_idname = 'LNAddTraitNode' bl_label = 'Add Trait' + arm_version = 1 def init(self, context): + super(AddTraitNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Trait') diff --git a/blender/arm/logicnode/trait/LN_get_trait.py b/blender/arm/logicnode/trait/LN_get_trait.py index de45dbb9..86920733 100644 --- a/blender/arm/logicnode/trait/LN_get_trait.py +++ b/blender/arm/logicnode/trait/LN_get_trait.py @@ -4,8 +4,10 @@ class GetTraitNode(ArmLogicTreeNode): """Get trait node""" bl_idname = 'LNGetTraitNode' bl_label = 'Get Trait' + arm_version = 1 def init(self, context): + super(GetTraitNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketString', 'Name') self.add_output('NodeSocketShader', 'Trait') diff --git a/blender/arm/logicnode/trait/LN_pause_trait.py b/blender/arm/logicnode/trait/LN_pause_trait.py index 3066c991..2021e38d 100644 --- a/blender/arm/logicnode/trait/LN_pause_trait.py +++ b/blender/arm/logicnode/trait/LN_pause_trait.py @@ -4,8 +4,10 @@ class PauseTraitNode(ArmLogicTreeNode): """Pause trait node""" bl_idname = 'LNPauseTraitNode' bl_label = 'Pause Trait' + arm_version = 1 def init(self, context): + super(PauseTraitNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Trait') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/trait/LN_remove_trait.py b/blender/arm/logicnode/trait/LN_remove_trait.py index 12a51fec..9b3c142f 100644 --- a/blender/arm/logicnode/trait/LN_remove_trait.py +++ b/blender/arm/logicnode/trait/LN_remove_trait.py @@ -4,8 +4,10 @@ class RemoveTraitNode(ArmLogicTreeNode): """Remove trait node""" bl_idname = 'LNRemoveTraitNode' bl_label = 'Remove Trait' + arm_version = 1 def init(self, context): + super(RemoveTraitNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Trait') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/trait/LN_resume_trait.py b/blender/arm/logicnode/trait/LN_resume_trait.py index 1792407e..36268419 100644 --- a/blender/arm/logicnode/trait/LN_resume_trait.py +++ b/blender/arm/logicnode/trait/LN_resume_trait.py @@ -4,8 +4,10 @@ class ResumeTraitNode(ArmLogicTreeNode): """Resume trait node""" bl_idname = 'LNResumeTraitNode' bl_label = 'Resume Trait' + arm_version = 1 def init(self, context): + super(ResumeTraitNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Trait') self.add_output('ArmNodeSocketAction', 'Out') diff --git a/blender/arm/logicnode/trait/LN_self_trait.py b/blender/arm/logicnode/trait/LN_self_trait.py index 36e59cec..d048909f 100644 --- a/blender/arm/logicnode/trait/LN_self_trait.py +++ b/blender/arm/logicnode/trait/LN_self_trait.py @@ -4,8 +4,10 @@ class SelfTraitNode(ArmLogicTreeNode): """Self trait node""" bl_idname = 'LNSelfTraitNode' bl_label = 'Self Trait' + arm_version = 1 def init(self, context): + super(SelfTraitNode, self).init(context) self.add_output('NodeSocketShader', 'Trait') add_node(SelfTraitNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/trait/LN_trait.py b/blender/arm/logicnode/trait/LN_trait.py index 20beb4da..bc6eed0d 100644 --- a/blender/arm/logicnode/trait/LN_trait.py +++ b/blender/arm/logicnode/trait/LN_trait.py @@ -4,10 +4,12 @@ class TraitNode(ArmLogicTreeNode): """Trait node""" bl_idname = 'LNTraitNode' bl_label = 'Trait' + arm_version = 1 property0: StringProperty(name='', default='') def init(self, context): + super(TraitNode, self).init(context) self.add_output('NodeSocketShader', 'Trait', is_var=True) def draw_buttons(self, context, layout): diff --git a/blender/arm/logicnode/transform/LN_append_transform.py b/blender/arm/logicnode/transform/LN_append_transform.py index fd632d34..85e5d11d 100644 --- a/blender/arm/logicnode/transform/LN_append_transform.py +++ b/blender/arm/logicnode/transform/LN_append_transform.py @@ -4,8 +4,10 @@ class AppendTransformNode(ArmLogicTreeNode): """Append transform node""" bl_idname = 'LNAppendTransformNode' bl_label = 'Append Transform' + arm_version = 1 def init(self, context): + super(AppendTransformNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/transform/LN_get_location.py b/blender/arm/logicnode/transform/LN_get_location.py index 709471a5..50ae2e4e 100644 --- a/blender/arm/logicnode/transform/LN_get_location.py +++ b/blender/arm/logicnode/transform/LN_get_location.py @@ -4,8 +4,10 @@ class GetLocationNode(ArmLogicTreeNode): """Get location node""" bl_idname = 'LNGetLocationNode' bl_label = 'Get Location' + arm_version = 1 def init(self, context): + super(GetLocationNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketVector', 'Location') diff --git a/blender/arm/logicnode/transform/LN_get_rotation.py b/blender/arm/logicnode/transform/LN_get_rotation.py index a0804561..12425ad0 100644 --- a/blender/arm/logicnode/transform/LN_get_rotation.py +++ b/blender/arm/logicnode/transform/LN_get_rotation.py @@ -4,8 +4,10 @@ class GetRotationNode(ArmLogicTreeNode): """Get rotation node""" bl_idname = 'LNGetRotationNode' bl_label = 'Get Rotation' + arm_version = 1 def init(self, context): + super(GetRotationNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketVector', 'Euler Angles') self.add_output('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/transform/LN_get_scale.py b/blender/arm/logicnode/transform/LN_get_scale.py index 3dc55a3d..85aa2f2c 100644 --- a/blender/arm/logicnode/transform/LN_get_scale.py +++ b/blender/arm/logicnode/transform/LN_get_scale.py @@ -4,8 +4,10 @@ class GetScaleNode(ArmLogicTreeNode): """Get scale node""" bl_idname = 'LNGetScaleNode' bl_label = 'Get Scale' + arm_version = 1 def init(self, context): + super(GetScaleNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketVector', 'Scale') diff --git a/blender/arm/logicnode/transform/LN_get_transform.py b/blender/arm/logicnode/transform/LN_get_transform.py index 0332c816..7bce12c1 100644 --- a/blender/arm/logicnode/transform/LN_get_transform.py +++ b/blender/arm/logicnode/transform/LN_get_transform.py @@ -4,8 +4,10 @@ class GetTransformNode(ArmLogicTreeNode): """Get transform node""" bl_idname = 'LNGetTransformNode' bl_label = 'Get Transform' + arm_version = 1 def init(self, context): + super(GetTransformNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/transform/LN_get_world.py b/blender/arm/logicnode/transform/LN_get_world.py index 9392beba..51721163 100644 --- a/blender/arm/logicnode/transform/LN_get_world.py +++ b/blender/arm/logicnode/transform/LN_get_world.py @@ -4,6 +4,7 @@ class GetWorldNode(ArmLogicTreeNode): """Get world node""" bl_idname = 'LNGetWorldNode' bl_label = 'Get World' + arm_version = 1 property0: EnumProperty( items = [('right', 'right', 'right'), @@ -12,6 +13,7 @@ class GetWorldNode(ArmLogicTreeNode): name='', default='right') def init(self, context): + super(GetWorldNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_output('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/transform/LN_look_at.py b/blender/arm/logicnode/transform/LN_look_at.py index 7b256f59..2a5a4138 100644 --- a/blender/arm/logicnode/transform/LN_look_at.py +++ b/blender/arm/logicnode/transform/LN_look_at.py @@ -4,6 +4,7 @@ class LookAtNode(ArmLogicTreeNode): """Look at node""" bl_idname = 'LNLookAtNode' bl_label = 'Look At' + arm_version = 1 property0: EnumProperty( items = [('X', ' X', 'X'), @@ -15,6 +16,7 @@ class LookAtNode(ArmLogicTreeNode): name='With', default='Z') def init(self, context): + super(LookAtNode, self).init(context) self.add_input('NodeSocketVector', 'From Location') self.add_input('NodeSocketVector', 'To Location') self.add_output('NodeSocketVector', 'Rotation') diff --git a/blender/arm/logicnode/transform/LN_quaternion.py b/blender/arm/logicnode/transform/LN_quaternion.py index 1c7f9aa9..fb1e6e0a 100644 --- a/blender/arm/logicnode/transform/LN_quaternion.py +++ b/blender/arm/logicnode/transform/LN_quaternion.py @@ -4,8 +4,10 @@ class QuaternionNode(ArmLogicTreeNode): """Quaternion node""" bl_idname = 'LNQuaternionNode' bl_label = 'Quaternion' + arm_version = 1 def init(self, context): + super(QuaternionNode, self).init(context) self.add_input('NodeSocketFloat', 'X') self.add_input('NodeSocketFloat', 'Y') self.add_input('NodeSocketFloat', 'Z') diff --git a/blender/arm/logicnode/transform/LN_scale_object.py b/blender/arm/logicnode/transform/LN_scale_object.py index c35fd776..df98ef8e 100644 --- a/blender/arm/logicnode/transform/LN_scale_object.py +++ b/blender/arm/logicnode/transform/LN_scale_object.py @@ -4,8 +4,10 @@ class ScaleObjectNode(ArmLogicTreeNode): """Scale object node""" bl_idname = 'LNScaleObjectNode' bl_label = 'Scale Object' + arm_version = 1 def init(self, context): + super(ScaleObjectNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/transform/LN_separate_quaternion.py b/blender/arm/logicnode/transform/LN_separate_quaternion.py index d9f22daf..58c6f301 100644 --- a/blender/arm/logicnode/transform/LN_separate_quaternion.py +++ b/blender/arm/logicnode/transform/LN_separate_quaternion.py @@ -5,8 +5,10 @@ class SeparateQuaternionNode(ArmLogicTreeNode): bl_idname = 'LNSeparateQuaternionNode' bl_label = "Separate Quaternion" + arm_version = 1 def init(self, context): + super(SeparateQuaternionNode, self).init(context) self.add_input('NodeSocketVector', 'Quaternion') self.add_output('NodeSocketFloat', 'X') self.add_output('NodeSocketFloat', 'Y') diff --git a/blender/arm/logicnode/transform/LN_separate_transform.py b/blender/arm/logicnode/transform/LN_separate_transform.py index e53a8c11..9b159669 100644 --- a/blender/arm/logicnode/transform/LN_separate_transform.py +++ b/blender/arm/logicnode/transform/LN_separate_transform.py @@ -4,8 +4,10 @@ class SeparateTransformNode(ArmLogicTreeNode): """Separate transform node""" bl_idname = 'LNSeparateTransformNode' bl_label = 'Separate Transform' + arm_version = 1 def init(self, context): + super(SeparateTransformNode, self).init(context) self.add_input('NodeSocketShader', 'Transform') self.add_output('NodeSocketVector', 'Location') self.add_output('NodeSocketVector', 'Rotation') diff --git a/blender/arm/logicnode/transform/LN_set_location.py b/blender/arm/logicnode/transform/LN_set_location.py index a9e017b7..6ec6e977 100644 --- a/blender/arm/logicnode/transform/LN_set_location.py +++ b/blender/arm/logicnode/transform/LN_set_location.py @@ -4,8 +4,10 @@ class SetLocationNode(ArmLogicTreeNode): """Set location node""" bl_idname = 'LNSetLocationNode' bl_label = 'Set Location' + arm_version = 1 def init(self, context): + super(SetLocationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Location') diff --git a/blender/arm/logicnode/transform/LN_set_rotation.py b/blender/arm/logicnode/transform/LN_set_rotation.py index 09dc1a5e..c03ac905 100644 --- a/blender/arm/logicnode/transform/LN_set_rotation.py +++ b/blender/arm/logicnode/transform/LN_set_rotation.py @@ -4,8 +4,10 @@ class SetRotationNode(ArmLogicTreeNode): """Set rotation node""" bl_idname = 'LNSetRotationNode' bl_label = 'Set Rotation' + arm_version = 1 def init(self, context): + super(SetRotationNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Euler Angles / Vector XYZ') diff --git a/blender/arm/logicnode/transform/LN_set_scale.py b/blender/arm/logicnode/transform/LN_set_scale.py index ec24d558..8d2806e6 100644 --- a/blender/arm/logicnode/transform/LN_set_scale.py +++ b/blender/arm/logicnode/transform/LN_set_scale.py @@ -4,8 +4,10 @@ class SetScaleNode(ArmLogicTreeNode): """Set scale node""" bl_idname = 'LNSetScaleNode' bl_label = 'Set Scale' + arm_version = 1 def init(self, context): + super(SetScaleNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Scale') diff --git a/blender/arm/logicnode/transform/LN_set_transform.py b/blender/arm/logicnode/transform/LN_set_transform.py index fa1729b6..296eb717 100644 --- a/blender/arm/logicnode/transform/LN_set_transform.py +++ b/blender/arm/logicnode/transform/LN_set_transform.py @@ -4,8 +4,10 @@ class SetTransformNode(ArmLogicTreeNode): """Set transform node""" bl_idname = 'LNSetTransformNode' bl_label = 'Set Transform' + arm_version = 1 def init(self, context): + super(SetTransformNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/transform/LN_transform.py b/blender/arm/logicnode/transform/LN_transform.py index ac0a1bf4..c2c2f0c0 100644 --- a/blender/arm/logicnode/transform/LN_transform.py +++ b/blender/arm/logicnode/transform/LN_transform.py @@ -4,8 +4,10 @@ class TransformNode(ArmLogicTreeNode): """Transform node""" bl_idname = 'LNTransformNode' bl_label = 'Transform' + arm_version = 1 def init(self, context): + super(TransformNode, self).init(context) self.add_input('NodeSocketVector', 'Location') self.add_input('NodeSocketVector', 'Rotation') self.add_input('NodeSocketVector', 'Scale', default_value=[1.0, 1.0, 1.0]) diff --git a/blender/arm/logicnode/transform/LN_transform_math.py b/blender/arm/logicnode/transform/LN_transform_math.py index 8b3d9023..52f326db 100644 --- a/blender/arm/logicnode/transform/LN_transform_math.py +++ b/blender/arm/logicnode/transform/LN_transform_math.py @@ -4,8 +4,10 @@ class TransformMathNode(ArmLogicTreeNode): """Transform math node""" bl_idname = 'LNTransformMathNode' bl_label = 'Transform Math' + arm_version = 1 def init(self, context): + super(TransformMathNode, self).init(context) self.add_input('NodeSocketShader', 'Transform') self.add_input('NodeSocketShader', 'Transform') self.add_output('NodeSocketShader', 'Transform') diff --git a/blender/arm/logicnode/transform/LN_translate_object.py b/blender/arm/logicnode/transform/LN_translate_object.py index 8cc4277e..2c8a5b6c 100644 --- a/blender/arm/logicnode/transform/LN_translate_object.py +++ b/blender/arm/logicnode/transform/LN_translate_object.py @@ -4,8 +4,10 @@ class TranslateObjectNode(ArmLogicTreeNode): """Translate object node""" bl_idname = 'LNTranslateObjectNode' bl_label = 'Translate Object' + arm_version = 1 def init(self, context): + super(TranslateObjectNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketVector', 'Vector') diff --git a/blender/arm/logicnode/transform/LN_translate_on_local_axis.py b/blender/arm/logicnode/transform/LN_translate_on_local_axis.py index 9b0c9ea4..69db17c4 100644 --- a/blender/arm/logicnode/transform/LN_translate_on_local_axis.py +++ b/blender/arm/logicnode/transform/LN_translate_on_local_axis.py @@ -5,8 +5,10 @@ class TranslateOnLocalAxisNode(ArmLogicTreeNode): """TranslateOnLocalAxisNode""" bl_idname = 'LNTranslateOnLocalAxisNode' bl_label = 'Translate On Local Axis' + arm_version = 1 def init(self, context): + super(TranslateOnLocalAxisNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('ArmNodeSocketObject', 'Object') self.add_input('NodeSocketFloat', 'Speed') diff --git a/blender/arm/logicnode/transform/LN_vector_from_transform.py b/blender/arm/logicnode/transform/LN_vector_from_transform.py index 053b0912..d415286d 100644 --- a/blender/arm/logicnode/transform/LN_vector_from_transform.py +++ b/blender/arm/logicnode/transform/LN_vector_from_transform.py @@ -4,8 +4,10 @@ class VectorFromTransformNode(ArmLogicTreeNode): """Vector from transform node""" bl_idname = 'LNVectorFromTransformNode' bl_label = 'Vector From Transform' + arm_version = 1 def init(self, context): + super(VectorFromTransformNode, self).init(context) self.add_input('NodeSocketShader', 'Transform') self.add_output('NodeSocketVector', 'Vector') self.add_output('NodeSocketVector', 'Quaternion XYZ') diff --git a/blender/arm/logicnode/transform/LN_volume_trigger.py b/blender/arm/logicnode/transform/LN_volume_trigger.py index 3d9310dd..e9a1b9bf 100644 --- a/blender/arm/logicnode/transform/LN_volume_trigger.py +++ b/blender/arm/logicnode/transform/LN_volume_trigger.py @@ -4,6 +4,7 @@ class VolumeTriggerNode(ArmLogicTreeNode): """Volume trigger node""" bl_idname = 'LNVolumeTriggerNode' bl_label = 'Volume Trigger' + arm_version = 1 property0: EnumProperty( items = [('Enter', 'Enter', 'Enter'), ('Leave', 'Leave', 'Leave'), @@ -11,6 +12,7 @@ class VolumeTriggerNode(ArmLogicTreeNode): name='', default='Enter') def init(self, context): + super(VolumeTriggerNode, self).init(context) self.add_input('ArmNodeSocketObject', 'Object') self.add_input('ArmNodeSocketObject', 'Volume', default_value='Volume') self.add_output('NodeSocketBool', 'Bool') diff --git a/blender/arm/logicnode/variable/LN_boolean.py b/blender/arm/logicnode/variable/LN_boolean.py index 632f5d80..2d9b13e7 100644 --- a/blender/arm/logicnode/variable/LN_boolean.py +++ b/blender/arm/logicnode/variable/LN_boolean.py @@ -4,8 +4,10 @@ class BooleanNode(ArmLogicTreeNode): """Bool node""" bl_idname = 'LNBooleanNode' bl_label = 'Boolean' + arm_version = 1 def init(self, context): + super(BooleanNode, self).init(context) self.add_input('NodeSocketBool', 'Value') self.add_output('NodeSocketBool', 'Bool', is_var=True) diff --git a/blender/arm/logicnode/variable/LN_color.py b/blender/arm/logicnode/variable/LN_color.py index b5958cf2..78ce2f23 100644 --- a/blender/arm/logicnode/variable/LN_color.py +++ b/blender/arm/logicnode/variable/LN_color.py @@ -4,8 +4,10 @@ class ColorNode(ArmLogicTreeNode): """Color node""" bl_idname = 'LNColorNode' bl_label = 'Color' + arm_version = 1 def init(self, context): + super(ColorNode, self).init(context) self.add_input('NodeSocketColor', 'Color', default_value=[0.8, 0.8, 0.8, 1.0]) self.add_output('NodeSocketColor', 'Color', is_var=True) diff --git a/blender/arm/logicnode/variable/LN_dynamic.py b/blender/arm/logicnode/variable/LN_dynamic.py index 8f49ddf4..66b1553a 100644 --- a/blender/arm/logicnode/variable/LN_dynamic.py +++ b/blender/arm/logicnode/variable/LN_dynamic.py @@ -4,8 +4,10 @@ class DynamicNode(ArmLogicTreeNode): """Dynamic node""" bl_idname = 'LNDynamicNode' bl_label = 'Dynamic' + arm_version = 1 def init(self, context): + super(DynamicNode, self).init(context) self.add_output('NodeSocketShader', 'Dynamic', is_var=True) add_node(DynamicNode, category=PKG_AS_CATEGORY) diff --git a/blender/arm/logicnode/variable/LN_float.py b/blender/arm/logicnode/variable/LN_float.py index 716a6e98..b6908da9 100644 --- a/blender/arm/logicnode/variable/LN_float.py +++ b/blender/arm/logicnode/variable/LN_float.py @@ -4,8 +4,10 @@ class FloatNode(ArmLogicTreeNode): """Float node""" bl_idname = 'LNFloatNode' bl_label = 'Float' + arm_version = 1 def init(self, context): + super(FloatNode, self).init(context) self.add_input('NodeSocketFloat', 'Value') self.add_output('NodeSocketFloat', 'Float', is_var=True) diff --git a/blender/arm/logicnode/variable/LN_integer.py b/blender/arm/logicnode/variable/LN_integer.py index d8bdcae0..37dd47ac 100644 --- a/blender/arm/logicnode/variable/LN_integer.py +++ b/blender/arm/logicnode/variable/LN_integer.py @@ -4,8 +4,10 @@ class IntegerNode(ArmLogicTreeNode): """Int node""" bl_idname = 'LNIntegerNode' bl_label = 'Integer' + arm_version = 1 def init(self, context): + super(IntegerNode, self).init(context) self.add_input('NodeSocketInt', 'Value') self.add_output('NodeSocketInt', 'Int', is_var=True) diff --git a/blender/arm/logicnode/variable/LN_mask.py b/blender/arm/logicnode/variable/LN_mask.py index b638dcaa..6b96d868 100644 --- a/blender/arm/logicnode/variable/LN_mask.py +++ b/blender/arm/logicnode/variable/LN_mask.py @@ -4,8 +4,10 @@ class MaskNode(ArmLogicTreeNode): """Mask node""" bl_idname = 'LNMaskNode' bl_label = 'Mask' + arm_version = 1 def init(self, context): + super(MaskNode, self).init(context) for i in range(1, 21): label = 'Group {:02d}'.format(i) self.inputs.new('NodeSocketBool', label) diff --git a/blender/arm/logicnode/variable/LN_set_variable.py b/blender/arm/logicnode/variable/LN_set_variable.py index 2ee732c1..fba8f7c7 100644 --- a/blender/arm/logicnode/variable/LN_set_variable.py +++ b/blender/arm/logicnode/variable/LN_set_variable.py @@ -4,8 +4,10 @@ class SetVariableNode(ArmLogicTreeNode): """Set variable node""" bl_idname = 'LNSetVariableNode' bl_label = 'Set Variable' + arm_version = 1 def init(self, context): + super(SetVariableNode, self).init(context) self.add_input('ArmNodeSocketAction', 'In') self.add_input('NodeSocketShader', 'Variable', is_var=True) self.add_input('NodeSocketShader', 'Value') diff --git a/blender/arm/logicnode/variable/LN_vector.py b/blender/arm/logicnode/variable/LN_vector.py index 4d4f7ef0..2fc95aac 100644 --- a/blender/arm/logicnode/variable/LN_vector.py +++ b/blender/arm/logicnode/variable/LN_vector.py @@ -4,8 +4,10 @@ class VectorNode(ArmLogicTreeNode): """Vector node""" bl_idname = 'LNVectorNode' bl_label = 'Vector' + arm_version=1 def init(self, context): + super(VectorNode, self).init(context) self.add_input('NodeSocketFloat', 'X') self.add_input('NodeSocketFloat', 'Y') self.add_input('NodeSocketFloat', 'Z') diff --git a/blender/arm/nodes_logic.py b/blender/arm/nodes_logic.py index 13987d5d..e39b269b 100755 --- a/blender/arm/nodes_logic.py +++ b/blender/arm/nodes_logic.py @@ -360,12 +360,14 @@ def replaceAll(): for tree in bpy.data.node_groups: if tree.bl_idname == "ArmLogicTreeType": for node in tree.nodes: - if not isinstance(type(node).arm_version, int): - continue # TODO: that's a line to remove when all node classes will have their own version set. - if not node.is_registered_node_type(): + if isinstance(node, (bpy.types.NodeFrame, bpy.types.NodeReroute) ): + pass + elif not node.is_registered_node_type(): # node type deleted. That's unusual. Or it has been replaced for a looong time. list_of_errors.add( ('unregistered', None, tree.name) ) - if node.arm_version < type(node).arm_version: + elif not isinstance(type(node).arm_version, int): + list_of_errors.add( ('bad version', node.bl_idname, tree.name) ) + elif node.arm_version < type(node).arm_version: try: replace(tree, node) except LookupError as err: @@ -395,6 +397,9 @@ def replaceAll(): elif error_type == 'future version': print(f"A node of type {node_class} in tree \"{tree_name}\" seemingly comes from a future version of armory. " f"Please check whether your version of armory is up to date", file=reportf) + elif error_type == 'bad version': + print(f"A node of type {node_class} in tree \"{tree_name}\" Doesn't have version information attached to it." + f"if might come from an armory addon. If so, please check that the version of said addon is compatible with armory", file=reportf) elif error_type == 'misc.': print(f"", file=reportf) else: diff --git a/blender/arm/props_ui.py b/blender/arm/props_ui.py index 72024ca0..e277e7b4 100644 --- a/blender/arm/props_ui.py +++ b/blender/arm/props_ui.py @@ -1861,7 +1861,7 @@ class ARM_OT_ShowNodeUpdateErrors(bpy.types.Operator): def draw_message_box(self, context): list_of_errors = arm.nodes_logic.replacement_errors.copy() # note: list_of_errors is a set of tuples: `(error_type, node_class, tree_name)` - # where `error_type` can be "unregistered", "update failed", "future version" or "misc." + # where `error_type` can be "unregistered", "update failed", "future version", "bad version", or "misc." file_version = ARM_OT_ShowNodeUpdateErrors.wrd.arm_version current_version = props.arm_version @@ -1899,6 +1899,8 @@ class ARM_OT_ShowNodeUpdateErrors(bpy.types.Operator): layout.label(text="Some nodes do not have an update procedure to deal with the version saved in this file.", icon='BLANK1') if current_version==file_version: layout.label(text="(if you are a developer, this might be because you didn't implement it yet.)", icon='BLANK1') + if 'bad version' in error_types: + layout.label(text="Some nodes do not have version information attached to them.", icon='BLANK1') if 'unregistered' in error_types: if is_armory_upgrade: layout.label(text='Some nodes seem to be too old to be understood by armory anymore', icon='BLANK1')