2022-12-28 16:50:54 -06:00
|
|
|
#include "particle.h"
|
2023-02-02 17:52:15 -06:00
|
|
|
#include "stb_ds.h"
|
2022-12-28 16:50:54 -06:00
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
struct emitter make_emitter() {
|
|
|
|
struct emitter e = {0};
|
|
|
|
return e;
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
struct emitter set_emitter(struct emitter e) {
|
|
|
|
arrsetlen(e.particles, e.max);
|
2022-12-28 16:50:54 -06:00
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
e.first = &e.particles[0];
|
2022-12-28 16:50:54 -06:00
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
for (int i = 0; i < arrlen(e.particles) - 1; i++) {
|
|
|
|
e.particles[i].next = &e.particles[i + 1];
|
|
|
|
}
|
2023-02-02 17:52:15 -06:00
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
return e;
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
void free_emitter(struct emitter e) {
|
|
|
|
arrfree(e.particles);
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
void start_emitter(struct emitter e) {
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
void pause_emitter(struct emitter e) {
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
void stop_emitter(struct emitter e) {
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
void emitter_step(struct emitter e, double dt) {
|
|
|
|
for (int i = 0; i < arrlen(e.particles); i++) {
|
|
|
|
if (e.particles[i].life <= 0)
|
|
|
|
continue;
|
2022-12-28 16:50:54 -06:00
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
e.particles[i].pos = cpvadd(e.particles[i].pos, cpvmult(e.particles[i].v, dt));
|
|
|
|
e.particles[i].angle += e.particles[i].av * dt;
|
|
|
|
e.particles[i].life -= dt;
|
2022-12-28 16:50:54 -06:00
|
|
|
|
2023-05-12 13:22:05 -05:00
|
|
|
if (e.particles[i].life <= 0) {
|
|
|
|
e.particles[i].next = e.first;
|
|
|
|
e.first = &e.particles[i];
|
2022-12-28 16:50:54 -06:00
|
|
|
}
|
2023-05-12 13:22:05 -05:00
|
|
|
}
|
2023-02-02 17:52:15 -06:00
|
|
|
}
|