aboutsummaryrefslogtreecommitdiff
path: root/effect.c
blob: 9db16084f9c29a705bc172094b8e3d6d758932c4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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);
	}
}