Add storage nodes

This commit is contained in:
Lubos Lenco 2017-08-16 19:33:49 +02:00
parent c42355acf0
commit f50a47008d
4 changed files with 99 additions and 0 deletions

View file

@ -0,0 +1,45 @@
package armory.logicnode;
class ReadStorageNode extends LogicNode {
public function new(tree:LogicTree) {
super(tree);
}
override function get(from:Int):Dynamic {
var key:String = inputs[0].get();
var data:Dynamic = iron.system.Storage.data;
var value:Dynamic = Reflect.field(data, key);
if (value == null) {
value = parseArg(inputs[1].get());
}
return value;
}
static function parseArg(str:String):Dynamic {
if (str == "true") return true;
else if (str == "false") return false;
else if (str.charAt(0) == "'") return StringTools.replace(str, "'", "");
else if (str.charAt(0) == "[") { // Array
// Remove [] and recursively parse into array,
// then append into parent
str = StringTools.replace(str, "[", "");
str = StringTools.replace(str, "]", "");
str = StringTools.replace(str, " ", "");
var ar:Dynamic = [];
var s = str.split(",");
for (childStr in s) {
ar.push(parseArg(childStr));
}
return ar;
}
else {
var f = Std.parseFloat(str);
var i = Std.parseInt(str);
return f == i ? i : f;
}
}
}

View file

@ -0,0 +1,19 @@
package armory.logicnode;
class WriteStorageNode extends LogicNode {
public function new(tree:LogicTree) {
super(tree);
}
override function run() {
var key:String = inputs[1].get();
var value:Dynamic = inputs[2].get();
var data = iron.system.Storage.data;
Reflect.setField(data, key, value);
iron.system.Storage.save();
super.run();
}
}

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 WriteStorageNode(Node, ArmLogicTreeNode):
'''WriteStorage node'''
bl_idname = 'LNWriteStorageNode'
bl_label = 'Write Storage'
bl_icon = 'GAME'
def init(self, context):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('NodeSocketString', 'Key')
self.inputs.new('NodeSocketShader', 'Value')
self.outputs.new('ArmNodeSocketAction', 'Out')
add_node(WriteStorageNode, category='Action')

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 ReadStorageNode(Node, ArmLogicTreeNode):
'''ReadStorage node'''
bl_idname = 'LNReadStorageNode'
bl_label = 'Read Storage'
bl_icon = 'GAME'
def init(self, context):
self.inputs.new('NodeSocketString', 'Key')
self.inputs.new('NodeSocketString', 'Default')
self.outputs.new('NodeSocketShader', 'Value')
add_node(ReadStorageNode, category='Value')