summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomer Shalev <shalev.tomer@gmail.com>2010-02-27 18:45:37 +0000
committerTomer Shalev <shalev.tomer@gmail.com>2010-02-27 18:45:37 +0000
commit985d0bb3f03e574db6a027579c2dd99629e8bcfb (patch)
tree4af4bf7846605330301d691cb172c20b4a1538f0
parentce8b00d5405a897b53fbc23ad5b9b051925f45cb (diff)
downloadrockbox-985d0bb3f03e574db6a027579c2dd99629e8bcfb.zip
rockbox-985d0bb3f03e574db6a027579c2dd99629e8bcfb.tar.gz
rockbox-985d0bb3f03e574db6a027579c2dd99629e8bcfb.tar.bz2
rockbox-985d0bb3f03e574db6a027579c2dd99629e8bcfb.tar.xz
Brickmania: Test if power-up hit side of paddle
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24949 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/brickmania.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 1dd74f3..8d01917 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -901,11 +901,11 @@ enum paddle_type
enum intersection
{
- INTERSECTION_NONE = 0,
INTERSECTION_TOP,
INTERSECTION_BOTTOM,
INTERSECTION_LEFT,
INTERSECTION_RIGHT,
+ INTERSECTION_ALL,
};
struct brick
@@ -1147,8 +1147,13 @@ static int check_rect(struct line *line, struct rect *rect,
break;
}
- default:
- return 0; /* shouldn't reach here */
+ case INTERSECTION_ALL: /* Test hit on all edges */
+ {
+ return (check_rect(line, rect, INTERSECTION_TOP, hitp) ||
+ check_rect(line, rect, INTERSECTION_BOTTOM, hitp) ||
+ check_rect(line, rect, INTERSECTION_LEFT, hitp) ||
+ check_rect(line, rect, INTERSECTION_RIGHT, hitp));
+ }
}
return check_lines(line, &edge, hitp);
@@ -1516,8 +1521,8 @@ static int brickmania_game_loop(void)
int sec_count=0;
int end;
- /* pad_line used for powerup/ball checks */
- struct line pad_line;
+ /* pad_rect used for powerup/ball checks */
+ struct rect pad_rect;
/* This is used for various lines that are checked (ball and powerup) */
struct line misc_line;
@@ -1602,11 +1607,11 @@ static int brickmania_game_loop(void)
brick_on_board--;
/* Setup the pad line-later used in intersection test */
- pad_line.p1.x = pad_pos_x;
- pad_line.p1.y = PAD_POS_Y;
+ pad_rect.top_left.x = pad_pos_x;
+ pad_rect.top_left.y = PAD_POS_Y;
- pad_line.p2.x = pad_pos_x + pad_width;
- pad_line.p2.y = PAD_POS_Y;
+ pad_rect.bottom_right.x = pad_pos_x + pad_width;
+ pad_rect.bottom_right.y = PAD_POS_Y + PAD_HEIGHT;
if (game_state!=ST_PAUSE)
{
@@ -1668,7 +1673,8 @@ static int brickmania_game_loop(void)
misc_line.p2.y += SPEED_POWER;
/* Check if the powerup will hit the paddle */
- if (check_lines(&misc_line, &pad_line, &pt_hit))
+ if (check_rect(&misc_line, &pad_rect, INTERSECTION_ALL,
+ &pt_hit))
{
/* power hit paddle */
@@ -2051,7 +2057,8 @@ static int brickmania_game_loop(void)
/* 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) )
+ if(check_rect(&misc_line, &pad_rect, INTERSECTION_TOP,
+ &pt_hit) )
{
/* Re-position ball based on collision */
ball[k].tempy = ON_PAD_POS_Y;