OSDN Git Service

ローカルスキーマ参照処理の共通化
[mikutoga/TogaGem.git] / src / main / java / jp / sfjp / mikutoga / vmd / parser / VmdBasicHandler.java
1 /*
2  * VMD basic handler
3  *
4  * License : The MIT License
5  * Copyright(c) 2011 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.vmd.parser;
9
10 import jp.sfjp.mikutoga.bin.parser.LoopHandler;
11 import jp.sfjp.mikutoga.bin.parser.MmdFormatException;
12 import jp.sfjp.mikutoga.bin.parser.ParseStage;
13
14 /**
15  * VMDモーションファイルの基本情報(ボーンモーション/モーフモーション)
16  * の通知用ハンドラ。
17  * <p>フレーム番号は相対的なものとなる。
18  * 一番若いモーションのフレーム番号が0となる模様。
19  * <p>位置情報の座標基準は左手系ワールド座標で表される。
20  * <p>モーション補間情報は三次ベジェ曲線により記述される。
21  * 三次ベジェ曲線は4つの制御点P0,P1,P2,P3により定義される。
22  * P0は(0,0)、P3は(127,127)で固定。
23  * P1,P2はP0,P3を対角線とする正方形の内部になければならない。
24  * 直線補間の場合、P1には(20,20)、P2には(107,107)が使われることが多い。
25  * <p>補間情報は直後のボーンモーション情報との差分に関するもの。
26  */
27 public interface VmdBasicHandler extends LoopHandler {
28
29     /** ボーンモーション抽出ループ識別子。 */
30     ParseStage BONEMOTION_LIST = new ParseStage();
31
32     /** モーフ抽出ループ識別子。 */
33     ParseStage MORPH_LIST = new ParseStage();
34
35
36     /**
37      * VMDファイルのパース処理開始の通知を受け取る。
38      * @throws MmdFormatException 不正フォーマットによる
39      * パース処理の中断をパーサに指示
40      */
41     void vmdParseStart()
42             throws MmdFormatException;
43
44     /**
45      * VMDファイルのパース処理終了の通知を受け取る。
46      * @param hasMoreData 入力ソースに
47      * まだ読み込まれていないデータがあればtrue
48      * @throws MmdFormatException 不正フォーマットによる
49      * パース処理の中断をパーサに指示
50      */
51     void vmdParseEnd(boolean hasMoreData)
52             throws MmdFormatException;
53
54     /**
55      * VMDファイルの固定長ヘッダを通知する。
56      * @param header ヘッダ情報
57      * @throws MmdFormatException 不正フォーマットによる
58      * パース処理の中断をパーサに指示
59      */
60     void vmdHeaderInfo(byte[] header)
61             throws MmdFormatException;
62
63
64     /**
65      * モーションの適用先モデル名に関する情報を通知する。
66      * <p>カメラやライティングなどの演出データには
67      * 特殊なモデル名が使われる。
68      * @param modelName モデル名
69      * @throws MmdFormatException 不正フォーマットによる
70      * パース処理の中断をパーサに指示
71      */
72     void vmdModelName(String modelName)
73             throws MmdFormatException;
74
75     /**
76      * ボーンモーションのボーン名及びキーフレーム番号に関する情報を通知する。
77      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
78      * @param boneName ボーン名
79      * @param keyFrameNo キーフレーム番号
80      * @throws MmdFormatException 不正フォーマットによる
81      * パース処理の中断をパーサに指示
82      */
83     void vmdBoneMotion(String boneName, int keyFrameNo)
84             throws MmdFormatException;
85
86     /**
87      * ボーン移動モーション情報の通知を受け取る。
88      * <p>座標基準は親ボーンもしくはワールド座標。
89      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
90      * @param xPos X座標
91      * @param yPos Y座標
92      * @param zPos Z座標
93      * @throws MmdFormatException 不正フォーマットによる
94      * パース処理の中断をパーサに指示
95      */
96     void vmdBonePosition(float xPos, float yPos, float zPos)
97             throws MmdFormatException;
98
99     /**
100      * ボーン回転モーション情報の通知を受け取る。
101      * <p>回転及び姿勢はクォータニオンによって記述される。
102      * MMDUI上のボーン数値入力YXZオイラー角と等価な回転。
103      * <p>座標基準は親ボーンもしくはワールド座標。
104      * <p>※ボーン種別によっては、無意味な情報。
105      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
106      * @param qx クォータニオン虚部 X
107      * @param qy クォータニオン虚部 Y
108      * @param qz クォータニオン虚部 Z
109      * @param qw クォータニオン実部 W
110      * @throws MmdFormatException 不正フォーマットによる
111      * パース処理の中断をパーサに指示
112      */
113     void vmdBoneRotationQt(float qx, float qy, float qz, float qw)
114             throws MmdFormatException;
115
116     /**
117      * ボーンモーションX軸移動補間情報の通知を受け取る。
118      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
119      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
120      * @param xP1x P1点のX座標
121      * @param xP1y P1点のY座標
122      * @param xP2x P2点のX座標
123      * @param xP2y P2点のY座標
124      * @throws MmdFormatException 不正フォーマットによる
125      * パース処理の中断をパーサに指示
126      */
127     void vmdBoneIntpltXpos(byte xP1x, byte xP1y, byte xP2x, byte xP2y)
128             throws MmdFormatException;
129
130     /**
131      * ボーンモーションY軸移動補間情報の通知を受け取る。
132      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
133      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
134      * @param yP1x P1点のX座標
135      * @param yP1y P1点のY座標
136      * @param yP2x P2点のX座標
137      * @param yP2y P2点のY座標
138      * @throws MmdFormatException 不正フォーマットによる
139      * パース処理の中断をパーサに指示
140      */
141     void vmdBoneIntpltYpos(byte yP1x, byte yP1y, byte yP2x, byte yP2y)
142             throws MmdFormatException;
143
144     /**
145      * ボーンモーションZ軸移動補間情報の通知を受け取る。
146      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
147      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
148      * @param zP1x P1点のX座標
149      * @param zP1y P1点のY座標
150      * @param zP2x P2点のX座標
151      * @param zP2y P2点のY座標
152      * @throws MmdFormatException 不正フォーマットによる
153      * パース処理の中断をパーサに指示
154      */
155     void vmdBoneIntpltZpos(byte zP1x, byte zP1y, byte zP2x, byte zP2y)
156             throws MmdFormatException;
157
158     /**
159      * ボーンモーション回転量補間情報の通知を受け取る。
160      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
161      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
162      * <p>クォータニオン間のslerp処理に利用される。
163      * @param rP1x P1点のX座標
164      * @param rP1y P1点のY座標
165      * @param rP2x P2点のX座標
166      * @param rP2y P2点のY座標
167      * @throws MmdFormatException 不正フォーマットによる
168      * パース処理の中断をパーサに指示
169      */
170     void vmdBoneIntpltRot(byte rP1x, byte rP1y, byte rP2x, byte rP2y)
171             throws MmdFormatException;
172
173
174     /**
175      * モーフモーション情報の通知を受け取る。
176      * <p>{@link #MORPH_LIST}ループの構成要素。
177      * @param morphName モーフ名。特殊モーフ名「base」は無視してもよい?
178      * @param keyFrameNo フレーム番号
179      * @param flex モーフ変量。通常は0.0以上1.0以下。
180      * @throws MmdFormatException 不正フォーマットによる
181      * パース処理の中断をパーサに指示
182      */
183     void vmdMorphMotion(String morphName, int keyFrameNo, float flex)
184             throws MmdFormatException;
185
186 }