moisesjpelaez - Physics Private Fields

This commit is contained in:
2025-06-01 22:52:16 +00:00
parent 25c391d244
commit 2aa6be6496

View File

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