OSDN Git Service

1.105.3-SNAPSHOT版開発開始
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / parser / pmd / PmdParserExt3.java
index a34272b..1081901 100644 (file)
-/*\r
- * pmd parser extension 3\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2010 MikuToga Partners\r
- */\r
-\r
-package jp.sourceforge.mikutoga.parser.pmd;\r
-\r
-import java.io.IOException;\r
-import jp.sourceforge.mikutoga.parser.MmdFormatException;\r
-import jp.sourceforge.mikutoga.parser.MmdSource;\r
-\r
-/**\r
- * PMDモデルファイルのパーサ拡張その3。\r
- * ※剛体情報対応\r
- */\r
-public class PmdParserExt3 extends PmdParserExt2 {\r
-\r
-    private static final int RIGID_DATA_SZ = 83;\r
-    private static final int JOINT_DATA_SZ = 124;\r
-\r
-    private PmdRigidHandler rigidHandler = null;\r
-    private PmdJointHandler jointHandler = null;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param source 入力ソース\r
-     */\r
-    public PmdParserExt3(MmdSource source){\r
-        super(source);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 剛体ハンドラを登録する。\r
-     * @param handler 剛体ハンドラ\r
-     */\r
-    public void setRigidHandler(PmdRigidHandler handler){\r
-        this.rigidHandler = handler;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * ジョイントハンドラを登録する。\r
-     * @param handler ジョイントハンドラ\r
-     */\r
-    public void setJointHandler(PmdJointHandler handler){\r
-        this.jointHandler = handler;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @throws IOException {@inheritDoc}\r
-     * @throws MmdFormatException {@inheritDoc}\r
-     */\r
-    @Override\r
-    protected void parseBody()\r
-            throws IOException, MmdFormatException {\r
-        super.parseBody();\r
-\r
-        if(hasMore()){\r
-            parseRigidList();\r
-            parseJointList();\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 剛体情報のパースと通知。\r
-     * @throws IOException IOエラー\r
-     * @throws MmdFormatException フォーマットエラー\r
-     */\r
-    private void parseRigidList() throws IOException, MmdFormatException{\r
-        int rigidNum = parseInteger();\r
-\r
-        if(this.rigidHandler == null){\r
-            skip(RIGID_DATA_SZ * rigidNum);\r
-            return;\r
-        }\r
-\r
-        this.rigidHandler.loopStart(PmdRigidHandler.RIGID_LIST, rigidNum);\r
-\r
-        for(int ct = 0; ct < rigidNum; ct++){\r
-            String rigidName =\r
-                    parseZeroTermString(PmdLimits.MAXBYTES_RIGIDNAME);\r
-            this.rigidHandler.pmdRigidName(rigidName);\r
-\r
-            int linkedBoneId = parseUShortAsInteger();\r
-            int rigidGroupId = parseUByteAsInteger();\r
-            short collisionMap = parseShort();\r
-            this.rigidHandler.pmdRigidInfo(rigidGroupId, linkedBoneId);\r
-\r
-            byte shapeType = parseByte();\r
-            float width = parseFloat();\r
-            float height = parseFloat();\r
-            float depth = parseFloat();\r
-            this.rigidHandler.pmdRigidShape(shapeType, width, height, depth);\r
-\r
-            float posX = parseFloat();\r
-            float posY = parseFloat();\r
-            float posZ = parseFloat();\r
-            this.rigidHandler.pmdRigidPosition(posX, posY, posZ);\r
-\r
-            float rotX = parseFloat();\r
-            float rotY = parseFloat();\r
-            float rotZ = parseFloat();\r
-            this.rigidHandler.pmdRigidRotation(rotX, rotY, rotZ);\r
-\r
-            float mass = parseFloat();\r
-            float dampingPos = parseFloat();\r
-            float dampingRot = parseFloat();\r
-            float restitution = parseFloat();\r
-            float friction = parseFloat();\r
-            this.rigidHandler.pmdRigidPhysics(mass,\r
-                                              dampingPos, dampingRot,\r
-                                              restitution, friction );\r
-\r
-            byte behaveType = parseByte();\r
-            this.rigidHandler.pmdRigidBehavior(behaveType, collisionMap);\r
-\r
-            this.rigidHandler.loopNext(PmdRigidHandler.RIGID_LIST);\r
-        }\r
-\r
-        this.rigidHandler.loopEnd(PmdRigidHandler.RIGID_LIST);\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * ジョイント情報のパースと通知。\r
-     * @throws IOException IOエラー\r
-     * @throws MmdFormatException フォーマットエラー\r
-     */\r
-    private void parseJointList() throws IOException, MmdFormatException{\r
-        int jointNum = parseInteger();\r
-\r
-        if(this.jointHandler == null){\r
-            skip(JOINT_DATA_SZ * jointNum);\r
-            return;\r
-        }\r
-\r
-        this.jointHandler.loopStart(PmdJointHandler.JOINT_LIST, jointNum);\r
-\r
-        for(int ct = 0; ct < jointNum; ct++){\r
-            String jointName =\r
-                    parseZeroTermString(PmdLimits.MAXBYTES_JOINTNAME);\r
-            this.jointHandler.pmdJointName(jointName);\r
-\r
-            int rigidIdA = parseInteger();\r
-            int rigidIdB = parseInteger();\r
-            this.jointHandler.pmdJointLink(rigidIdA, rigidIdB);\r
-\r
-            float posX = parseFloat();\r
-            float posY = parseFloat();\r
-            float posZ = parseFloat();\r
-            this.jointHandler.pmdJointPosition(posX, posY, posZ);\r
-\r
-            float rotX = parseFloat();\r
-            float rotY = parseFloat();\r
-            float rotZ = parseFloat();\r
-            this.jointHandler.pmdJointRotation(rotX, rotY, rotZ);\r
-\r
-            float posXlim1 = parseFloat();\r
-            float posYlim1 = parseFloat();\r
-            float posZlim1 = parseFloat();\r
-            float posXlim2 = parseFloat();\r
-            float posYlim2 = parseFloat();\r
-            float posZlim2 = parseFloat();\r
-            this.jointHandler.pmdPositionLimit(posXlim1, posXlim2,\r
-                                               posYlim1, posYlim2,\r
-                                               posZlim1, posZlim2 );\r
-\r
-            float rotXlim1 = parseFloat();\r
-            float rotYlim1 = parseFloat();\r
-            float rotZlim1 = parseFloat();\r
-            float rotXlim2 = parseFloat();\r
-            float rotYlim2 = parseFloat();\r
-            float rotZlim2 = parseFloat();\r
-            this.jointHandler.pmdRotationLimit(rotXlim1, rotXlim2,\r
-                                               rotYlim1, rotYlim2,\r
-                                               rotZlim1, rotZlim2 );\r
-\r
-            float elasticPosX = parseFloat();\r
-            float elasticPosY = parseFloat();\r
-            float elasticPosZ = parseFloat();\r
-            this.jointHandler.pmdElasticPosition(elasticPosX,\r
-                                                 elasticPosY,\r
-                                                 elasticPosZ );\r
-\r
-            float elasticRotX = parseFloat();\r
-            float elasticRotY = parseFloat();\r
-            float elasticRotZ = parseFloat();\r
-            this.jointHandler.pmdElasticRotation(elasticRotX,\r
-                                                 elasticRotY,\r
-                                                 elasticRotZ );\r
-\r
-            this.jointHandler.loopNext(PmdJointHandler.JOINT_LIST);\r
-        }\r
-\r
-        this.jointHandler.loopEnd(PmdJointHandler.JOINT_LIST);\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * pmd parser extension 3
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.parser.pmd;
+
+import java.io.IOException;
+import jp.sourceforge.mikutoga.parser.MmdFormatException;
+import jp.sourceforge.mikutoga.parser.MmdSource;
+
+/**
+ * PMDモデルファイルのパーサ拡張その3。
+ * ※剛体情報対応
+ */
+public class PmdParserExt3 extends PmdParserExt2 {
+
+    private static final int RIGID_DATA_SZ = 83;
+    private static final int JOINT_DATA_SZ = 124;
+
+    private PmdRigidHandler rigidHandler = null;
+    private PmdJointHandler jointHandler = null;
+
+    /**
+     * コンストラクタ。
+     * @param source 入力ソース
+     */
+    public PmdParserExt3(MmdSource source){
+        super(source);
+        return;
+    }
+
+    /**
+     * 剛体ハンドラを登録する。
+     * @param handler 剛体ハンドラ
+     */
+    public void setRigidHandler(PmdRigidHandler handler){
+        this.rigidHandler = handler;
+        return;
+    }
+
+    /**
+     * ジョイントハンドラを登録する。
+     * @param handler ジョイントハンドラ
+     */
+    public void setJointHandler(PmdJointHandler handler){
+        this.jointHandler = handler;
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @throws IOException {@inheritDoc}
+     * @throws MmdFormatException {@inheritDoc}
+     */
+    @Override
+    protected void parseBody()
+            throws IOException, MmdFormatException {
+        super.parseBody();
+
+        if(hasMore()){
+            parseRigidList();
+            parseJointList();
+        }
+
+        return;
+    }
+
+    /**
+     * 剛体情報のパースと通知。
+     * @throws IOException IOエラー
+     * @throws MmdFormatException フォーマットエラー
+     */
+    private void parseRigidList() throws IOException, MmdFormatException{
+        int rigidNum = parseInteger();
+
+        if(this.rigidHandler == null){
+            skip(RIGID_DATA_SZ * rigidNum);
+            return;
+        }
+
+        this.rigidHandler.loopStart(PmdRigidHandler.RIGID_LIST, rigidNum);
+
+        for(int ct = 0; ct < rigidNum; ct++){
+            String rigidName =
+                    parseZeroTermString(PmdLimits.MAXBYTES_RIGIDNAME);
+            this.rigidHandler.pmdRigidName(rigidName);
+
+            int linkedBoneId = parseUShortAsInteger();
+            int rigidGroupId = parseUByteAsInteger();
+            short collisionMap = parseShort();
+            this.rigidHandler.pmdRigidInfo(rigidGroupId, linkedBoneId);
+
+            byte shapeType = parseByte();
+            float width = parseFloat();
+            float height = parseFloat();
+            float depth = parseFloat();
+            this.rigidHandler.pmdRigidShape(shapeType, width, height, depth);
+
+            float posX = parseFloat();
+            float posY = parseFloat();
+            float posZ = parseFloat();
+            this.rigidHandler.pmdRigidPosition(posX, posY, posZ);
+
+            float rotX = parseFloat();
+            float rotY = parseFloat();
+            float rotZ = parseFloat();
+            this.rigidHandler.pmdRigidRotation(rotX, rotY, rotZ);
+
+            float mass = parseFloat();
+            float dampingPos = parseFloat();
+            float dampingRot = parseFloat();
+            float restitution = parseFloat();
+            float friction = parseFloat();
+            this.rigidHandler.pmdRigidPhysics(mass,
+                                              dampingPos, dampingRot,
+                                              restitution, friction );
+
+            byte behaveType = parseByte();
+            this.rigidHandler.pmdRigidBehavior(behaveType, collisionMap);
+
+            this.rigidHandler.loopNext(PmdRigidHandler.RIGID_LIST);
+        }
+
+        this.rigidHandler.loopEnd(PmdRigidHandler.RIGID_LIST);
+
+        return;
+    }
+
+    /**
+     * ジョイント情報のパースと通知。
+     * @throws IOException IOエラー
+     * @throws MmdFormatException フォーマットエラー
+     */
+    private void parseJointList() throws IOException, MmdFormatException{
+        int jointNum = parseInteger();
+
+        if(this.jointHandler == null){
+            skip(JOINT_DATA_SZ * jointNum);
+            return;
+        }
+
+        this.jointHandler.loopStart(PmdJointHandler.JOINT_LIST, jointNum);
+
+        for(int ct = 0; ct < jointNum; ct++){
+            String jointName =
+                    parseZeroTermString(PmdLimits.MAXBYTES_JOINTNAME);
+            this.jointHandler.pmdJointName(jointName);
+
+            int rigidIdA = parseInteger();
+            int rigidIdB = parseInteger();
+            this.jointHandler.pmdJointLink(rigidIdA, rigidIdB);
+
+            float posX = parseFloat();
+            float posY = parseFloat();
+            float posZ = parseFloat();
+            this.jointHandler.pmdJointPosition(posX, posY, posZ);
+
+            float rotX = parseFloat();
+            float rotY = parseFloat();
+            float rotZ = parseFloat();
+            this.jointHandler.pmdJointRotation(rotX, rotY, rotZ);
+
+            float posXlim1 = parseFloat();
+            float posYlim1 = parseFloat();
+            float posZlim1 = parseFloat();
+            float posXlim2 = parseFloat();
+            float posYlim2 = parseFloat();
+            float posZlim2 = parseFloat();
+            this.jointHandler.pmdPositionLimit(posXlim1, posXlim2,
+                                               posYlim1, posYlim2,
+                                               posZlim1, posZlim2 );
+
+            float rotXlim1 = parseFloat();
+            float rotYlim1 = parseFloat();
+            float rotZlim1 = parseFloat();
+            float rotXlim2 = parseFloat();
+            float rotYlim2 = parseFloat();
+            float rotZlim2 = parseFloat();
+            this.jointHandler.pmdRotationLimit(rotXlim1, rotXlim2,
+                                               rotYlim1, rotYlim2,
+                                               rotZlim1, rotZlim2 );
+
+            float elasticPosX = parseFloat();
+            float elasticPosY = parseFloat();
+            float elasticPosZ = parseFloat();
+            this.jointHandler.pmdElasticPosition(elasticPosX,
+                                                 elasticPosY,
+                                                 elasticPosZ );
+
+            float elasticRotX = parseFloat();
+            float elasticRotY = parseFloat();
+            float elasticRotZ = parseFloat();
+            this.jointHandler.pmdElasticRotation(elasticRotX,
+                                                 elasticRotY,
+                                                 elasticRotZ );
+
+            this.jointHandler.loopNext(PmdJointHandler.JOINT_LIST);
+        }
+
+        this.jointHandler.loopEnd(PmdJointHandler.JOINT_LIST);
+
+        return;
+    }
+
+}