Initial revision
[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){\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){\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:\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;\r
98         ty4 = y3 - kage.kMage * 2;\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 6:\r
143       if(a3 == 5){\r
144         /* only implimented for gothic\r
145                                 tx1 = x4 - kage.kMage;\r
146                                 ty1 = y4;\r
147                                 tx2 = x4 + kage.kMage * 0.5;\r
148                                 ty2 = y4 - kage.kMage * 2;\r
149                                 */\r
150         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, 15);\r
151         /*\r
152                                 if(a2 == 7 || a3 == 7){\r
153                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
154                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, 15);\r
155                                 }\r
156                                 else{\r
157                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
158                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, 15);\r
159                                 }\r
160          */\r
161       }\r
162       else{\r
163         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
164         /*\r
165                                 if(a2 == 7 || a3 == 7){\r
166                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
167                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, a3);\r
168                                 }\r
169                                 else{\r
170                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
171                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
172                                 }\r
173          */\r
174       }\r
175       break;\r
176     case 7:\r
177       cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, 1);\r
178       cdDrawCurve(kage, polygons, x2, y2, x3, y3, x4, y4, 1, 7);\r
179       break;\r
180     case 9: // may not be exist\r
181       //kageCanvas[y1][x1] = 0;\r
182       //kageCanvas[y2][x2] = 0;\r
183       break;\r
184     default:\r
185       break;\r
186     }\r
187   }\r
188     \r
189   else{ // gothic\r
190     switch(a1 % 100){\r
191     case 0:\r
192       break;\r
193     case 1:\r
194       if(a3 == 4){\r
195         if(x1 == x2){\r
196           if(y1 < y2){ v = 1; } else{ v = -1; }\r
197           tx1 = x2;\r
198           ty1 = y2 - kage.kMage * v;\r
199         }\r
200         else if(y1 == y2){\r
201           if(x1 < x2){ v = 1; } else{ v = -1; }\r
202           tx1 = x2 - kage.kMage * v;\r
203           ty1 = y2;\r
204         }\r
205         else{\r
206           rad = Math.atan((y2 - y1) / (x2 - x1));\r
207           if(x1 < x2){ v = 1; } else{ v = -1; }\r
208           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
209           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
210         }\r
211         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
212         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, x2 - kage.kMage * 2, y2 - kage.kMage * 0.5, 1, 0);\r
213       }\r
214       else{\r
215         cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, a3);\r
216       }\r
217       break;\r
218     case 2:\r
219     case 12:\r
220       if(a3 == 4){\r
221         if(x2 == x3){\r
222           tx1 = x3;\r
223           ty1 = y3 - kage.kMage;\r
224         }\r
225         else if(y2 == y3){\r
226           tx1 = x3 - kage.kMage;\r
227           ty1 = y3;\r
228         }\r
229         else{\r
230           rad = Math.atan((y3 - y2) / (x3 - x2));\r
231           if(x2 < x3){ v = 1; } else{ v = -1; }\r
232           tx1 = x3 - kage.kMage * Math.cos(rad) * v;\r
233           ty1 = y3 - kage.kMage * Math.sin(rad) * v;\r
234         }\r
235         cdDrawCurve(kage, polygons, x1, y1, x2, y2, tx1, ty1, a2, 1);\r
236         cdDrawCurve(kage, polygons, tx1, ty1, x3, y3, x3 - kage.kMage * 2, y3 - kage.kMage * 0.5, 1, 0);\r
237       }\r
238       else if(a3 == 5){\r
239         tx1 = x3 + kage.kMage;\r
240         ty1 = y3;\r
241         tx2 = tx1 + kage.kMage * 0.5;\r
242         ty2 = y3 - kage.kMage * 2;\r
243         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, 1);\r
244         cdDrawCurve(kage, polygons, x3, y3, tx1, ty1, tx2, ty2, 1, 0);\r
245       }\r
246       else{\r
247         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, a3);\r
248       }\r
249       break;\r
250     case 3:\r
251       if(a3 == 5){\r
252         if(x1 == x2){\r
253           if(y1 < y2){ v = 1; } else{ v = -1; }\r
254           tx1 = x2;\r
255           ty1 = y2 - kage.kMage * v;\r
256         }\r
257         else if(y1 == y2){\r
258           if(x1 < x2){ v = 1; } else{ v = -1; }\r
259           tx1 = x2 - kage.kMage * v;\r
260           ty1 = y2;\r
261         }\r
262         else{\r
263           rad = Math.atan((y2 - y1) / (x2 - x1));\r
264           if(x1 < x2){ v = 1; } else{ v = -1; }\r
265           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
266           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
267         }\r
268         if(x2 == x3){\r
269           if(y2 < y3){ v = 1; } else{ v = -1; }\r
270           tx2 = x2;\r
271           ty2 = y2 + kage.kMage * v;\r
272         }\r
273         else if(y2 == y3){\r
274           if(x2 < x3){ v = 1; } else{ v = -1; }\r
275           tx2 = x2 + kage.kMage * v;\r
276           ty2 = y2;\r
277         }\r
278         else{\r
279           rad = Math.atan((y3 - y2) / (x3 - x2));\r
280           if(x2 < x3){ v = 1; } else{ v = -1; }\r
281           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
282           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
283         }\r
284         tx3 = x3 - kage.kMage;\r
285         ty3 = y3;\r
286         tx4 = x3 + kage.kMage * 0.5;\r
287         ty4 = y3 - kage.kMage * 2;\r
288         \r
289         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
290         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
291         cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 1, 1);\r
292         cdDrawCurve(kage, polygons, tx3, ty3, x3, y3, tx4, ty4, 1, 0);\r
293       }\r
294       else{\r
295         if(x1 == x2){\r
296           if(y1 < y2){ v = 1; } else{ v = -1; }\r
297           tx1 = x2;\r
298           ty1 = y2 - kage.kMage * v;\r
299         }\r
300         else if(y1 == y2){\r
301           if(x1 < x2){ v = 1; } else{ v = -1; }\r
302           tx1 = x2 - kage.kMage * v;\r
303           ty1 = y2;\r
304         }\r
305         else{\r
306           rad = Math.atan((y2 - y1) / (x2 - x1));\r
307           if(x1 < x2){ v = 1; } else{ v = -1; }\r
308           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
309           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
310         }\r
311         if(x2 == x3){\r
312           if(y2 < y3){ v = 1; } else{ v = -1; }\r
313           tx2 = x2;\r
314           ty2 = y2 + kage.kMage * v;\r
315         }\r
316         else if(y2 == y3){\r
317           if(x2 < x3){ v = 1; } else{ v = -1; }\r
318           tx2 = x2 + kage.kMage * v;\r
319           ty2 = y2;\r
320         }\r
321         else{\r
322           rad = Math.atan((y3 - y2) / (x3 - x2));\r
323           if(x2 < x3){ v = 1; } else{ v = -1; }\r
324           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
325           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
326         }\r
327         \r
328         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
329         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
330         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 1, a3);\r
331       }\r
332       break;\r
333     case 6:\r
334       if(a3 == 5){\r
335         tx1 = x4 - kage.kMage;\r
336         ty1 = y4;\r
337         tx2 = x4 + kage.kMage * 0.5;\r
338         ty2 = y4 - kage.kMage * 2;\r
339         /*\r
340                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
341                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, tx1, ty1, 1, 1);\r
342          */\r
343         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, tx1, ty1, a2, 1);\r
344         cdDrawCurve(kage, polygons, tx1, ty1, x4, y4, tx2, ty2, 1, 0);\r
345       }\r
346       else{\r
347         /*\r
348                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
349                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
350          */\r
351         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
352       }\r
353       break;\r
354     case 7:\r
355       cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, 1);\r
356       cdDrawCurve(kage, polygons, x2, y2, x3, y3, x4, y4, 1, a3);\r
357       break;\r
358     case 9: // may not be exist\r
359       //kageCanvas[y1][x1] = 0;\r
360       //kageCanvas[y2][x2] = 0;\r
361       break;\r
362     default:\r
363       break;\r
364     }\r
365   }\r
366 }\r