1 #ifndef __TEST_DYNAMICS_H__
2 #define __TEST_DYNAMICS_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 #include <dali/integration-api/dynamics/dynamics-body-intf.h>
22 #include <dali/integration-api/dynamics/dynamics-body-settings.h>
23 #include <dali/integration-api/dynamics/dynamics-joint-intf.h>
24 #include <dali/integration-api/dynamics/dynamics-shape-intf.h>
25 #include <dali/integration-api/dynamics/dynamics-world-intf.h>
26 #include <dali/integration-api/dynamics/dynamics-world-settings.h>
27 #include <dali/integration-api/dynamics/dynamics-factory-intf.h>
29 #include <test-trace-call-stack.h>
34 class TestDynamicsJoint : public Integration::DynamicsJoint
37 TestDynamicsJoint( TraceCallStack& trace );
38 virtual ~TestDynamicsJoint();
40 public: // From Dali::Integration::DynamicsJoint
42 void Initialize( Integration::DynamicsBody* bodyA, const Vector3& positionA, const Quaternion& rotationA, const Vector3& offsetA,
43 Integration::DynamicsBody* bodyB, const Vector3& positionB, const Quaternion& rotationB, const Vector3& offsetB );
44 void SetLimit( const int axisIndex, const float lowerLimit, const float upperLimit );
45 void EnableSpring( int axisIndex, bool flag );
46 void SetSpringStiffness( int axisIndex, float stiffness );
47 void SetSpringDamping( int axisIndex, float damping );
48 void SetSpringCenterPoint( int axisIndex, float ratio );
49 void EnableMotor( int axisIndex, bool flag );
50 void SetMotorVelocity( int axisIndex, float velocity );
51 void SetMotorForce( int axisIndex, float force );
55 TraceCallStack& mTrace;
57 }; // class TestDynamicsJoint
59 class TestDynamicsShape : public Integration::DynamicsShape
63 TestDynamicsShape( TraceCallStack& trace );
64 virtual ~TestDynamicsShape();
67 void Initialize( int type, const Vector3& dimensions );
69 void Initialize( int type, const MeshData::VertexContainer& vertices, const MeshData::FaceIndices& faceIndices );
73 MeshData::VertexContainer* mVertices;
74 MeshData::FaceIndices* mFaces;
78 TraceCallStack& mTrace;
80 }; // class TestDynamicsShape
82 class TestDynamicsBody : public Integration::DynamicsBody
85 TestDynamicsBody( TraceCallStack& trace );
87 virtual ~TestDynamicsBody();
89 public: // From Dali::Integration::DynamicsBody
91 inline void Initialize( const Integration::DynamicsBodySettings& bodySettings, Integration::DynamicsShape* shape,
92 Integration::DynamicsWorld& dynamicsWorld,
93 const Vector3& startPosition, const Quaternion& startRotation )
95 mTrace.PushCall( "DynamicsBody::~DynamicsBody", "" );
98 inline void SetMass( float mass )
100 mTrace.PushCall( "DynamicsBody::SetMass", "" );
103 inline void SetElasticity( float elasticity )
105 mTrace.PushCall( "DynamicsBody::SetElasticity", "" );
108 inline void SetLinearVelocity( const Vector3& velocity )
110 mTrace.PushCall( "DynamicsBody::SetLinearVelocity", "" );
113 inline Vector3 GetLinearVelocity() const
115 mTrace.PushCall( "DynamicsBody::GetLinearVelocity", "" );
116 return Vector3::ZERO;
119 inline void SetAngularVelocity( const Vector3& velocity )
121 mTrace.PushCall( "DynamicsBody::SetAngularVelocity", "" );
124 inline Vector3 GetAngularVelocity() const
126 mTrace.PushCall( "DynamicsBody::GetAngularVelocity", "" );
127 return Vector3::ZERO;
130 inline void SetKinematic( bool flag )
132 mTrace.PushCall( "DynamicsBody::SetKinematic", "" );
135 inline bool IsKinematic() const
137 mTrace.PushCall( "DynamicsBody::IsKinematic", "" );
141 inline void SetSleepEnabled( bool flag )
143 mTrace.PushCall( "DynamicsBody::SetSleepEnabled", "" );
148 mTrace.PushCall( "DynamicsBody::WakeUp", "" );
151 inline void AddAnchor( unsigned int index, const Integration::DynamicsBody* anchorBody, bool collisions )
153 mTrace.PushCall( "DynamicsBody::AddAnchor", "" );
156 inline void ConserveVolume( bool flag )
158 mTrace.PushCall( "DynamicsBody::ConserveVolume", "" );
161 inline void ConserveShape( bool flag )
163 mTrace.PushCall( "DynamicsBody::ConserveShape", "" );
166 inline short int GetCollisionGroup() const
168 mTrace.PushCall( "DynamicsBody::GetCollisionGroup", "" );
169 return mCollisionGroup;
172 inline void SetCollisionGroup( short int collisionGroup )
174 mTrace.PushCall( "DynamicsBody::SetCollisionGroup", "" );
175 mCollisionGroup = collisionGroup;
178 inline short int GetCollisionMask() const
180 mTrace.PushCall( "DynamicsBody::GetCollisionMask", "" );
181 return mCollisionMask;
184 inline void SetCollisionMask( short int collisionMask )
186 mTrace.PushCall( "DynamicsBody::SetCollisionMask", "" );
187 mCollisionMask = collisionMask;
190 inline int GetType() const
192 mTrace.PushCall( "DynamicsBody::GetType", "" );
193 return mSettings->type;
196 inline bool IsActive() const
198 mTrace.PushCall( "DynamicsBody::IsActive", "" );
199 return mActivationState;
202 inline void SetTransform( const Vector3& position, const Quaternion& rotation )
204 mTrace.PushCall( "DynamicsBody::SetTransform", "" );
207 inline void GetTransform( Vector3& position, Quaternion& rotation )
209 mTrace.PushCall( "DynamicsBody::GetTransform", "" );
212 inline void GetSoftVertices( MeshData::VertexContainer& vertices ) const
214 mTrace.PushCall( "DynamicsBody::GetSoftVertices", "" );
218 Dali::Integration::DynamicsBodySettings* mSettings;
219 bool mConserveVolume:1;
220 bool mConserveShape:1;
222 bool mActivationState:1;
224 short int mCollisionGroup;
225 short int mCollisionMask;
227 TraceCallStack& mTrace;
228 }; // class TestDynamicsBody
230 class TestDynamicsWorld : public Dali::Integration::DynamicsWorld
234 TestDynamicsWorld( TraceCallStack& trace );
236 virtual ~TestDynamicsWorld();
238 inline void Initialize( const Dali::Integration::DynamicsWorldSettings& worldSettings )
241 mTrace.PushCall( "DynamicsWorld::Initialize", "" );
244 inline void AddBody( Dali::Integration::DynamicsBody* body )
246 mTrace.PushCall( "DynamicsWorld::AddBody", "" );
249 inline void RemoveBody( Dali::Integration::DynamicsBody* body )
251 mTrace.PushCall( "DynamicsWorld::RemoveBody", "" );
254 inline void AddJoint( Dali::Integration::DynamicsJoint* joint )
256 mTrace.PushCall( "DynamicsWorld::AddJoint", "" );
259 inline void RemoveJoint( Dali::Integration::DynamicsJoint* joint )
261 mTrace.PushCall( "DynamicsWorld::RemoveJoint", "" );
264 inline void SetGravity( const Vector3& gravity )
266 mTrace.PushCall( "DynamicsWorld::SetGravity", "" );
269 inline void SetDebugDrawMode(int mode)
271 mTrace.PushCall( "DynamicsWorld::SetDebugDrawMode", "" );
274 inline const Integration::DynamicsDebugVertexContainer& DebugDraw()
276 mTrace.PushCall( "DynamicsWorld::DebugDraw", "" );
277 return mDebugVertices;
280 inline void Update( float elapsedSeconds )
282 mTrace.PushCall( "DynamicsWorld::Update", "" );
285 inline void CheckForCollisions( Integration::CollisionDataContainer& contacts )
287 mTrace.PushCall( "DynamicsWorld::CheckForCollisions", "" );
291 Dali::Integration::DynamicsWorldSettings* mSettings;
292 Dali::Integration::DynamicsDebugVertexContainer mDebugVertices;
294 TraceCallStack& mTrace;
296 }; // class TestDynamicsWorld
298 class TestDynamicsFactory : public Integration::DynamicsFactory
303 TestDynamicsFactory( TraceCallStack& trace );
305 virtual ~TestDynamicsFactory();
307 virtual bool InitializeDynamics( const Integration::DynamicsWorldSettings& worldSettings );
309 virtual void TerminateDynamics();
311 virtual Integration::DynamicsWorld* CreateDynamicsWorld();
312 virtual Integration::DynamicsBody* CreateDynamicsBody();
314 virtual Integration::DynamicsJoint* CreateDynamicsJoint();
316 virtual Integration::DynamicsShape* CreateDynamicsShape();
318 TraceCallStack& mTrace;
319 }; // class TestDynamicsFactory
323 #endif // __TEST_DYNAMICS_H__