Mercurial > hg > Members > koba > t_dandy
annotate Character.c @ 58:e0018f39f7e1
fix random func.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Feb 2011 17:49:33 +0900 |
parents | 978097c6427a |
children | cd05eee90279 |
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; | |
57 | 61 q[i]->state_task = 0; |
62 q[i]->collision_task = false; | |
0 | 63 q[i]->collision = noaction; |
64 } | |
65 | |
66 for(i = 0; i<num-1 ; i++) | |
67 { | |
68 q[i]->next = q[i+1]; | |
69 //q[i]->next->prev = q[i]; | |
70 } | |
71 | |
72 q[num-1]->next = NULL; | |
73 active_chara_list = (CHARACTER*)malloc(sizeof(CHARACTER)); | |
74 active_chara_list->f = FALSE; | |
75 active_chara_list->state = noaction; | |
76 active_chara_list->collision = noaction; | |
77 active_chara_list->next = q[0]; | |
78 //q[0]->prev = active_chara_list; | |
79 //active_chara_list->prev = q[num-1]; | |
80 //q[num-1]->next = active_chara_list; | |
81 CHARACTER *p; | |
82 | |
83 for(p = active_chara_list->next; p != NULL ; p = p->next) | |
84 { | |
85 if(p != NULL) | |
86 { | |
87 __debug("list_test"); | |
88 } | |
89 } | |
90 return 1; | |
91 } | |
92 | |
93 void TFon() | |
94 { | |
95 tf = TRUE; | |
96 } | |
97 | |
98 void TFoff() | |
99 { | |
100 tf = FALSE; | |
101 } | |
102 | |
103 | |
19 | 104 void |
0 | 105 Putenemy(int charano, float x, float y, float vx, float vy, |
106 CHARACTER * (*action)(CHARACTER *chara)) | |
107 { | |
51 | 108 CHARACTER *q; |
58 | 109 |
110 for(q = active_chara_list->next; q->next != NULL ;q = q->next) | |
51 | 111 { |
112 if(q->f == FALSE) | |
113 { | |
114 break; | |
115 } | |
116 } | |
56
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
117 |
a80422eb44a9
bug fix.TODO:print delete message on videoNONE mode.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
53
diff
changeset
|
118 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
|
119 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
|
120 dtable[number].count++; |
0 | 121 |
51 | 122 q->state = action; |
123 q->collision = atari; | |
124 q->x = x; | |
125 q->y = y; | |
126 q->vx = vx; | |
127 q->vy = vy; | |
128 q->tama = tf; | |
129 q->vit = enemystate[charano].p; | |
130 q->score = enemystate[charano].sc; | |
57 | 131 q->state_task = 0; |
132 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
|
133 q->charano = number; |
51 | 134 q->s = 0; |
135 q->f = TRUE; | |
136 | |
52 | 137 |
51 | 138 if (q->tama == FALSE) { |
53 | 139 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
|
140 filpcount, dtable[number].name, q->chara_id, |
52 | 141 q->x, q->y, q->vx, q->vy); |
51 | 142 } |
52 | 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 } |