forked from len0rd/rockbox
Brickmania: Hopefully prevent dissappearing of the ball
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24810 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
3dc9d111b3
commit
cd08122e4e
1 changed files with 115 additions and 115 deletions
|
@ -1851,127 +1851,127 @@ static int brickmania_game_loop(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the ball hit the left side */
|
if (game_state != ST_READY && !ball[k].glue)
|
||||||
screen_edge.p1.x = 0;
|
|
||||||
screen_edge.p1.y = 0;
|
|
||||||
|
|
||||||
screen_edge.p2.x = 0;
|
|
||||||
screen_edge.p2.y = GAMESCREEN_HEIGHT;
|
|
||||||
if ( !ball[k].glue &&
|
|
||||||
check_lines(&misc_line, &screen_edge, &pt_hit))
|
|
||||||
{
|
{
|
||||||
/* Reverse direction */
|
/* Check if the ball hit the left side */
|
||||||
ball[k].speedx = -ball[k].speedx;
|
screen_edge.p1.x = 0;
|
||||||
|
screen_edge.p1.y = 0;
|
||||||
|
|
||||||
/* Re-position ball in gameboard */
|
screen_edge.p2.x = 0;
|
||||||
ball[k].tempy = pt_hit.y;
|
screen_edge.p2.y = GAMESCREEN_HEIGHT;
|
||||||
ball[k].tempx = 0;
|
if (check_lines(&misc_line, &screen_edge, &pt_hit))
|
||||||
}
|
|
||||||
|
|
||||||
/* Check if the ball hit the right side */
|
|
||||||
screen_edge.p1.x = GAMESCREEN_WIDTH;
|
|
||||||
screen_edge.p1.y = 0;
|
|
||||||
|
|
||||||
screen_edge.p2.x = GAMESCREEN_WIDTH;
|
|
||||||
screen_edge.p2.y = GAMESCREEN_HEIGHT;
|
|
||||||
if ( !ball[k].glue &&
|
|
||||||
check_lines(&misc_line, &screen_edge, &pt_hit))
|
|
||||||
{
|
|
||||||
/* Reverse direction */
|
|
||||||
ball[k].speedx = -ball[k].speedx;
|
|
||||||
|
|
||||||
/* Re-position ball in gameboard */
|
|
||||||
ball[k].tempy = pt_hit.y;
|
|
||||||
ball[k].tempx = GAMESCREEN_WIDTH - FIXED3(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Did the ball hit the paddle? Depending on where the ball
|
|
||||||
* Hit set the x/y speed appropriately.
|
|
||||||
*/
|
|
||||||
if( game_state!=ST_READY && !ball[k].glue &&
|
|
||||||
check_lines(&misc_line, &pad_line, &pt_hit) )
|
|
||||||
{
|
|
||||||
/* Re-position ball based on collision */
|
|
||||||
ball[k].tempy = ON_PAD_POS_Y;
|
|
||||||
ball[k].tempx = pt_hit.x;
|
|
||||||
|
|
||||||
/* Calculate the ball position relative to the paddle width */
|
|
||||||
int ball_repos = pt_hit.x - pad_pos_x;
|
|
||||||
/* If the ball hits the right half of paddle, x speed
|
|
||||||
* should be positive, if it hits the left half it
|
|
||||||
* should be negative.
|
|
||||||
*/
|
|
||||||
int x_direction = -1;
|
|
||||||
|
|
||||||
/* Comparisons are done with respect to 1/2 pad_width */
|
|
||||||
if(ball_repos > pad_width/2)
|
|
||||||
{
|
{
|
||||||
/* flip the relative position */
|
/* Reverse direction */
|
||||||
ball_repos -= ((ball_repos - pad_width/2) << 1);
|
ball[k].speedx = -ball[k].speedx;
|
||||||
/* Ball hit the right half so X speed calculations
|
|
||||||
* should be positive.
|
|
||||||
*/
|
|
||||||
x_direction = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Figure out where the ball hit relative to 1/2 pad
|
/* Re-position ball in gameboard */
|
||||||
* and in divisions of 4.
|
ball[k].tempy = pt_hit.y;
|
||||||
*/
|
|
||||||
ball_repos = ball_repos / (pad_width/2/4);
|
|
||||||
|
|
||||||
switch(ball_repos)
|
|
||||||
{
|
|
||||||
/* Ball hit the outer edge of the paddle */
|
|
||||||
case 0:
|
|
||||||
ball[k].speedy = SPEED_1Q_Y;
|
|
||||||
ball[k].speedx = SPEED_1Q_X * x_direction;
|
|
||||||
break;
|
|
||||||
/* Ball hit the next fourth of the paddle */
|
|
||||||
case 1:
|
|
||||||
ball[k].speedy = SPEED_2Q_Y;
|
|
||||||
ball[k].speedx = SPEED_2Q_X * x_direction;
|
|
||||||
break;
|
|
||||||
/* Ball hit the third fourth of the paddle */
|
|
||||||
case 2:
|
|
||||||
ball[k].speedy = SPEED_3Q_Y;
|
|
||||||
ball[k].speedx = SPEED_3Q_X * x_direction;
|
|
||||||
break;
|
|
||||||
/* Ball hit the fourth fourth of the paddle or dead
|
|
||||||
* center.
|
|
||||||
*/
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
ball[k].speedy = SPEED_4Q_Y;
|
|
||||||
/* Since this is the middle we don't want to
|
|
||||||
* force the ball in a different direction.
|
|
||||||
* Just keep it going in the same direction
|
|
||||||
* with a specific speed.
|
|
||||||
*/
|
|
||||||
if(ball[k].speedx > 0)
|
|
||||||
{
|
|
||||||
ball[k].speedx = SPEED_4Q_X;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ball[k].speedx = -SPEED_4Q_X;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
ball[k].speedy = SPEED_4Q_Y;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pad_type == STICKY)
|
|
||||||
{
|
|
||||||
ball[k].speedy = -ball[k].speedy;
|
|
||||||
ball[k].glue=true;
|
|
||||||
|
|
||||||
/* X location should not be forced since that is moved with the paddle. The Y
|
|
||||||
* position should be forced to keep the ball at the paddle.
|
|
||||||
*/
|
|
||||||
ball[k].tempx = 0;
|
ball[k].tempx = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if the ball hit the right side */
|
||||||
|
screen_edge.p1.x = GAMESCREEN_WIDTH;
|
||||||
|
screen_edge.p1.y = 0;
|
||||||
|
|
||||||
|
screen_edge.p2.x = GAMESCREEN_WIDTH;
|
||||||
|
screen_edge.p2.y = GAMESCREEN_HEIGHT;
|
||||||
|
if (check_lines(&misc_line, &screen_edge, &pt_hit))
|
||||||
|
{
|
||||||
|
/* Reverse direction */
|
||||||
|
ball[k].speedx = -ball[k].speedx;
|
||||||
|
|
||||||
|
/* Re-position ball in gameboard */
|
||||||
|
ball[k].tempy = pt_hit.y;
|
||||||
|
ball[k].tempx = GAMESCREEN_WIDTH - FIXED3(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Did the ball hit the paddle? Depending on where the ball
|
||||||
|
* Hit set the x/y speed appropriately.
|
||||||
|
*/
|
||||||
|
if(check_lines(&misc_line, &pad_line, &pt_hit) )
|
||||||
|
{
|
||||||
|
/* Re-position ball based on collision */
|
||||||
ball[k].tempy = ON_PAD_POS_Y;
|
ball[k].tempy = ON_PAD_POS_Y;
|
||||||
|
ball[k].tempx = pt_hit.x;
|
||||||
|
|
||||||
|
/* Calculate the ball position relative to the paddle width */
|
||||||
|
int ball_repos = pt_hit.x - pad_pos_x;
|
||||||
|
/* If the ball hits the right half of paddle, x speed
|
||||||
|
* should be positive, if it hits the left half it
|
||||||
|
* should be negative.
|
||||||
|
*/
|
||||||
|
int x_direction = -1;
|
||||||
|
|
||||||
|
/* Comparisons are done with respect to 1/2 pad_width */
|
||||||
|
if(ball_repos > pad_width/2)
|
||||||
|
{
|
||||||
|
/* flip the relative position */
|
||||||
|
ball_repos -= ((ball_repos - pad_width/2) << 1);
|
||||||
|
/* Ball hit the right half so X speed calculations
|
||||||
|
* should be positive.
|
||||||
|
*/
|
||||||
|
x_direction = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Figure out where the ball hit relative to 1/2 pad
|
||||||
|
* and in divisions of 4.
|
||||||
|
*/
|
||||||
|
ball_repos = ball_repos / (pad_width/2/4);
|
||||||
|
|
||||||
|
switch(ball_repos)
|
||||||
|
{
|
||||||
|
/* Ball hit the outer edge of the paddle */
|
||||||
|
case 0:
|
||||||
|
ball[k].speedy = SPEED_1Q_Y;
|
||||||
|
ball[k].speedx = SPEED_1Q_X * x_direction;
|
||||||
|
break;
|
||||||
|
/* Ball hit the next fourth of the paddle */
|
||||||
|
case 1:
|
||||||
|
ball[k].speedy = SPEED_2Q_Y;
|
||||||
|
ball[k].speedx = SPEED_2Q_X * x_direction;
|
||||||
|
break;
|
||||||
|
/* Ball hit the third fourth of the paddle */
|
||||||
|
case 2:
|
||||||
|
ball[k].speedy = SPEED_3Q_Y;
|
||||||
|
ball[k].speedx = SPEED_3Q_X * x_direction;
|
||||||
|
break;
|
||||||
|
/* Ball hit the fourth fourth of the paddle or dead
|
||||||
|
* center.
|
||||||
|
*/
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
ball[k].speedy = SPEED_4Q_Y;
|
||||||
|
/* Since this is the middle we don't want to
|
||||||
|
* force the ball in a different direction.
|
||||||
|
* Just keep it going in the same direction
|
||||||
|
* with a specific speed.
|
||||||
|
*/
|
||||||
|
if(ball[k].speedx > 0)
|
||||||
|
{
|
||||||
|
ball[k].speedx = SPEED_4Q_X;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ball[k].speedx = -SPEED_4Q_X;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ball[k].speedy = SPEED_4Q_Y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pad_type == STICKY)
|
||||||
|
{
|
||||||
|
ball[k].speedy = -ball[k].speedy;
|
||||||
|
ball[k].glue=true;
|
||||||
|
|
||||||
|
/* X location should not be forced since that is moved with the paddle. The Y
|
||||||
|
* position should be forced to keep the ball at the paddle.
|
||||||
|
*/
|
||||||
|
ball[k].tempx = 0;
|
||||||
|
ball[k].tempy = ON_PAD_POS_Y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue