Add Array Slice and Array Splice nodes
This commit is contained in:
parent
ba87005efb
commit
f8f0e127a1
27
Sources/armory/logicnode/ArraySliceNode.hx
Normal file
27
Sources/armory/logicnode/ArraySliceNode.hx
Normal 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);
|
||||
}
|
||||
}
|
20
Sources/armory/logicnode/ArraySpliceNode.hx
Normal file
20
Sources/armory/logicnode/ArraySpliceNode.hx
Normal 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();
|
||||
}
|
||||
}
|
18
blender/arm/logicnode/array_slice.py
Normal file
18
blender/arm/logicnode/array_slice.py
Normal 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')
|
19
blender/arm/logicnode/array_splice.py
Normal file
19
blender/arm/logicnode/array_splice.py
Normal 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')
|
Loading…
Reference in a new issue