Esempio n. 1
0
static void collide_world(sprite_t *this_sprite, int x, int y)
{
  sprite_t *s;

  s = sprite_create(&explosion,NULL);
  sprite_set_pos(s,x,y);
  sprite_group_insert(effects_group,s);
  sprite_kill(this_sprite);
}
Esempio n. 2
0
static enum msgret message(void *obj, msg_t msg)
{
  sprite_t *s = obj;
  switch (msg.type)
    {
    case MSG_UPDATE:
      if (s->pos.x + 2*CLOUD_OFFSET < 0 ||
	  s->pos.x - 2*CLOUD_OFFSET > current_level->width) 
	/* sprite is off screen, remove it */
	sprite_kill(s);      
      break;
    default:
      return MSG_RET_UNKNOWN;
      break;
    }
  return MSG_RET_ACK;
}
Esempio n. 3
0
static void collide(sprite_t *this_sprite,
		    sprite_t *other_sprite,
		    int x, int y)
{
  sprite_t *s;
  float n[2];

  if (other_sprite->type == &missile)
    return;
  s = sprite_create(&dsmoke,NULL);
  sprite_set_pos(s,x,y);
  sprite_get_vel(this_sprite, n);
  s->anim_p = ((vangle(n) + 128) & 255)/8 ;
  sprite_get_vel(other_sprite,n);
  sprite_set_vel(s,n);
  sprite_group_insert(effects_group,s);
  sprite_kill(this_sprite);
}
Esempio n. 4
0
static enum msgret message(void *obj, msg_t msg)
{
	sprite_t *s = obj;

