This commit is contained in:
parent
e8291a5f36
commit
254d0d2f3d
|
@ -37,9 +37,10 @@ void bounce_rand_vector (ball_t *in_b, uint8_t in_bouncetype)
|
|||
case BOUNCE_REBOUND: /* the rebound is rather percise */
|
||||
in_b->dir_x ^= (rval & 0x03);
|
||||
in_b->dir_y ^= (rval & 0x03);
|
||||
|
||||
if (JOYISRIGHT || JOYISLEFT)
|
||||
{
|
||||
/* a moving rebond accelerates the ball by 1/8th */
|
||||
/* a moving rebond accelerates the ball 12,5% */
|
||||
in_b->dir_y += (in_b->dir_y / 8);
|
||||
in_b->dir_x += (in_b->dir_x / 8);
|
||||
}
|
||||
|
@ -78,12 +79,7 @@ void ball_think (ball_t *b)
|
|||
bounce = (BOUNCE_X | bounce) & (BOUNCE_X | BOUNCE_Y);
|
||||
|
||||
bounce |= check_bounce (b->x / 256, proj_y);
|
||||
if (bounce & BOUNCE_UNDEF)
|
||||
bounce = (BOUNCE_Y | bounce) & (BOUNCE_X | BOUNCE_Y);
|
||||
|
||||
bounce |= check_bounce (proj_x, proj_y);
|
||||
if (bounce & BOUNCE_UNDEF)
|
||||
bounce = BOUNCE_X | BOUNCE_Y;
|
||||
|
||||
bounce_rand_vector (b, bounce);
|
||||
|
||||
|
@ -91,33 +87,52 @@ void ball_think (ball_t *b)
|
|||
if (bounce & (BOUNCE_X | BOUNCE_BRICK))
|
||||
{
|
||||
b->dir_x *= -1; /* invert x vector */
|
||||
|
||||
#if BOUNCE_SLOWDOWN
|
||||
if (b->dir_x < 0)
|
||||
{
|
||||
b->dir_x += BOUNCE_SLOWDOWN;
|
||||
} else
|
||||
{
|
||||
b->dir_x -= BOUNCE_SLOWDOWN;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* bounce in y direction */
|
||||
if (bounce & (BOUNCE_Y | BOUNCE_BRICK))
|
||||
{
|
||||
b->dir_y *= -1; /* invert y vector */
|
||||
}
|
||||
|
||||
#if BOUNCE_SLOWDOWN
|
||||
if (b->dir_y < 0)
|
||||
if (bounce & BOUNCE_BRICK)
|
||||
{
|
||||
if (b->dir_y < -BALL_MINSPEED)
|
||||
{
|
||||
b->dir_y += BOUNCE_SLOWDOWN;
|
||||
} else
|
||||
} else if (b->dir_y > BALL_MINSPEED)
|
||||
{
|
||||
b->dir_y -= BOUNCE_SLOWDOWN;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (b->dir_x < -BALL_MINSPEED)
|
||||
{
|
||||
b->dir_x += BOUNCE_SLOWDOWN;
|
||||
} else if (b->dir_y > BALL_MINSPEED)
|
||||
{
|
||||
b->dir_x -= BOUNCE_SLOWDOWN;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (bounce & BOUNCE_REBOUND)
|
||||
{
|
||||
rebound_reflect(b, proj_x);
|
||||
}
|
||||
|
||||
if (b->dir_x > BALL_MAXSPEED)
|
||||
b->dir_x = BALL_MAXSPEED;
|
||||
|
||||
if (b->dir_x < - BALL_MAXSPEED)
|
||||
b->dir_x = - BALL_MAXSPEED;
|
||||
|
||||
if (b->dir_y > BALL_MAXSPEED)
|
||||
b->dir_y = BALL_MAXSPEED;
|
||||
|
||||
if (b->dir_y < - BALL_MAXSPEED)
|
||||
b->dir_y = - BALL_MAXSPEED;
|
||||
|
||||
|
||||
b->y += b->dir_y;
|
||||
b->x += b->dir_x;
|
||||
|
|
|
@ -1,14 +1,32 @@
|
|||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
/* amount of speed to slow down on bounce */
|
||||
#define BOUNCE_SLOWDOWN 0
|
||||
#define BOUNCE_SLOWDOWN 8
|
||||
|
||||
/* minimum speed of the ball */
|
||||
#define BALL_MINSPEED 0x0010
|
||||
#define BALL_MINSPEED 64
|
||||
#define BALL_MAXSPEED 224
|
||||
|
||||
/* initial amount of lifes */
|
||||
#define START_LIFES 3
|
||||
|
||||
/* rebound size */
|
||||
#define REBOUND_SIZE 5
|
||||
#define REBOUND_SIZE 4
|
||||
|
||||
/* rebound reflection: values to add to the vector at rebound field n
|
||||
* note: directions are inverted
|
||||
*/
|
||||
static int8_t rebound_reflection[6][2] =
|
||||
{
|
||||
{-54,-20}, /* offside */
|
||||
{-32,-12},
|
||||
{-16, -8}, /* side ... middle */
|
||||
{16, -8},
|
||||
{32, -12},
|
||||
{54, -20}
|
||||
};
|
||||
|
||||
/* "color" of the rebound */
|
||||
#define REBOUND_COLOR 2
|
||||
|
||||
#endif /* CONFIG_H */
|
||||
|
|
|
@ -17,9 +17,20 @@
|
|||
*/
|
||||
#include "rebound.h"
|
||||
|
||||
#include <stdio.h>
|
||||
static uint8_t rbpos;
|
||||
|
||||
void rebound_reflect (ball_t *b, int8_t in_x)
|
||||
{
|
||||
uint8_t tmpidx;
|
||||
|
||||
tmpidx = (in_x - rbpos) +1;
|
||||
|
||||
printf("bounce idx %i\n", tmpidx);
|
||||
|
||||
b->dir_x += rebound_reflection[tmpidx][0];
|
||||
b->dir_y += rebound_reflection[tmpidx][1];
|
||||
}
|
||||
|
||||
uint8_t rebound_getpos ()
|
||||
{
|
||||
return (rbpos + (REBOUND_SIZE / 2));
|
||||
|
|
|
@ -21,4 +21,5 @@
|
|||
void rebound_init();
|
||||
void rebound_tick();
|
||||
uint8_t rebound_getpos ();
|
||||
void rebound_reflect (ball_t *b, int8_t in_x);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue