#include "config.h"
#include "globals.h"
#include "dust.h"
+#include "float.h"
#include "mt.h"
struct dust_mote {
int i;
float xscroll = screendx * ticks;
float yscroll = screendy * ticks;
-
- // Originally this code was much simpler, but it would crash sometimes
- // because the floating point numbers wouldn't always round the same
- // direction, and we'd ocanially try to draw off the screen.
for(i=0; i<N_DUST_MOTES; i++) {
motes[i].x -= xscroll / (1.3 + motes[i].z);
- motes[i].y -= yscroll / (1.3 + motes[i].z);
+ motes[i].x = fwrap(motes[i].x, XSIZE);
- if(motes[i].x < 0) {
- motes[i].x += XSIZE;
- }
- if(motes[i].x > (XSIZE - 0.000001)) {
- motes[i].x -= XSIZE;
- if(motes[i].x < 0) {
- motes[i].x = 0;
- }
- }
-
- if(motes[i].y < 0) {
- motes[i].y += YSIZE;
- }
- if(motes[i].y > (YSIZE - 0.000001)) {
- motes[i].y -= YSIZE;
- if(motes[i].y < 0) {
- motes[i].y = 0;
- }
- }
+ motes[i].y -= yscroll / (1.3 + motes[i].z);
+ motes[i].y = fwrap(motes[i].y, YSIZE);
}
}