OSDN Git Service

import文順序調整
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdloader / MorphBuilder.java
1 /*\r
2  * building morph information\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.pmd.pmdloader;\r
9 \r
10 import java.util.ArrayList;\r
11 import java.util.Iterator;\r
12 import java.util.LinkedList;\r
13 import java.util.List;\r
14 import java.util.Map;\r
15 import jp.sourceforge.mikutoga.corelib.ListUtil;\r
16 import jp.sourceforge.mikutoga.parser.ParseStage;\r
17 import jp.sourceforge.mikutoga.parser.pmd.PmdMorphHandler;\r
18 import jp.sourceforge.mikutoga.pmd.MorphPart;\r
19 import jp.sourceforge.mikutoga.pmd.MorphType;\r
20 import jp.sourceforge.mikutoga.pmd.MorphVertex;\r
21 import jp.sourceforge.mikutoga.pmd.PmdModel;\r
22 import jp.sourceforge.mikutoga.pmd.Pos3d;\r
23 import jp.sourceforge.mikutoga.pmd.Vertex;\r
24 \r
25 /**\r
26  * モーフ関係の通知をパーサから受け取る。\r
27  */\r
28 class MorphBuilder implements PmdMorphHandler {\r
29 \r
30     private final Map<MorphType, List<MorphPart>> morphMap;\r
31 \r
32     private List<MorphPart> morphPartList;\r
33     private Iterator<MorphPart> morphPartIt;\r
34     private MorphPart currentMorphPart;\r
35     private final List<Vertex> vertexList;\r
36 \r
37     private final List<Vertex> morphVertexList = new ArrayList<Vertex>();\r
38 \r
39     /**\r
40      * コンストラクタ。\r
41      * @param model モデル\r
42      */\r
43     MorphBuilder(PmdModel model){\r
44         super();\r
45         this.vertexList = model.getVertexList();\r
46         this.morphMap = model.getMorphMap();\r
47         return;\r
48     }\r
49 \r
50     /**\r
51      * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。\r
52      * 主な用途はモーフ英名との突き合わせ作業。\r
53      * @param list モーフ格納リスト\r
54      */\r
55     void setMorphPartList(List<MorphPart> list){\r
56         this.morphPartList = list;\r
57         return;\r
58     }\r
59 \r
60     /**\r
61      * {@inheritDoc}\r
62      * @param stage {@inheritDoc}\r
63      * @param loops {@inheritDoc}\r
64      */\r
65     @Override\r
66     public void loopStart(ParseStage stage, int loops){\r
67         assert stage instanceof PmdMorphStage;\r
68 \r
69         if(stage == PmdMorphHandler.MORPH_LIST){\r
70             ListUtil.prepareDefConsList(this.morphPartList,\r
71                                         MorphPart.class,\r
72                                         loops );\r
73             ListUtil.assignIndexedSerial(this.morphPartList);\r
74 \r
75             this.morphPartIt = this.morphPartList.iterator();\r
76             if(this.morphPartIt.hasNext()){\r
77                 this.currentMorphPart = this.morphPartIt.next();\r
78             }\r
79         }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
80             // NOTHING\r
81         }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
82             // NOTHING\r
83         }\r
84 \r
85         return;\r
86     }\r
87 \r
88     /**\r
89      * {@inheritDoc}\r
90      * @param stage {@inheritDoc}\r
91      */\r
92     @Override\r
93     public void loopNext(ParseStage stage){\r
94         assert stage instanceof PmdMorphStage;\r
95 \r
96         if(stage == PmdMorphHandler.MORPH_LIST){\r
97             if(this.morphPartIt.hasNext()){\r
98                 this.currentMorphPart = this.morphPartIt.next();\r
99             }\r
100         }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
101             // NOTHING\r
102         }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
103             // NOTHING\r
104         }\r
105 \r
106         return;\r
107     }\r
108 \r
109     /**\r
110      * {@inheritDoc}\r
111      * @param stage {@inheritDoc}\r
112      */\r
113     @Override\r
114     public void loopEnd(ParseStage stage){\r
115         assert stage instanceof PmdMorphStage;\r
116         if(stage == PmdMorphHandler.MORPH_LIST){\r
117             // NOTHING\r
118         }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
119             // NOTHING\r
120         }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
121             // NOTHING\r
122         }\r
123         return;\r
124     }\r
125 \r
126     /**\r
127      * {@inheritDoc}\r
128      * @param morphName {@inheritDoc}\r
129      * @param morphType {@inheritDoc}\r
130      */\r
131     @Override\r
132     public void pmdMorphInfo(String morphName, byte morphType){\r
133         this.currentMorphPart.getMorphName().setPrimaryText(morphName);\r
134         MorphType type = MorphType.decode(morphType);\r
135         this.currentMorphPart.setMorphType(type);\r
136 \r
137         return;\r
138     }\r
139 \r
140     /**\r
141      * {@inheritDoc}\r
142      * @param serialId {@inheritDoc}\r
143      * @param xPos {@inheritDoc}\r
144      * @param yPos {@inheritDoc}\r
145      * @param zPos {@inheritDoc}\r
146      */\r
147     @Override\r
148     public void pmdMorphVertexInfo(int serialId,\r
149                                    float xPos, float yPos, float zPos){\r
150         MorphVertex morphVertex;\r
151         morphVertex = new MorphVertex();\r
152         Pos3d position = morphVertex.getOffset();\r
153         position.setXPos(xPos);\r
154         position.setYPos(yPos);\r
155         position.setZPos(zPos);\r
156 \r
157         Vertex vertex;\r
158         if(this.currentMorphPart.getMorphType().isBase()){\r
159             vertex = this.vertexList.get(serialId);\r
160             this.morphVertexList.add(vertex);\r
161         }else{\r
162             vertex = this.morphVertexList.get(serialId);\r
163         }\r
164         morphVertex.setBaseVertex(vertex);\r
165 \r
166         this.currentMorphPart.getMorphVertexList().add(morphVertex);\r
167 \r
168         return;\r
169     }\r
170 \r
171     /**\r
172      * {@inheritDoc}\r
173      * @param morphId {@inheritDoc}\r
174      */\r
175     @Override\r
176     public void pmdMorphOrderInfo(int morphId){\r
177         MorphPart part = this.morphPartList.get(morphId);\r
178         MorphType type = part.getMorphType();\r
179 \r
180         List<MorphPart> partList = this.morphMap.get(type);\r
181         if(partList == null){\r
182             partList = new LinkedList<MorphPart>();\r
183             this.morphMap.put(type, partList);\r
184         }\r
185         partList.add(part);\r
186 \r
187         return;\r
188     }\r
189 \r
190 }\r