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