Mercurial > hg > Members > koba > t_dandy
annotate Character.c @ 56:a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 29 Jan 2011 02:46:41 +0900 |
parents | b31bed246abd |
children | 978097c6427a |
rev | line source |
---|---|
0 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include "syokika.h" | |
4 #include "bool.h" | |
5 #include <SDL.h> | |
6 #include "SDL_opengl.h" | |
7 #include "object.h" | |
8 #include "Character.h" | |
9 #include "Character_state.h" | |
10 #include "count2.h" | |
11 #include "tokuten.h" | |
12 #include "schedule.h" | |
13 #include "sankaku.h" | |
14 #include "sgoex.h" | |
15 #include "collision.h" | |
16 #include "debug.h" | |
17 #include "error.h" | |
51 | 18 #include "debug_db.h" |
19 | 19 #include "Func.h" |
52 | 20 #include "StateList.h" |
0 | 21 |
22 #define CHARACTER_MAX_POOL_SIZE 2048 | |
23 | |
24 CHARACTER *active_chara_list; | |
25 CHARACTER *free_chara_list; | |
26 | |
51 | 27 extern DebugDB dtable[DEFOBJ]; |
0 | 28 |
29 const table enemystate[] = ENEMY_STATUS_TABLE; | |
30 int filpcount = 0; | |
31 int stage = 0; | |
32 BOOL tf = FALSE; | |
33 static int pool_size; | |
34 | |
35 int init_chara_list(int num) | |
36 { | |
37 if(active_chara_list == NULL) | |
38 { | |
39 return extend_chara_list_pool(num); | |
40 } | |
41 return 1; | |
42 } | |
43 | |
44 int | |
45 extend_chara_list_pool(int num) | |
46 { | |
47 | |
48 pool_size = num; | |
49 __debug("task init start"); | |
50 | |
51 int i; | |
52 CHARACTER *q[num]; | |
53 | |
54 for(i = 0; i<num ; i++) | |
55 { | |
56 q[i] = (CHARACTER*)malloc(sizeof(CHARACTER)); | |
57 q[i]->f = FALSE; | |
58 q[i]->state = noaction; | |
33 | 59 q[i]->dt1 = 0; |
60 q[i]->dt2 = 0; | |
19 | 61 q[i]->task = 0; |
0 | 62 q[i]->collision = noaction; |
63 } | |
64 | |
65 for(i = 0; i<num-1 ; i++) | |
66 { | |
67 q[i]->next = q[i+1]; | |
68 //q[i]->next->prev = q[i]; | |
69 } | |
70 | |
71 q[num-1]->next = NULL; | |
72 active_chara_list = (CHARACTER*)malloc(sizeof(CHARACTER)); | |
73 active_chara_list->f = FALSE; | |
74 active_chara_list->state = noaction; | |
75 active_chara_list->collision = noaction; | |
76 active_chara_list->next = q[0]; | |
77 //q[0]->prev = active_chara_list; | |
78 //active_chara_list->prev = q[num-1]; | |
79 //q[num-1]->next = active_chara_list; | |
80 CHARACTER *p; | |
81 | |
82 for(p = active_chara_list->next; p != NULL ; p = p->next) | |
83 { | |
84 if(p != NULL) | |
85 { | |
86 __debug("list_test"); | |
87 } | |
88 } | |
89 return 1; | |
90 } | |
91 | |
92 void TFon() | |
93 { | |
94 tf = TRUE; | |
95 } | |
96 | |
97 void TFoff() | |
98 { | |
99 tf = FALSE; | |
100 } | |
101 | |
102 | |
19 | 103 void |
0 | 104 Putenemy(int charano, float x, float y, float vx, float vy, |
105 CHARACTER * (*action)(CHARACTER *chara)) | |
106 { | |
51 | 107 CHARACTER *q; |
44 | 108 |
51 | 109 for(q = active_chara_list->next; q != NULL ;q = q->next) |
110 { | |
111 if(q->f == FALSE) | |
112 { | |
113 break; | |
114 } | |
115 } | |
56
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
116 |
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
117 int number = enemystate[charano].charano; |
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
118 q->chara_id = dtable[number].count; |
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
119 dtable[number].count++; |
0 | 120 |
51 | 121 q->state = action; |
122 q->collision = atari; | |
123 q->x = x; | |
124 q->y = y; | |
125 q->vx = vx; | |
126 q->vy = vy; | |
127 q->tama = tf; | |
128 q->vit = enemystate[charano].p; | |
129 q->score = enemystate[charano].sc; | |
56
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
130 q->charano = number; |
51 | 131 q->s = 0; |
132 q->f = TRUE; | |
133 | |
52 | 134 |
51 | 135 if (q->tama == FALSE) { |
53 | 136 printf("F%d: CREATE [NAME]%s_%d [COORD]x= %f y= %f vx= %f vy= %f\n", |
56
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
137 filpcount, dtable[number].name, q->chara_id, |
52 | 138 q->x, q->y, q->vx, q->vy); |
51 | 139 } |
52 | 140 |
0 | 141 } |
142 | |
143 void state_update() | |
144 { | |
145 CHARACTER *p; | |
146 for(p = active_chara_list->next; p!= NULL ;p = p->next) | |
147 { | |
148 p=(*p->state)(p); | |
149 } | |
150 } | |
151 | |
152 void collision_detect() | |
153 { | |
154 CHARACTER *p; | |
155 for(p = active_chara_list->next; p!=NULL;p = p->next) | |
156 { | |
34 | 157 if((p->state != chara_state8) && (p->state != chara_state9)) { |
0 | 158 p=(*p->collision)(p); |
34 | 159 } |
0 | 160 } |
161 } | |
162 | |
163 void obj_draw() | |
164 { | |
165 CHARACTER *p; | |
166 for(p = active_chara_list->next; p!=NULL;p = p->next) | |
167 { | |
168 if(p->f == TRUE) | |
169 { | |
170 PutSprite(1, p->x, p->y, p->charano); | |
171 } | |
172 } | |
173 } | |
174 | |
175 void outofwindow() | |
176 { | |
177 CHARACTER *p; | |
178 for(p = active_chara_list->next; p!=NULL; p = p->next) | |
179 { | |
34 | 180 if((p->state != chara_state8) && (p->state != chara_state9)) |
181 { | |
0 | 182 if ((p->y > 964 + 32) |
183 || (p->x > 1688 + 50) | |
184 || (p->y < 0 - 128) | |
185 || (p->x < 0 - 200)) | |
186 { | |
187 p->f = FALSE; | |
44 | 188 p->tama = TRUE; |
0 | 189 p->state = delete_chara; |
190 p->collision = noaction; | |
191 } | |
34 | 192 } |
0 | 193 } |
194 } |