X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=c90a793594119357ef5881b7692c536c916e8236;hp=f69b5dc9d4c8a2163293d7146f6bca2ddd42eeab;hb=8332fa82bd3726436a1c3165484ed8207ed23ede;hpb=1f56b653a3e8284f1d9164758d54b93e611af954 diff --git a/main.c b/main.c index f69b5dc..c90a793 100644 --- a/main.c +++ b/main.c @@ -64,6 +64,7 @@ struct dot { float dx, dy; float mass; // in DOT_MASS_UNITs float decay; // rate at which to reduce mass. + int heat; // heat multiplier (color). }; struct dot edot[MAXENGINEDOTS], *dotptr = edot; @@ -141,9 +142,9 @@ init_engine_dots() { void -new_engine_dots(float time_span) { +new_engine_dots(void) { int dir, i; - int n = time_span * ENGINE_DOTS_PER_TIC; + int n = t_frame * ENGINE_DOTS_PER_TIC; float a, r; // angle, random length float dx, dy; float hx, hy; // half ship width/height. @@ -166,9 +167,10 @@ new_engine_dots(float time_span) { dotptr->active = 1; dotptr->decay = 3; + dotptr->heat = 6; // dot was created at a random time during the time span - time = frnd() * time_span; // this is how long ago + time = frnd() * t_frame; // this is how long ago // calculate how fast the ship was going when this engine dot was // created (as if it had a smooth acceleration). This is used in @@ -183,7 +185,7 @@ new_engine_dots(float time_span) { // the starting position (not speed) of the dot is calculated as // though the ship were traveling at a constant speed for this - // time_span. + // t_frame. dotptr->x = (ship.x - (ship.dx - screendx) * time) + s[dir]*hx; dotptr->y = (ship.y - (ship.dy - screendy) * time) + s[(dir+1)&3]*hy; if(dir&1) { @@ -240,6 +242,7 @@ new_bang_dots(struct sprite *s) bdot[bd2].y = y + s->y; bdot[bd2].mass = frnd() * 99; bdot[bd2].decay = frnd()*1.5 + 0.5; + bdot[bd2].heat = 3; bdot[bd2].active = 1; bd2 = (bd2+1) % MAXBANGDOTS; @@ -254,15 +257,15 @@ new_bang_dots(struct sprite *s) void -move_dot(struct dot *d, float ticks) +move_dot(struct dot *d) { Sprite *hit; float mass; if(d->active) { - d->x += (d->dx - screendx) * ticks; - d->y += (d->dy - screendy) * ticks; - d->mass -= ticks * d->decay; + d->x += (d->dx - screendx) * t_frame; + d->y += (d->dy - screendy) * t_frame; + d->mass -= t_frame * d->decay; if(d->mass < 0 || fclip(d->x, XSIZE) || fclip(d->y, YSIZE)) d->active = 0; else { @@ -278,54 +281,38 @@ move_dot(struct dot *d, float ticks) } void -move_dots(float ticks) +move_dots(void) { int i; - for(i=0; ipitch/sizeof(uint16_t); - - pixels = (uint16_t *) s->pixels; + int row_inc; - for(i=0; iactive) { + pixels = (uint16_t *) surf_screen->pixels; + row_inc = surf_screen->pitch / sizeof(uint16_t); + pixel = pixels + (int)d->y * row_inc + (int)d->x; + *pixel = heatcolor[min(3*W-1, (int)(d->mass * d->heat))]; } } void -draw_engine_dots(SDL_Surface *s) -{ +draw_dots(void) { int i; - uint16_t *pixels, *pixel; - int row_inc = s->pitch/sizeof(uint16_t); - pixels = (uint16_t *) s->pixels; - - for(i = 0; i 0) return; switch(state) { @@ -686,7 +673,7 @@ gameloop() { } if(!paused) { - update_state(t_frame); + update_state(); // SCROLLING tmp = (ship.y+ship.h/2 + ship.dy*t_frame - YSCROLLTO)/25 + (ship.dy-screendy); @@ -700,12 +687,12 @@ gameloop() { dist_ahead += (screendx - BARRIER_SPEED)*t_frame; if(MAX_DIST_AHEAD >= 0) dist_ahead = min(dist_ahead, MAX_DIST_AHEAD); - move_sprites(t_frame); - move_dots(t_frame); - move_dust(t_frame); + move_sprites(); + move_dots(); + move_dust(); - new_rocks(t_frame); - new_engine_dots(t_frame); + new_rocks(); + new_engine_dots(); collisions();