-/*\r
- * building rigid 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.Iterator;\r
-import java.util.List;\r
-import jp.sourceforge.mikutoga.corelib.ListUtil;\r
-import jp.sourceforge.mikutoga.parser.ParseStage;\r
-import jp.sourceforge.mikutoga.parser.pmd.PmdLimits;\r
-import jp.sourceforge.mikutoga.parser.pmd.PmdRigidHandler;\r
-import jp.sourceforge.mikutoga.pmd.BoneInfo;\r
-import jp.sourceforge.mikutoga.pmd.DynamicsInfo;\r
-import jp.sourceforge.mikutoga.pmd.PmdModel;\r
-import jp.sourceforge.mikutoga.pmd.Pos3d;\r
-import jp.sourceforge.mikutoga.pmd.Rad3d;\r
-import jp.sourceforge.mikutoga.pmd.RigidBehaviorType;\r
-import jp.sourceforge.mikutoga.pmd.RigidGroup;\r
-import jp.sourceforge.mikutoga.pmd.RigidInfo;\r
-import jp.sourceforge.mikutoga.pmd.RigidShape;\r
-import jp.sourceforge.mikutoga.pmd.RigidShapeType;\r
-\r
-/**\r
- * 剛体関係の通知をパーサから受け取る。\r
- */\r
-class RigidBuilder implements PmdRigidHandler {\r
-\r
- private final List<BoneInfo> boneList;\r
-\r
- private final List<RigidInfo> rigidList;\r
- private Iterator<RigidInfo> rigidIt;\r
- private RigidInfo currentRigid = null;\r
-\r
- private final List<RigidGroup> rigidGroupList;\r
-\r
- /**\r
- * コンストラクタ。\r
- * @param model モデル\r
- */\r
- RigidBuilder(PmdModel model){\r
- super();\r
- this.boneList = model.getBoneList();\r
- this.rigidList = model.getRigidList();\r
- this.rigidGroupList = model.getRigidGroupList();\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
- ListUtil.prepareDefConsList(this.rigidList, RigidInfo.class, loops);\r
- ListUtil.assignIndexedSerial(this.rigidList);\r
-\r
- this.rigidIt = this.rigidList.iterator();\r
- if(this.rigidIt.hasNext()){\r
- this.currentRigid = this.rigidIt.next();\r
- }\r
-\r
- ListUtil.prepareDefConsList(this.rigidGroupList,\r
- RigidGroup.class,\r
- PmdLimits.RIGIDGROUP_FIXEDNUM );\r
- ListUtil.assignIndexedSerial(this.rigidGroupList);\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param stage {@inheritDoc}\r
- */\r
- @Override\r
- public void loopNext(ParseStage stage){\r
- if(this.rigidIt.hasNext()){\r
- this.currentRigid = this.rigidIt.next();\r
- }\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param stage {@inheritDoc}\r
- */\r
- @Override\r
- public void loopEnd(ParseStage stage){\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param rigidName {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidName(String rigidName){\r
- this.currentRigid.getRigidName().setPrimaryText(rigidName);\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param rigidGroupId {@inheritDoc}\r
- * @param linkedBoneId {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidInfo(int rigidGroupId, int linkedBoneId){\r
- BoneInfo bone;\r
- if(linkedBoneId < 0 || 65535 <= linkedBoneId){\r
- bone = null;\r
- }else{\r
- bone = this.boneList.get(linkedBoneId);\r
- }\r
- RigidGroup group = this.rigidGroupList.get(rigidGroupId);\r
-\r
- this.currentRigid.setLinkedBone(bone);\r
- this.currentRigid.setRigidGroup(group);\r
- group.getRigidList().add(this.currentRigid);\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param shapeType {@inheritDoc}\r
- * @param width {@inheritDoc}\r
- * @param height {@inheritDoc}\r
- * @param depth {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidShape(byte shapeType,\r
- float width, float height, float depth){\r
- RigidShape shape = this.currentRigid.getRigidShape();\r
-\r
- shape.setWidth(width);\r
- shape.setHeight(height);\r
- shape.setDepth(depth);\r
-\r
- RigidShapeType type = RigidShapeType.decode(shapeType);\r
- shape.setShapeType(type);\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param posX {@inheritDoc}\r
- * @param posY {@inheritDoc}\r
- * @param posZ {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidPosition(float posX, float posY, float posZ){\r
- Pos3d position = this.currentRigid.getPosition();\r
- position.setXPos(posX);\r
- position.setYPos(posY);\r
- position.setZPos(posZ);\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param radX {@inheritDoc}\r
- * @param radY {@inheritDoc}\r
- * @param radZ {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidRotation(float radX, float radY, float radZ){\r
- Rad3d rotation = this.currentRigid.getRotation();\r
- rotation.setXRad(radX);\r
- rotation.setYRad(radY);\r
- rotation.setZRad(radZ);\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param mass {@inheritDoc}\r
- * @param dampingPos {@inheritDoc}\r
- * @param dampingRot {@inheritDoc}\r
- * @param restitution {@inheritDoc}\r
- * @param friction {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidPhysics(float mass,\r
- float dampingPos,\r
- float dampingRot,\r
- float restitution,\r
- float friction ){\r
- DynamicsInfo info = this.currentRigid.getDynamicsInfo();\r
-\r
- info.setMass(mass);\r
- info.setDampingPosition(dampingPos);\r
- info.setDampingRotation(dampingRot);\r
- info.setRestitution(restitution);\r
- info.setFriction(friction);\r
-\r
- return;\r
- }\r
-\r
- /**\r
- * {@inheritDoc}\r
- * @param behaveType {@inheritDoc}\r
- * @param collisionMap {@inheritDoc}\r
- */\r
- @Override\r
- public void pmdRigidBehavior(byte behaveType, short collisionMap){\r
- RigidBehaviorType type = RigidBehaviorType.decode(behaveType);\r
- this.currentRigid.setBehaviorType(type);\r
-\r
- for(int bitPos = 0; bitPos < PmdLimits.RIGIDGROUP_FIXEDNUM; bitPos++){\r
- short mask = 0x0001;\r
- mask <<= bitPos;\r
- if((collisionMap & mask) == 0){\r
- RigidGroup group = this.rigidGroupList.get(bitPos);\r
- this.currentRigid.getThroughGroupColl().add(group);\r
- }\r
- }\r
-\r
- return;\r
- }\r
-\r
-}\r
+/*
+ * building rigid information
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.pmd.pmdloader;
+
+import java.util.Iterator;
+import java.util.List;
+import jp.sourceforge.mikutoga.corelib.ListUtil;
+import jp.sourceforge.mikutoga.parser.ParseStage;
+import jp.sourceforge.mikutoga.parser.pmd.PmdLimits;
+import jp.sourceforge.mikutoga.parser.pmd.PmdRigidHandler;
+import jp.sourceforge.mikutoga.pmd.BoneInfo;
+import jp.sourceforge.mikutoga.pmd.DynamicsInfo;
+import jp.sourceforge.mikutoga.pmd.PmdModel;
+import jp.sourceforge.mikutoga.pmd.Pos3d;
+import jp.sourceforge.mikutoga.pmd.Rad3d;
+import jp.sourceforge.mikutoga.pmd.RigidBehaviorType;
+import jp.sourceforge.mikutoga.pmd.RigidGroup;
+import jp.sourceforge.mikutoga.pmd.RigidInfo;
+import jp.sourceforge.mikutoga.pmd.RigidShape;
+import jp.sourceforge.mikutoga.pmd.RigidShapeType;
+
+/**
+ * 剛体関係の通知をパーサから受け取る。
+ */
+class RigidBuilder implements PmdRigidHandler {
+
+ private final List<BoneInfo> boneList;
+
+ private final List<RigidInfo> rigidList;
+ private Iterator<RigidInfo> rigidIt;
+ private RigidInfo currentRigid = null;
+
+ private final List<RigidGroup> rigidGroupList;
+
+ /**
+ * コンストラクタ。
+ * @param model モデル
+ */
+ RigidBuilder(PmdModel model){
+ super();
+ this.boneList = model.getBoneList();
+ this.rigidList = model.getRigidList();
+ this.rigidGroupList = model.getRigidGroupList();
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param stage {@inheritDoc}
+ * @param loops {@inheritDoc}
+ */
+ @Override
+ public void loopStart(ParseStage stage, int loops){
+ ListUtil.prepareDefConsList(this.rigidList, RigidInfo.class, loops);
+ ListUtil.assignIndexedSerial(this.rigidList);
+
+ this.rigidIt = this.rigidList.iterator();
+ if(this.rigidIt.hasNext()){
+ this.currentRigid = this.rigidIt.next();
+ }
+
+ ListUtil.prepareDefConsList(this.rigidGroupList,
+ RigidGroup.class,
+ PmdLimits.RIGIDGROUP_FIXEDNUM );
+ ListUtil.assignIndexedSerial(this.rigidGroupList);
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param stage {@inheritDoc}
+ */
+ @Override
+ public void loopNext(ParseStage stage){
+ if(this.rigidIt.hasNext()){
+ this.currentRigid = this.rigidIt.next();
+ }
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param stage {@inheritDoc}
+ */
+ @Override
+ public void loopEnd(ParseStage stage){
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param rigidName {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidName(String rigidName){
+ this.currentRigid.getRigidName().setPrimaryText(rigidName);
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param rigidGroupId {@inheritDoc}
+ * @param linkedBoneId {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidInfo(int rigidGroupId, int linkedBoneId){
+ BoneInfo bone;
+ if(linkedBoneId < 0 || 65535 <= linkedBoneId){
+ bone = null;
+ }else{
+ bone = this.boneList.get(linkedBoneId);
+ }
+ RigidGroup group = this.rigidGroupList.get(rigidGroupId);
+
+ this.currentRigid.setLinkedBone(bone);
+ this.currentRigid.setRigidGroup(group);
+ group.getRigidList().add(this.currentRigid);
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param shapeType {@inheritDoc}
+ * @param width {@inheritDoc}
+ * @param height {@inheritDoc}
+ * @param depth {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidShape(byte shapeType,
+ float width, float height, float depth){
+ RigidShape shape = this.currentRigid.getRigidShape();
+
+ shape.setWidth(width);
+ shape.setHeight(height);
+ shape.setDepth(depth);
+
+ RigidShapeType type = RigidShapeType.decode(shapeType);
+ shape.setShapeType(type);
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param posX {@inheritDoc}
+ * @param posY {@inheritDoc}
+ * @param posZ {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidPosition(float posX, float posY, float posZ){
+ Pos3d position = this.currentRigid.getPosition();
+ position.setXPos(posX);
+ position.setYPos(posY);
+ position.setZPos(posZ);
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param radX {@inheritDoc}
+ * @param radY {@inheritDoc}
+ * @param radZ {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidRotation(float radX, float radY, float radZ){
+ Rad3d rotation = this.currentRigid.getRotation();
+ rotation.setXRad(radX);
+ rotation.setYRad(radY);
+ rotation.setZRad(radZ);
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param mass {@inheritDoc}
+ * @param dampingPos {@inheritDoc}
+ * @param dampingRot {@inheritDoc}
+ * @param restitution {@inheritDoc}
+ * @param friction {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidPhysics(float mass,
+ float dampingPos,
+ float dampingRot,
+ float restitution,
+ float friction ){
+ DynamicsInfo info = this.currentRigid.getDynamicsInfo();
+
+ info.setMass(mass);
+ info.setDampingPosition(dampingPos);
+ info.setDampingRotation(dampingRot);
+ info.setRestitution(restitution);
+ info.setFriction(friction);
+
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @param behaveType {@inheritDoc}
+ * @param collisionMap {@inheritDoc}
+ */
+ @Override
+ public void pmdRigidBehavior(byte behaveType, short collisionMap){
+ RigidBehaviorType type = RigidBehaviorType.decode(behaveType);
+ this.currentRigid.setBehaviorType(type);
+
+ for(int bitPos = 0; bitPos < PmdLimits.RIGIDGROUP_FIXEDNUM; bitPos++){
+ short mask = 0x0001;
+ mask <<= bitPos;
+ if((collisionMap & mask) == 0){
+ RigidGroup group = this.rigidGroupList.get(bitPos);
+ this.currentRigid.getThroughGroupColl().add(group);
+ }
+ }
+
+ return;
+ }
+
+}