4 * License : The MIT License
\r
5 * Copyright(c) 2010 MikuToga Partners
\r
8 package jp.sourceforge.mikutoga.pmd.pmdloader;
\r
10 import java.util.Iterator;
\r
11 import java.util.List;
\r
12 import jp.sourceforge.mikutoga.corelib.I18nText;
\r
13 import jp.sourceforge.mikutoga.parser.ParseStage;
\r
14 import jp.sourceforge.mikutoga.parser.pmd.PmdBasicHandler;
\r
15 import jp.sourceforge.mikutoga.parser.pmd.PmdEngHandler;
\r
16 import jp.sourceforge.mikutoga.pmd.BoneGroup;
\r
17 import jp.sourceforge.mikutoga.pmd.BoneInfo;
\r
18 import jp.sourceforge.mikutoga.pmd.MorphPart;
\r
19 import jp.sourceforge.mikutoga.pmd.PmdModel;
\r
22 * テキスト関係の通知をパーサから受け取る。
\r
24 class TextBuilder implements PmdBasicHandler, PmdEngHandler {
\r
26 private final PmdModel model;
\r
28 private final I18nText modelName;
\r
29 private final I18nText description;
\r
31 private final List<BoneInfo> boneList;
\r
32 private Iterator<BoneInfo> boneIt;
\r
33 private BoneInfo currentBone = null;
\r
35 private List<MorphPart> morphPartList;
\r
36 private Iterator<MorphPart> morphPartIt;
\r
37 private MorphPart currentMorphPart = null;
\r
39 private final List<BoneGroup> boneGroupList;
\r
40 private Iterator<BoneGroup> boneGroupIt;
\r
41 private BoneGroup currentBoneGroup = null;
\r
43 private boolean hasMoreData = false;
\r
49 TextBuilder(PmdModel model){
\r
54 this.modelName = model.getModelName();
\r
55 this.description = model.getDescription();
\r
57 this.boneList = model.getBoneList();
\r
58 this.boneGroupList = model.getBoneGroupList();
\r
64 * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。
\r
65 * 主な用途はモーフ和英名の突き合わせ作業。
\r
66 * @param list モーフ格納リスト
\r
68 void setMorphPartList(List<MorphPart> list){
\r
69 this.morphPartList = list;
\r
76 public void pmdParseStart(){
\r
82 * @param hasMoreData {@inheritDoc}
\r
84 public void pmdParseEnd(boolean hasMoreData){
\r
85 this.hasMoreData = hasMoreData;
\r
91 * @param stage {@inheritDoc}
\r
92 * @param loops {@inheritDoc}
\r
94 public void loopStart(ParseStage stage, int loops){
\r
95 assert stage instanceof PmdEngStage;
\r
97 if(stage == PmdEngHandler.ENGBONE_LIST){
\r
98 this.boneIt = this.boneList.iterator();
\r
99 if(this.boneIt.hasNext()){
\r
100 this.currentBone = this.boneIt.next();
\r
102 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
\r
103 this.morphPartIt = this.morphPartList.iterator();
\r
106 assert this.morphPartIt.hasNext();
\r
107 MorphPart part = this.morphPartIt.next();
\r
108 assert part != null;
\r
110 if(this.morphPartIt.hasNext()){
\r
111 this.currentMorphPart = this.morphPartIt.next();
\r
113 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
\r
114 this.boneGroupIt = this.boneGroupList.iterator();
\r
116 // デフォルトボーングループを読み飛ばす
\r
117 assert this.boneGroupIt.hasNext();
\r
118 BoneGroup group = this.boneGroupIt.next();
\r
119 assert group != null;
\r
121 if(this.boneGroupIt.hasNext()){
\r
122 this.currentBoneGroup = this.boneGroupIt.next();
\r
126 throw new AssertionError();
\r
133 * @param stage {@inheritDoc}
\r
135 public void loopNext(ParseStage stage){
\r
136 assert stage instanceof PmdEngStage;
\r
138 if(stage == PmdEngHandler.ENGBONE_LIST){
\r
139 if(this.boneIt.hasNext()){
\r
140 this.currentBone = this.boneIt.next();
\r
142 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
\r
143 if(this.morphPartIt.hasNext()){
\r
144 this.currentMorphPart = this.morphPartIt.next();
\r
146 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
\r
147 if(this.boneGroupIt.hasNext()){
\r
148 this.currentBoneGroup = this.boneGroupIt.next();
\r
152 throw new AssertionError();
\r
159 * @param stage {@inheritDoc}
\r
161 public void loopEnd(ParseStage stage){
\r
162 assert stage instanceof PmdEngStage;
\r
168 * @param ver {@inheritDoc}
\r
170 public void pmdHeaderInfo(float ver){
\r
171 this.model.setHeaderVersion(ver);
\r
177 * @param modelName {@inheritDoc}
\r
178 * @param description {@inheritDoc}
\r
180 public void pmdModelInfo(String modelName, String description){
\r
181 this.modelName .setPrimaryText(modelName);
\r
182 this.description.setPrimaryText(description);
\r
188 * @param hasEnglishInfo {@inheritDoc}
\r
190 public void pmdEngEnabled(boolean hasEnglishInfo){
\r
196 * @param modelName {@inheritDoc}
\r
197 * @param description {@inheritDoc}
\r
199 public void pmdEngModelInfo(String modelName, String description){
\r
200 this.modelName .setGlobalText(modelName);
\r
201 this.description.setGlobalText(description);
\r
207 * @param boneName {@inheritDoc}
\r
209 public void pmdEngBoneInfo(String boneName){
\r
210 this.currentBone.getBoneName().setGlobalText(boneName);
\r
216 * @param morphName {@inheritDoc}
\r
218 public void pmdEngMorphInfo(String morphName){
\r
219 this.currentMorphPart.getMorphName().setGlobalText(morphName);
\r
225 * @param groupName {@inheritDoc}
\r
227 public void pmdEngBoneGroupInfo(String groupName){
\r
228 this.currentBoneGroup.getGroupName().setGlobalText(groupName);
\r
233 * 読み残したデータがあるか判定する。
\r
234 * @return 読み残したデータがあればtrue
\r
236 public boolean hasMoreData(){
\r
237 return this.hasMoreData;
\r