int lsprite_set_pos(lua_State* L) { struct sprite* self = lua_touserdata(L, 1); lua_Number x = luaL_checknumber(L, 2); lua_Number y = luaL_checknumber(L, 3); sprite_set_pos(self, x, y); return 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); }
static void crashing_trigger(sprite_t *s) { sprite_t *p; float v[2] = {0,-20}; p = sprite_create(&blacksmoke,NULL); sprite_set_pos(p,s->x,s->y); sprite_set_vel(p,v); sprite_group_insert(effects_group,p); create_effect(&fire,s->x,s->y); }
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); }
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; } } } } }
void objects_setup(void) { int i, x, y; sprite_t *sp; float v[2]; srand(23); sprite_t *s; for (i=0;i<nbTeams;i++){ s = sprite_create(&teamicon,&teams[i]); sprite_set_pos(s,75+100*(i), sprite_global.display->h - 75); sprite_group_insert(ui_group, s); } for (i=0;i<nbTeams;i++){ int x = 190+300*(i%5); int y = 80; if (i>4) y+=400; s = sprite_create(&teamicon,&teams[i]); sprite_set_pos(s,x, y); sprite_group_insert(ui_group_connect, s); } /*sp = sprite_create(&bonusmachine); sprite_group_insert(mech_group,sp); sprite_set_pos(sp,level.xmax/2,15);*/ /*for (i=0;i<3;i++) { sp = sprite_create(&bird); sprite_group_insert(mech_group,sp); }*/ /*for (i=0;i<5;i++) { sp = sprite_create(&bouncer); sprite_group_insert(mech_group,sp); sprite_set_pos(sp,rand() % 700 + 50,rand() % 200 + 100); }*/ /*sp = sprite_create(&cloud); sprite_group_insert(foreground_group,sp); sprite_set_pos(sp,400,70); v[0] = 15; v[1] = 0; sprite_set_vel(sp,v);*/ /*sp = sprite_create(&cloud); sprite_group_insert(foreground_group,sp); sprite_set_pos(sp,0,150); v[0] = 10; v[1] = 0; sprite_set_vel(sp,v);*/ /*sp = sprite_create(&zeppelin); sprite_group_insert(mech_group,sp); sprite_set_pos(sp,50,200);*/ /*sp = sprite_create(&airballoon); sprite_group_insert(mech_group,sp); sprite_set_pos(sp,100,150); v[0] = 5; v[1] = 3; sprite_set_vel(sp,v);*/ /*sp = sprite_create(&cannon); sprite_group_insert(mech_group,sp); sprite_set_pos(sp,380,518);*/ }
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(¶chute,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; } }