diff --git a/leenkx/Sources/leenkx/logicnode/SetParticleDataNode.hx b/leenkx/Sources/leenkx/logicnode/SetParticleDataNode.hx index acf6071..6b80f20 100644 --- a/leenkx/Sources/leenkx/logicnode/SetParticleDataNode.hx +++ b/leenkx/Sources/leenkx/logicnode/SetParticleDataNode.hx @@ -1,75 +1,75 @@ -package leenkx.logicnode; - -import iron.object.Object; - -class SetParticleDataNode extends LogicNode { - - public var property0: String; - - public function new(tree: LogicTree) { - super(tree); - } - - override function run(from: Int) { - #if lnx_particles - var object: Object = inputs[1].get(); - var slot: Int = inputs[2].get(); - - if (object == null) return; - - var mo = cast(object, iron.object.MeshObject); - - var psys = mo.particleSystems != null ? mo.particleSystems[slot] : - mo.particleOwner != null && mo.particleOwner.particleSystems != null ? mo.particleOwner.particleSystems[slot] : null; if (psys == null) return; - - switch (property0) { - case 'Particle Size': - psys.r.particle_size = inputs[3].get(); - case 'Frame Start': - psys.r.frame_start = inputs[3].get(); - psys.animtime = (psys.r.frame_end - psys.r.frame_start) / psys.frameRate; - psys.spawnRate = ((psys.r.frame_end - psys.r.frame_start) / psys.count) / psys.frameRate; - case 'Frame End': - psys.r.frame_end = inputs[3].get(); - psys.animtime = (psys.r.frame_end - psys.r.frame_start) / psys.frameRate; - psys.spawnRate = ((psys.r.frame_end - psys.r.frame_start) / psys.count) / psys.frameRate; - case 'Lifetime': - psys.lifetime = inputs[3].get() / psys.frameRate; - case 'Lifetime Random': - psys.r.lifetime_random = inputs[3].get(); - case 'Emit From': - var emit_from: Int = inputs[3].get(); - if (emit_from == 0 || emit_from == 1 || emit_from == 2) { - psys.r.emit_from = emit_from; - psys.setupGeomGpu(mo.particleChildren != null ? mo.particleChildren[slot] : cast(iron.Scene.active.getChild(psys.data.raw.instance_object), iron.object.MeshObject), mo); - } - case 'Velocity': - var vel: iron.math.Vec3 = inputs[3].get(); - psys.alignx = vel.x / 2; - psys.aligny = vel.y / 2; - psys.alignz = vel.z / 2; - case 'Velocity Random': - psys.r.factor_random = inputs[3].get(); - case 'Weight Gravity': - psys.r.weight_gravity = inputs[3].get(); - if (iron.Scene.active.raw.gravity != null) { - psys.gx = iron.Scene.active.raw.gravity[0] * psys.r.weight_gravity; - psys.gy = iron.Scene.active.raw.gravity[1] * psys.r.weight_gravity; - psys.gz = iron.Scene.active.raw.gravity[2] * psys.r.weight_gravity; - } - else { - psys.gx = 0; - psys.gy = 0; - psys.gz = -9.81 * psys.r.weight_gravity; - } - case 'Speed': - psys.speed = inputs[3].get(); - default: - null; - } - - #end - - runOutput(0); - } -} +package leenkx.logicnode; + +import iron.object.Object; + +class SetParticleDataNode extends LogicNode { + + public var property0: String; + + public function new(tree: LogicTree) { + super(tree); + } + + override function run(from: Int) { + #if lnx_particles + var object: Object = inputs[1].get(); + var slot: Int = inputs[2].get(); + + if (object == null) return; + + var mo = cast(object, iron.object.MeshObject); + + var psys = mo.particleSystems != null ? mo.particleSystems[slot] : + mo.particleOwner != null && mo.particleOwner.particleSystems != null ? mo.particleOwner.particleSystems[slot] : null; if (psys == null) return; + + switch (property0) { + case 'Particle Size': + @:privateAccess psys.r.particle_size = inputs[3].get(); + case 'Frame Start': + @:privateAccess psys.r.frame_start = inputs[3].get(); + @:privateAccess psys.animtime = (@:privateAccess psys.r.frame_end - @:privateAccess psys.r.frame_start) / @:privateAccess psys.frameRate; + @:privateAccess psys.spawnRate = ((@:privateAccess psys.r.frame_end - @:privateAccess psys.r.frame_start) / @:privateAccess psys.count) / @:privateAccess psys.frameRate; + case 'Frame End': + @:privateAccess psys.r.frame_end = inputs[3].get(); + @:privateAccess psys.animtime = (@:privateAccess psys.r.frame_end - @:privateAccess psys.r.frame_start) / @:privateAccess psys.frameRate; + @:privateAccess psys.spawnRate = ((@:privateAccess psys.r.frame_end - @:privateAccess psys.r.frame_start) / @:privateAccess psys.count) / @:privateAccess psys.frameRate; + case 'Lifetime': + @:privateAccess psys.lifetime = inputs[3].get() / @:privateAccess psys.frameRate; + case 'Lifetime Random': + @:privateAccess psys.r.lifetime_random = inputs[3].get(); + case 'Emit From': + var emit_from: Int = inputs[3].get(); + if (emit_from == 0 || emit_from == 1 || emit_from == 2) { + @:privateAccess psys.r.emit_from = emit_from; + @:privateAccess psys.setupGeomGpu(mo.particleChildren != null ? mo.particleChildren[slot] : cast(iron.Scene.active.getChild(psys.data.raw.instance_object), iron.object.MeshObject), mo); + } + case 'Velocity': + var vel: iron.math.Vec3 = inputs[3].get(); + @:privateAccess psys.alignx = vel.x / 2; + @:privateAccess psys.aligny = vel.y / 2; + @:privateAccess psys.alignz = vel.z / 2; + case 'Velocity Random': + psys.r.factor_random = inputs[3].get(); + case 'Weight Gravity': + psys.r.weight_gravity = inputs[3].get(); + if (iron.Scene.active.raw.gravity != null) { + @:privateAccess psys.gx = iron.Scene.active.raw.gravity[0] * @:privateAccess psys.r.weight_gravity; + @:privateAccess psys.gy = iron.Scene.active.raw.gravity[1] * @:privateAccess psys.r.weight_gravity; + @:privateAccess psys.gz = iron.Scene.active.raw.gravity[2] * @:privateAccess psys.r.weight_gravity; + } + else { + @:privateAccess psys.gx = 0; + @:privateAccess psys.gy = 0; + @:privateAccess psys.gz = -9.81 * @:privateAccess psys.r.weight_gravity; + } + case 'Speed': + psys.speed = inputs[3].get(); + default: + null; + } + + #end + + runOutput(0); + } +}