	switch(msg.type) {
	case MSG_UPDATE:
		update(s);
		break;
	case MSG_DEACTIVATE:
		s->flags |= SPRITE_PAUSED;
		s->state = DRACO_GLIDE;
		break;
	case MSG_KILL:
		create_effect(&explosion,s->pos);
		sprite_kill(s);
		break;
	default:
		return MSG_RET_UNKNOWN;
		break;
	}
	return MSG_RET_ACK;
}
Esempio n. 5
0
static void sigget(sprite_t *s, int signal, void *data)
{
  float v[2] = {0,0};
  sprite_t *p;
  float r[2];
  int sigabs;

  switch(signal)
    {
    case SIGNAL_CANCONTROL:
      *(int *)data = !(s->state & SPRITE_CRASHING);
      break;
    case SIGNAL_DAMAGE:
      ((mech_sprite_t *)s)->damage += *(int *)data;
      break;
    case SIGNAL_UP:
      s->state |= SPRITE_UP;
      s->state &= ~SPRITE_DOWN;
      break;
    case -SIGNAL_UP:
      s->state &= ~SPRITE_UP;
      break;
    case SIGNAL_DOWN:
      s->state |= SPRITE_DOWN;
      s->state &= ~SPRITE_UP;
      break;
    case -SIGNAL_DOWN:
      s->state &= ~SPRITE_DOWN;
      break;
    case SIGNAL_KILL:
      create_effect(&explosion,s->x,s->y);
      sprite_kill(s);
      break;
    default:
      break;
    }
}
Esempio n. 6
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;
				}
			}
		}
	}
}
Esempio n. 7
0
static void sigget(sprite_t *s, int signal, void *data)
{
	float v[2] = {0,0};
	sprite_t *p;
	float r[2];
	int sigabs;

	switch(signal)
	{
	case SIGNAL_CANCONTROL:
		*(int *)data = !(s->state & PLANE_CRASHING);
		break;
	case SIGNAL_DAMAGE:
		((mech_sprite_t *)s)->damage += *(int *)data;
		((player_t*)s->owner)->damage=(100*((mech_sprite_t *)s)->damage)/hitpoints;
		break;
	case SIGNAL_LAST_ENNEMI:
		((player_t*)s->owner)->lastEnnemi=(player_t*)data;
		break;
	case SIGNAL_ACCELERATE:
		s->state |= PLANE_ACCELERATING;
		break;
	case -SIGNAL_ACCELERATE:
		s->state &= ~PLANE_ACCELERATING;
		break;
	case SIGNAL_UP:
		s->state |= PLANE_UP;
		s->state &= ~PLANE_DOWN;
		break;
	case -SIGNAL_UP:
		s->state &= ~PLANE_UP;
		break;
	case SIGNAL_DOWN:
		s->state |= PLANE_DOWN;
		s->state &= ~PLANE_UP;
		break;
	case -SIGNAL_DOWN:
		s->state &= ~PLANE_DOWN;
		break;
	case SIGNAL_FIRE: /* create bullet */
		if (sprite_timer_finished(((struct biplane*)s)->gun_timer) &&
				!(s->state & PLANE_CRASHING))
		{
			sound_effect(&sound_gunfire,s->x,s->y);
			p = sprite_create(((struct biplane*)s)->bullet_type,s->owner);
			//p->owner=s->owner;
			sprite_group_insert(bullet_group,p);
			r[0] = mech_heading((mech_sprite_t *)s)[0];
			r[1] = mech_heading((mech_sprite_t *)s)[1];
			vmul(r,21); /* Find start of bullet in clumsy way */
			vrot(r,-9);
			sprite_set_pos(p,s->x + r[0],s->y + r[1]);
			sprite_get_vel(s,v);
			vmadd(v,200,mech_heading((mech_sprite_t *)s));
			sprite_set_vel(p,v);
			/* cannot fire again in some time */
			sprite_timer_set(&(((struct biplane*)s)->gun_timer),bullet_delay);
		}
		break;
	case SIGNAL_NUM0: /* create bomb */
		if (sprite_timer_finished(((struct biplane*)s)->bomb_timer) &&
				(!(s->state & PLANE_CRASHING)) &&
				(((struct biplane*)s)->nr_bombs > 0))
		{
			((struct biplane*)s)->nr_bombs--;
			p = sprite_create(&bomb,s->owner);
			p->anim_p = s->anim_p;
			((mech_sprite_t *)p)->angle = ((mech_sprite_t *)s)->angle;
			r[0] = mech_heading((mech_sprite_t *)s)[0];
			r[1] = mech_heading((mech_sprite_t *)s)[1];
			vmul(r,14);
			vrot(r,-80);
			sprite_set_pos(p,s->x + r[0],s->y + r[1]);
			sprite_get_vel(s,v);
			vmadd(v,5,r);
			sprite_set_vel(p,v);
			sprite_group_insert(bomb_group,p);
			sprite_timer_set(&(((struct biplane*)s)->bomb_timer),
					bomb_delay);
		}
		break;
	case SIGNAL_NUM1: /* jump ship */
		if (sprite_timer_finished(((struct biplane*)s)->bomb_timer) &&
				(!(s->state & PLANE_CRASHING)))
		{
			p = sprite_create(&parachute,NULL);
			r[0] = mech_heading((mech_sprite_t *)s)[0];
			r[1] = mech_heading((mech_sprite_t *)s)[1];
			vmul(r,14);
			vrot(r,80);
			sprite_set_pos(p,s->x + r[0],s->y + r[1]);
			sprite_get_vel(s,v);
			vmadd(v,5,r);
			sprite_set_vel(p,v);
			sprite_group_insert(mech_group,p);
			sprite_timer_set(&(((struct biplane*)s)->bomb_timer),bomb_delay);
		}
		break;
	case SIGNAL_KILL:
		create_effect(&explosion,s->x,s->y);
		sprite_kill(s);
		break;
	case SIGNAL_ISHARMLESS:
		if (s->state & PLANE_CRASHING)
			((struct signal_reply *)data)->reply = 1;
		break;
	case SIGNAL_STATSTRING://TTODO : useless ?
		sprintf(data,"%i bombs",((struct biplane*)s)->nr_bombs);
		break;
	default:
		break;
	}
}
Esempio n. 8
0
static void frame_trigger(sprite_t *s)
{
  sprite_kill(s);
}