diff options
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); + } +} |