| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- ///if (is_paint || is_sculpt)
- function util_particle_init() {
- if (context_raw.particle_material != null) return;
- let raw: particle_data_t = {
- name: "Particles",
- type: 0,
- loop: false,
- count: 1000,
- frame_start: 0,
- frame_end: 1000,
- lifetime: 400,
- lifetime_random: 0.5,
- emit_from: 1,
- object_align_factor: f32_array_create_xyz(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_raw.particle_datas = [raw];
- let particle_refs: particle_ref_t[] = [
- {
- name: "Particles",
- particle: "Particles",
- seed: 0
- }
- ];
- {
- let t: render_target_t = render_target_create();
- t.name = "texparticle";
- t.width = 0;
- t.height = 0;
- t.format = "R8";
- t.scale = render_path_base_get_super_sampling();
- render_path_create_render_target(t);
- }
- for (let i: i32 = 0; i < _scene_raw.material_datas.length; ++i) {
- let mat: material_data_t = _scene_raw.material_datas[i];
- if (mat.name == "Material2") {
- let m: material_data_t = json_parse(json_stringify(mat));
- m.name = "MaterialParticle";
- array_push(_scene_raw.material_datas, m);
- break;
- }
- }
- let md: material_data_t = data_get_material("Scene", "MaterialParticle");
- context_raw.particle_material = md;
- for (let i: i32 = 0; i < _scene_raw.objects.length; ++i) {
- let obj: obj_t = _scene_raw.objects[i];
- if (obj.name == ".Sphere") {
- let particle: obj_t = json_parse(json_stringify(obj));
- particle.name = ".Particle";
- if (particle.particles == null) {
- particle.particles = {};
- }
- particle.particles.is_particle = true;
- particle.material_refs = ["MaterialParticle"];
- array_push(_scene_raw.objects, particle);
- for (let i: i32 = 0; i < 16; ++i) {
- particle.transform[i] *= 0.01;
- }
- break;
- }
- }
- let o: object_t = scene_spawn_object(".Sphere");
- let mo: mesh_object_t = o.ext;
- mo.base.name = ".ParticleEmitter";
- mo.base.raw = json_parse(json_stringify(mo.base.raw));
- mo.base.raw.particles.refs = particle_refs;
- ///if arm_particles
- mesh_object_setup_particle_system(mo, "Scene", particle_refs[0]);
- ///end
- }
- ///if arm_physics
- function util_particle_init_physics() {
- if (physics_world_active != null) {
- util_particle_init_mesh();
- return;
- }
- physics_world_load(function () {
- physics_world_create();
- util_particle_init_mesh();
- });
- }
- function util_particle_init_mesh() {
- if (context_raw.paint_body != null) {
- return;
- }
- let po: mesh_object_t = context_raw.merged_object != null ? context_raw.merged_object : context_raw.paint_object;
- po.base.transform.scale.x = po.base.parent.transform.scale.x;
- po.base.transform.scale.y = po.base.parent.transform.scale.y;
- po.base.transform.scale.z = po.base.parent.transform.scale.z;
- context_raw.paint_body = physics_body_create();
- context_raw.paint_body.shape = shape_type_t.MESH;
- physics_body_init(context_raw.paint_body, po.base);
- map_set(physics_body_object_map, po.base, context_raw.paint_body);
- }
- ///end
- ///end
|