int first_i, last_i;
uint16_t *pixels, *pixel, c;
int row_inc = s->pitch/sizeof(uint16_t);
+ Sprite *hit;
pixels = (uint16_t *) s->pixels;
first_i = -1;
}
// check collisions
- if(pixel_collides(bdot[i].x, bdot[i].y)) { bdot[i].active = 0; continue; }
+ if((hit = pixel_collides(bdot[i].x, bdot[i].y))) {
+ if(hit->type != SHIP) { // they shouldn't hit the ship, but they do
+ bdot[i].active = 0;
+ hit->dx += ENGINE_DOT_WEIGHT * bdot[i].life * bdot[i].dx / sprite_mass(hit);
+ hit->dy += ENGINE_DOT_WEIGHT * bdot[i].life * bdot[i].dy / sprite_mass(hit);
+ continue;
+ }
+ }
pixel = pixels + row_inc*(int)(bdot[i].y) + (int)(bdot[i].x);
if(bdot[i].c) c = bdot[i].c; else c = heatcolor[(int)(bdot[i].life)*3];
kill_ship(Sprite *ship)
{
ship->flags = MOVE;
- // ship->flags = MOVE|DRAW; // FADE SHIP
- // SDL_SetAlpha(ship->image, SDL_SRCALPHA, 0); // FADE SHIP
bang = true;
}
}
} else {
if(state == DEAD_PAUSE) {
- float blast_radius;
- // float alpha; // FADE SHIP
- if(state_timeout >= DEAD_PAUSE_LENGTH - 20.0) {
- blast_radius = BLAST_RADIUS * (DEAD_PAUSE_LENGTH - state_timeout) / 20.0;
- blast_rocks(bangx, bangy, blast_radius);
- }
-
if(bangx < 60) bangx = 60;
-
- // FADE SHIP
- // alpha = 255.0 * (DEAD_PAUSE_LENGTH - state_timeout) / DEAD_PAUSE_LENGTH;
- // SDL_SetAlpha(ship.image, SDL_SRCALPHA, (uint8_t)alpha);
}
}
ship.dx = screendx; ship.dy = screendy;
ship.lives = 4;
ship.flags = MOVE|DRAW|COLLIDE;
- // SDL_SetAlpha(ship.image, SDL_SRCALPHA, SDL_ALPHA_OPAQUE); // FADE SHIP
add_sprite(SPRITE(&ship));
score = 0;