2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <dali/public-api/dali-core.h>
21 #include <dali-test-suite-utils.h>
24 int UtcDaliDynamicsBodyConstructor(void)
26 tet_infoline("UtcDaliDynamicsBodyConstructor - DynamicsBody::DynamicsBody()");
28 TestApplication application;
31 application.SendNotification();
35 // Default constructor - create an uninitialized handle
37 DALI_TEST_CHECK( !body );
39 // create world and actor
40 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
41 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
45 // cannot create dynamics world, log failure and exit
46 DALI_TEST_CHECK( false );
50 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
51 Actor actor(Actor::New());
53 // enable dynamics on the actor to create the Dynamicsbody
54 actor.EnableDynamics(bodyConfig);
57 body = actor.GetDynamicsBody();
59 DALI_TEST_CHECK( body );
63 int UtcDaliDynamicsBodyGetMass(void)
65 TestApplication application;
68 application.SendNotification();
72 const float testMass = 1.23f;
74 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
75 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
79 // cannot create dynamics world, log failure and exit
80 DALI_TEST_CHECK( false );
84 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
85 bodyConfig.SetMass(testMass);
86 Actor actor(Actor::New());
88 // enable dynamics on the actor to create the Dynamicsbody
89 actor.EnableDynamics(bodyConfig);
91 tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetMass");
92 DALI_TEST_EQUALS( testMass, actor.GetDynamicsBody().GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
96 int UtcDaliDynamicsBodyGetElasticity(void)
98 TestApplication application;
101 application.SendNotification();
102 application.Render();
103 application.Render();
105 const float testElasticity = 1.23f;
107 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
108 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
112 // cannot create dynamics world, log failure and exit
113 DALI_TEST_CHECK( false );
117 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
118 bodyConfig.SetElasticity(testElasticity);
119 Actor actor(Actor::New());
121 // enable dynamics on the actor to create the Dynamicsbody
122 actor.EnableDynamics(bodyConfig);
124 tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetElasticity");
125 DALI_TEST_EQUALS( testElasticity, actor.GetDynamicsBody().GetElasticity(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
129 int UtcDaliDynamicsBodySetLinearVelocity(void)
131 tet_infoline("UtcDaliDynamicsBodySetLinearVelocity - DynamicsBody::SetLinearVelocity");
133 TestApplication application;
134 TraceCallStack& trace( application.GetPlatform().GetTrace() );
135 trace.Enable( true );
138 application.SendNotification();
139 application.Render();
140 application.Render();
142 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
143 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
147 // cannot create dynamics world, log failure and exit
148 DALI_TEST_CHECK( false );
152 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
153 Actor actor(Actor::New());
155 // enable dynamics on the actor to create the Dynamicsbody
156 actor.EnableDynamics(bodyConfig);
158 DynamicsBody body(actor.GetDynamicsBody());
159 body.SetLinearVelocity(Vector3::ONE);
161 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetLinearVelocity" ) );
164 application.SendNotification();
165 application.Render();
166 application.Render();
168 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetLinearVelocity" ) );
172 int UtcDaliDynamicsBodySetAngularVelocity(void)
174 tet_infoline("UtcDaliDynamicsBodySetAngularVelocity - DynamicsBody::SetAngularVelocity");
176 TestApplication application;
177 TraceCallStack& trace( application.GetPlatform().GetTrace() );
178 trace.Enable( true );
181 application.SendNotification();
182 application.Render();
183 application.Render();
185 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
186 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
190 // cannot create dynamics world, log failure and exit
191 DALI_TEST_CHECK( false );
195 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
196 Actor actor(Actor::New());
198 // enable dynamics on the actor to create the Dynamicsbody
199 actor.EnableDynamics(bodyConfig);
201 DynamicsBody body(actor.GetDynamicsBody());
202 body.SetAngularVelocity(Vector3::ONE);
204 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetAngularVelocity" ) );
207 application.SendNotification();
208 application.Render();
209 application.Render();
211 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetAngularVelocity" ) );
215 int UtcDaliDynamicsBodySetKinematic(void)
217 TestApplication application;
220 application.SendNotification();
221 application.Render();
222 application.Render();
224 const float testMass = 1.0f;
225 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
226 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
230 // cannot create dynamics world, log failure and exit
231 DALI_TEST_CHECK( false );
235 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
236 bodyConfig.SetMass(testMass);
237 Actor actor(Actor::New());
239 // enable dynamics on the actor to create the Dynamicsbody
240 actor.EnableDynamics(bodyConfig);
242 DynamicsBody body(actor.GetDynamicsBody());
244 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
246 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(true)");
247 body.SetKinematic(true);
249 DALI_TEST_CHECK( body.IsKinematic() );
250 DALI_TEST_EQUALS( 0.0f, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
252 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(false)");
253 body.SetKinematic(false);
254 DALI_TEST_CHECK( !body.IsKinematic() );
255 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
259 int UtcDaliDynamicsBodyIsKinematic(void)
261 TestApplication application;
264 application.SendNotification();
265 application.Render();
266 application.Render();
268 const float testMass = 1.0f;
269 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
270 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
274 // cannot create dynamics world, log failure and exit
275 DALI_TEST_CHECK( false );
279 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
280 bodyConfig.SetMass(testMass);
281 Actor actor(Actor::New());
283 // enable dynamics on the actor to create the Dynamicsbody
284 actor.EnableDynamics(bodyConfig);
286 DynamicsBody body(actor.GetDynamicsBody());
288 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
290 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::IsSetKinematic");
291 body.SetKinematic(true);
293 DALI_TEST_CHECK( body.IsKinematic() );
294 body.SetKinematic(false);
295 DALI_TEST_CHECK( !body.IsKinematic() );
299 int UtcDaliDynamicsBodySetSleepEnabled(void)
301 tet_infoline("UtcDaliDynamicsBodySetSleepEnabled");
303 TestApplication application;
304 TraceCallStack& trace( application.GetPlatform().GetTrace() );
305 trace.Enable( true );
308 application.SendNotification();
309 application.Render();
310 application.Render();
312 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
313 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
317 // cannot create dynamics world, log failure and exit
318 DALI_TEST_CHECK( false );
322 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
323 Actor actor(Actor::New());
325 // enable dynamics on the actor to create the Dynamicsbody
326 actor.EnableDynamics(bodyConfig);
328 DynamicsBody body(actor.GetDynamicsBody());
330 // SleepEnabled true by default
331 DALI_TEST_CHECK( body.GetSleepEnabled() );
332 body.SetSleepEnabled(false);
334 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetSleepEnabled" ) );
337 application.SendNotification();
338 application.Render();
339 application.Render();
341 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetSleepEnabled" ) );
343 DALI_TEST_CHECK( ! body.GetSleepEnabled() );
347 int UtcDaliDynamicsBodyGetSleepEnabled(void)
349 tet_infoline("UtcDaliDynamicsBodyGetSleepEnabled");
351 TestApplication application;
354 application.SendNotification();
355 application.Render();
356 application.Render();
358 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
359 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
363 // cannot create dynamics world, log failure and exit
364 DALI_TEST_CHECK( false );
368 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
369 Actor actor(Actor::New());
371 // enable dynamics on the actor to create the Dynamicsbody
372 actor.EnableDynamics(bodyConfig);
374 DynamicsBody body(actor.GetDynamicsBody());
376 // SleepEnabled true by default
377 DALI_TEST_CHECK( body.GetSleepEnabled() );
378 body.SetSleepEnabled(false);
379 DALI_TEST_CHECK( !body.GetSleepEnabled() );
383 int UtcDaliDynamicsBodyWakeUp(void)
385 tet_infoline("UtcDaliDynamicsBodyWakeUp");
387 TestApplication application;
388 TraceCallStack& trace( application.GetPlatform().GetTrace() );
389 trace.Enable( true );
392 application.SendNotification();
393 application.Render();
394 application.Render();
396 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
397 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
401 // cannot create dynamics world, log failure and exit
402 DALI_TEST_CHECK( false );
406 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
407 Actor actor(Actor::New());
409 // enable dynamics on the actor to create the Dynamicsbody
410 actor.EnableDynamics(bodyConfig);
412 DynamicsBody body(actor.GetDynamicsBody());
416 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::WakeUp" ) );
419 application.SendNotification();
420 application.Render();
421 application.Render();
423 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::WakeUp" ) );
427 int UtcDaliDynamicsBodyAddAnchor(void)
429 tet_infoline("UtcDaliDynamicsBodyAddAnchor - DynamicsBody::AddAnchor()");
431 TestApplication application;
433 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
434 worldConfig.SetType(DynamicsWorldConfig::SOFT);
435 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
439 // cannot create dynamics world, log failure and exit
440 DALI_TEST_CHECK( false );
444 Actor rootActor(Actor::New());
445 world.SetRootActor(rootActor);
446 Stage::GetCurrent().Add(rootActor);
448 DynamicsBodyConfig softConfig( DynamicsBodyConfig::New() );
449 softConfig.SetType(DynamicsBodyConfig::SOFT);
450 Cloth mesh(Cloth::New(10.0f, 10.0f, 10, 10));
451 DynamicsShape meshShape(DynamicsShape::NewMesh(mesh));
452 softConfig.SetShape( meshShape );
453 softConfig.SetMass(1.0f);
454 MeshActor softActor(MeshActor::New(mesh));
456 rootActor.Add(softActor);
457 softActor.EnableDynamics(softConfig);
458 DynamicsBody softBody(softActor.GetDynamicsBody());
460 DynamicsBodyConfig anchorConfig(DynamicsBodyConfig::New());
461 anchorConfig.SetMass(0.0f);
462 Actor anchor(Actor::New());
463 rootActor.Add(anchor);
464 anchor.EnableDynamics(anchorConfig);
465 DynamicsBody anchorBody(anchor.GetDynamicsBody());
466 anchorBody.SetKinematic(true);
469 softBody.AddAnchor(0, anchorBody, false);
471 DALI_TEST_CHECK(true)
473 catch(Dali::DaliException& e)
475 tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
476 DALI_TEST_CHECK( false );
479 rootActor.Remove(softActor);
480 rootActor.Remove(anchor);
481 Stage::GetCurrent().Remove(rootActor);
482 softActor.DisableDynamics();
483 anchor.DisableDynamics();
487 int UtcDaliDynamicsBodyConserveVolume(void)
489 tet_infoline("UtcDaliDynamicsBodyConserveVolume");
491 TestApplication application;
494 application.SendNotification();
495 application.Render();
496 application.Render();
498 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
499 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
503 // cannot create dynamics world, log failure and exit
504 DALI_TEST_CHECK( false );
508 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
509 Actor actor(Actor::New());
511 // enable dynamics on the actor to create the Dynamicsbody
512 actor.EnableDynamics(bodyConfig);
514 DynamicsBody body(actor.GetDynamicsBody());
516 body.ConserveVolume(false);
517 DALI_TEST_CHECK( true );
521 int UtcDaliDynamicsBodyConserveShape(void)
523 tet_infoline("UtcDaliDynamicsBodyConserveShape");
525 TestApplication application;
528 application.SendNotification();
529 application.Render();
530 application.Render();
532 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
533 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
537 // cannot create dynamics world, log failure and exit
538 DALI_TEST_CHECK( false );
542 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
543 Actor actor(Actor::New());
545 // enable dynamics on the actor to create the Dynamicsbody
546 actor.EnableDynamics(bodyConfig);
548 DynamicsBody body(actor.GetDynamicsBody());
550 body.ConserveShape(false);
551 DALI_TEST_CHECK( true );