blob: 33011403f15a28d87a6516693544a1ebc96ba474 [file] [log] [blame]
// 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;
}