100 lines
2.8 KiB
Haxe
100 lines
2.8 KiB
Haxe
package leenkx.logicnode;
|
|
|
|
import iron.data.SceneFormat.TSceneFormat;
|
|
import iron.data.Data;
|
|
import iron.object.Object;
|
|
|
|
class AddParticleToObjectNode extends LogicNode {
|
|
|
|
public var property0: String;
|
|
|
|
public function new(tree: LogicTree) {
|
|
super(tree);
|
|
}
|
|
|
|
override function run(from: Int) {
|
|
#if lnx_particles
|
|
|
|
if (property0 == 'Scene Active'){
|
|
var objFrom: Object = inputs[1].get();
|
|
var slot: Int = inputs[2].get();
|
|
var objTo: Object = inputs[3].get();
|
|
|
|
if (objFrom == null || objTo == null) return;
|
|
|
|
var mobjFrom = cast(objFrom, iron.object.MeshObject);
|
|
|
|
var psys = mobjFrom.particleSystems != null ? mobjFrom.particleSystems[slot] :
|
|
mobjFrom.particleOwner != null && mobjFrom.particleOwner.particleSystems != null ? mobjFrom.particleOwner.particleSystems[slot] : null;
|
|
|
|
if (psys == null) return;
|
|
|
|
var mobjTo = cast(objTo, iron.object.MeshObject);
|
|
|
|
mobjTo.setupParticleSystem(iron.Scene.active.raw.name, {name: 'LnxPS', seed: 0, particle: @:privateAccess psys.r.name});
|
|
|
|
mobjTo.render_emitter = inputs[4].get();
|
|
|
|
iron.Scene.active.spawnObject(psys.data.raw.instance_object, null, function(o: Object) {
|
|
if (o != null) {
|
|
var c: iron.object.MeshObject = cast o;
|
|
if (mobjTo.particleChildren == null) mobjTo.particleChildren = [];
|
|
mobjTo.particleChildren.push(c);
|
|
c.particleOwner = mobjTo;
|
|
c.particleIndex = mobjTo.particleChildren.length - 1;
|
|
}
|
|
});
|
|
|
|
var oslot: Int = mobjTo.particleSystems.length-1;
|
|
var opsys = mobjTo.particleSystems[oslot];
|
|
@:privateAccess opsys.setupGeomGpu(mobjTo.particleChildren[oslot], mobjTo);
|
|
|
|
} else {
|
|
var sceneName: String = inputs[1].get();
|
|
var objectName: String = inputs[2].get();
|
|
var slot: Int = inputs[3].get();
|
|
|
|
var mobjTo: Object = inputs[4].get();
|
|
var mobjTo = cast(mobjTo, iron.object.MeshObject);
|
|
|
|
#if lnx_json
|
|
sceneName += ".json";
|
|
#elseif lnx_compress
|
|
sceneName += ".lz4";
|
|
#end
|
|
|
|
Data.getSceneRaw(sceneName, (rawScene: TSceneFormat) -> {
|
|
|
|
for (obj in rawScene.objects) {
|
|
if (obj.name == objectName) {
|
|
mobjTo.setupParticleSystem(sceneName, obj.particle_refs[slot]);
|
|
mobjTo.render_emitter = inputs[5].get();
|
|
|
|
iron.Scene.active.spawnObject(rawScene.particle_datas[slot].instance_object, null, function(o: Object) {
|
|
if (o != null) {
|
|
var c: iron.object.MeshObject = cast o;
|
|
if (mobjTo.particleChildren == null) mobjTo.particleChildren = [];
|
|
mobjTo.particleChildren.push(c);
|
|
c.particleOwner = mobjTo;
|
|
c.particleIndex = mobjTo.particleChildren.length - 1;
|
|
}
|
|
}, true, rawScene);
|
|
|
|
var oslot: Int = mobjTo.particleSystems.length-1;
|
|
var opsys = mobjTo.particleSystems[oslot];
|
|
@:privateAccess opsys.setupGeomGpu(mobjTo.particleChildren[oslot], mobjTo);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
#end
|
|
|
|
runOutput(0);
|
|
}
|
|
}
|