File Read/Write nodes

This commit is contained in:
luboslenco 2018-11-14 15:43:42 +01:00
parent 44eac9e50d
commit 780d072fbd
14 changed files with 168 additions and 13 deletions

View file

@ -6,7 +6,7 @@ class DynamicNode extends LogicNode {
public function new(tree:LogicTree, value:Dynamic = null) {
super(tree);
this.value = value;
this.value = value == null ? {} : value;
}
override function get(from:Int):Dynamic {

View file

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

View file

@ -0,0 +1,25 @@
package armory.logicnode;
class ReadFileNode extends LogicNode {
var data:String;
public function new(tree:LogicTree) {
super(tree);
}
override function run(from:Int) {
// Relative or absolute path to file
var file:String = inputs[1].get();
// Load the file asynchronously
iron.data.Data.getBlob(file, function(b:kha.Blob) {
data = b.toString();
runOutput(0);
});
}
override function get(from:Int):Dynamic {
return data;
}
}

View file

@ -0,0 +1,25 @@
package armory.logicnode;
class ReadJsonNode extends LogicNode {
var data:Dynamic;
public function new(tree:LogicTree) {
super(tree);
}
override function run(from:Int) {
// Relative or absolute path to file
var file:String = inputs[1].get();
// Load the file asynchronously
iron.data.Data.getBlob(file, function(b:kha.Blob) {
data = haxe.Json.parse(b.toString());
runOutput(0);
});
}
override function get(from:Int):Dynamic {
return data;
}
}

View file

@ -1,7 +1,5 @@
package armory.logicnode;
import iron.object.Object;
class SetHaxePropertyNode extends LogicNode {
public function new(tree:LogicTree) {
@ -9,7 +7,7 @@ class SetHaxePropertyNode extends LogicNode {
}
override function run(from:Int) {
var object:Object = inputs[1].get();
var object:Dynamic = inputs[1].get();
var property:String = inputs[2].get();
var value:Dynamic = inputs[3].get();

View file

@ -0,0 +1,20 @@
package armory.logicnode;
class WriteFileNode extends LogicNode {
public function new(tree:LogicTree) {
super(tree);
}
override function run(from:Int) {
// Relative or absolute path to file
var file:String = inputs[1].get();
var data:String = inputs[2].get();
#if kha_krom
var path = Krom.getFilesLocation() + "/" + file;
var bytes = haxe.io.Bytes.ofString(data);
Krom.fileSaveBytes(path, bytes.getData());
#end
}
}

View file

@ -0,0 +1,22 @@
package armory.logicnode;
class WriteJsonNode extends LogicNode {
public function new(tree:LogicTree) {
super(tree);
}
override function run(from:Int) {
// Relative or absolute path to file
var file:String = inputs[1].get();
var data:Dynamic = inputs[2].get();
var s = haxe.Json.stringify(data);
trace(s);
#if kha_krom
var path = Krom.getFilesLocation() + "/" + file;
var bytes = haxe.io.Bytes.ofString(s);
Krom.fileSaveBytes(path, bytes.getData());
#end
}
}

View file

@ -479,13 +479,10 @@ class ArmoryExporter:
# If there's no keyframe animation at all, then write the object transform as a single 4x4 matrix.
# We might still be exporting sampled animation below.
o['transform'] = {}
if sampledAnimation:
o['transform']['target'] = "transform"
o['transform']['values'] = self.write_matrix(bobject.matrix_local)
if sampledAnimation:
o['transform']['target'] = "transform"
self.export_object_sampled_animation(bobject, scene, o)
else: # Animated
structFlag = False

View file

@ -10,7 +10,7 @@ class GetHaxePropertyNode(Node, ArmLogicTreeNode):
bl_icon = 'GAME'
def init(self, context):
self.inputs.new('ArmNodeSocketObject', 'Object')
self.inputs.new('NodeSocketShader', 'Dynamic')
self.inputs.new('NodeSocketString', 'Property')
self.outputs.new('NodeSocketShader', 'Value')

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 ReadFileNode(Node, ArmLogicTreeNode):
'''Read File node'''
bl_idname = 'LNReadFileNode'
bl_label = 'Read File'
bl_icon = 'CURVE_PATH'
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('NodeSocketString', 'File')
self.outputs.new('ArmNodeSocketAction', 'Loaded')
self.outputs.new('NodeSocketString', 'String')
add_node(ReadFileNode, category='Native')

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 ReadJsonNode(Node, ArmLogicTreeNode):
'''Read JSON node'''
bl_idname = 'LNReadJsonNode'
bl_label = 'Read JSON'
bl_icon = 'CURVE_PATH'
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('NodeSocketString', 'File')
self.outputs.new('ArmNodeSocketAction', 'Loaded')
self.outputs.new('NodeSocketShader', 'Dynamic')
add_node(ReadJsonNode, category='Native')

View file

@ -11,7 +11,7 @@ class SetHaxePropertyNode(Node, ArmLogicTreeNode):
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('ArmNodeSocketObject', 'Object')
self.inputs.new('NodeSocketShader', 'Dynamic')
self.inputs.new('NodeSocketString', 'Property')
self.inputs.new('NodeSocketShader', 'Value')
self.outputs.new('ArmNodeSocketAction', 'Out')

View file

@ -0,0 +1,17 @@
import bpy
from bpy.props import *
from bpy.types import Node, NodeSocket
from arm.logicnode.arm_nodes import *
class WriteFileNode(Node, ArmLogicTreeNode):
'''Write File node'''
bl_idname = 'LNWriteFileNode'
bl_label = 'Write File'
bl_icon = 'CURVE_PATH'
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('NodeSocketString', 'File')
self.inputs.new('NodeSocketString', 'String')
add_node(WriteFileNode, category='Native')

View file

@ -0,0 +1,17 @@
import bpy
from bpy.props import *
from bpy.types import Node, NodeSocket
from arm.logicnode.arm_nodes import *
class WriteJsonNode(Node, ArmLogicTreeNode):
'''Write JSON node'''
bl_idname = 'LNWriteJsonNode'
bl_label = 'Write JSON'
bl_icon = 'CURVE_PATH'
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('NodeSocketString', 'File')
self.inputs.new('NodeSocketShader', 'Dynamic')
add_node(WriteJsonNode, category='Native')