-/*\r
- * building morph information\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2010 MikuToga Partners\r
- */\r
-\r
-package jp.sourceforge.mikutoga.pmd.pmdloader;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.LinkedList;\r
-import java.util.List;\r
-import java.util.Map;\r
-import jp.sourceforge.mikutoga.corelib.ListUtil;\r
-import jp.sourceforge.mikutoga.parser.ParseStage;\r
-import jp.sourceforge.mikutoga.parser.pmd.PmdMorphHandler;\r
-import jp.sourceforge.mikutoga.pmd.MorphPart;\r
-import jp.sourceforge.mikutoga.pmd.MorphType;\r
-import jp.sourceforge.mikutoga.pmd.MorphVertex;\r
-import jp.sourceforge.mikutoga.pmd.PmdModel;\r
-import jp.sourceforge.mikutoga.pmd.Pos3d;\r
-import jp.sourceforge.mikutoga.pmd.Vertex;\r
-\r
-/**\r
- * モーフ関係の通知をパーサから受け取る。\r
- */\r
-class MorphBuilder implements PmdMorphHandler {\r
-\r
- private final Map<MorphType, List<MorphPart>> morphMap;\r
-\r
- private List<MorphPart> morphPartList;\r
- private Iterator<MorphPart> morphPartIt;\r
- private MorphPart currentMorphPart;\r
- private final List<Vertex> vertexList;\r
-\r
- private final List<Vertex> morphVertexList = new ArrayList<Vertex>();\r
-\r
- /**\r
- * コンストラクタ。\r
- * @param model モデル\r
- */\r
- MorphBuilder(PmdModel model){\r
- super();\r
- this.vertexList = model.getVertexList();\r
- this.morphMap = model.getMorphMap();\r
- return;\r
- }\r
-\r
- /**\r
- * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。\r
- * 主な用途はモーフ英名との突き合わせ作業。\r
- * @param list モーフ格納リスト\r
- */\r
- void setMorphPartList(List<MorphPart> list){\r
- this.morphPartList = list;\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param stage {@inheritDoc}\r
- * @param loops {@inheritDoc}\r
- */\r
- @Override\r
- public void loopStart(ParseStage stage, int loops){\r
- assert stage instanceof PmdMorphStage;\r
-\r
- if(stage == PmdMorphHandler.MORPH_LIST){\r
- ListUtil.prepareDefConsList(this.morphPartList,\r
- MorphPart.class,\r
- loops );\r
- ListUtil.assignIndexedSerial(this.morphPartList);\r
-\r
- this.morphPartIt = this.morphPartList.iterator();\r
- if(this.morphPartIt.hasNext()){\r
- this.currentMorphPart = this.morphPartIt.next();\r
- }\r
- }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
- // NOTHING\r
- }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
- // NOTHING\r
- }\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param stage {@inheritDoc}\r
- */\r
- @Override\r
- public void loopNext(ParseStage stage){\r
- assert stage instanceof PmdMorphStage;\r
-\r
- if(stage == PmdMorphHandler.MORPH_LIST){\r
- if(this.morphPartIt.hasNext()){\r
- this.currentMorphPart = this.morphPartIt.next();\r
- }\r
- }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
- // NOTHING\r
- }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
- // NOTHING\r
- }\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param stage {@inheritDoc}\r
- */\r
- @Override\r
- public void loopEnd(ParseStage stage){\r
- assert stage instanceof PmdMorphStage;\r
- if(stage == PmdMorphHandler.MORPH_LIST){\r
- // NOTHING\r
- }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
- // NOTHING\r
- }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
- // NOTHING\r
- }\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param morphName {@inheritDoc}\r
- * @param morphType {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdMorphInfo(String morphName, byte morphType){\r
- this.currentMorphPart.getMorphName().setPrimaryText(morphName);\r
- MorphType type = MorphType.decode(morphType);\r
- this.currentMorphPart.setMorphType(type);\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param serialId {@inheritDoc}\r
- * @param xPos {@inheritDoc}\r
- * @param yPos {@inheritDoc}\r
- * @param zPos {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdMorphVertexInfo(int serialId,\r
- float xPos, float yPos, float zPos){\r
- MorphVertex morphVertex;\r
- morphVertex = new MorphVertex();\r
- Pos3d position = morphVertex.getOffset();\r
- position.setXPos(xPos);\r
- position.setYPos(yPos);\r
- position.setZPos(zPos);\r
-\r
- Vertex vertex;\r
- if(this.currentMorphPart.getMorphType().isBase()){\r
- vertex = this.vertexList.get(serialId);\r
- this.morphVertexList.add(vertex);\r
- }else{\r
- vertex = this.morphVertexList.get(serialId);\r
- }\r
- morphVertex.setBaseVertex(vertex);\r
-\r
- this.currentMorphPart.getMorphVertexList().add(morphVertex);\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param morphId {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdMorphOrderInfo(int morphId){\r
- MorphPart part = this.morphPartList.get(morphId);\r
- MorphType type = part.getMorphType();\r
-\r
- List<MorphPart> partList = this.morphMap.get(type);\r
- if(partList == null){\r
- partList = new LinkedList<MorphPart>();\r
- this.morphMap.put(type, partList);\r
- }\r
- partList.add(part);\r
-\r
- return;\r
- }\r
-\r
-}\r
+/*
+ * building morph information
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.pmd.pmdloader;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import jp.sourceforge.mikutoga.corelib.ListUtil;
+import jp.sourceforge.mikutoga.parser.ParseStage;
+import jp.sourceforge.mikutoga.parser.pmd.PmdMorphHandler;
+import jp.sourceforge.mikutoga.pmd.MorphPart;
+import jp.sourceforge.mikutoga.pmd.MorphType;
+import jp.sourceforge.mikutoga.pmd.MorphVertex;
+import jp.sourceforge.mikutoga.pmd.PmdModel;
+import jp.sourceforge.mikutoga.pmd.Pos3d;
+import jp.sourceforge.mikutoga.pmd.Vertex;
+
+/**
+ * モーフ関係の通知をパーサから受け取る。
+ */
+class MorphBuilder implements PmdMorphHandler {
+
+ private final Map<MorphType, List<MorphPart>> morphMap;
+
+ private List<MorphPart> morphPartList;
+ private Iterator<MorphPart> morphPartIt;
+ private MorphPart currentMorphPart;
+ private final List<Vertex> vertexList;
+
+ private final List<Vertex> morphVertexList = new ArrayList<Vertex>();
+
+ /**
+ * コンストラクタ。
+ * @param model モデル
+ */
+ MorphBuilder(PmdModel model){
+ super();
+ this.vertexList = model.getVertexList();
+ this.morphMap = model.getMorphMap();
+ return;
+ }
+
+ /**
+ * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。
+ * 主な用途はモーフ英名との突き合わせ作業。
+ * @param list モーフ格納リスト
+ */
+ void setMorphPartList(List<MorphPart> list){
+ this.morphPartList = list;
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param stage {@inheritDoc}
+ * @param loops {@inheritDoc}
+ */
+ @Override
+ public void loopStart(ParseStage stage, int loops){
+ if(stage == PmdMorphHandler.MORPH_LIST){
+ ListUtil.prepareDefConsList(this.morphPartList,
+ MorphPart.class,
+ loops );
+ ListUtil.assignIndexedSerial(this.morphPartList);
+
+ this.morphPartIt = this.morphPartList.iterator();
+ if(this.morphPartIt.hasNext()){
+ this.currentMorphPart = this.morphPartIt.next();
+ }
+ }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){
+ // NOTHING
+ }else if(stage == PmdMorphHandler.MORPHORDER_LIST){
+ // NOTHING
+ }else{
+ assert false;
+ throw new AssertionError();
+ }
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param stage {@inheritDoc}
+ */
+ @Override
+ public void loopNext(ParseStage stage){
+ if(stage == PmdMorphHandler.MORPH_LIST){
+ if(this.morphPartIt.hasNext()){
+ this.currentMorphPart = this.morphPartIt.next();
+ }
+ }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){
+ // NOTHING
+ }else if(stage == PmdMorphHandler.MORPHORDER_LIST){
+ // NOTHING
+ }else{
+ assert false;
+ throw new AssertionError();
+ }
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param stage {@inheritDoc}
+ */
+ @Override
+ public void loopEnd(ParseStage stage){
+ if(stage == PmdMorphHandler.MORPH_LIST){
+ // NOTHING
+ }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){
+ // NOTHING
+ }else if(stage == PmdMorphHandler.MORPHORDER_LIST){
+ // NOTHING
+ }else{
+ assert false;
+ throw new AssertionError();
+ }
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param morphName {@inheritDoc}
+ * @param morphType {@inheritDoc}
+ */
+ @Override
+ public void pmdMorphInfo(String morphName, byte morphType){
+ this.currentMorphPart.getMorphName().setPrimaryText(morphName);
+ MorphType type = MorphType.decode(morphType);
+ this.currentMorphPart.setMorphType(type);
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param serialId {@inheritDoc}
+ * @param xPos {@inheritDoc}
+ * @param yPos {@inheritDoc}
+ * @param zPos {@inheritDoc}
+ */
+ @Override
+ public void pmdMorphVertexInfo(int serialId,
+ float xPos, float yPos, float zPos){
+ MorphVertex morphVertex;
+ morphVertex = new MorphVertex();
+ Pos3d position = morphVertex.getOffset();
+ position.setXPos(xPos);
+ position.setYPos(yPos);
+ position.setZPos(zPos);
+
+ Vertex vertex;
+ if(this.currentMorphPart.getMorphType().isBase()){
+ vertex = this.vertexList.get(serialId);
+ this.morphVertexList.add(vertex);
+ }else{
+ vertex = this.morphVertexList.get(serialId);
+ }
+ morphVertex.setBaseVertex(vertex);
+
+ this.currentMorphPart.getMorphVertexList().add(morphVertex);
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param morphId {@inheritDoc}
+ */
+ @Override
+ public void pmdMorphOrderInfo(int morphId){
+ MorphPart part = this.morphPartList.get(morphId);
+ MorphType type = part.getMorphType();
+
+ List<MorphPart> partList = this.morphMap.get(type);
+ if(partList == null){
+ partList = new LinkedList<MorphPart>();
+ this.morphMap.put(type, partList);
+ }
+ partList.add(part);
+
+ return;
+ }
+
+}