aboutsummaryrefslogtreecommitdiff
path: root/effect.c
diff options
context:
space:
mode:
Diffstat (limited to 'effect.c')
-rw-r--r--effect.c40
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);
+ }
+}