Null safe logic nodes
This commit is contained in:
parent
e7768afe38
commit
e05ca352dd
|
@ -12,7 +12,7 @@ class AddTraitNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var trait:Dynamic = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || trait == null) return;
|
||||
|
||||
object.addTrait(trait);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ class AppendTransformNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var matrix:Mat4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || matrix == null) return;
|
||||
|
||||
object.transform.multMatrix(matrix);
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ class ApplyForceAtLocationNode extends LogicNode {
|
|||
var force:Vec4 = inputs[2].get();
|
||||
var location:Vec4 = inputs[3].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || force == null || location == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var rb:RigidBody = object.getTrait(RigidBody);
|
||||
|
|
|
@ -14,7 +14,7 @@ class ApplyForceNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var force:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || force == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var rb:RigidBody = object.getTrait(RigidBody);
|
||||
|
|
|
@ -15,7 +15,7 @@ class ApplyImpulseAtLocationNode extends LogicNode {
|
|||
var impulse:Vec4 = inputs[2].get();
|
||||
var location:Vec4 = inputs[3].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || impulse == null || location == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var rb:RigidBody = object.getTrait(RigidBody);
|
||||
|
|
|
@ -14,7 +14,7 @@ class ApplyImpulseNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var impulse:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || impulse == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var rb:RigidBody = object.getTrait(RigidBody);
|
||||
|
|
|
@ -8,6 +8,7 @@ class ArrayAddNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var ar:Array<Dynamic> = inputs[1].get();
|
||||
if (ar == null) return;
|
||||
|
||||
if (inputs.length > 2) {
|
||||
for (i in 2...inputs.length) {
|
||||
|
|
|
@ -8,6 +8,7 @@ class ArrayAddUniqueNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var ar:Array<Dynamic> = inputs[1].get();
|
||||
if (ar == null) return;
|
||||
|
||||
if (inputs.length > 2) {
|
||||
for (i in 2...inputs.length) {
|
||||
|
|
|
@ -8,6 +8,8 @@ class ArrayGetNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var ar:Array<Dynamic> = inputs[0].get();
|
||||
if (ar == null) return null;
|
||||
|
||||
var i:Int = inputs[1].get();
|
||||
if (i < 0) i = ar.length + i;
|
||||
if (i < 0 || i > ar.length - 1) {
|
||||
|
|
|
@ -10,6 +10,8 @@ class ArrayLoopNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var ar:Array<Dynamic> = inputs[1].get();
|
||||
if (ar == null) return;
|
||||
|
||||
for (val in ar) {
|
||||
value = val;
|
||||
runOutputs(0);
|
||||
|
|
|
@ -8,6 +8,8 @@ class ArrayPopNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var ar:Array<Dynamic> = inputs[0].get();
|
||||
if (ar == null) return null;
|
||||
|
||||
return ar.pop();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ class ArrayRemoveNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var ar:Array<Dynamic> = inputs[1].get();
|
||||
if (ar == null) return;
|
||||
|
||||
var i:Int = inputs[2].get();
|
||||
if (i < 0) i = ar.length + i;
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ class ArrayRemoveValueNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var ar:Array<Dynamic> = inputs[1].get();
|
||||
if (ar == null) return;
|
||||
|
||||
var val:Dynamic = inputs[2].get();
|
||||
|
||||
removedValue = val;
|
||||
|
|
|
@ -8,6 +8,8 @@ class ArraySetNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var ar:Array<Dynamic> = inputs[1].get();
|
||||
if (ar == null) return;
|
||||
|
||||
var i:Int = inputs[2].get();
|
||||
var value:Dynamic = inputs[3].get();
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@ class ArrayShiftNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var ar:Array<Dynamic> = inputs[0].get();
|
||||
if (ar == null) return null;
|
||||
|
||||
return ar.shift();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,8 +11,9 @@ class CallFunctionNode extends LogicNode {
|
|||
}
|
||||
|
||||
override function run() {
|
||||
|
||||
var object:Object = inputs[1].get();
|
||||
if (object == null) return;
|
||||
|
||||
var funName:String = inputs[2].get();
|
||||
|
||||
result = Reflect.callMethod(object, Reflect.field(object, funName), null);
|
||||
|
|
|
@ -18,6 +18,8 @@ class CastPhysicsRayNode extends LogicNode {
|
|||
var vfrom:Vec4 = inputs[0].get();
|
||||
var vto:Vec4 = inputs[1].get();
|
||||
|
||||
if (vfrom == null || vto == null) return null;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb = physics.rayCast(vfrom, vto);
|
||||
|
|
|
@ -12,6 +12,8 @@ class GetDistanceNode extends LogicNode {
|
|||
var object1:Object = inputs[0].get();
|
||||
var object2:Object = inputs[1].get();
|
||||
|
||||
if (object1 == null || object2 == null) return 0;
|
||||
|
||||
return iron.math.Vec4.distance(object1.transform.world.getLoc(), object2.transform.world.getLoc());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ class GetFirstContactNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var object:Object = inputs[0].get();
|
||||
if (object == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
|
|
|
@ -14,8 +14,7 @@ class GoToLocationNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var location:Vec4 = inputs[2].get();
|
||||
|
||||
if (location == null) return;
|
||||
if (object == null) return;
|
||||
if (object == null || location == null) return;
|
||||
|
||||
#if arm_navigation
|
||||
// Assume navmesh exists..
|
||||
|
|
|
@ -13,6 +13,8 @@ class HasContactNode extends LogicNode {
|
|||
var object1:Object = inputs[0].get();
|
||||
var object2:Object = inputs[1].get();
|
||||
|
||||
if (object1 == null || object2 == null) return false;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb2 = object2.getTrait(RigidBody);
|
||||
|
|
|
@ -16,6 +16,8 @@ class MatrixMathNode extends LogicNode {
|
|||
var m1:Mat4 = inputs[0].get();
|
||||
var m2:Mat4 = inputs[1].get();
|
||||
|
||||
if (m1 == null || m2 == null) return null;
|
||||
|
||||
m.setFrom(m1);
|
||||
switch (property0) {
|
||||
case "Multiply":
|
||||
|
|
|
@ -10,6 +10,7 @@ class PauseSoundNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var object:SpeakerObject = cast(inputs[1].get(), SpeakerObject);
|
||||
if (object == null) return;
|
||||
object.pause();
|
||||
super.run();
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class PickLocationNode extends LogicNode {
|
|||
var object:Object = inputs[0].get();
|
||||
var coords:Vec4 = inputs[1].get();
|
||||
|
||||
if (object == null) null;
|
||||
if (object == null || coords == null) null;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
|
|
|
@ -13,6 +13,8 @@ class PickObjectNode extends LogicNode {
|
|||
override function get(from:Int):Dynamic {
|
||||
var coords:Vec4 = inputs[0].get();
|
||||
|
||||
if (coords == null) return null;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
var rb = physics.pickClosest(coords.x, coords.y);
|
||||
|
|
|
@ -10,6 +10,7 @@ class PlaySoundNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var object:SpeakerObject = cast(inputs[1].get(), SpeakerObject);
|
||||
if (object == null) return;
|
||||
object.play();
|
||||
super.run();
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ class RemoveTraitNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var trait:Dynamic = inputs[1].get();
|
||||
if (trait == null) return;
|
||||
trait.remove();
|
||||
|
||||
super.run();
|
||||
|
|
|
@ -18,7 +18,7 @@ class RotateObjectNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var vec:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || vec == null) return;
|
||||
|
||||
q.fromEuler(vec.x, vec.y, vec.z);
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ class ScaleObjectNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var vec:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || vec == null) return;
|
||||
|
||||
object.transform.scale.add(vec);
|
||||
object.transform.buildMatrix();
|
||||
|
|
|
@ -16,6 +16,8 @@ class ScreenToWorldSpaceNode extends LogicNode {
|
|||
override function get(from:Int):Dynamic {
|
||||
var v1:Vec4 = inputs[0].get();
|
||||
|
||||
if (v1 == null) return null;
|
||||
|
||||
var cam = iron.Scene.active.camera;
|
||||
v.setFrom(v1);
|
||||
m.getInverse(cam.P);
|
||||
|
|
|
@ -10,6 +10,7 @@ class SeparateColorNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var vector:Vec4 = inputs[0].get();
|
||||
if (vector == null) return 0.0;
|
||||
|
||||
if (from == 0) return vector.x;
|
||||
else if (from == 1) return vector.y;
|
||||
|
|
|
@ -12,6 +12,7 @@ class SeparateTransformNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var matrix:Mat4 = inputs[0].get();
|
||||
if (matrix == null) return null;
|
||||
|
||||
var loc = new Vec4();
|
||||
var rot = new Quat();
|
||||
|
|
|
@ -10,6 +10,7 @@ class SeparateVectorNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var vector:Vec4 = inputs[0].get();
|
||||
if (vector == null) return 0.0;
|
||||
|
||||
if (from == 0) return vector.x;
|
||||
else if (from == 1) return vector.y;
|
||||
|
|
|
@ -12,6 +12,8 @@ class SetGravityNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var gravity:Vec4 = inputs[1].get();
|
||||
|
||||
if (gravity == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var physics = armory.trait.physics.PhysicsWorld.active;
|
||||
|
|
|
@ -14,7 +14,7 @@ class SetLocationNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var vec:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || vec == null) return;
|
||||
|
||||
object.transform.loc.setFrom(vec);
|
||||
object.transform.buildMatrix();
|
||||
|
|
|
@ -22,6 +22,8 @@ class SetMaterialImageParamNode extends LogicNode {
|
|||
override function run() {
|
||||
mat = inputs[1].get();
|
||||
node = inputs[2].get();
|
||||
if (mat == null || node == null) return;
|
||||
|
||||
var name = inputs[3].get();
|
||||
iron.data.Data.getImage(name, function(img:kha.Image) {
|
||||
image = img;
|
||||
|
|
|
@ -14,7 +14,7 @@ class SetRotationNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var vec:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || vec == null) return;
|
||||
|
||||
object.transform.rot.fromEuler(vec.x, vec.y, vec.z);
|
||||
object.transform.buildMatrix();
|
||||
|
|
|
@ -14,7 +14,7 @@ class SetScaleNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var vec:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || vec == null) return;
|
||||
|
||||
object.transform.scale.setFrom(vec);
|
||||
object.transform.buildMatrix();
|
||||
|
|
|
@ -14,7 +14,7 @@ class SetTransformNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var matrix:Mat4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || matrix == null) return;
|
||||
|
||||
object.transform.setMatrix(matrix);
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ class SetVelocityNode extends LogicNode {
|
|||
var angular:Vec4 = inputs[4].get();
|
||||
var angularFactor:Vec4 = inputs[5].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || linear == null || linearFactor == null || angular == null || angularFactor == null) return;
|
||||
|
||||
#if arm_physics
|
||||
var rb:RigidBody = object.getTrait(RigidBody);
|
||||
|
|
|
@ -10,6 +10,7 @@ class StopSoundNode extends LogicNode {
|
|||
|
||||
override function run() {
|
||||
var object:SpeakerObject = cast(inputs[1].get(), SpeakerObject);
|
||||
if (object == null) return;
|
||||
object.stop();
|
||||
super.run();
|
||||
}
|
||||
|
|
|
@ -18,8 +18,9 @@ class TransformNode extends LogicNode {
|
|||
override function get(from:Int):Dynamic {
|
||||
var loc:Vec4 = inputs[0].get();
|
||||
var rot:Vec4 = inputs[1].get();
|
||||
q.fromEuler(rot.x, rot.y, rot.z);
|
||||
var scale:Vec4 = inputs[2].get();
|
||||
if (loc == null || rot == null || scale == null) return null;
|
||||
q.fromEuler(rot.x, rot.y, rot.z);
|
||||
value.compose(loc, q, scale);
|
||||
return value;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class TranslateObjectNode extends LogicNode {
|
|||
var object:Object = inputs[1].get();
|
||||
var vec:Vec4 = inputs[2].get();
|
||||
|
||||
if (object == null) return;
|
||||
if (object == null || vec == null) return;
|
||||
|
||||
object.transform.loc.add(vec);
|
||||
object.transform.buildMatrix();
|
||||
|
|
|
@ -12,8 +12,8 @@ class VectorClampToSizeNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
v = inputs[0].get();
|
||||
var fmin = inputs[1].get();
|
||||
var fmax = inputs[2].get();
|
||||
var fmin:kha.FastFloat = inputs[1].get();
|
||||
var fmax:kha.FastFloat = inputs[2].get();
|
||||
|
||||
v.clamp(fmin, fmax);
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ class VectorFromTransformNode extends LogicNode {
|
|||
override function get(from:Int):Dynamic {
|
||||
var m:Mat4 = inputs[0].get();
|
||||
|
||||
if (m == null) return null;
|
||||
|
||||
switch (property0) {
|
||||
case "Up":
|
||||
return m.up();
|
||||
|
|
|
@ -14,6 +14,7 @@ class VectorMathNode extends LogicNode {
|
|||
override function get(from:Int):Dynamic {
|
||||
var v1:Vec4 = inputs[0].get();
|
||||
var v2:Vec4 = inputs[1].get();
|
||||
if (v1 == null || v2 == null) return null;
|
||||
v.setFrom(v1);
|
||||
var f = 0.0;
|
||||
switch (property0) {
|
||||
|
|
|
@ -48,6 +48,7 @@ class VectorMixNode extends LogicNode {
|
|||
var k:Float = inputs[0].get(); //Factor
|
||||
var v1:Vec4 = inputs[1].get();
|
||||
var v2:Vec4 = inputs[2].get();
|
||||
if (v1 == null || v2 == null) return null;
|
||||
var f = ease(k);
|
||||
v.x = v1.x + (v2.x - v1.x) * f;
|
||||
v.y = v1.y + (v2.y - v1.y) * f;
|
||||
|
|
|
@ -13,6 +13,7 @@ class WorldToScreenSpaceNode extends LogicNode {
|
|||
|
||||
override function get(from:Int):Dynamic {
|
||||
var v1:Vec4 = inputs[0].get();
|
||||
if (v1 == null) return null;
|
||||
|
||||
var cam = iron.Scene.active.camera;
|
||||
v.setFrom(v1);
|
||||
|
|
Loading…
Reference in a new issue