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.
19 #include <dali/internal/event/dynamics/dynamics-body-config-impl.h>
24 #include <dali/integration-api/debug.h>
25 #include <dali/integration-api/dynamics/dynamics-body-settings.h>
26 #include <dali/internal/event/common/stage-impl.h>
27 #include <dali/internal/event/dynamics/dynamics-capsule-shape-impl.h>
28 #include <dali/internal/event/dynamics/dynamics-cone-shape-impl.h>
29 #include <dali/internal/event/dynamics/dynamics-cube-shape-impl.h>
30 #include <dali/internal/event/dynamics/dynamics-cylinder-shape-impl.h>
31 #include <dali/internal/event/dynamics/dynamics-mesh-shape-impl.h>
32 #include <dali/internal/event/dynamics/dynamics-sphere-shape-impl.h>
33 #include <dali/internal/event/modeling/mesh-impl.h>
41 const float DEFAULT_DYNAMICS_BODY_MASS(1.0f);
42 const float DEFAULT_DYNAMICS_BODY_ELASTICITY(0.85f);
43 const float DEFAULT_DYNAMICS_BODY_FRICTION(0.5f);
44 const float DEFAULT_DYNAMICS_BODY_LINEAR_DAMPING(0.0f);
45 const float DEFAULT_DYNAMICS_BODY_ANGULAR_DAMPING(0.0f);
46 const float DEFAULT_DYNAMICS_BODY_LINEAR_SLEEP_VELOCITY(80.0f); // Assumes default world unit of 1/100
47 const float DEFAULT_DYNAMICS_BODY_ANGULAR_SLEEP_VELOCITY(1.0f);
48 const float DEFAULT_DYNAMICS_LINEAR_STIFFNESS(1.0f);
49 const float DEFAULT_DYNAMICS_ANCHOR_HARDNESS(0.7f);
51 } // namespace Integration
56 DynamicsBodyConfig::DynamicsBodyConfig()
59 DALI_LOG_INFO(Debug::Filter::gDynamics, Debug::Verbose, "%s\n", __PRETTY_FUNCTION__);
61 mSettings = new Integration::DynamicsBodySettings;
62 mShape = new DynamicsCubeShape( Vector3::ONE);
65 DynamicsBodyConfig::~DynamicsBodyConfig()
70 void DynamicsBodyConfig::SetType( const Dali::DynamicsBodyConfig::BodyType type )
72 mSettings->type = type;
75 Dali::DynamicsBodyConfig::BodyType DynamicsBodyConfig::GetType() const
77 return mSettings->type;
80 void DynamicsBodyConfig::SetShape( const Dali::DynamicsShape::ShapeType type, const Vector3& dimensions )
84 case Dali::DynamicsShape::CAPSULE:
86 mShape = new DynamicsCapsuleShape(dimensions.x, dimensions.y);
89 case Dali::DynamicsShape::CONE:
91 mShape = new DynamicsConeShape(dimensions.x, dimensions.y);
94 case Dali::DynamicsShape::CUBE:
96 mShape = new DynamicsCubeShape(dimensions);
99 case Dali::DynamicsShape::CYLINDER:
101 mShape = new DynamicsCylinderShape(dimensions.x, dimensions.y);
104 case Dali::DynamicsShape::MESH:
106 Dali::Mesh mesh( Dali::Mesh::NewPlane( dimensions.x, dimensions.y, dimensions.z, dimensions.z ) );
107 mShape = new DynamicsMeshShape( GetImplementation(mesh) );
110 case Dali::DynamicsShape::SPHERE:
112 mShape = new DynamicsSphereShape(dimensions.x);
117 DALI_ASSERT_DEBUG(0 && "Unknown shape type" );
123 void DynamicsBodyConfig::SetShape( DynamicsShapePtr shape )
128 DynamicsShapePtr DynamicsBodyConfig::GetShape() const
133 void DynamicsBodyConfig::SetMass( const float mass )
135 mSettings->mass = mass;
138 float DynamicsBodyConfig::GetMass() const
140 return mSettings->mass;
143 float DynamicsBodyConfig::GetElasticity() const
145 return mSettings->elasticity;
148 void DynamicsBodyConfig::SetElasticity(const float elasticity)
150 mSettings->elasticity = elasticity;
153 float DynamicsBodyConfig::GetFriction() const
155 return mSettings->friction;
158 void DynamicsBodyConfig::SetFriction(const float friction)
160 mSettings->friction = Clamp(friction, 0.0f, 1.0f);
163 float DynamicsBodyConfig::GetLinearDamping() const
165 return mSettings->linearDamping;
168 void DynamicsBodyConfig::SetLinearDamping( const float damping )
170 mSettings->linearDamping = Clamp(damping, 0.0f, 1.0f);
173 float DynamicsBodyConfig::GetAngularDamping() const
175 return mSettings->angularDamping;
178 void DynamicsBodyConfig::SetAngularDamping(const float damping)
180 mSettings->angularDamping = Clamp(damping, 0.0f, 1.0f);
183 float DynamicsBodyConfig::GetLinearSleepVelocity() const
185 return mSettings->linearSleepVelocity;
188 void DynamicsBodyConfig::SetLinearSleepVelocity( const float sleepVelocity )
190 mSettings->linearSleepVelocity = sleepVelocity;
193 float DynamicsBodyConfig::GetAngularSleepVelocity() const
195 return mSettings->angularSleepVelocity;
198 void DynamicsBodyConfig::SetAngularSleepVelocity(const float sleepVelocity)
200 mSettings->angularSleepVelocity = sleepVelocity;
203 short int DynamicsBodyConfig::GetCollisionGroup() const
205 return mSettings->collisionGroup;
208 void DynamicsBodyConfig::SetCollisionGroup(const short int collisionGroup)
210 mSettings->collisionGroup = collisionGroup;
211 mSettings->isCollisionFilterSet = true;
214 short int DynamicsBodyConfig::GetCollisionMask() const
216 return mSettings->collisionMask;
219 void DynamicsBodyConfig::SetCollisionMask(const short int collisionMask)
221 mSettings->collisionMask = collisionMask;
222 mSettings->isCollisionFilterSet = true;
225 bool DynamicsBodyConfig::IsCollisionFilterSet() const
227 return mSettings->isCollisionFilterSet;
230 float DynamicsBodyConfig::GetStiffness() const
232 return mSettings->linearStiffness;
235 void DynamicsBodyConfig::SetStiffness( const float stiffness )
237 mSettings->linearStiffness = stiffness;
240 float DynamicsBodyConfig::GetAnchorHardness() const
242 return mSettings->anchorHardness;
245 void DynamicsBodyConfig::SetAnchorHardness(const float hardness)
247 mSettings->anchorHardness = Clamp(hardness, 0.0f, 1.0f);
250 float DynamicsBodyConfig::GetVolumeConservation() const
252 return mSettings->volumeConservation;
255 void DynamicsBodyConfig::SetVolumeConservation(const float conservation)
257 mSettings->volumeConservation = conservation;
260 float DynamicsBodyConfig::GetShapeConservation() const
262 return mSettings->shapeConservation;
265 void DynamicsBodyConfig::SetShapeConservation(const float conservation)
267 mSettings->shapeConservation = conservation;
270 Integration::DynamicsBodySettings* DynamicsBodyConfig::GetSettings() const
275 } // namespace Internal