WURSTWASSER INJECTION COMPLETE

This commit is contained in:
soeren 2010-01-23 20:15:45 +00:00
parent d7dd2a889c
commit 32ac9161e6
4 changed files with 41 additions and 34 deletions

View File

@ -59,12 +59,7 @@ void bounce_rand_vector (ball_t *in_b, uint8_t in_bouncetype)
void ball_think (ball_t *b) void ball_think (ball_t *b)
{ {
int8_t proj_x, proj_y, bounce; int8_t proj_x, proj_y, bounce, tmp;
/*
if (!b->strength)
return;
*/
/* projection of the new coordinates */ /* projection of the new coordinates */
proj_x = (b->x + (b->dir_x)) / 256; proj_x = (b->x + (b->dir_x)) / 256;
@ -76,22 +71,30 @@ void ball_think (ball_t *b)
bounce = check_bounce (proj_x, b->y / 256); bounce = check_bounce (proj_x, b->y / 256);
if (bounce & BOUNCE_UNDEF) /* bouncing on bricks needs special handling */
bounce = (BOUNCE_X | bounce) & (BOUNCE_X | BOUNCE_Y); if (bounce & (BOUNCE_BRICK))
bounce |= BOUNCE_X;
bounce |= check_bounce (b->x / 256, proj_y); tmp = check_bounce (b->x / 256, proj_y);
bounce |= check_bounce (proj_x, proj_y); if (tmp & (BOUNCE_BRICK))
bounce |= BOUNCE_Y;
bounce |= tmp;
tmp = check_bounce (proj_x, proj_y);
if (tmp & (BOUNCE_BRICK))
bounce |= BOUNCE_X | BOUNCE_Y;
bounce |= tmp;
bounce_rand_vector (b, bounce); bounce_rand_vector (b, bounce);
/* bounce in x direction */ /* bounce in x direction */
if (bounce & (BOUNCE_X | BOUNCE_BRICK)) if (bounce & BOUNCE_X)
{ {
b->dir_x *= -1; /* invert x vector */ b->dir_x *= -1; /* invert x vector */
} }
/* bounce in y direction */ /* bounce in y direction */
if (bounce & (BOUNCE_Y | BOUNCE_BRICK)) if (bounce & BOUNCE_Y)
{ {
b->dir_y *= -1; /* invert y vector */ b->dir_y *= -1; /* invert y vector */
} }

View File

@ -61,6 +61,7 @@ void borg_breakout()
ball_spawn_default (&(balls[0])); ball_spawn_default (&(balls[0]));
balls[0].strength++; balls[0].strength++;
level_init(level); level_init(level);
rebound_init();
} }
} }
} }

View File

@ -1,7 +1,7 @@
#ifndef CONFIG_H #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
/* amount of speed to slow down on bounce */ /* amount of speed to slow down on bounce */
#define BOUNCE_SLOWDOWN 8 #define BOUNCE_SLOWDOWN 4
/* minimum speed of the ball */ /* minimum speed of the ball */
#define BALL_MINSPEED 64 #define BALL_MINSPEED 64
@ -17,4 +17,18 @@
/* "color" of the rebound */ /* "color" of the rebound */
#define REBOUND_COLOR 2 #define REBOUND_COLOR 2
/* rebound reflection: values to add to the vector at rebound field n
* the size of this array must be REBOUND_SIZE +2
*/
static const int8_t rebound_reflection[6][2] =
{
{-72, -20}, /* offside left */
{-40, -12}, /* left */
{-16, -8}, /* center left */
{ 16, -8}, /* center right */
{ 40, -12}, /* right */
{ 72, -20} /* offside right */
};
#endif /* CONFIG_H */ #endif /* CONFIG_H */

View File

@ -17,25 +17,13 @@
*/ */
#include "rebound.h" #include "rebound.h"
/* rebound reflection: values to add to the vector at rebound field n
*/
const int8_t rebound_reflection[6][2] =
{
{-54, -20}, /* offside */
{-32, -12}, /* left */
{-16, -8}, /* center */
{ 16, -8},
{ 32, -12},
{ 54, -20}
};
static uint8_t rbpos; static uint8_t rbpos;
void rebound_reflect (ball_t *b, int8_t in_x) void rebound_reflect (ball_t *b, int8_t in_x)
{ {
uint8_t tmpidx; uint8_t tmpidx;
tmpidx = (in_x - rbpos) +1; tmpidx = ((in_x - rbpos) +1) % (REBOUND_SIZE +2);
b->dir_x += rebound_reflection[tmpidx][0]; b->dir_x += rebound_reflection[tmpidx][0];
b->dir_y += rebound_reflection[tmpidx][1]; b->dir_y += rebound_reflection[tmpidx][1];
@ -56,10 +44,14 @@ void rebound_draw ()
{ {
uint8_t i; uint8_t i;
for (i=rbpos;i<rbpos + REBOUND_SIZE;i++) for (i=0;i<NUM_COLS;i++)
{ {
if (i >= rbpos && i < rbpos + REBOUND_SIZE)
playfield_set (i, NUM_ROWS-1, rb); /* set rebound pixel */ playfield_set (i, NUM_ROWS-1, rb); /* set rebound pixel */
else
playfield_set (i, NUM_ROWS-1, sp); /* space */
} }
printf("rpos: %i\n", rbpos);
} }
void rebound_tick() void rebound_tick()
@ -67,16 +59,13 @@ void rebound_tick()
/* directions are inverted (JOYISLEFT means RIGHT) */ /* directions are inverted (JOYISLEFT means RIGHT) */
if (JOYISRIGHT && rbpos) if (JOYISRIGHT && rbpos)
{ {
playfield_set (rbpos + REBOUND_SIZE, NUM_ROWS-1, sp); /* clear rebound pixel */
rbpos--; rbpos--;
playfield_set (rbpos, NUM_ROWS-1, rb); /* set rebound pixel */ rebound_draw();
} }
if (JOYISLEFT && rbpos < (NUM_COLS - (REBOUND_SIZE+1))) if (JOYISLEFT && rbpos < (NUM_COLS - (REBOUND_SIZE)))
{ {
playfield_set (rbpos, NUM_ROWS-1, sp); /* clear rebound pixel */
rbpos++; rbpos++;
playfield_set (rbpos + REBOUND_SIZE, NUM_ROWS-1, rb); /* set rebound pixel */
}
rebound_draw(); rebound_draw();
}
} }