// Fountain test script #pragma version(1) #include "rs_types.rsh" #include "rs_math.rsh" #include "rs_graphics.rsh" static int newPart = 0; typedef struct Control_s { int x, y; int rate; int count; float r, g, b; rs_allocation partBuffer; rs_mesh partMesh; } Control_t; Control_t *Control; typedef struct Point_s{ float2 delta; float2 position; unsigned int color; } Point_t; Point_t *point; int main(int launchID) { int ct; int count = Control->count; int rate = Control->rate; float height = getHeight(); Point_t * p = 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); Point_t * np = &p[newPart]; while (rate--) { np->delta = vec2Rand(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(Control->partBuffer); drawSimpleMesh(Control->partMesh); return 1; }