[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