LN for Traits

1. Modification of CanvasScript and WasmScript classes: added a field to save the name of the script / file in the class.
2. Added logical nodes for working with Traits.
- Get Object Traits - gets an array of Traits for the specified object;
- Get Trait Name - get the Trait name (the name that appears in the list in Armory Traits) and its type (Canvas, Wasm, Bundle, LogicNode or Haxe).
This commit is contained in:
E1e5en 2020-10-24 22:04:47 +03:00
parent 1dfa0c4644
commit ef4dbd7611
6 changed files with 94 additions and 1 deletions

View file

@ -0,0 +1,16 @@
package armory.logicnode;
import iron.object.Object;
class GetObjectTraitsNode extends LogicNode {
public function new(tree: LogicTree) {
super(tree);
}
override function get(from: Int): Dynamic {
var object: Object = inputs[0].get();
if (object == null) return null;
return object.traits;
}
}

View file

@ -0,0 +1,44 @@
package armory.logicnode;
import iron.Trait;
class GetTraitNameNode extends LogicNode {
public function new(tree: LogicTree) {
super(tree);
}
override function get(from: Int): Dynamic {
var trait: Dynamic = inputs[0].get();
if (trait == null) return null;
switch (from) {
// Name
case 0: {
// Check CanvasScript
var cname = cast Type.resolveClass("armory.trait.internal.CanvasScript");
if (Std.is(trait, cname)) {
return trait.cnvName;
}
// Check WasmScript
var cname = cast Type.resolveClass("armory.trait.internal.WasmScript");
if (Std.is(trait, cname)) {
return trait.wasmName;
}
// Other
var res_arr = (Type.getClassName(Type.getClass(trait))).split(".");
return res_arr[res_arr.length - 1];
}
// Class Type
case 1: {
var cname = Type.getClassName(Type.getClass(trait));
if (cname.indexOf("CanvasScript") > -1) return "Canvas";
if (cname.indexOf("WasmScript") > -1) return "Wasm";
if (cname.indexOf("armory.trait.") > -1) return "Bundle";
if (cname.indexOf("arm.node.") > -1) return "LogicNode";
if (cname.indexOf("Trait") > -1) return "Haxe";
return null;
}
}
return null;
}
}

View file

@ -8,6 +8,7 @@ import zui.Canvas;
class CanvasScript extends Trait {
public var cnvName: String;
#if arm_ui
var cui: Zui;
@ -23,6 +24,7 @@ class CanvasScript extends Trait {
*/
public function new(canvasName: String, font: String = "font_default.ttf") {
super();
cnvName = canvasName;
iron.data.Data.getBlob(canvasName + ".json", function(blob: kha.Blob) {
@ -147,7 +149,7 @@ class CanvasScript extends Trait {
#else
public function new(canvasName: String) { super(); }
public function new(canvasName: String) { super(); cnvName = canvasName; }
#end
}

View file

@ -10,11 +10,13 @@ import iron.system.Time;
class WasmScript extends iron.Trait {
var wasm: Wasm;
public var wasmName: String;
var objectMap: Map<Int, iron.object.Object> = new Map();
public function new(handle: String) {
super();
wasmName = handle;
// Armory API exposed to WebAssembly
// TODO: static

View file

@ -0,0 +1,14 @@
from arm.logicnode.arm_nodes import *
class GetObjectTraitsNode(ArmLogicTreeNode):
"""Returns the children of the given object."""
bl_idname = 'LNGetObjectTraitsNode'
bl_label = 'Get Object Traits'
arm_version = 1
def init(self, context):
super(GetObjectTraitsNode, self).init(context)
self.add_input('ArmNodeSocketObject', 'Object')
self.add_output('ArmNodeSocketArray', 'Traits')
add_node(GetObjectTraitsNode, category=PKG_AS_CATEGORY)

View file

@ -0,0 +1,15 @@
from arm.logicnode.arm_nodes import *
class GetTraitNameNode(ArmLogicTreeNode):
"""Getting the name Trait."""
bl_idname = 'LNGetTraitNameNode'
bl_label = 'Get Trait Name'
arm_version = 1
def init(self, context):
super(GetTraitNameNode, self).init(context)
self.add_input('NodeSocketShader', 'Trait')
self.add_output('NodeSocketString', 'Name')
self.add_output('NodeSocketString', 'Class Type')
add_node(GetTraitNameNode, category=PKG_AS_CATEGORY)