root/movingobjectmanager.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. initmom
  2. addmo
  3. removemo
  4. putmo
  5. onestepmo

   1 /* movingobjectmanager.c */
   2 #include<movingobjectmanager.h>
   3 #include<screen.h>
   4 #include<bidlist.h>
   5 #include<stdlib.h>
   6 #ifdef DEBUG
   7 #include<log.h>
   8 #endif
   9 
  10 #define MAXOBJCNT 250
  11 
  12 static bidlist* objlist;
  13 static bidnode* nodes[MAXOBJCNT];
  14 static int count=0;
  15 
  16 void initmom(void){
  17   objlist = newbidlist();
  18 }
  19 
  20 void addmo(movingobject* mobj, vector2 pos, vector2 vel){
  21   movingobject* tmp;
  22   if(count<MAXOBJCNT){
  23     tmp = (movingobject*)malloc(sizeof(movingobject));
  24     *tmp = *mobj;
  25     tmp->pos = pos;
  26     tmp->vel = vel;
  27     bidlistadd(objlist,tmp);
  28     count++;
  29   }
  30 } 
  31 
  32 /* call just after putmo */
  33 void removemo(int num){
  34   count--;
  35   deletemovingobject(nodes[num]->data);
  36   bidlistremove(objlist,nodes[num]);
  37 }
  38 
  39 /* put objects on dispbuffer and checkbuffer */
  40 void putmo(void){ 
  41   movingobject* mobj;
  42   bidnode* node;
  43   int num=0;
  44   int id;
  45   bidlistreset(objlist);
  46   while((node = bidlistnext(objlist))){
  47     nodes[num] = node;
  48     mobj =(movingobject*)(node->data);
  49     mobj->id = num;
  50     id = checkcollision(mobj->pos, mobj->currentobj);
  51     if(id == BORDER){
  52       removemo(num);
  53     }else if(id<MAXOBJCNT){
  54       if(mobj->bomb(mobj)){
  55         removemo(num);
  56       }
  57       if(((movingobject*)(nodes[id]->data))
  58          ->bomb((movingobject*)(nodes[id]->data))){
  59         removemo(id);
  60       }
  61     }else{
  62       putmovingobject(mobj);
  63       num++;
  64     }
  65   }
  66 }
  67 
  68 /* put objects on dispbuffer and checkbuffer */
  69 void onestepmo(void){
  70   movingobject* mobj;
  71   bidnode* node;
  72   int num=0;
  73   bidlistreset(objlist);
  74   while((node = bidlistnext(objlist))){
  75     mobj = (node->data);
  76     mobj->onestep(mobj);
  77   }
  78 }

/* [<][>][^][v][top][bottom][index][help] */