2 updates.
[chise/kage.git] / 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 % 100 == 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 * (((kage.kAdjustTateStep + 4) - Math.floor(a2 / 1000)) / (kage.kAdjustTateStep + 4)), y2, 1 + (a2 - a2 % 1000), a3 + 10);\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 % 100 == 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, a3 + 10);\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 % 1000 == 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;\r
96         ty3 = y3;\r
97         \r
98         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
99         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1 + (a2 - a2 % 1000) * 10, 1 + (a3 - a3 % 1000));\r
100         if((x2 < x3 && tx3 - tx2 > 0) || (x2 > x3 && tx2 - tx3 > 0)){ // for closer position\r
101           cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 6 + (a3 - a3 % 1000), 5); // bolder by force\r
102         }\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 + (a2 - a2 % 1000) * 10, 1 + (a3 - a3 % 1000));\r
139         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 6 + (a3 - a3 % 1000), 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 4:\r
147       rate = 6;\r
148       if((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2) < 14400){ // smaller than 120 x 120\r
149         rate = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)) / 120 * 6;\r
150       }\r
151       if(a3 == 5){\r
152         if(x1 == x2){\r
153           if(y1 < y2){ v = 1; } else{ v = -1; }\r
154           tx1 = x2;\r
155           ty1 = y2 - kage.kMage * v * rate;\r
156         }\r
157         else if(y1 == y2){\r
158           if(x1 < x2){ v = 1; } else{ v = -1; }\r
159           tx1 = x2 - kage.kMage * v * rate;\r
160           ty1 = y2;\r
161         }\r
162         else{\r
163           rad = Math.atan((y2 - y1) / (x2 - x1));\r
164           if(x1 < x2){ v = 1; } else{ v = -1; }\r
165           tx1 = x2 - kage.kMage * Math.cos(rad) * v * rate;\r
166           ty1 = y2 - kage.kMage * Math.sin(rad) * v * rate;\r
167         }\r
168         if(x2 == x3){\r
169           if(y2 < y3){ v = 1; } else{ v = -1; }\r
170           tx2 = x2;\r
171           ty2 = y2 + kage.kMage * v * rate;\r
172         }\r
173         else if(y2 == y3){\r
174           if(x2 < x3){ v = 1; } else { v = -1; }\r
175           tx2 = x2 + kage.kMage * v * rate;\r
176           ty2 = y2;\r
177         }\r
178         else{\r
179           rad = Math.atan((y3 - y2) / (x3 - x2));\r
180           if(x2 < x3){ v = 1; } else{ v = -1; }\r
181           tx2 = x2 + kage.kMage * Math.cos(rad) * v * rate;\r
182           ty2 = y2 + kage.kMage * Math.sin(rad) * v * rate;\r
183         }\r
184         tx3 = x3;\r
185         ty3 = y3;\r
186         \r
187         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
188         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
189         if(tx3 - tx2 > 0){ // for closer position\r
190           cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 6, 5); // bolder by force\r
191         }\r
192       }\r
193       else{\r
194         if(x1 == x2){\r
195           if(y1 < y2){ v = 1; } else { v = -1; }\r
196           tx1 = x2;\r
197           ty1 = y2 - kage.kMage * v * rate;\r
198         }\r
199         else if(y1 == y2){\r
200           if(x1 < x2){ v = 1; } else{ v = -1; }\r
201           tx1 = x2 - kage.kMage * v * rate;\r
202           ty1 = y2;\r
203         }\r
204         else{\r
205           rad = Math.atan((y2 - y1) / (x2 - x1));\r
206           if(x1 < x2){ v = 1; } else{ v = -1; }\r
207           tx1 = x2 - kage.kMage * Math.cos(rad) * v * rate;\r
208           ty1 = y2 - kage.kMage * Math.sin(rad) * v * rate;\r
209         }\r
210         if(x2 == x3){\r
211           if(y2 < y3){ v = 1; } else{ v = -1; }\r
212           tx2 = x2;\r
213           ty2 = y2 + kage.kMage * v * rate;\r
214         }\r
215         else if(y2 == y3){\r
216           if(x2 < x3){ v = 1; } else{ v = -1; }\r
217           tx2 = x2 + kage.kMage * v * rate;\r
218           ty2 = y2;\r
219         }\r
220         else{\r
221           rad = Math.atan((y3 - y2) / (x3 - x2));\r
222           if(x2 < x3){ v = 1; } else{ v = -1; }\r
223           tx2 = x2 + kage.kMage * Math.cos(rad) * v * rate;\r
224           ty2 = y2 + kage.kMage * Math.sin(rad) * v * rate;\r
225         }\r
226         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
227         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
228         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 6, a3); // bolder by force\r
229       }\r
230       break;\r
231     case 6:\r
232       if(a3 % 100 == 4){\r
233         if(x3 == x4){\r
234           tx1 = x4;\r
235           ty1 = y4 - kage.kMage;\r
236         }\r
237         else if(y3 == y4){\r
238           tx1 = x4 - kage.kMage;\r
239           ty1 = y4;\r
240         }\r
241         else{\r
242           rad = Math.atan((y4 - y3) / (x4 - x3));\r
243           if(x3 < x4){ v = 1; } else{ v = -1; }\r
244           tx1 = x4 - kage.kMage * Math.cos(rad) * v;\r
245           ty1 = y4 - kage.kMage * Math.sin(rad) * v;\r
246         }\r
247         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, tx1, ty1, a2, 1);\r
248         cdDrawCurve(kage, polygons, tx1, ty1, x4, y4, x4 - kage.kMage, y4, 1, a3 + 10);\r
249       }\r
250       else if(a3 == 5){\r
251         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, 15);\r
252       }\r
253       else{\r
254         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
255       }\r
256       break;\r
257     case 7:\r
258       cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, 1);\r
259       cdDrawCurve(kage, polygons, x2, y2, x3, y3, x4, y4, 1 + (a2 - a2 % 1000), a3);\r
260       break;\r
261     case 9: // may not be exist ... no need\r
262       //kageCanvas[y1][x1] = 0;\r
263       //kageCanvas[y2][x2] = 0;\r
264       break;\r
265     default:\r
266       break;\r
267     }\r
268   }\r
269     \r
270   else{ // gothic\r
271     switch(a1 % 100){\r
272     case 0:\r
273       break;\r
274     case 1:\r
275       if(a3 == 4){\r
276         if(x1 == x2){\r
277           if(y1 < y2){ v = 1; } else{ v = -1; }\r
278           tx1 = x2;\r
279           ty1 = y2 - kage.kMage * v;\r
280         }\r
281         else if(y1 == y2){\r
282           if(x1 < x2){ v = 1; } else{ v = -1; }\r
283           tx1 = x2 - kage.kMage * v;\r
284           ty1 = y2;\r
285         }\r
286         else{\r
287           rad = Math.atan((y2 - y1) / (x2 - x1));\r
288           if(x1 < x2){ v = 1; } else{ v = -1; }\r
289           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
290           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
291         }\r
292         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
293         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, x2 - kage.kMage * 2, y2 - kage.kMage * 0.5, 1, 0);\r
294       }\r
295       else{\r
296         cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, a3);\r
297       }\r
298       break;\r
299     case 2:\r
300     case 12:\r
301       if(a3 == 4){\r
302         if(x2 == x3){\r
303           tx1 = x3;\r
304           ty1 = y3 - kage.kMage;\r
305         }\r
306         else if(y2 == y3){\r
307           tx1 = x3 - kage.kMage;\r
308           ty1 = y3;\r
309         }\r
310         else{\r
311           rad = Math.atan((y3 - y2) / (x3 - x2));\r
312           if(x2 < x3){ v = 1; } else{ v = -1; }\r
313           tx1 = x3 - kage.kMage * Math.cos(rad) * v;\r
314           ty1 = y3 - kage.kMage * Math.sin(rad) * v;\r
315         }\r
316         cdDrawCurve(kage, polygons, x1, y1, x2, y2, tx1, ty1, a2, 1);\r
317         cdDrawCurve(kage, polygons, tx1, ty1, x3, y3, x3 - kage.kMage * 2, y3 - kage.kMage * 0.5, 1, 0);\r
318       }\r
319       else if(a3 == 5){\r
320         tx1 = x3 + kage.kMage;\r
321         ty1 = y3;\r
322         tx2 = tx1 + kage.kMage * 0.5;\r
323         ty2 = y3 - kage.kMage * 2;\r
324         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, 1);\r
325         cdDrawCurve(kage, polygons, x3, y3, tx1, ty1, tx2, ty2, 1, 0);\r
326       }\r
327       else{\r
328         cdDrawCurve(kage, polygons, x1, y1, x2, y2, x3, y3, a2, a3);\r
329       }\r
330       break;\r
331     case 3:\r
332       if(a3 == 5){\r
333         if(x1 == x2){\r
334           if(y1 < y2){ v = 1; } else{ v = -1; }\r
335           tx1 = x2;\r
336           ty1 = y2 - kage.kMage * v;\r
337         }\r
338         else if(y1 == y2){\r
339           if(x1 < x2){ v = 1; } else{ v = -1; }\r
340           tx1 = x2 - kage.kMage * v;\r
341           ty1 = y2;\r
342         }\r
343         else{\r
344           rad = Math.atan((y2 - y1) / (x2 - x1));\r
345           if(x1 < x2){ v = 1; } else{ v = -1; }\r
346           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
347           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
348         }\r
349         if(x2 == x3){\r
350           if(y2 < y3){ v = 1; } else{ v = -1; }\r
351           tx2 = x2;\r
352           ty2 = y2 + kage.kMage * v;\r
353         }\r
354         else if(y2 == y3){\r
355           if(x2 < x3){ v = 1; } else{ v = -1; }\r
356           tx2 = x2 + kage.kMage * v;\r
357           ty2 = y2;\r
358         }\r
359         else{\r
360           rad = Math.atan((y3 - y2) / (x3 - x2));\r
361           if(x2 < x3){ v = 1; } else{ v = -1; }\r
362           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
363           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
364         }\r
365         tx3 = x3 - kage.kMage;\r
366         ty3 = y3;\r
367         tx4 = x3 + kage.kMage * 0.5;\r
368         ty4 = y3 - kage.kMage * 2;\r
369         \r
370         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
371         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
372         cdDrawLine(kage, polygons, tx2, ty2, tx3, ty3, 1, 1);\r
373         cdDrawCurve(kage, polygons, tx3, ty3, x3, y3, tx4, ty4, 1, 0);\r
374       }\r
375       else{\r
376         if(x1 == x2){\r
377           if(y1 < y2){ v = 1; } else{ v = -1; }\r
378           tx1 = x2;\r
379           ty1 = y2 - kage.kMage * v;\r
380         }\r
381         else if(y1 == y2){\r
382           if(x1 < x2){ v = 1; } else{ v = -1; }\r
383           tx1 = x2 - kage.kMage * v;\r
384           ty1 = y2;\r
385         }\r
386         else{\r
387           rad = Math.atan((y2 - y1) / (x2 - x1));\r
388           if(x1 < x2){ v = 1; } else{ v = -1; }\r
389           tx1 = x2 - kage.kMage * Math.cos(rad) * v;\r
390           ty1 = y2 - kage.kMage * Math.sin(rad) * v;\r
391         }\r
392         if(x2 == x3){\r
393           if(y2 < y3){ v = 1; } else{ v = -1; }\r
394           tx2 = x2;\r
395           ty2 = y2 + kage.kMage * v;\r
396         }\r
397         else if(y2 == y3){\r
398           if(x2 < x3){ v = 1; } else{ v = -1; }\r
399           tx2 = x2 + kage.kMage * v;\r
400           ty2 = y2;\r
401         }\r
402         else{\r
403           rad = Math.atan((y3 - y2) / (x3 - x2));\r
404           if(x2 < x3){ v = 1; } else{ v = -1; }\r
405           tx2 = x2 + kage.kMage * Math.cos(rad) * v;\r
406           ty2 = y2 + kage.kMage * Math.sin(rad) * v;\r
407         }\r
408         \r
409         cdDrawLine(kage, polygons, x1, y1, tx1, ty1, a2, 1);\r
410         cdDrawCurve(kage, polygons, tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
411         cdDrawLine(kage, polygons, tx2, ty2, x3, y3, 1, a3);\r
412       }\r
413       break;\r
414     case 6:\r
415       if(a3 == 5){\r
416         tx1 = x4 - kage.kMage;\r
417         ty1 = y4;\r
418         tx2 = x4 + kage.kMage * 0.5;\r
419         ty2 = y4 - kage.kMage * 2;\r
420         /*\r
421                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
422                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, tx1, ty1, 1, 1);\r
423          */\r
424         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, tx1, ty1, a2, 1);\r
425         cdDrawCurve(kage, polygons, tx1, ty1, x4, y4, tx2, ty2, 1, 0);\r
426       }\r
427       else{\r
428         /*\r
429                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
430                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
431          */\r
432         cdDrawBezier(kage, polygons, x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
433       }\r
434       break;\r
435     case 7:\r
436       cdDrawLine(kage, polygons, x1, y1, x2, y2, a2, 1);\r
437       cdDrawCurve(kage, polygons, x2, y2, x3, y3, x4, y4, 1, a3);\r
438       break;\r
439     case 9: // may not be exist\r
440       //kageCanvas[y1][x1] = 0;\r
441       //kageCanvas[y2][x2] = 0;\r
442       break;\r
443     default:\r
444       break;\r
445     }\r
446   }\r
447 }\r