Example #1
0
// brick ball collision handler
void brick_ball(sprite_t* s1, sprite_t* s2)
{
  sprite_t* ball;
  sprite_t* brick;
  unsigned int collision_direction;

  ball = s1->type == BALL_SPRITE ? s1 : s2;
  brick = s1->type == BRICK_SPRITE ? s1 : s2;

  collision_direction = detect_collision(ball, brick);

  if (collision_direction == NORTH_COLLISION ||
      collision_direction == SOUTH_COLLISION )
    breakout_data.ball_speed_y = -breakout_data.ball_speed_y;

  if (collision_direction == EAST_COLLISION ||
      collision_direction == WEST_COLLISION )
    breakout_data.ball_speed_x = -breakout_data.ball_speed_x;


  ball_tick(ball);
  breakout_data.num_bricks--;
  if (breakout_data.num_bricks)
  {
    //sound_play_enemy_killed();
    sound_play_shoot();
  }
  else
  {
    sound_play_big_explosion(); 
  }

  sprite_release(&breakout_sprites_vector, brick);
}
Example #2
0
// ball paddle collision handler
void ball_paddle(sprite_t* s1, sprite_t* s2)
{
  sprite_t* ball;
  sprite_t* paddle;
  unsigned int collision_direction;

  ball = s1->type == BALL_SPRITE ? s1 : s2;
  paddle = s1->type == PADDLE_SPRITE ? s1 : s2;

  sound_play_fast_invader(0);

  collision_direction = detect_collision(paddle, ball);

  if (collision_direction == NORTH_COLLISION && breakout_data.ball_speed_y > 0 )
    //|| collision_direction == SOUTH_COLLISION )
  {
    breakout_data.ball_speed_y = -breakout_data.ball_speed_y;
    breakout_data.ball_speed_x += breakout_data.paddle_speed_x / 8;
    
    // Make sure the ball is above the paddle to avoid multiple collition between the ball and the paddle      
    ball->center_pos_y = paddle->center_pos_y - (paddle->size_y_div_2 + ball->size_y_div_2);
  }
    

  if (collision_direction == EAST_COLLISION ||
      collision_direction == WEST_COLLISION )
  {
    breakout_data.ball_in_play = false;
    sprite_release(&breakout_sprites_vector, ball);
  }
}
Example #3
0
void ball_tick(sprite_t* sprite)
{
  sprite->center_pos_x += breakout_data.ball_speed_x;
  sprite->center_pos_y += breakout_data.ball_speed_y;

  if ( (sprite->center_pos_x <= sprite->size_x_div_2 && breakout_data.ball_speed_x < 0) ||
       (sprite->center_pos_x >= ( (SCREENW << 8) - sprite->size_x_div_2 ) && breakout_data.ball_speed_x > 0 ) )
    breakout_data.ball_speed_x = -breakout_data.ball_speed_x;

  if ( sprite->center_pos_y <= sprite->size_y_div_2 && breakout_data.ball_speed_y < 0)
    breakout_data.ball_speed_y = -breakout_data.ball_speed_y;

  if (sprite->center_pos_y >=  (SCREENH << 8) && breakout_data.ball_speed_y > 0 )
  {
    breakout_data.ball_in_play = false;
    sprite_release(&breakout_sprites_vector, sprite);
  }
}
Example #4
0
void scorekeeper()
{
	char cbuf[500];
	char cbuf2[40];
	sprite_t *s;
	int i;
	update_teams_score(nbTeams,nbPlayers);

	int endOfGame=0;
	int maxscore = 0;
	/** une équipe atteint le score max**/
	for (i = 0; i < nbTeams; i++){
		if (teams[i].points>=max_points)
			endOfGame=1;
		if (teams[i].points>maxscore)
			maxscore=teams[i].points;
	}
	/** le temps est écoulé **/
	if (sprite_global.game_clock>timeToStop)
		endOfGame=1;

	if(endOfGame){
		sprintf(cbuf,"Les gagnants sont :\n");
		for (i = 0; i < nbTeams; i++){
			if(teams[i].points==maxscore){
				/*<string-array name="colors">
			        <item>vert Clair</item>
			        <item>Rouge</item>
			        <item>Bleu</item>
			        <item>Jaune</item>
			        <item>Turquoise</item>
			        <item>Violet</item>
			        <item>Orange</item>
			        <item>Gris</item>
			        <item>Vert Foncé</item>
			        <item>Bleu Foncé</item>
			    </string-array>*/

				switch (i){
				case 0:
					sprintf(cbuf2,"     Les Verts Clairs \n");
					break;
				case 1:
					sprintf(cbuf2,"     Les Rouges \n");
					break;
				case 2:
					sprintf(cbuf2,"     Les Bleus \n");
					break;
				case 3:
					sprintf(cbuf2,"     Les Jaunes \n");
					break;
				case 4:
					sprintf(cbuf2,"     Les Turquoises \n");
					break;
				case 5:
					sprintf(cbuf2,"     Les Violets \n");
					break;
				case 6:
					sprintf(cbuf2,"     Les Oranges \n");
					break;
				case 7:
					sprintf(cbuf2,"     Les Gris \n");
					break;
				case 8:
					sprintf(cbuf2,"     Les Verts Foncés \n");
					break;
				case 9:
					sprintf(cbuf2,"     Les Bleus Foncés \n");
					break;
				default:
					break;
				}

				//sprintf(cbuf2,"     Team %d\n",i);
				strcat(cbuf,cbuf2);
			}
		}
		sprintf(cbuf2,"\n\n %d points\n",maxscore);
		strcat(cbuf,cbuf2);
		message_time(cbuf,10);
		message_time("Starting in 3",1);
		message_time("Starting in 2",1);
		message_time("Starting in 1",1);
		message_time("GO !",1);

		init_spawn_delays();
		int j;
		for (j = 0; j< nbTeams; j++){
			teams[j].points=0;
		}

		for (j = 0; j < playerCount; j++){
			players[j].points=0;
			sprite_kill(players[j].sprite);
		}
		timeToStop=sprite_global.game_clock+1000*cfgnum("game.max_duration",60);
		return;

	}



	for (i = 0; i < playerCount; i++)
	{
		if (!sprite_isvalid(&(players[i].controller->target)))
		{
			if (!players[i].spawnTimer){
				sprite_release(&(players[i].sprite));
				sprite_timer_set(&(players[i].spawnTimer),players[i].timeBeforeRespawn);
				printf("timer set player %d %d\n", i ,players[i].timeBeforeRespawn );

			}else{
				if (sprite_timer_finished(players[i].spawnTimer)){
					s = sprite_create(players[i].sprite_type,&players[i]);
					sprite_aquire(s, &(players[i].sprite));
					sprite_aquire(players[i].sprite, &(players[i].controller->target));
					assert(sprite_isvalid(&(players[i].controller->target)));
					s = players[i].sprite;
					sprite_group_insert(mech_group, s);
					sprite_set_pos(s, players[i].startpos[0], players[i].startpos[1]);

					players[i].spawnTimer=NULL;
				}
			}
		}
	}
}