summaryrefslogtreecommitdiffstats
path: root/libs/rs/java/Fountain/res/raw/fountain.c
blob: 73b819b3df864e82eb2c7483f738e9985e4b1670 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Fountain test script
#pragma version(1)

int newPart = 0;

int main(int launchID) {
    int ct;
    int count = Control->count;
    int rate = Control->rate;
    float height = getHeight();
    struct point_s * p = (struct point_s *)point;

    if (rate) {
        float rMax = ((float)rate) * 0.005f;
        int x = Control->x;
        int y = Control->y;
        int color = ((int)(Control->r * 255.f)) |
                    ((int)(Control->g * 255.f)) << 8 |
                    ((int)(Control->b * 255.f)) << 16 |
                    (0xf0 << 24);
        struct point_s * np = &p[newPart];

        while (rate--) {
            vec2Rand((float *)&np->delta.x, rMax);
            np->position.x = x;
            np->position.y = y;
            np->color = color;
            newPart++;
            np++;
            if (newPart >= count) {
                newPart = 0;
                np = &p[newPart];
            }
        }
    }

    for (ct=0; ct < count; ct++) {
        float dy = p->delta.y + 0.15f;
        float posy = p->position.y + dy;
        if ((posy > height) && (dy > 0)) {
            dy *= -0.3f;
        }
        p->delta.y = dy;
        p->position.x += p->delta.x;
        p->position.y = posy;
        p++;
    }

    uploadToBufferObject(NAMED_PartBuffer);
    drawSimpleMesh(NAMED_PartMesh);
    return 1;
}