1cb93a386Sopenharmony_ci{ 2cb93a386Sopenharmony_ci "MaxCount": 300, 3cb93a386Sopenharmony_ci "Drawable": { 4cb93a386Sopenharmony_ci "Type": "SkCircleDrawable", 5cb93a386Sopenharmony_ci "Radius": 3 6cb93a386Sopenharmony_ci }, 7cb93a386Sopenharmony_ci "Code": [ 8cb93a386Sopenharmony_ci "void effectSpawn(inout Effect effect) {", 9cb93a386Sopenharmony_ci " // Phase one: Launch", 10cb93a386Sopenharmony_ci " effect.lifetime = 4;", 11cb93a386Sopenharmony_ci " effect.rate = 120;", 12cb93a386Sopenharmony_ci " float a = radians(mix(-20, 20, rand(effect.seed)) - 90);", 13cb93a386Sopenharmony_ci " float s = mix(200, 220, rand(effect.seed));", 14cb93a386Sopenharmony_ci " effect.vel.x = cos(a) * s;", 15cb93a386Sopenharmony_ci " effect.vel.y = sin(a) * s;", 16cb93a386Sopenharmony_ci " effect.color.rgb = float3(rand(effect.seed), rand(effect.seed), rand(effect.seed));", 17cb93a386Sopenharmony_ci " effect.pos.x = 0;", 18cb93a386Sopenharmony_ci " effect.pos.y = 0;", 19cb93a386Sopenharmony_ci " effect.scale = 0.25; // Also used as particle behavior flag", 20cb93a386Sopenharmony_ci "}", 21cb93a386Sopenharmony_ci "", 22cb93a386Sopenharmony_ci "void effectUpdate(inout Effect effect) {", 23cb93a386Sopenharmony_ci " if (effect.age > 0.5 && effect.rate > 0) {", 24cb93a386Sopenharmony_ci " // Phase two: Explode", 25cb93a386Sopenharmony_ci " effect.rate = 0;", 26cb93a386Sopenharmony_ci " effect.burst = 50;", 27cb93a386Sopenharmony_ci " effect.scale = 1;", 28cb93a386Sopenharmony_ci " } else {", 29cb93a386Sopenharmony_ci " effect.vel.y += dt * 90;", 30cb93a386Sopenharmony_ci " }", 31cb93a386Sopenharmony_ci "}", 32cb93a386Sopenharmony_ci "", 33cb93a386Sopenharmony_ci "void spawn(inout Particle p) {", 34cb93a386Sopenharmony_ci " bool explode = p.scale == 1;", 35cb93a386Sopenharmony_ci "", 36cb93a386Sopenharmony_ci " p.lifetime = explode ? (2 + rand(p.seed) * 0.5) : 0.5;", 37cb93a386Sopenharmony_ci " float a = radians(rand(p.seed) * 360);", 38cb93a386Sopenharmony_ci " float s = explode ? mix(90, 100, rand(p.seed)) : mix(5, 10, rand(p.seed));", 39cb93a386Sopenharmony_ci " p.vel.x = cos(a) * s;", 40cb93a386Sopenharmony_ci " p.vel.y = sin(a) * s;", 41cb93a386Sopenharmony_ci "}", 42cb93a386Sopenharmony_ci "", 43cb93a386Sopenharmony_ci "void update(inout Particle p) {", 44cb93a386Sopenharmony_ci " p.color.a = 1 - p.age;", 45cb93a386Sopenharmony_ci " if (p.scale == 1) {", 46cb93a386Sopenharmony_ci " p.vel.y += dt * 50;", 47cb93a386Sopenharmony_ci " }", 48cb93a386Sopenharmony_ci "}", 49cb93a386Sopenharmony_ci "" 50cb93a386Sopenharmony_ci ], 51cb93a386Sopenharmony_ci "Bindings": [] 52cb93a386Sopenharmony_ci}