File Read/Write nodes
This commit is contained in:
parent
44eac9e50d
commit
780d072fbd
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
25
Sources/armory/logicnode/ReadFileNode.hx
Normal file
25
Sources/armory/logicnode/ReadFileNode.hx
Normal 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;
|
||||
}
|
||||
}
|
25
Sources/armory/logicnode/ReadJsonNode.hx
Normal file
25
Sources/armory/logicnode/ReadJsonNode.hx
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
20
Sources/armory/logicnode/WriteFileNode.hx
Normal file
20
Sources/armory/logicnode/WriteFileNode.hx
Normal 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
|
||||
}
|
||||
}
|
22
Sources/armory/logicnode/WriteJsonNode.hx
Normal file
22
Sources/armory/logicnode/WriteJsonNode.hx
Normal 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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
18
blender/arm/logicnode/native_read_file.py
Normal file
18
blender/arm/logicnode/native_read_file.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 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')
|
18
blender/arm/logicnode/native_read_json.py
Normal file
18
blender/arm/logicnode/native_read_json.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 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')
|
|
@ -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')
|
||||
|
|
17
blender/arm/logicnode/native_write_file.py
Normal file
17
blender/arm/logicnode/native_write_file.py
Normal 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')
|
17
blender/arm/logicnode/native_write_json.py
Normal file
17
blender/arm/logicnode/native_write_json.py
Normal 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')
|
Loading…
Reference in a new issue