root/movingobjectmanager.c
/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- initmom
- addmo
- removemo
- putmo
- 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 }