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 );
68 void Initialize( int type, Geometry geometry );
72 TraceCallStack& mTrace;
74 }; // class TestDynamicsShape
76 class TestDynamicsBody : public Integration::DynamicsBody
79 TestDynamicsBody( TraceCallStack& trace );
81 virtual ~TestDynamicsBody();
83 public: // From Dali::Integration::DynamicsBody
85 inline void Initialize( const Integration::DynamicsBodySettings& bodySettings, Integration::DynamicsShape* shape,
86 Integration::DynamicsWorld& dynamicsWorld,
87 const Vector3& startPosition, const Quaternion& startRotation )
89 mTrace.PushCall( "DynamicsBody::~DynamicsBody", "" );
92 inline void SetMass( float mass )
94 mTrace.PushCall( "DynamicsBody::SetMass", "" );
97 inline void SetElasticity( float elasticity )
99 mTrace.PushCall( "DynamicsBody::SetElasticity", "" );
102 inline void SetLinearVelocity( const Vector3& velocity )
104 mTrace.PushCall( "DynamicsBody::SetLinearVelocity", "" );
107 inline Vector3 GetLinearVelocity() const
109 mTrace.PushCall( "DynamicsBody::GetLinearVelocity", "" );
110 return Vector3::ZERO;
113 inline void SetAngularVelocity( const Vector3& velocity )
115 mTrace.PushCall( "DynamicsBody::SetAngularVelocity", "" );
118 inline Vector3 GetAngularVelocity() const
120 mTrace.PushCall( "DynamicsBody::GetAngularVelocity", "" );
121 return Vector3::ZERO;
124 inline void SetKinematic( bool flag )
126 mTrace.PushCall( "DynamicsBody::SetKinematic", "" );
129 inline bool IsKinematic() const
131 mTrace.PushCall( "DynamicsBody::IsKinematic", "" );
135 inline void SetSleepEnabled( bool flag )
137 mTrace.PushCall( "DynamicsBody::SetSleepEnabled", "" );
142 mTrace.PushCall( "DynamicsBody::WakeUp", "" );
145 inline void AddAnchor( unsigned int index, const Integration::DynamicsBody* anchorBody, bool collisions )
147 mTrace.PushCall( "DynamicsBody::AddAnchor", "" );
150 inline void ConserveVolume( bool flag )
152 mTrace.PushCall( "DynamicsBody::ConserveVolume", "" );
155 inline void ConserveShape( bool flag )
157 mTrace.PushCall( "DynamicsBody::ConserveShape", "" );
160 inline short int GetCollisionGroup() const
162 mTrace.PushCall( "DynamicsBody::GetCollisionGroup", "" );
163 return mCollisionGroup;
166 inline void SetCollisionGroup( short int collisionGroup )
168 mTrace.PushCall( "DynamicsBody::SetCollisionGroup", "" );
169 mCollisionGroup = collisionGroup;
172 inline short int GetCollisionMask() const
174 mTrace.PushCall( "DynamicsBody::GetCollisionMask", "" );
175 return mCollisionMask;
178 inline void SetCollisionMask( short int collisionMask )
180 mTrace.PushCall( "DynamicsBody::SetCollisionMask", "" );
181 mCollisionMask = collisionMask;
184 inline int GetType() const
186 mTrace.PushCall( "DynamicsBody::GetType", "" );
187 return mSettings->type;
190 inline bool IsActive() const
192 mTrace.PushCall( "DynamicsBody::IsActive", "" );
193 return mActivationState;
196 inline void SetTransform( const Vector3& position, const Quaternion& rotation )
198 mTrace.PushCall( "DynamicsBody::SetTransform", "" );
201 inline void GetTransform( Vector3& position, Quaternion& rotation )
203 mTrace.PushCall( "DynamicsBody::GetTransform", "" );
206 inline void GetSoftVertices( Geometry geometry ) const
208 mTrace.PushCall( "DynamicsBody::GetSoftVertices", "" );
212 Dali::Integration::DynamicsBodySettings* mSettings;
213 bool mConserveVolume:1;
214 bool mConserveShape:1;
216 bool mActivationState:1;
218 short int mCollisionGroup;
219 short int mCollisionMask;
221 TraceCallStack& mTrace;
222 }; // class TestDynamicsBody
224 class TestDynamicsWorld : public Dali::Integration::DynamicsWorld
228 TestDynamicsWorld( TraceCallStack& trace );
230 virtual ~TestDynamicsWorld();
232 inline void Initialize( const Dali::Integration::DynamicsWorldSettings& worldSettings )
235 mTrace.PushCall( "DynamicsWorld::Initialize", "" );
238 inline void AddBody( Dali::Integration::DynamicsBody* body )
240 mTrace.PushCall( "DynamicsWorld::AddBody", "" );
243 inline void RemoveBody( Dali::Integration::DynamicsBody* body )
245 mTrace.PushCall( "DynamicsWorld::RemoveBody", "" );
248 inline void AddJoint( Dali::Integration::DynamicsJoint* joint )
250 mTrace.PushCall( "DynamicsWorld::AddJoint", "" );
253 inline void RemoveJoint( Dali::Integration::DynamicsJoint* joint )
255 mTrace.PushCall( "DynamicsWorld::RemoveJoint", "" );
258 inline void SetGravity( const Vector3& gravity )
260 mTrace.PushCall( "DynamicsWorld::SetGravity", "" );
263 inline void SetDebugDrawMode(int mode)
265 mTrace.PushCall( "DynamicsWorld::SetDebugDrawMode", "" );
268 inline const Integration::DynamicsDebugVertexContainer& DebugDraw()
270 mTrace.PushCall( "DynamicsWorld::DebugDraw", "" );
271 return mDebugVertices;
274 inline void Update( float elapsedSeconds )
276 mTrace.PushCall( "DynamicsWorld::Update", "" );
279 inline void CheckForCollisions( Integration::CollisionDataContainer& contacts )
281 mTrace.PushCall( "DynamicsWorld::CheckForCollisions", "" );
285 Dali::Integration::DynamicsWorldSettings* mSettings;
286 Dali::Integration::DynamicsDebugVertexContainer mDebugVertices;
288 TraceCallStack& mTrace;
290 }; // class TestDynamicsWorld
292 class TestDynamicsFactory : public Integration::DynamicsFactory
297 TestDynamicsFactory( TraceCallStack& trace );
299 virtual ~TestDynamicsFactory();
301 virtual bool InitializeDynamics( const Integration::DynamicsWorldSettings& worldSettings );
303 virtual void TerminateDynamics();
305 virtual Integration::DynamicsWorld* CreateDynamicsWorld();
306 virtual Integration::DynamicsBody* CreateDynamicsBody();
308 virtual Integration::DynamicsJoint* CreateDynamicsJoint();
310 virtual Integration::DynamicsShape* CreateDynamicsShape();
312 TraceCallStack& mTrace;
313 }; // class TestDynamicsFactory
317 #endif // __TEST_DYNAMICS_H__