Added some comments.
[chise/kage.git] / engine / kagedf.js
1 function dfDrawFont(kage, polygons, a1, a2, a3, x1, y1, x2, y2, x3, y3, x4, y4){\r
2   var tx1, tx2, tx3, tx4, ty1, ty2, ty3, ty4, v;\r
3   var rad;\r
4   \r
5   if(kage.kShotai == kage.kMincho){\r
6     switch(a1 % 100){ // ... no need to divide\r
7     case 0:\r
8       break;\r
9     case 1:\r
10       if(a3 == 4){\r
11         if(x1 == x2){\r
12           if(y1 < y2){ v = 1; } else{ v = -1; }\r
13           tx1 = x2;\r
14           ty1 = y2 - kage.kMage * v;\r
15         }\r
16         else if(y1 == y2){ // ... no need\r
17           if(x1 < x2){ v = 1; } else{ v = -1; }\r
18           tx1 = x2 - kage.kMage * v;\r
19           ty1 = y2;\r
20         }\r
21         else{\r
22           rad = Math.atan((y2 - y1) / (x2 - x1));\r
23           if(x1 < x2){ v = 1; } else{v = -1; }\r
24           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
25           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
26         }\r
27         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
28         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, x2 - kage.kMage, y2, 1, 14);\r
29       }\r
30       else{\r
31         cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, a3);\r
32       }\r
33       break;\r
34     case 2:\r
35     //case 12: // ... no need\r
36       if(a3 == 4){\r
37         if(x2 == x3){\r
38           tx1 = x3;\r
39           ty1 = y3 - kage.kMage;\r
40         }\r
41         else if(y2 == y3){\r
42           tx1 = x3 - kage.kMage;\r
43           ty1 = y3;\r
44         }\r
45         else{\r
46           rad = Math.atan((y3 - y2) / (x3 - x2));\r
47           if(x2 < x3){ v = 1; } else{ v = -1; }\r
48           tx1 = x3 - kage.kMage * Math.cos(rad) * v;\r
49           ty1 = y3 - kage.kMage * Math.sin(rad) * v;\r
50         }\r
51         cdDrawCurve(kage, polygons, x1, y1, x2, y2, tx1, ty1, a2, 1);\r
52         cdDrawCurve(kage, polygons, tx1, ty1, x3, y3, x3 - kage.kMage, y3, 1, 14);\r
53       }\r
54       else if(a3 == 5){\r
55         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, 15);\r
56       }\r
57       else{\r
58         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, a3);\r
59       }\r
60       break;\r
61     case 3:\r
62       if(a3 == 5){\r
63         if(x1 == x2){\r
64           if(y1 < y2){ v = 1; } else{ v = -1; }\r
65           tx1 = x2;\r
66           ty1 = y2 - kage.kMage * v;\r
67         }\r
68         else if(y1 == y2){\r
69           if(x1 < x2){ v = 1; } else{ v = -1; }\r
70           tx1 = x2 - kage.kMage * v;\r
71           ty1 = y2;\r
72         }\r
73         else{\r
74           rad = Math.atan((y2 - y1) / (x2 - x1));\r
75           if(x1 < x2){ v = 1; } else{ v = -1; }\r
76           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
77           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
78         }\r
79         if(x2 == x3){\r
80           if(y2 < y3){ v = 1; } else{ v = -1; }\r
81           tx2 = x2;\r
82           ty2 = y2 + kage.kMage * v;\r
83         }\r
84         else if(y2 == y3){\r
85           if(x2 < x3){ v = 1; } else { v = -1; }\r
86           tx2 = x2 + kage.kMage * v;\r
87           ty2 = y2;\r
88         }\r
89         else{\r
90           rad = Math.atan((y3 - y2) / (x3 - x2));\r
91           if(x2 < x3){ v = 1; } else{ v = -1; }\r
92           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
93           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
94         }\r
95         tx3 = x3 - kage.kMage;\r
96         ty3 = y3;\r
97         tx4 = x3 + kage.kMage * 0.5; // ... not used\r
98         ty4 = y3 - kage.kMage * 2; // ... not used\r
99         \r
100         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
101         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
102         cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 6, 5); // bolder by force\r
103       }\r
104       else{\r
105         if(x1 == x2){\r
106           if(y1 < y2){ v = 1; } else { v = -1; }\r
107           tx1 = x2;\r
108           ty1 = y2 - kage.kMage * v;\r
109         }\r
110         else if(y1 == y2){\r
111           if(x1 < x2){ v = 1; } else{ v = -1; }\r
112           tx1 = x2 - kage.kMage * v;\r
113           ty1 = y2;\r
114         }\r
115         else{\r
116           rad = Math.atan((y2 - y1) / (x2 - x1));\r
117           if(x1 < x2){ v = 1; } else{ v = -1; }\r
118           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
119           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
120         }\r
121         if(x2 == x3){\r
122           if(y2 < y3){ v = 1; } else{ v = -1; }\r
123           tx2 = x2;\r
124           ty2 = y2 + kage.kMage * v;\r
125         }\r
126         else if(y2 == y3){\r
127           if(x2 < x3){ v = 1; } else{ v = -1; }\r
128           tx2 = x2 + kage.kMage * v;\r
129           ty2 = y2;\r
130         }\r
131         else{\r
132           rad = Math.atan((y3 - y2) / (x3 - x2));\r
133           if(x2 < x3){ v = 1; } else{ v = -1; }\r
134           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
135           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
136         }\r
137         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
138         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
139         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 6, a3); // bolder by force\r
140       }\r
141       break;\r
142     case 12:\r
143       cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, 1);\r
144       cdDrawLine(kage, polygons, x3, y3, x4, y4, 6, a3);\r
145       break;\r
146     case 13:\r
147 rate = 6;\r
148       if(a3 == 5){\r
149         if(x1 == x2){\r
150           if(y1 < y2){ v = 1; } else{ v = -1; }\r
151           tx1 = x2;\r
152           ty1 = y2 - kage.kMage * v * rate;\r
153         }\r
154         else if(y1 == y2){\r
155           if(x1 < x2){ v = 1; } else{ v = -1; }\r
156           tx1 = x2 - kage.kMage * v * rate;\r
157           ty1 = y2;\r
158         }\r
159         else{\r
160           rad = Math.atan((y2 - y1) / (x2 - x1));\r
161           if(x1 < x2){ v = 1; } else{ v = -1; }\r
162           tx1 = x2 - kage.kMage * Math.cos(rad) * v * rate;\r
163           ty1 = y2 - kage.kMage * Math.sin(rad) * v * rate;\r
164         }\r
165         if(x2 == x3){\r
166           if(y2 < y3){ v = 1; } else{ v = -1; }\r
167           tx2 = x2;\r
168           ty2 = y2 + kage.kMage * v * rate;\r
169         }\r
170         else if(y2 == y3){\r
171           if(x2 < x3){ v = 1; } else { v = -1; }\r
172           tx2 = x2 + kage.kMage * v * rate;\r
173           ty2 = y2;\r
174         }\r
175         else{\r
176           rad = Math.atan((y3 - y2) / (x3 - x2));\r
177           if(x2 < x3){ v = 1; } else{ v = -1; }\r
178           tx2 = x2 + kage.kMage * Math.cos(rad) * v * rate;\r
179           ty2 = y2 + kage.kMage * Math.sin(rad) * v * rate;\r
180         }\r
181         tx3 = x3 - kage.kMage;\r
182         ty3 = y3;\r
183         tx4 = x3 + kage.kMage * 0.5; // ... not used\r
184         ty4 = y3 - kage.kMage * 2; // ... not used\r
185         \r
186         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
187         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
188         cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 6, 5); // bolder by force\r
189       }\r
190       else{\r
191         if(x1 == x2){\r
192           if(y1 < y2){ v = 1; } else { v = -1; }\r
193           tx1 = x2;\r
194           ty1 = y2 - kage.kMage * v * rate;\r
195         }\r
196         else if(y1 == y2){\r
197           if(x1 < x2){ v = 1; } else{ v = -1; }\r
198           tx1 = x2 - kage.kMage * v * rate;\r
199           ty1 = y2;\r
200         }\r
201         else{\r
202           rad = Math.atan((y2 - y1) / (x2 - x1));\r
203           if(x1 < x2){ v = 1; } else{ v = -1; }\r
204           tx1 = x2 - kage.kMage * Math.cos(rad) * v * rate;\r
205           ty1 = y2 - kage.kMage * Math.sin(rad) * v * rate;\r
206         }\r
207         if(x2 == x3){\r
208           if(y2 < y3){ v = 1; } else{ v = -1; }\r
209           tx2 = x2;\r
210           ty2 = y2 + kage.kMage * v * rate;\r
211         }\r
212         else if(y2 == y3){\r
213           if(x2 < x3){ v = 1; } else{ v = -1; }\r
214           tx2 = x2 + kage.kMage * v * rate;\r
215           ty2 = y2;\r
216         }\r
217         else{\r
218           rad = Math.atan((y3 - y2) / (x3 - x2));\r
219           if(x2 < x3){ v = 1; } else{ v = -1; }\r
220           tx2 = x2 + kage.kMage * Math.cos(rad) * v * rate;\r
221           ty2 = y2 + kage.kMage * Math.sin(rad) * v * rate;\r
222         }\r
223         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
224         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
225         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 6, a3); // bolder by force\r
226       }\r
227       break;\r
228     case 6:\r
229       if(a3 == 5){\r
230         /* only implimented for gothic\r
231                                 tx1 = x4 - kage.kMage;\r
232                                 ty1 = y4;\r
233                                 tx2 = x4 + kage.kMage * 0.5;\r
234                                 ty2 = y4 - kage.kMage * 2;\r
235                                 */\r
236         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, 15);\r
237         /*\r
238                                 if(a2 == 7 || a3 == 7){\r
239                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
240                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, 15);\r
241                                 }\r
242                                 else{\r
243                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
244                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, 15);\r
245                                 }\r
246          */\r
247       }\r
248       else{\r
249         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
250         /*\r
251                                 if(a2 == 7 || a3 == 7){\r
252                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
253                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, a3);\r
254                                 }\r
255                                 else{\r
256                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
257                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
258                                 }\r
259          */\r
260       }\r
261       break;\r
262     case 7:\r
263       cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, 1);\r
264       cdDrawCurve(kage, polygons, x2, y2, x3, y3, x4, y4, 1, a3);\r
265       break;\r
266     case 9: // may not be exist ... no need\r
267       //kageCanvas[y1][x1] = 0;\r
268       //kageCanvas[y2][x2] = 0;\r
269       break;\r
270     default:\r
271       break;\r
272     }\r
273   }\r
274     \r
275   else{ // gothic\r
276     switch(a1 % 100){\r
277     case 0:\r
278       break;\r
279     case 1:\r
280       if(a3 == 4){\r
281         if(x1 == x2){\r
282           if(y1 < y2){ v = 1; } else{ v = -1; }\r
283           tx1 = x2;\r
284           ty1 = y2 - kage.kMage * v;\r
285         }\r
286         else if(y1 == y2){\r
287           if(x1 < x2){ v = 1; } else{ v = -1; }\r
288           tx1 = x2 - kage.kMage * v;\r
289           ty1 = y2;\r
290         }\r
291         else{\r
292           rad = Math.atan((y2 - y1) / (x2 - x1));\r
293           if(x1 < x2){ v = 1; } else{ v = -1; }\r
294           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
295           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
296         }\r
297         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
298         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, x2 - kage.kMage * 2, y2 - kage.kMage * 0.5, 1, 0);\r
299       }\r
300       else{\r
301         cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, a3);\r
302       }\r
303       break;\r
304     case 2:\r
305     case 12:\r
306       if(a3 == 4){\r
307         if(x2 == x3){\r
308           tx1 = x3;\r
309           ty1 = y3 - kage.kMage;\r
310         }\r
311         else if(y2 == y3){\r
312           tx1 = x3 - kage.kMage;\r
313           ty1 = y3;\r
314         }\r
315         else{\r
316           rad = Math.atan((y3 - y2) / (x3 - x2));\r
317           if(x2 < x3){ v = 1; } else{ v = -1; }\r
318           tx1 = x3 - kage.kMage * Math.cos(rad) * v;\r
319           ty1 = y3 - kage.kMage * Math.sin(rad) * v;\r
320         }\r
321         cdDrawCurve(kage, polygons, x1, y1, x2, y2, tx1, ty1, a2, 1);\r
322         cdDrawCurve(kage, polygons, tx1, ty1, x3, y3, x3 - kage.kMage * 2, y3 - kage.kMage * 0.5, 1, 0);\r
323       }\r
324       else if(a3 == 5){\r
325         tx1 = x3 + kage.kMage;\r
326         ty1 = y3;\r
327         tx2 = tx1 + kage.kMage * 0.5;\r
328         ty2 = y3 - kage.kMage * 2;\r
329         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, 1);\r
330         cdDrawCurve(kage, polygons, x3, y3, tx1, ty1, tx2, ty2, 1, 0);\r
331       }\r
332       else{\r
333         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, a3);\r
334       }\r
335       break;\r
336     case 3:\r
337       if(a3 == 5){\r
338         if(x1 == x2){\r
339           if(y1 < y2){ v = 1; } else{ v = -1; }\r
340           tx1 = x2;\r
341           ty1 = y2 - kage.kMage * v;\r
342         }\r
343         else if(y1 == y2){\r
344           if(x1 < x2){ v = 1; } else{ v = -1; }\r
345           tx1 = x2 - kage.kMage * v;\r
346           ty1 = y2;\r
347         }\r
348         else{\r
349           rad = Math.atan((y2 - y1) / (x2 - x1));\r
350           if(x1 < x2){ v = 1; } else{ v = -1; }\r
351           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
352           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
353         }\r
354         if(x2 == x3){\r
355           if(y2 < y3){ v = 1; } else{ v = -1; }\r
356           tx2 = x2;\r
357           ty2 = y2 + kage.kMage * v;\r
358         }\r
359         else if(y2 == y3){\r
360           if(x2 < x3){ v = 1; } else{ v = -1; }\r
361           tx2 = x2 + kage.kMage * v;\r
362           ty2 = y2;\r
363         }\r
364         else{\r
365           rad = Math.atan((y3 - y2) / (x3 - x2));\r
366           if(x2 < x3){ v = 1; } else{ v = -1; }\r
367           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
368           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
369         }\r
370         tx3 = x3 - kage.kMage;\r
371         ty3 = y3;\r
372         tx4 = x3 + kage.kMage * 0.5;\r
373         ty4 = y3 - kage.kMage * 2;\r
374         \r
375         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
376         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
377         cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 1, 1);\r
378         cdDrawCurve(kage, polygons, tx3, ty3, x3, y3, tx4, ty4, 1, 0);\r
379       }\r
380       else{\r
381         if(x1 == x2){\r
382           if(y1 < y2){ v = 1; } else{ v = -1; }\r
383           tx1 = x2;\r
384           ty1 = y2 - kage.kMage * v;\r
385         }\r
386         else if(y1 == y2){\r
387           if(x1 < x2){ v = 1; } else{ v = -1; }\r
388           tx1 = x2 - kage.kMage * v;\r
389           ty1 = y2;\r
390         }\r
391         else{\r
392           rad = Math.atan((y2 - y1) / (x2 - x1));\r
393           if(x1 < x2){ v = 1; } else{ v = -1; }\r
394           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
395           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
396         }\r
397         if(x2 == x3){\r
398           if(y2 < y3){ v = 1; } else{ v = -1; }\r
399           tx2 = x2;\r
400           ty2 = y2 + kage.kMage * v;\r
401         }\r
402         else if(y2 == y3){\r
403           if(x2 < x3){ v = 1; } else{ v = -1; }\r
404           tx2 = x2 + kage.kMage * v;\r
405           ty2 = y2;\r
406         }\r
407         else{\r
408           rad = Math.atan((y3 - y2) / (x3 - x2));\r
409           if(x2 < x3){ v = 1; } else{ v = -1; }\r
410           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
411           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
412         }\r
413         \r
414         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
415         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
416         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 1, a3);\r
417       }\r
418       break;\r
419     case 6:\r
420       if(a3 == 5){\r
421         tx1 = x4 - kage.kMage;\r
422         ty1 = y4;\r
423         tx2 = x4 + kage.kMage * 0.5;\r
424         ty2 = y4 - kage.kMage * 2;\r
425         /*\r
426                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
427                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, tx1, ty1, 1, 1);\r
428          */\r
429         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, tx1, ty1, a2, 1);\r
430         cdDrawCurve(kage, polygons, tx1, ty1, x4, y4, tx2, ty2, 1, 0);\r
431       }\r
432       else{\r
433         /*\r
434                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
435                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
436          */\r
437         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
438       }\r
439       break;\r
440     case 7:\r
441       cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, 1);\r
442       cdDrawCurve(kage, polygons, x2, y2, x3, y3, x4, y4, 1, a3);\r
443       break;\r
444     case 9: // may not be exist\r
445       //kageCanvas[y1][x1] = 0;\r
446       //kageCanvas[y2][x2] = 0;\r
447       break;\r
448     default:\r
449       break;\r
450     }\r
451   }\r
452 }\r