diff options
author | quou <quou@disroot.org> | 2024-10-02 21:23:04 +1000 |
---|---|---|
committer | quou <quou@disroot.org> | 2024-10-02 21:24:37 +1000 |
commit | 8d2ba1419c060078c0aeeb33ef4e84da482b78f5 (patch) | |
tree | 1148ecab21daf9e02062896689b965402aafb6a4 /effect.c | |
parent | 52d93d98018c47cb9f8d9271e4ded8ab96b7bfbd (diff) |
particle effects
Diffstat (limited to 'effect.c')
-rw-r--r-- | effect.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/effect.c b/effect.c new file mode 100644 index 0000000..9db1608 --- /dev/null +++ b/effect.c @@ -0,0 +1,40 @@ +#include "config.h" +#include "maths.h" +#include "obj.h" +#include "random.h" +#include "render.h" + +void init_effect(Effect* e, int x, int y, int vx, int vy, int c) { + int i; + e->c = c; + for (i = 0; i < c; i++) { + const int a = get_r() & 0xff; + const int sa = sin_table[a]; + const int ca = cos_table[a]; + e->x[i] = x; + e->y[i] = y; + e->vx[i] = vx + ca - sa + get_rf(); + e->vy[i] = vy + sa + ca + get_rf(); + } + e->life = 100; +} + +int update_effect(Effect* e) { + int i; + for (i = 0; i < e->c; i++) { + e->vy[i] += main_gravity; + e->x[i] += e->vx[i]; + e->y[i] += e->vy[i]; + } + return !(e->life--); +} + +void ren_effect(const Effect* e, Renderer* r) { + Rect re = { 0, 0, 1, 1 }; + int i; + for (i = 0; i < e->c; i++) { + re.x = e->x[i] >> fbits; + re.y = e->y[i] >> fbits; + ren_rect(r, &re); + } +} |