From: Jason Woofenden Date: Tue, 25 Jan 2011 09:18:40 +0000 (-0500) Subject: destroy some rocks with bang dots X-Git-Tag: 0.5.6~7 X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=commitdiff_plain;h=1c7fee35c6c96c3a5c0c83dfbefe09955772b6fa destroy some rocks with bang dots --- diff --git a/main.c b/main.c index 1d4ce85..ae54912 100644 --- a/main.c +++ b/main.c @@ -61,6 +61,9 @@ SDL_Surface font *g_font; +#define ENGINEDOT 0 +#define BANGDOT 1 + struct dot { int active; float x, y; @@ -68,6 +71,7 @@ struct dot { float mass; // in DOT_MASS_UNITs float decay; // rate at which to reduce mass. int heat; // heat multiplier (color). + uint8_t type; // BANGDOT or ENGINEDOT }; void draw(void); @@ -151,10 +155,15 @@ tiny_sleep() { #endif void -init_engine_dots() { +init_dots() { int i; for(i = 0; ix = -200; +} void move_dot(struct dot *d) @@ -296,6 +309,13 @@ move_dot(struct dot *d) if(hit) if(hit->type != SHIP) { d->active = 0; mass = sprite_mass(hit); + if(d->type == BANGDOT) { + struct rock *rock = (struct rock*)hit; + rock->life -= (d->dx - hit->dx) * (d->dx - hit->dx) + (d->dy - hit->dy) * (d->dy - hit->dy); + if(rock->life < 0) { + kill_rock(rock); + } + } hit->dx += DOT_MASS_UNIT * d->mass * (d->dx - hit->dx) / mass; hit->dy += DOT_MASS_UNIT * d->mass * (d->dy - hit->dy) / mass; } @@ -451,7 +471,7 @@ init(void) { exit(1); } - init_engine_dots(); + init_dots(); init_dust(); init_sprites(); diff --git a/rocks.c b/rocks.c index 9983809..ff8f8f9 100644 --- a/rocks.c +++ b/rocks.c @@ -159,6 +159,7 @@ new_rocks(void) type = urnd() % NROCKS; *r = prototypes[type]; r->type = type; + r->life = r->area * 300; switch(i) { case RIGHT: r->x = XSIZE; diff --git a/sprite.h b/sprite.h index b858e5a..0445077 100644 --- a/sprite.h +++ b/sprite.h @@ -84,6 +84,7 @@ struct rock { uint32_t area; // ROCK extras int type; + int life; };