Add Array Slice and Array Splice nodes

This commit is contained in:
unknown 2018-06-24 15:47:39 +02:00
parent ba87005efb
commit f8f0e127a1
4 changed files with 84 additions and 0 deletions

View file

@ -0,0 +1,27 @@
package armory.logicnode;
class ArraySliceNode extends LogicNode {
public function new(tree:LogicTree) {
super(tree);
}
override function get(from:Int):Dynamic {
var ar:Array<Dynamic> = inputs[0].get();
if (ar == null) return null;
var i:Int = inputs[1].get();
var end:Int = inputs[2].get();
if (i < 0) i = ar.length + i;
if (i < 0 || i > ar.length - 1) {
var className = Type.getClassName(Type.getClass(tree));
var traitName = className.substring(className.lastIndexOf(".") + 1);
var objectName = tree.object.name;
trace('Logic error (object: $objectName, trait: $traitName): Array Get - index out of range');
return null;
}
return ar.slice(i, end);
}
}

View file

@ -0,0 +1,20 @@
package armory.logicnode;
class ArraySpliceNode extends LogicNode {
public function new(tree:LogicTree) {
super(tree);
}
override function run() {
var ar:Array<Dynamic> = inputs[1].get();
if (ar == null) return;
var i = inputs[2].get();
var len = inputs[3].get();
ar.splice(i, len);
super.run();
}
}

View file

@ -0,0 +1,18 @@
import bpy
from bpy.props import *
from bpy.types import Node, NodeSocket
from arm.logicnode.arm_nodes import *
class ArraySliceNode(Node, ArmLogicTreeNode):
'''Array slice node'''
bl_idname = 'LNArraySliceNode'
bl_label = 'Array Slice'
bl_icon = 'GAME'
def init(self, context):
self.inputs.new('ArmNodeSocketArray', 'Array')
self.inputs.new('NodeSocketInt', 'Index')
self.inputs.new('NodeSocketInt', 'End')
self.outputs.new('ArmNodeSocketArray', 'Array')
add_node(ArraySliceNode, category='Array')

View file

@ -0,0 +1,19 @@
import bpy
from bpy.props import *
from bpy.types import Node, NodeSocket
from arm.logicnode.arm_nodes import *
class ArraySpliceNode(Node, ArmLogicTreeNode):
'''Array splice node'''
bl_idname = 'LNArraySpliceNode'
bl_label = 'Array Splice'
bl_icon = 'GAME'
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('ArmNodeSocketArray', 'Array')
self.inputs.new('NodeSocketInt', 'Index')
self.inputs.new('NodeSocketInt', 'Length')
self.outputs.new('ArmNodeSocketAction', 'Out')
add_node(ArraySpliceNode, category='Array')