[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / bullet3 / src / BulletSoftBody / btSoftBodyData.h
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans  https://bulletphysics.org
4
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15
16 #ifndef BT_SOFTBODY_FLOAT_DATA
17 #define BT_SOFTBODY_FLOAT_DATA
18
19 #include "BulletCollision/CollisionDispatch/btCollisionObject.h"
20 #include "BulletDynamics/Dynamics/btRigidBody.h"
21
22 struct SoftBodyMaterialData
23 {
24         float m_linearStiffness;
25         float m_angularStiffness;
26         float m_volumeStiffness;
27         int m_flags;
28 };
29
30 struct SoftBodyNodeData
31 {
32         SoftBodyMaterialData *m_material;
33         btVector3FloatData m_position;
34         btVector3FloatData m_previousPosition;
35         btVector3FloatData m_velocity;
36         btVector3FloatData m_accumulatedForce;
37         btVector3FloatData m_normal;
38         float m_inverseMass;
39         float m_area;
40         int m_attach;
41         int m_pad;
42 };
43
44 struct SoftBodyLinkData
45 {
46         SoftBodyMaterialData *m_material;
47         int m_nodeIndices[2];  // Node pointers
48         float m_restLength;    // Rest length
49         int m_bbending;        // Bending link
50 };
51
52 struct SoftBodyFaceData
53 {
54         btVector3FloatData m_normal;  // Normal
55         SoftBodyMaterialData *m_material;
56         int m_nodeIndices[3];  // Node pointers
57         float m_restArea;      // Rest area
58 };
59
60 struct SoftBodyTetraData
61 {
62         btVector3FloatData m_c0[4];  // gradients
63         SoftBodyMaterialData *m_material;
64         int m_nodeIndices[4];  // Node pointers
65         float m_restVolume;    // Rest volume
66         float m_c1;            // (4*kVST)/(im0+im1+im2+im3)
67         float m_c2;            // m_c1/sum(|g0..3|^2)
68         int m_pad;
69 };
70
71 struct SoftRigidAnchorData
72 {
73         btMatrix3x3FloatData m_c0;        // Impulse matrix
74         btVector3FloatData m_c1;          // Relative anchor
75         btVector3FloatData m_localFrame;  // Anchor position in body space
76         btRigidBodyData *m_rigidBody;
77         int m_nodeIndex;  // Node pointer
78         float m_c2;       // ima*dt
79 };
80
81 struct SoftBodyConfigData
82 {
83         int m_aeroModel;                         // Aerodynamic model (default: V_Point)
84         float m_baumgarte;                       // Velocities correction factor (Baumgarte)
85         float m_damping;                         // Damping coefficient [0,1]
86         float m_drag;                            // Drag coefficient [0,+inf]
87         float m_lift;                            // Lift coefficient [0,+inf]
88         float m_pressure;                        // Pressure coefficient [-inf,+inf]
89         float m_volume;                          // Volume conversation coefficient [0,+inf]
90         float m_dynamicFriction;                 // Dynamic friction coefficient [0,1]
91         float m_poseMatch;                       // Pose matching coefficient [0,1]
92         float m_rigidContactHardness;            // Rigid contacts hardness [0,1]
93         float m_kineticContactHardness;          // Kinetic contacts hardness [0,1]
94         float m_softContactHardness;             // Soft contacts hardness [0,1]
95         float m_anchorHardness;                  // Anchors hardness [0,1]
96         float m_softRigidClusterHardness;        // Soft vs rigid hardness [0,1] (cluster only)
97         float m_softKineticClusterHardness;      // Soft vs kinetic hardness [0,1] (cluster only)
98         float m_softSoftClusterHardness;         // Soft vs soft hardness [0,1] (cluster only)
99         float m_softRigidClusterImpulseSplit;    // Soft vs rigid impulse split [0,1] (cluster only)
100         float m_softKineticClusterImpulseSplit;  // Soft vs rigid impulse split [0,1] (cluster only)
101         float m_softSoftClusterImpulseSplit;     // Soft vs rigid impulse split [0,1] (cluster only)
102         float m_maxVolume;                       // Maximum volume ratio for pose
103         float m_timeScale;                       // Time scale
104         int m_velocityIterations;                // Velocities solver iterations
105         int m_positionIterations;                // Positions solver iterations
106         int m_driftIterations;                   // Drift solver iterations
107         int m_clusterIterations;                 // Cluster solver iterations
108         int m_collisionFlags;                    // Collisions flags
109 };
110
111 struct SoftBodyPoseData
112 {
113         btMatrix3x3FloatData m_rot;    // Rotation
114         btMatrix3x3FloatData m_scale;  // Scale
115         btMatrix3x3FloatData m_aqq;    // Base scaling
116         btVector3FloatData m_com;      // COM
117
118         btVector3FloatData *m_positions;  // Reference positions
119         float *m_weights;                 // Weights
120         int m_numPositions;
121         int m_numWeigts;
122
123         int m_bvolume;       // Is valid
124         int m_bframe;        // Is frame
125         float m_restVolume;  // Rest volume
126         int m_pad;
127 };
128
129 struct SoftBodyClusterData
130 {
131         btTransformFloatData m_framexform;
132         btMatrix3x3FloatData m_locii;
133         btMatrix3x3FloatData m_invwi;
134         btVector3FloatData m_com;
135         btVector3FloatData m_vimpulses[2];
136         btVector3FloatData m_dimpulses[2];
137         btVector3FloatData m_lv;
138         btVector3FloatData m_av;
139
140         btVector3FloatData *m_framerefs;
141         int *m_nodeIndices;
142         float *m_masses;
143
144         int m_numFrameRefs;
145         int m_numNodes;
146         int m_numMasses;
147
148         float m_idmass;
149         float m_imass;
150         int m_nvimpulses;
151         int m_ndimpulses;
152         float m_ndamping;
153         float m_ldamping;
154         float m_adamping;
155         float m_matching;
156         float m_maxSelfCollisionImpulse;
157         float m_selfCollisionImpulseFactor;
158         int m_containsAnchor;
159         int m_collide;
160         int m_clusterIndex;
161 };
162
163 enum btSoftJointBodyType
164 {
165         BT_JOINT_SOFT_BODY_CLUSTER = 1,
166         BT_JOINT_RIGID_BODY,
167         BT_JOINT_COLLISION_OBJECT
168 };
169
170 struct btSoftBodyJointData
171 {
172         void *m_bodyA;
173         void *m_bodyB;
174         btVector3FloatData m_refs[2];
175         float m_cfm;
176         float m_erp;
177         float m_split;
178         int m_delete;
179         btVector3FloatData m_relPosition[2];  //linear
180         int m_bodyAtype;
181         int m_bodyBtype;
182         int m_jointType;
183         int m_pad;
184 };
185
186 ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
187 struct btSoftBodyFloatData
188 {
189         btCollisionObjectFloatData m_collisionObjectData;
190
191         SoftBodyPoseData *m_pose;
192         SoftBodyMaterialData **m_materials;
193         SoftBodyNodeData *m_nodes;
194         SoftBodyLinkData *m_links;
195         SoftBodyFaceData *m_faces;
196         SoftBodyTetraData *m_tetrahedra;
197         SoftRigidAnchorData *m_anchors;
198         SoftBodyClusterData *m_clusters;
199         btSoftBodyJointData *m_joints;
200
201         int m_numMaterials;
202         int m_numNodes;
203         int m_numLinks;
204         int m_numFaces;
205         int m_numTetrahedra;
206         int m_numAnchors;
207         int m_numClusters;
208         int m_numJoints;
209         SoftBodyConfigData m_config;
210 };
211
212 #endif  //BT_SOFTBODY_FLOAT_DATA