update node scripts

This commit is contained in:
QuantumCoderQC 2021-06-09 19:09:24 +02:00
parent 6c3a4d12a6
commit 457c8fe7c5
3 changed files with 39 additions and 79 deletions

View file

@ -1,40 +1,34 @@
package armory.logicnode;
import iron.Scene;
import iron.data.MaterialData;
import iron.object.Object;
import armory.trait.internal.UniformsManager;
class SetMaterialImageParamNode extends LogicNode {
static var registered = false;
static var map = new Map<MaterialData, Map<String, kha.Image>>();
public var property0: Bool; // per object
var manager: UniformsManager;
public function new(tree: LogicTree) {
super(tree);
if (!registered) {
registered = true;
iron.object.Uniforms.externalTextureLinks.push(textureLink);
}
manager = new UniformsManager(UniformType.Texture);
}
override function run(from: Int) {
var mat = inputs[1].get();
if (mat == null) return;
var entry = map.get(mat);
if (entry == null) {
entry = new Map();
map.set(mat, entry);
var object = inputs[1].get();
if(object == null) return;
var mat = inputs[2].get();
if(mat == null) return;
if(! property0){
object = Scene.active.root;
}
iron.data.Data.getImage(inputs[3].get(), function(image: kha.Image) {
entry.set(inputs[2].get(), image); // Node name, value
});
manager.setTextureValue(mat, object, inputs[3].get(), inputs[4].get());
runOutput(0);
}
static function textureLink(object: Object, mat: MaterialData, link: String): kha.Image {
if (mat == null) return null;
var entry = map.get(mat);
if (entry == null) return null;
return entry.get(link);
}
}

View file

@ -1,38 +1,35 @@
package armory.logicnode;
import iron.Scene;
import iron.math.Vec4;
import iron.data.MaterialData;
import iron.object.Object;
import armory.trait.internal.UniformsManager;
class SetMaterialRgbParamNode extends LogicNode {
static var registered = false;
static var map = new Map<MaterialData, Map<String, Vec4>>();
public var property0: Bool; // per object
var manager: UniformsManager;
public function new(tree: LogicTree) {
super(tree);
if (!registered) {
registered = true;
iron.object.Uniforms.externalVec3Links.push(vec3Link);
}
manager = new UniformsManager(UniformType.Vector);
}
override function run(from: Int) {
var mat = inputs[1].get();
if (mat == null) return;
var entry = map.get(mat);
if (entry == null) {
entry = new Map();
map.set(mat, entry);
var object = inputs[1].get();
if(object == null) return;
var mat = inputs[2].get();
if(mat == null) return;
if(! property0){
object = Scene.active.root;
}
entry.set(inputs[2].get(), inputs[3].get()); // Node name, value
manager.setVec3Value(mat, object, inputs[3].get(), inputs[4].get());
runOutput(0);
}
static function vec3Link(object: Object, mat: MaterialData, link: String): iron.math.Vec4 {
if (mat == null) return null;
var entry = map.get(mat);
if (entry == null) return null;
return entry.get(link);
}
}

View file

@ -3,20 +3,18 @@ package armory.logicnode;
import iron.Scene;
import iron.data.MaterialData;
import iron.object.Object;
import armory.trait.internal.UniformsManager;
class SetMaterialValueParamNode extends LogicNode {
public var property0: Bool; // per object
static var registered = false;
static var map = new Map<Object, Map<MaterialData, Map<String, Null<kha.FastFloat>>>>();
var manager: UniformsManager;
public function new(tree: LogicTree) {
super(tree);
if (!registered) {
registered = true;
iron.object.Uniforms.externalFloatLinks.push(floatLink);
}
manager = new UniformsManager(UniformType.Float);
}
override function run(from: Int) {
@ -30,36 +28,7 @@ class SetMaterialValueParamNode extends LogicNode {
object = Scene.active.root;
}
var matMap = map.get(object);
if (matMap == null) {
matMap = new Map();
map.set(object, matMap);
}
var entry = matMap.get(mat);
if (entry == null) {
entry = new Map();
matMap.set(mat, entry);
}
entry.set(inputs[3].get(), inputs[4].get()); // Node name, value
manager.setFloatValue(mat, object, inputs[3].get(), inputs[4].get());
runOutput(0);
}
static function floatLink(object: Object, mat: MaterialData, link: String): Null<kha.FastFloat> {
if(object == null) return null;
if (mat == null) return null;
if(! map.exists(object)){
object = Scene.active.root;
}
var material = map.get(object);
if (material == null) return null;
var entry = material.get(mat);
if (entry == null) return null;
return entry.get(link);
}
}