Files
armorpaint/Sources/arm/util/ParticleUtil.hx
T
luboslenco 7e18d737e2 Cleanup
2019-11-11 15:35:00 +01:00

96 lines
2.3 KiB
Haxe

package arm.util;
import haxe.Json;
import kha.arrays.Float32Array;
import iron.RenderPath;
import iron.Scene;
import iron.data.SceneFormat;
import iron.data.MaterialData;
import iron.object.Object;
import iron.object.MeshObject;
import arm.ui.UITrait;
class ParticleUtil {
static function f32(ar:Array<kha.FastFloat>):Float32Array {
var res = new Float32Array(ar.length);
for (i in 0...ar.length) res[i] = ar[i];
return res;
}
public static function initParticle() {
if (UITrait.inst.particleMaterial != null) return;
var raw:TParticleData = {
name: "Particles",
type: 0,
loop: false,
render_emitter: false,
count: 1000,
frame_start: 0,
frame_end: 1000,
lifetime: 400,
lifetime_random: 0.5,
emit_from: 1,
object_align_factor: f32([0, 0, -40]),
factor_random: 2.0,
physics_type: 0,
particle_size: 1.0,
size_random: 0,
mass: 1,
instance_object: ".Particle",
weight_gravity: 1
};
Scene.active.raw.particle_datas = [raw];
var particle_refs:Array<TParticleReference> = [
{
name: "Particles",
particle: "Particles",
seed: 0
}
];
{
var t = new RenderTargetRaw();
t.name = "texparticle";
t.width = 0;
t.height = 0;
t.format = 'R8';
t.scale = arm.render.Inc.getSuperSampling();
RenderPath.active.createRenderTarget(t);
}
for (mat in Scene.active.raw.material_datas) {
if (mat.name == 'Material2') {
var m:TMaterialData = Json.parse(Json.stringify(mat));
m.name = 'MaterialParticle';
Scene.active.raw.material_datas.push(m);
break;
}
}
iron.data.Data.getMaterial("Scene", "MaterialParticle", function(md:MaterialData) {
UITrait.inst.particleMaterial = md;
for (obj in Scene.active.raw.objects) {
if (obj.name == '.Sphere') {
var particle:TObj = Json.parse(Json.stringify(obj));
particle.name = '.Particle';
particle.is_particle = true;
particle.material_refs = ['MaterialParticle'];
Scene.active.raw.objects.push(particle);
for (i in 0...16) particle.transform.values[i] *= 0.01;
break;
}
}
Scene.active.spawnObject(".Sphere", null, function(o:Object) {
var mo:MeshObject = cast o;
mo.name = ".ParticleEmitter";
mo.raw.particle_refs = particle_refs;
mo.setupParticleSystem("Scene", particle_refs[0]);
});
});
}
}