[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / bullet3 / src / BulletSoftBody / DeformableBodyInplaceSolverIslandCallback.h
1 //
2 //  DeformableBodyInplaceSolverIslandCallback.h
3 //  BulletSoftBody
4 //
5 //  Created by Xuchen Han on 12/16/19.
6 //
7
8 #ifndef DeformableBodyInplaceSolverIslandCallback_h
9 #define DeformableBodyInplaceSolverIslandCallback_h
10
11 struct DeformableBodyInplaceSolverIslandCallback : public MultiBodyInplaceSolverIslandCallback
12 {
13         btDeformableMultiBodyConstraintSolver* m_deformableSolver;
14
15         DeformableBodyInplaceSolverIslandCallback(btDeformableMultiBodyConstraintSolver* solver,
16                                                                                           btDispatcher* dispatcher)
17                 : MultiBodyInplaceSolverIslandCallback(solver, dispatcher), m_deformableSolver(solver)
18         {
19         }
20
21         virtual void processConstraints(int islandId = -1)
22         {
23                 btCollisionObject** bodies = m_bodies.size() ? &m_bodies[0] : 0;
24                 btCollisionObject** softBodies = m_softBodies.size() ? &m_softBodies[0] : 0;
25                 btPersistentManifold** manifold = m_manifolds.size() ? &m_manifolds[0] : 0;
26                 btTypedConstraint** constraints = m_constraints.size() ? &m_constraints[0] : 0;
27                 btMultiBodyConstraint** multiBodyConstraints = m_multiBodyConstraints.size() ? &m_multiBodyConstraints[0] : 0;
28
29                 //printf("mb contacts = %d, mb constraints = %d\n", mbContacts, m_multiBodyConstraints.size());
30
31                 m_deformableSolver->solveDeformableBodyGroup(bodies, m_bodies.size(), softBodies, m_softBodies.size(), manifold, m_manifolds.size(), constraints, m_constraints.size(), multiBodyConstraints, m_multiBodyConstraints.size(), *m_solverInfo, m_debugDrawer, m_dispatcher);
32                 if (m_bodies.size() && (m_solverInfo->m_reportSolverAnalytics & 1))
33                 {
34                         m_deformableSolver->m_analyticsData.m_islandId = islandId;
35                         m_islandAnalyticsData.push_back(m_solver->m_analyticsData);
36                 }
37                 m_bodies.resize(0);
38                 m_softBodies.resize(0);
39                 m_manifolds.resize(0);
40                 m_constraints.resize(0);
41                 m_multiBodyConstraints.resize(0);
42         }
43 };
44
45 #endif /* DeformableBodyInplaceSolverIslandCallback_h */