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);
}
}
|