74 lines
1.6 KiB
Rust
74 lines
1.6 KiB
Rust
// 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;
|
|
}
|