Add storage nodes
This commit is contained in:
parent
c42355acf0
commit
f50a47008d
45
Sources/armory/logicnode/ReadStorageNode.hx
Normal file
45
Sources/armory/logicnode/ReadStorageNode.hx
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
19
Sources/armory/logicnode/WriteStorageNode.hx
Normal file
19
Sources/armory/logicnode/WriteStorageNode.hx
Normal 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();
|
||||
}
|
||||
}
|
18
blender/arm/logicnode/action_write_storage.py
Normal file
18
blender/arm/logicnode/action_write_storage.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 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')
|
17
blender/arm/logicnode/value_read_storage.py
Normal file
17
blender/arm/logicnode/value_read_storage.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 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')
|
Loading…
Reference in a new issue