OSDN Git Service

c4954f4ab687e5c7e806a77c41878cc0089c65d4
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / parser / pmd / PmdBoneHandler.java
1 /*
2  * PMD bone information handler
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.parser.pmd;
9
10 import jp.sourceforge.mikutoga.parser.LoopHandler;
11 import jp.sourceforge.mikutoga.parser.MmdFormatException;
12 import jp.sourceforge.mikutoga.parser.ParseStage;
13
14 /**
15  * PMDモデルの各種ボーン情報の通知用ハンドラ。
16  * ボーン定義の出現順と、0から始まるボーンIDは対応する。
17  */
18 public interface PmdBoneHandler extends LoopHandler {
19
20     /**
21      * ボーン情報パースステージ。
22      */
23     class PmdBoneStage extends ParseStage{
24         /** コンストラクタ。 */
25         PmdBoneStage(){ super(); return; }
26     }
27
28     /** ボーン定義抽出ループ。 */
29     PmdBoneStage BONE_LIST = new PmdBoneStage();
30
31     /** IKリスト抽出ループ。 */
32     PmdBoneStage IK_LIST = new PmdBoneStage();
33
34     /** IKチェーンリスト抽出ループ。 */
35     PmdBoneStage IKCHAIN_LIST = new PmdBoneStage();
36
37     /** ボーングループ名抽出ループ。 */
38     PmdBoneStage BONEGROUP_LIST = new PmdBoneStage();
39
40     /** ボーングループ内訳抽出ループ。 */
41     PmdBoneStage GROUPEDBONE_LIST = new PmdBoneStage();
42
43     /**
44      * ボーン定義情報の通知を受け取る。
45      * {@link #BONE_LIST}ループの構成要素。
46      * @param boneName ボーン名
47      * @param boneKind ボーン種別。
48      * <ul>
49      * <li>0:回転
50      * <li>1:回転/移動
51      * <li>2:IK
52      * <li>3:不明
53      * <li>4:IK影響下(回転)
54      * <li>5:回転影響下
55      * <li>6:IK接続先
56      * <li>7:非表示
57      * <li>8:捩り
58      * <li>9:回転連動
59      * </ul>
60      * ※8,9はMMD4.0から?
61      * @throws MmdFormatException 不正フォーマットによる
62      * パース処理の中断をパーサに指示
63      */
64     void pmdBoneInfo(String boneName, byte boneKind)
65             throws MmdFormatException;
66
67     /**
68      * ボーン間接続情報の通知を受け取る。
69      * {@link #BONE_LIST}ループの構成要素。
70      * @param parentId 親(前)ボーンID。無い場合は0xffff。
71      * @param tailId 子(次)ボーンID。末端の場合は0。
72      * 捩りボーンの場合は軸方向のボーンID、
73      * 回転連動ボーンの場合は影響元ボーンID
74      * @param ikId 影響IKボーンID。未指定の場合は0。
75      * ※回転連動では影響度(0-100)、負や100以上もOK!
76      * @throws MmdFormatException 不正フォーマットによる
77      * パース処理の中断をパーサに指示
78      */
79     void pmdBoneLink(int parentId, int tailId, int ikId)
80             throws MmdFormatException;
81
82     /**
83      * ボーン位置情報の通知を受け取る。
84      * {@link #BONE_LIST}ループの構成要素。
85      * @param xPos X座標
86      * @param yPos Y座標
87      * @param zPos Z座標
88      * @throws MmdFormatException 不正フォーマットによる
89      * パース処理の中断をパーサに指示
90      */
91     void pmdBonePosition(float xPos, float yPos, float zPos)
92             throws MmdFormatException;
93
94     /**
95      * IKボーン情報の通知を受け取る。
96      * {@link #IK_LIST}ループの構成要素。
97      * @param boneId IKボーンID
98      * @param targetId IKボーンが最初に接続するIK接続先ボーンID
99      * @param depth 再帰演算の深さ
100      * @param weight 制限角度強度
101      * @throws MmdFormatException 不正フォーマットによる
102      * パース処理の中断をパーサに指示
103      */
104     void pmdIKInfo(int boneId, int targetId, int depth, float weight)
105             throws MmdFormatException;
106
107     /**
108      * IKチェイン要素の通知を受け取る。
109      * {@link #IK_LIST}ループの下位{@link #IKCHAIN_LIST}ループの構成要素。
110      * @param childId IK影響下ボーンID
111      * @throws MmdFormatException 不正フォーマットによる
112      * パース処理の中断をパーサに指示
113      */
114     void pmdIKChainInfo(int childId)
115             throws MmdFormatException;
116
117     /**
118      * ボーングループ名定義の通知を受け取る。
119      * {@link #BONEGROUP_LIST}ループの構成要素。
120      * @param groupName ボーングループ名。末尾のLF(0x0a)は削除される。
121      * @throws MmdFormatException 不正フォーマットによる
122      * パース処理の中断をパーサに指示
123      */
124     void pmdBoneGroupInfo(String groupName) throws MmdFormatException;
125
126     /**
127      * ボーングループ内訳の通知を受け取る。
128      * {@link #GROUPEDBONE_LIST}ループの構成要素。
129      * @param boneId グループに所属するボーンのID
130      * @param groupId ボーンが所属するボーングループIDに1を足した数
131      * @throws MmdFormatException 不正フォーマットによる
132      * パース処理の中断をパーサに指示
133      */
134     void pmdGroupedBoneInfo(int boneId, int groupId)
135             throws MmdFormatException;
136
137 }