[Xbubble-commits] xbubble-sdl/src board.c, 1.5, 1.6 board.h, 1.3,
1.4 game.c, 1.3, 1.4
Martin Quinson
mquinson at alioth.debian.org
Thu Sep 14 08:48:21 UTC 2006
Update of /cvsroot/xbubble/xbubble-sdl/src
In directory haydn:/tmp/cvs-serv10238
Modified Files:
board.c board.h game.c
Log Message:
Sanitize the way commands are passed from game to boards; allow the canon to move (yuhu)
Index: game.c
===================================================================
RCS file: /cvsroot/xbubble/xbubble-sdl/src/game.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- game.c 14 Sep 2006 08:02:30 -0000 1.3
+++ game.c 14 Sep 2006 08:48:19 -0000 1.4
@@ -327,13 +327,26 @@
break;
case SDLK_LEFT:
- canon_rotate_left(game->board[0]);
+ board_cmd(game->board[0],canon_left);
break;
case SDLK_RIGHT:
- canon_rotate_left(game->board[0]);
+ board_cmd(game->board[0],canon_right);
break;
case SDLK_UP:
- canon_fire(game->board[0]);
+ board_cmd(game->board[0],canon_fire);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case SDL_KEYUP:
+ switch (event.key.keysym.sym) {
+ case SDLK_LEFT:
+ case SDLK_RIGHT:
+ case SDLK_UP:
+ board_cmd(game->board[0],canon_stop);
break;
default:
@@ -413,7 +426,7 @@
( game->computer_thinking_time[n] <= 0 )&&
/* if we are losing then we just wait */
( game->board_best_eval[n] > 4 )) {
- canon_fire( game->board[n] );
+ board_cmd(game->board[n],canon_fire);
if ( game->mode == game_mode_vs_computer )
/* roughly adjust our pace to our opponent's */
game->computer_thinking_time[n] =
@@ -425,17 +438,19 @@
shift = game->board_best_angle[n] - get_canon_angle(game->board[n]);
if ( shift != 0 ) {
if ( shift > 0 )
- canon_rotate_right( game->board[n] );
+ board_cmd(game->board[n], canon_right);
else
- canon_rotate_left( game->board[n] );
+ board_cmd(game->board[n], canon_left);
/* if necessary, fine tune canon rotation ( yes that's cheating ) */
+#ifdef FIXME
if ( abs(shift) < fps_get()*CANON_ROTATING_SPEED ) { /* was "( frame_duration/1000.0 )" instead of fps_get() */
canon_move( game->board[n],
(int) floor( abs(shift)/CANON_ROTATING_SPEED ));
canon_stop( game->board[n] );
}
+#endif
} else {
- canon_stop( game->board[n] );
+ board_cmd(game->board[n], canon_stop);
}
}
}
@@ -548,8 +563,9 @@
lost1 = ( board_get_state( game->board[0] ) == board_state_lost );
lost2 = ( board_get_state( game->board[1] ) == board_state_lost );
if ( lost1 || lost2 ) {
- canon_stop( game->board[0] );
- canon_stop( game->board[1] );
+ board_cmd(game->board[0],canon_stop);
+ board_cmd(game->board[1],canon_stop);
+
game->state = game_state_over;
game->result = game_result_draw;
if ( ! lost1 ) {
@@ -568,7 +584,7 @@
}
else { /* single player mode */
if ( board_empty( game->board[0] )) {
- canon_stop( game->board[0] );
+ board_cmd(game->board[0],canon_stop);
game->state = game_state_over;
game->result = game_result_player1_won;
board_freeze( game->board[0] );
Index: board.h
===================================================================
RCS file: /cvsroot/xbubble/xbubble-sdl/src/board.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- board.h 11 Sep 2006 21:33:19 -0000 1.3
+++ board.h 14 Sep 2006 08:48:19 -0000 1.4
@@ -26,6 +26,11 @@
board_state_frozen /* either won or lost+ ending animation done */
};
+enum e_board_canon_direction {
+ canon_to_left = -1, /* values used in multiplications */
+ canon_stopped = 0,
+ canon_to_right = 1
+};
enum e_countdown_state {
INACTIVE,
@@ -50,7 +55,7 @@
int nb_rising_bubbles;
int nb_evaluations;
int alert_on;
- int canon_direction;
+ enum e_board_canon_direction canon_direction; /* direction wanted by player */
double vx[NB_ANGLES]; /* initial X speed of balls depending on canon angle */
double vy[NB_ANGLES]; /* initial Y speed of balls depending on canon angle */
double canon_virtual_angle;
@@ -109,12 +114,15 @@
void recompute_malus_indicator( board_t board );
int board_empty( board_t board );
+enum e_board_cmd {
+ canon_left,
+ canon_stop,
+ canon_right,
+ canon_fire
+};
+
+void board_cmd(board_t board, enum e_board_cmd cmd);
-void canon_rotate_left( board_t board );
-void canon_rotate_right( board_t board );
-void canon_stop( board_t board );
-void canon_fire( board_t board );
-void canon_move( board_t board, int dt );
int get_canon_angle( board_t board );
int board_was_lowered( board_t board );
@@ -130,9 +138,4 @@
int *next_color,
int *launch_count,
int *period );
-/*void board_set_offsets(board_t board,
- int offx, int offy);*/
-void board_get_offsets(board_t board,
- int *offx, int *offy);
-
#endif /* _BOARD_H */
Index: board.c
===================================================================
RCS file: /cvsroot/xbubble/xbubble-sdl/src/board.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- board.c 14 Sep 2006 07:47:11 -0000 1.5
+++ board.c 14 Sep 2006 08:48:19 -0000 1.6
@@ -30,7 +30,7 @@
#include "sprite.h"
#include "bubble.h"
#include "board.h"
-
+#include "graphic_utils.h" /* FIXME: remove after having only one sprite pool */
enum {
BOTTOM_LAYER = 0,
@@ -169,11 +169,10 @@
board->canon_speed = 1;
board->canon_angle = 0;
board->canon_virtual_angle = 0.0;
- board->canon_direction = 0;
+ board->canon_direction = canon_stopped;
board->canon_sprite = sprite_new( CANON_LAYER, 30, theme->canon_a, 0, 0);
sprite_set_pos( board->canon_sprite, board->canon_x, board->canon_y);
sprite_pool_add( board->sprite_pool, board->canon_sprite );
- canon_move( board, 0);
/* precompute launching vectors */
for ( i = 0; i < NB_ANGLES; i++ ) {
@@ -245,7 +244,6 @@
board->alert_on = 0;
}
-extern SDL_Surface *screen;
void board_draw( board_t board ) {
sprite_pool_draw(board->sprite_pool, screen, &board->offset);
}
@@ -406,11 +404,6 @@
/* FIXME: elliptic trajectory to fixup */
x = board->canon_x - ( board->canon_x - board->new_x ) * cos(t*M_PI/2);
y = board->new_y + ( board->canon_y - board->new_y )*sin(t*M_PI/2);
- /*For now, linear trajectory
-
- x = board->canon_x + ( board->canon_x - board->new_x ) * t;
- y = board->canon_y + ( board->canon_y - board->new_y ) * t;
- */
bubble_set_pos( bubble, board, x, y );
bubble->clock += dt;
@@ -799,7 +792,7 @@
}
}
-void canon_move( board_t board, int dt ) {
+static void canon_animate( board_t board, int dt ) {
int frame;
board->canon_virtual_angle += board->canon_direction*dt*CANON_ROTATING_SPEED*board->canon_speed;
board->canon_virtual_angle = clip( board->canon_virtual_angle,
@@ -828,7 +821,7 @@
board->clock += dt;
board->was_lowered = 0;
- canon_move( board, dt );
+ canon_animate( board, dt );
switch( board->state ) {
@@ -872,33 +865,37 @@
board->launch_requested = 0;
}
-void canon_rotate_left( board_t board ) {
- DEBUG("left %f", board->canon_speed);
- if (board->canon_direction == -1)
- board->canon_speed += MIN( (5-board->canon_speed)/10, 0.2 );
- else
- board->canon_speed=1;
- board->canon_direction = -1;
-}
-
-void canon_rotate_right( board_t board ) {
- DEBUG("right %f", board->canon_speed);
- if (board->canon_direction == 1)
- board->canon_speed += MIN( (5-board->canon_speed)/10, 0.2 );
- else
- board->canon_speed=1;
- board->canon_direction = 1;
-}
-
-void canon_stop( board_t board ) {
- board->canon_direction = 0;
- board->canon_speed = 1;
-}
+void board_cmd(board_t board, enum e_board_cmd cmd) {
+ switch(cmd) {
+ case canon_left:
+ DEBUG("left %f", board->canon_speed);
+ if (board->canon_direction == canon_to_left)
+ board->canon_speed += MIN( (5-board->canon_speed)/10, 0.2 );
+ else
+ board->canon_speed=1;
+ board->canon_direction = canon_to_left;
+ break;
+
+ case canon_right:
+ DEBUG("right %f", board->canon_speed);
+ if (board->canon_direction == canon_to_right)
+ board->canon_speed += MIN( (5-board->canon_speed)/10, 0.2 );
+ else
+ board->canon_speed=1;
+ board->canon_direction = canon_to_right;
+ break;
-void canon_fire(board_t board) {
- warn("Fire");
- board->launch_requested = 1;
- canon_stop(board);
+ case canon_stop:
+ board->canon_direction = canon_stopped;
+ board->canon_speed = 1;
+ break;
+
+ case canon_fire:
+ warn("Fire");
+ board->launch_requested = 1;
+ board_cmd(board, canon_stop);
+ break;
+ }
}
enum e_board_state board_get_state( board_t board ) {
@@ -940,15 +937,3 @@
*period = board->period;
}
-/*FIXME
-void board_set_offsets(board_t board,
- int offx, int offy) {
- board->offset.x = offx;
- board->offset.y = offy;
-}
-*/
-void board_get_offsets(board_t board,
- int *offx, int *offy) {
- *offx = board->offset.x;
- *offy = board->offset.y;
-}
More information about the Xbubble-commits
mailing list