OSDN Git Service

modify javadoc paragraph.
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd / model / xml / ExporterMorph.java
1 /*
2  * morph xml exporter
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd.model.xml;
9
10 import java.io.IOException;
11 import java.util.List;
12 import java.util.Map;
13 import jp.sfjp.mikutoga.corelib.I18nText;
14 import jp.sfjp.mikutoga.math.MkPos3D;
15 import jp.sfjp.mikutoga.pmd.MorphType;
16 import jp.sfjp.mikutoga.pmd.model.MorphPart;
17 import jp.sfjp.mikutoga.pmd.model.MorphVertex;
18 import jp.sfjp.mikutoga.pmd.model.PmdModel;
19 import jp.sfjp.mikutoga.pmd.model.Vertex;
20 import jp.sfjp.mikutoga.xml.ProxyXmlExporter;
21
22 /**
23  * モーフ定義のXMLエクスポーター。
24  */
25 class ExporterMorph extends ProxyXmlExporter {
26
27     private static final String MORPHTYPE_COMMENT =
28           "Morph types:\n"
29         + "[1 : EYEBROW : まゆ   ]\n"
30         + "[2 : EYE     : 目     ]\n"
31         + "[3 : LIP     : リップ ]\n"
32         + "[4 : EXTRA   : その他 ]\n";
33
34
35     private final ExtraExporter exp;
36
37
38     /**
39      * コンストラクタ。
40      * @param delegate 委譲先
41      */
42     ExporterMorph(PmdXmlExporter delegate) {
43         super(delegate);
44         this.exp = new ExtraExporter(delegate);
45         return;
46     }
47
48     /**
49      * モーフ定義データを出力する。
50      * @param model モデルデータ
51      * @throws IOException 出力エラー
52      */
53     void putMorphList(PmdModel model) throws IOException{
54         ind().putSimpleSTag(PmdTag.MORPH_LIST.tag()).ln();
55         pushNest();
56
57         boolean dumped = false;
58         Map<MorphType, List<MorphPart>> morphMap = model.getMorphMap();
59         for(MorphType type : MorphType.values()){
60             if(type == MorphType.BASE) continue;
61             List<MorphPart> partList = morphMap.get(type);
62             if(partList == null) continue;
63             for(MorphPart part : partList){
64                 if( ! dumped ){
65                     ln().putBlockComment(MORPHTYPE_COMMENT).ln();
66                 }
67                 putMorphPart(part);
68                 dumped = true;
69             }
70         }
71
72         popNest();
73         ind().putETag(PmdTag.MORPH_LIST.tag()).ln(2);
74
75         return;
76     }
77
78     /**
79      * 個別のモーフ情報を出力する。
80      * @param part モーフ情報
81      * @throws IOException 出力エラー
82      */
83     private void putMorphPart(MorphPart part) throws IOException{
84         I18nText i18nName = part.getMorphName();
85         String primary = i18nName.getPrimaryText();
86
87         this.exp.putLocalNameComment(i18nName);
88         ln();
89         ind().putOpenSTag(PmdTag.MORPH.tag()).sp();
90         putAttr(PmdAttr.NAME.attr(), primary).sp();
91         putAttr(PmdAttr.TYPE.attr(), part.getMorphType().name());
92         sp().putCloseSTag();
93         ln();
94         pushNest();
95
96         this.exp.putI18nName(i18nName);
97
98         for(MorphVertex mvertex : part){
99             MkPos3D offset = mvertex.getOffset();
100             Vertex base = mvertex.getBaseVertex();
101
102             ind().putOpenSTag(PmdTag.MORPH_VERTEX.tag()).sp();
103             this.exp.putNumberedIdAttr(PmdAttr.VERTEX_IDREF,
104                     ExtraExporter.PFX_VERTEX, base);
105             sp();
106             putFloatAttr(PmdAttr.XOFF.attr(),
107                     (float) offset.getXpos()).sp();
108             putFloatAttr(PmdAttr.YOFF.attr(),
109                     (float) offset.getYpos()).sp();
110             putFloatAttr(PmdAttr.ZOFF.attr(),
111                     (float) offset.getZpos()).sp();
112             putCloseEmpty();
113             ln();
114         }
115
116         popNest();
117         ind().putETag(PmdTag.MORPH.tag()).ln(2);
118
119         return;
120     }
121
122 }