OSDN Git Service

import文順序調整
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdloader / RigidBuilder.java
1 /*\r
2  * building rigid information\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.pmd.pmdloader;\r
9 \r
10 import java.util.Iterator;\r
11 import java.util.List;\r
12 import jp.sourceforge.mikutoga.corelib.ListUtil;\r
13 import jp.sourceforge.mikutoga.parser.ParseStage;\r
14 import jp.sourceforge.mikutoga.parser.pmd.PmdLimits;\r
15 import jp.sourceforge.mikutoga.parser.pmd.PmdRigidHandler;\r
16 import jp.sourceforge.mikutoga.pmd.BoneInfo;\r
17 import jp.sourceforge.mikutoga.pmd.DynamicsInfo;\r
18 import jp.sourceforge.mikutoga.pmd.PmdModel;\r
19 import jp.sourceforge.mikutoga.pmd.Pos3d;\r
20 import jp.sourceforge.mikutoga.pmd.Rad3d;\r
21 import jp.sourceforge.mikutoga.pmd.RigidBehaviorType;\r
22 import jp.sourceforge.mikutoga.pmd.RigidGroup;\r
23 import jp.sourceforge.mikutoga.pmd.RigidInfo;\r
24 import jp.sourceforge.mikutoga.pmd.RigidShape;\r
25 import jp.sourceforge.mikutoga.pmd.RigidShapeType;\r
26 \r
27 /**\r
28  * 剛体関係の通知をパーサから受け取る。\r
29  */\r
30 class RigidBuilder implements PmdRigidHandler {\r
31 \r
32     private final List<BoneInfo> boneList;\r
33 \r
34     private final List<RigidInfo> rigidList;\r
35     private Iterator<RigidInfo> rigidIt;\r
36     private RigidInfo currentRigid = null;\r
37 \r
38     private final List<RigidGroup> rigidGroupList;\r
39 \r
40     /**\r
41      * コンストラクタ。\r
42      * @param model モデル\r
43      */\r
44     RigidBuilder(PmdModel model){\r
45         super();\r
46         this.boneList = model.getBoneList();\r
47         this.rigidList = model.getRigidList();\r
48         this.rigidGroupList = model.getRigidGroupList();\r
49         return;\r
50     }\r
51 \r
52     /**\r
53      * {@inheritDoc}\r
54      * @param stage {@inheritDoc}\r
55      * @param loops {@inheritDoc}\r
56      */\r
57     @Override\r
58     public void loopStart(ParseStage stage, int loops){\r
59         ListUtil.prepareDefConsList(this.rigidList, RigidInfo.class, loops);\r
60         ListUtil.assignIndexedSerial(this.rigidList);\r
61 \r
62         this.rigidIt = this.rigidList.iterator();\r
63         if(this.rigidIt.hasNext()){\r
64             this.currentRigid = this.rigidIt.next();\r
65         }\r
66 \r
67         ListUtil.prepareDefConsList(this.rigidGroupList,\r
68                                     RigidGroup.class,\r
69                                     PmdLimits.RIGIDGROUP_FIXEDNUM );\r
70         ListUtil.assignIndexedSerial(this.rigidGroupList);\r
71 \r
72         return;\r
73     }\r
74 \r
75     /**\r
76      * {@inheritDoc}\r
77      * @param stage {@inheritDoc}\r
78      */\r
79     @Override\r
80     public void loopNext(ParseStage stage){\r
81         if(this.rigidIt.hasNext()){\r
82             this.currentRigid = this.rigidIt.next();\r
83         }\r
84         return;\r
85     }\r
86 \r
87     /**\r
88      * {@inheritDoc}\r
89      * @param stage {@inheritDoc}\r
90      */\r
91     @Override\r
92     public void loopEnd(ParseStage stage){\r
93         return;\r
94     }\r
95 \r
96     /**\r
97      * {@inheritDoc}\r
98      * @param rigidName {@inheritDoc}\r
99      */\r
100     @Override\r
101     public void pmdRigidName(String rigidName){\r
102         this.currentRigid.getRigidName().setPrimaryText(rigidName);\r
103         return;\r
104     }\r
105 \r
106     /**\r
107      * {@inheritDoc}\r
108      * @param rigidGroupId {@inheritDoc}\r
109      * @param linkedBoneId {@inheritDoc}\r
110      */\r
111     @Override\r
112     public void pmdRigidInfo(int rigidGroupId, int linkedBoneId){\r
113         BoneInfo bone = this.boneList.get(linkedBoneId);\r
114         RigidGroup group = this.rigidGroupList.get(rigidGroupId);\r
115 \r
116         this.currentRigid.setLinkedBone(bone);\r
117         this.currentRigid.setRigidGroup(group);\r
118         group.getRigidList().add(this.currentRigid);\r
119 \r
120         return;\r
121     }\r
122 \r
123     /**\r
124      * {@inheritDoc}\r
125      * @param shapeType {@inheritDoc}\r
126      * @param width {@inheritDoc}\r
127      * @param height {@inheritDoc}\r
128      * @param depth {@inheritDoc}\r
129      */\r
130     @Override\r
131     public void pmdRigidShape(byte shapeType,\r
132                               float width, float height, float depth){\r
133         RigidShape shape = this.currentRigid.getRigidShape();\r
134 \r
135         shape.setWidth(width);\r
136         shape.setHeight(height);\r
137         shape.setDepth(depth);\r
138 \r
139         RigidShapeType type = RigidShapeType.decode(shapeType);\r
140         shape.setShapeType(type);\r
141 \r
142         return;\r
143     }\r
144 \r
145     /**\r
146      * {@inheritDoc}\r
147      * @param posX {@inheritDoc}\r
148      * @param posY {@inheritDoc}\r
149      * @param posZ {@inheritDoc}\r
150      */\r
151     @Override\r
152     public void pmdRigidPosition(float posX, float posY, float posZ){\r
153         Pos3d position = this.currentRigid.getPosition();\r
154         position.setXPos(posX);\r
155         position.setYPos(posY);\r
156         position.setZPos(posZ);\r
157         return;\r
158     }\r
159 \r
160     /**\r
161      * {@inheritDoc}\r
162      * @param radX {@inheritDoc}\r
163      * @param radY {@inheritDoc}\r
164      * @param radZ {@inheritDoc}\r
165      */\r
166     @Override\r
167     public void pmdRigidRotation(float radX, float radY, float radZ){\r
168         Rad3d rotation = this.currentRigid.getRotation();\r
169         rotation.setXRad(radX);\r
170         rotation.setYRad(radY);\r
171         rotation.setZRad(radZ);\r
172         return;\r
173     }\r
174 \r
175     /**\r
176      * {@inheritDoc}\r
177      * @param mass {@inheritDoc}\r
178      * @param dampingPos {@inheritDoc}\r
179      * @param dampingRot {@inheritDoc}\r
180      * @param restitution {@inheritDoc}\r
181      * @param friction {@inheritDoc}\r
182      */\r
183     @Override\r
184     public void pmdRigidPhysics(float mass,\r
185                                   float dampingPos,\r
186                                   float dampingRot,\r
187                                   float restitution,\r
188                                   float friction ){\r
189         DynamicsInfo info = this.currentRigid.getDynamicsInfo();\r
190 \r
191         info.setMass(mass);\r
192         info.setDampingPosition(dampingPos);\r
193         info.setDampingRotation(dampingRot);\r
194         info.setRestitution(restitution);\r
195         info.setFriction(friction);\r
196 \r
197         return;\r
198     }\r
199 \r
200     /**\r
201      * {@inheritDoc}\r
202      * @param behaveType {@inheritDoc}\r
203      * @param collisionMap {@inheritDoc}\r
204      */\r
205     @Override\r
206     public void pmdRigidBehavior(byte behaveType, short collisionMap){\r
207         RigidBehaviorType type = RigidBehaviorType.decode(behaveType);\r
208         this.currentRigid.setBehaviorType(type);\r
209 \r
210         for(int bitPos = 0; bitPos < PmdLimits.RIGIDGROUP_FIXEDNUM; bitPos++){\r
211             short mask = 0x0001;\r
212             mask <<= bitPos;\r
213             if((collisionMap & mask) == 0){\r
214                 RigidGroup group = this.rigidGroupList.get(bitPos);\r
215                 this.currentRigid.getThroughGroupColl().add(group);\r
216             }\r
217         }\r
218 \r
219         return;\r
220     }\r
221 \r
222 }\r