1cb93a386Sopenharmony_ci{
2cb93a386Sopenharmony_ci   "MaxCount": 2000,
3cb93a386Sopenharmony_ci   "Drawable": {
4cb93a386Sopenharmony_ci      "Type": "SkCircleDrawable",
5cb93a386Sopenharmony_ci      "Radius": 4
6cb93a386Sopenharmony_ci   },
7cb93a386Sopenharmony_ci   "Code": [
8cb93a386Sopenharmony_ci      "void effectSpawn(inout Effect effect) {",
9cb93a386Sopenharmony_ci      "  effect.lifetime = 2;",
10cb93a386Sopenharmony_ci      "  effect.rate = 200;",
11cb93a386Sopenharmony_ci      "}",
12cb93a386Sopenharmony_ci      "",
13cb93a386Sopenharmony_ci      "void spawn(inout Particle p) {",
14cb93a386Sopenharmony_ci      "  p.lifetime = 10;",
15cb93a386Sopenharmony_ci      "}",
16cb93a386Sopenharmony_ci      "",
17cb93a386Sopenharmony_ci      "float4x4 rx(float rad) {",
18cb93a386Sopenharmony_ci      "  float c = cos(rad);",
19cb93a386Sopenharmony_ci      "  float s = sin(rad);",
20cb93a386Sopenharmony_ci      "  return float4x4(1, 0,  0, 0,",
21cb93a386Sopenharmony_ci      "                  0, c, -s, 0,",
22cb93a386Sopenharmony_ci      "                  0, s,  c, 0,",
23cb93a386Sopenharmony_ci      "                  0, 0,  0, 1);",
24cb93a386Sopenharmony_ci      "}",
25cb93a386Sopenharmony_ci      "",
26cb93a386Sopenharmony_ci      "float4x4 ry(float rad) {",
27cb93a386Sopenharmony_ci      "  float c = cos(rad);",
28cb93a386Sopenharmony_ci      "  float s = sin(rad);",
29cb93a386Sopenharmony_ci      "  return float4x4(c, 0, -s, 0,",
30cb93a386Sopenharmony_ci      "                  0, 1,  0, 0,",
31cb93a386Sopenharmony_ci      "                  s, 0,  c, 0,",
32cb93a386Sopenharmony_ci      "                  0, 0,  0, 1);",
33cb93a386Sopenharmony_ci      "}",
34cb93a386Sopenharmony_ci      "",
35cb93a386Sopenharmony_ci      "float4x4 rz(float rad) {",
36cb93a386Sopenharmony_ci      "  float c = cos(rad);",
37cb93a386Sopenharmony_ci      "  float s = sin(rad);",
38cb93a386Sopenharmony_ci      "  return float4x4( c, s, 0, 0,",
39cb93a386Sopenharmony_ci      "                  -s, c, 0, 0,",
40cb93a386Sopenharmony_ci      "                   0, 0, 1, 0,",
41cb93a386Sopenharmony_ci      "                   0, 0, 0, 1);",
42cb93a386Sopenharmony_ci      "}",
43cb93a386Sopenharmony_ci      "",
44cb93a386Sopenharmony_ci      "void update(inout Particle p) {",
45cb93a386Sopenharmony_ci      "  float3 pos = float3(rand(p.seed), rand(p.seed), rand(p.seed));",
46cb93a386Sopenharmony_ci      "  if (rand(p.seed) < 0.33) {",
47cb93a386Sopenharmony_ci      "    if (pos.x > 0.5) {",
48cb93a386Sopenharmony_ci      "      pos.x = 1;",
49cb93a386Sopenharmony_ci      "      p.color.rgb = float3(1, 0.2, 0.2);",
50cb93a386Sopenharmony_ci      "    } else {",
51cb93a386Sopenharmony_ci      "      pos.x = 0;",
52cb93a386Sopenharmony_ci      "      p.color.rgb = float3(0.2, 1, 1);",
53cb93a386Sopenharmony_ci      "    }",
54cb93a386Sopenharmony_ci      "  } else if (rand(p.seed) < 0.5) {",
55cb93a386Sopenharmony_ci      "    if (pos.y > 0.5) {",
56cb93a386Sopenharmony_ci      "      pos.y = 1;",
57cb93a386Sopenharmony_ci      "      p.color.rgb = float3(0.2, 0.2, 1);",
58cb93a386Sopenharmony_ci      "    } else {",
59cb93a386Sopenharmony_ci      "      pos.y = 0;",
60cb93a386Sopenharmony_ci      "      p.color.rgb = float3(1, 1, 0.2);",
61cb93a386Sopenharmony_ci      "    }",
62cb93a386Sopenharmony_ci      "  } else {",
63cb93a386Sopenharmony_ci      "    if (pos.z > 0.5) {",
64cb93a386Sopenharmony_ci      "      pos.z = 1;",
65cb93a386Sopenharmony_ci      "      p.color.rgb = float3(0.2, 1, 0.2);",
66cb93a386Sopenharmony_ci      "    } else {",
67cb93a386Sopenharmony_ci      "      pos.z = 0;",
68cb93a386Sopenharmony_ci      "      p.color.rgb = float3(1, 0.2, 1);",
69cb93a386Sopenharmony_ci      "    }",
70cb93a386Sopenharmony_ci      "  }",
71cb93a386Sopenharmony_ci      "",
72cb93a386Sopenharmony_ci      "  float s = effect.age * 2 - 1;",
73cb93a386Sopenharmony_ci      "  s = s < 0 ? -s : s;",
74cb93a386Sopenharmony_ci      "",
75cb93a386Sopenharmony_ci      "  pos = pos * 2 - 1;",
76cb93a386Sopenharmony_ci      "  pos = mix(pos, normalize(pos), s);",
77cb93a386Sopenharmony_ci      "  pos = pos * 100;",
78cb93a386Sopenharmony_ci      "",
79cb93a386Sopenharmony_ci      "  float age = float(effect.loop) + effect.age;",
80cb93a386Sopenharmony_ci      "  float4x4 mat = rx(age * radians(60))",
81cb93a386Sopenharmony_ci      "               * ry(age * radians(70))",
82cb93a386Sopenharmony_ci      "               * rz(age * radians(80));",
83cb93a386Sopenharmony_ci      "  pos = (mat * float4(pos, 1)).xyz;",
84cb93a386Sopenharmony_ci      "",
85cb93a386Sopenharmony_ci      "  p.pos.x = pos.x;",
86cb93a386Sopenharmony_ci      "  p.pos.y = pos.y;",
87cb93a386Sopenharmony_ci      "  p.scale = ((pos.z + 50) / 100 + 0.5) / 2;",
88cb93a386Sopenharmony_ci      "}",
89cb93a386Sopenharmony_ci      ""
90cb93a386Sopenharmony_ci   ],
91cb93a386Sopenharmony_ci   "Bindings": []
92cb93a386Sopenharmony_ci}