Commit 3d0d22312c835f6348dfcfea5b098b2df024c70c

Authored by David Steele
1 parent 10a2baed

Fixed physics demo on target and made it more interesting

Change-Id: I3a03ccc0e410e279061e08ec82a82a071bb87b78
examples/chipmunk-physics/frame-callback.cpp
@@ -15,13 +15,18 @@ @@ -15,13 +15,18 @@
15 */ 15 */
16 16
17 #include "frame-callback.h" 17 #include "frame-callback.h"
18 -#include "physics-impl.h"  
19 -#include <dali/public-api/math/vector3.h>  
20 -#include <dali/devel-api/update/update-proxy.h>  
21 #include <dali/devel-api/threading/mutex.h> 18 #include <dali/devel-api/threading/mutex.h>
  19 +#include <dali/devel-api/update/update-proxy.h>
  20 +#include <dali/integration-api/debug.h>
  21 +#include <dali/public-api/math/vector3.h>
  22 +#include "physics-impl.h"
22 23
23 -using Dali::Vector3;  
24 using Dali::Quaternion; 24 using Dali::Quaternion;
  25 +using Dali::Vector3;
  26 +
  27 +#if defined(DEBUG_ENABLED)
  28 +extern Debug::Filter* gPhysicsDemo;
  29 +#endif
25 30
26 FrameCallback::FrameCallback(PhysicsImpl& physicsImpl) 31 FrameCallback::FrameCallback(PhysicsImpl& physicsImpl)
27 : mPhysicsImpl(physicsImpl) 32 : mPhysicsImpl(physicsImpl)
@@ -30,14 +35,22 @@ FrameCallback::FrameCallback(PhysicsImpl&amp; physicsImpl) @@ -30,14 +35,22 @@ FrameCallback::FrameCallback(PhysicsImpl&amp; physicsImpl)
30 35
31 bool FrameCallback::Update(Dali::UpdateProxy& updateProxy, float elapsedSeconds) 36 bool FrameCallback::Update(Dali::UpdateProxy& updateProxy, float elapsedSeconds)
32 { 37 {
  38 + static int numCalls = 0;
  39 +
  40 + numCalls++;
  41 + if(numCalls % 30 == 0)
  42 + {
  43 + DALI_LOG_INFO(gPhysicsDemo, Debug::Concise, "Physics frame update\n");
  44 + }
  45 +
33 Dali::Mutex::ScopedLock lock(mPhysicsImpl.mMutex); 46 Dali::Mutex::ScopedLock lock(mPhysicsImpl.mMutex);
34 - static float frameTime=0;  
35 - frameTime+=elapsedSeconds; 47 + static float frameTime = 0;
  48 + frameTime += elapsedSeconds;
36 do 49 do
37 { 50 {
38 mPhysicsImpl.Integrate(mPhysicsTimeStep); 51 mPhysicsImpl.Integrate(mPhysicsTimeStep);
39 - frameTime-=mPhysicsTimeStep;  
40 - } while (frameTime>0); 52 + frameTime -= mPhysicsTimeStep;
  53 + } while(frameTime > 0);
41 54
42 for(auto&& actor : mPhysicsImpl.mPhysicsActors) 55 for(auto&& actor : mPhysicsImpl.mPhysicsActors)
43 { 56 {
examples/chipmunk-physics/physics-demo-controller.cpp
@@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
21 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h> 21 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
22 #include <dali/devel-api/adaptor-framework/key-devel.h> 22 #include <dali/devel-api/adaptor-framework/key-devel.h>
23 #include <dali/devel-api/events/hit-test-algorithm.h> 23 #include <dali/devel-api/events/hit-test-algorithm.h>
  24 +#include <dali/integration-api/debug.h>
24 25
25 #include <iostream> 26 #include <iostream>
26 #include <string> 27 #include <string>
@@ -32,6 +33,10 @@ @@ -32,6 +33,10 @@
32 33
33 using namespace Dali; 34 using namespace Dali;
34 35
  36 +#if defined(DEBUG_ENABLED)
  37 +Debug::Filter* gPhysicsDemo = Debug::Filter::New(Debug::Concise, false, "LOG_PHYSICS_EXAMPLE");
  38 +#endif
  39 +
35 namespace KeyModifier 40 namespace KeyModifier
36 { 41 {
37 enum Key 42 enum Key
@@ -84,8 +89,14 @@ public: @@ -84,8 +89,14 @@ public:
84 89
85 mWindow.Add(mPhysicsRoot); 90 mWindow.Add(mPhysicsRoot);
86 91
87 - CreateBall();  
88 - CreateBrickPyramid(windowSize); 92 + // Ball area = 2*PI*26^2 ~= 6.28*26*26 ~= 5400
  93 + // Fill quarter of the screen...
  94 + int numBalls = 10 + windowSize.GetWidth() * windowSize.GetHeight() / 20000;
  95 +
  96 + for(int i = 0; i < numBalls; ++i)
  97 + {
  98 + CreateBall();
  99 + }
89 100
90 // For funky mouse drag 101 // For funky mouse drag
91 mMouseBody = mPhysicsImpl.AddMouseBody(); 102 mMouseBody = mPhysicsImpl.AddMouseBody();
@@ -98,53 +109,17 @@ public: @@ -98,53 +109,17 @@ public:
98 const float BALL_ELASTICITY = 0.5f; 109 const float BALL_ELASTICITY = 0.5f;
99 const float BALL_FRICTION = 0.5f; 110 const float BALL_FRICTION = 0.5f;
100 111
101 - Property::Value v{std::string{SHADER_RENDERING_TEXTURED_SHAPE_VERT}};  
102 - Property::Value f{std::string{SHADER_RENDERING_TEXTURED_SHAPE_FRAG}};  
103 -  
104 - auto image = Property::Map{{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},  
105 - {Toolkit::ImageVisual::Property::URL, BALL_IMAGE},  
106 - {Toolkit::Visual::Property::SHADER, {{Toolkit::Visual::Shader::Property::FRAGMENT_SHADER, f}}}}; 112 + auto ball = Toolkit::ImageView::New(BALL_IMAGE);
107 113
108 - auto ball = Toolkit::ImageView::New();  
109 - ball[Toolkit::ImageView::Property::IMAGE] = image;  
110 - mPhysicsImpl.AddBall(ball, BALL_MASS, BALL_RADIUS, BALL_ELASTICITY, BALL_FRICTION); 114 + auto& physicsBall = mPhysicsImpl.AddBall(ball, BALL_MASS, BALL_RADIUS, BALL_ELASTICITY, BALL_FRICTION);
  115 + Window::WindowSize windowSize = mWindow.GetSize();
  116 + const float s = BALL_RADIUS;
  117 + const float fw = windowSize.GetWidth() - BALL_RADIUS;
  118 + const float fh = windowSize.GetHeight() - BALL_RADIUS;
  119 + physicsBall.SetPhysicsPosition(Vector3(Random::Range(s, fw), Random::Range(s, fh), 0.0f));
  120 + physicsBall.SetPhysicsVelocity(Vector3(Random::Range(-100.0, 100.0), Random::Range(-100.0, 100.0), 0.0f));
111 } 121 }
112 122
113 - void CreateBrickPyramid(Dali::Window::WindowSize windowSize)  
114 - {  
115 - const float BRICK_MASS = 30.0f;  
116 - const float BRICK_ELASTICITY = 0.0f;  
117 - const float BRICK_FRICTION = 0.9f;  
118 - const int BRICK_WIDTH = 128;  
119 - const int BRICK_HEIGHT = 64;  
120 - const int BRICK_GAP = 8;  
121 -  
122 - Property::Value v{std::string{SHADER_RENDERING_TEXTURED_SHAPE_VERT}};  
123 - Property::Value f{std::string{SHADER_RENDERING_TEXTURED_SHAPE_FRAG}};  
124 -  
125 - int uriIndex = 0;  
126 - int numberOfRows = windowSize.GetWidth() / (BRICK_WIDTH + BRICK_GAP) - 2;  
127 - int oY = windowSize.GetHeight() - (1 + numberOfRows) * BRICK_HEIGHT;  
128 - for(int i = 0; i < numberOfRows; ++i)  
129 - {  
130 - // Row start: i+1 is brick number. i is gap#  
131 - int w = (i + 1) * BRICK_WIDTH + i * BRICK_GAP;  
132 - int oX = (windowSize.GetWidth() - w) / 2;  
133 - for(int j = 0; j < i + 1; ++j)  
134 - {  
135 - auto image = Property::Map{{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},  
136 - {Toolkit::ImageVisual::Property::URL, BRICK_URIS[uriIndex]},  
137 - {Toolkit::Visual::Property::SHADER, {{Toolkit::Visual::Shader::Property::FRAGMENT_SHADER, f}}}};  
138 -  
139 - auto brick = Toolkit::ImageView::New();  
140 - brick[Toolkit::ImageView::Property::IMAGE] = image;  
141 - auto& physicsActor = mPhysicsImpl.AddBrick(brick, BRICK_MASS, BRICK_ELASTICITY, BRICK_FRICTION, Vector3(BRICK_WIDTH, BRICK_HEIGHT, BRICK_HEIGHT));  
142 - physicsActor.SetPhysicsPosition(Vector3(oX + j * (BRICK_WIDTH + BRICK_GAP), oY + i * BRICK_HEIGHT, 0.0f));  
143 - uriIndex += 1;  
144 - uriIndex %= 4;  
145 - }  
146 - }  
147 - }  
148 void OnTerminate(Application& application) 123 void OnTerminate(Application& application)
149 { 124 {
150 UnparentAndReset(mPhysicsRoot); 125 UnparentAndReset(mPhysicsRoot);
examples/chipmunk-physics/physics-impl.cpp
@@ -19,26 +19,26 @@ @@ -19,26 +19,26 @@
19 #include "physics-actor.h" 19 #include "physics-actor.h"
20 20
21 #include <devel-api/common/stage.h> 21 #include <devel-api/common/stage.h>
  22 +#include <iostream>
22 #include <map> 23 #include <map>
23 #include <utility> 24 #include <utility>
24 -#include <iostream>  
25 25
26 -using Dali::Layer;  
27 using Dali::Actor; 26 using Dali::Actor;
28 -using Dali::Window; 27 +using Dali::Layer;
  28 +using Dali::Stage;
29 using Dali::Vector2; 29 using Dali::Vector2;
30 using Dali::Vector3; 30 using Dali::Vector3;
31 -using Dali::Stage; 31 +using Dali::Window;
32 using namespace Dali::DevelStage; 32 using namespace Dali::DevelStage;
33 33
34 -#define GRABBABLE_MASK_BIT (1u<<31)  
35 -cpShapeFilter GRAB_FILTER = {CP_NO_GROUP, GRABBABLE_MASK_BIT, GRABBABLE_MASK_BIT}; 34 +#define GRABBABLE_MASK_BIT (1u << 31)
  35 +cpShapeFilter GRAB_FILTER = {CP_NO_GROUP, GRABBABLE_MASK_BIT, GRABBABLE_MASK_BIT};
36 cpShapeFilter NOT_GRABBABLE_FILTER = {CP_NO_GROUP, ~GRABBABLE_MASK_BIT, ~GRABBABLE_MASK_BIT}; 36 cpShapeFilter NOT_GRABBABLE_FILTER = {CP_NO_GROUP, ~GRABBABLE_MASK_BIT, ~GRABBABLE_MASK_BIT};
37 37
38 Actor PhysicsImpl::Initialize(Window window) 38 Actor PhysicsImpl::Initialize(Window window)
39 { 39 {
40 mWindow = window; 40 mWindow = window;
41 - mSpace = cpSpaceNew(); 41 + mSpace = cpSpaceNew();
42 cpSpaceSetIterations(mSpace, 30); 42 cpSpaceSetIterations(mSpace, 30);
43 cpSpaceSetSleepTimeThreshold(mSpace, 0.5f); 43 cpSpaceSetSleepTimeThreshold(mSpace, 0.5f);
44 cpSpaceSetGravity(mSpace, cpv(0, -200)); 44 cpSpaceSetGravity(mSpace, cpv(0, -200));
@@ -47,16 +47,15 @@ Actor PhysicsImpl::Initialize(Window window) @@ -47,16 +47,15 @@ Actor PhysicsImpl::Initialize(Window window)
47 CreateWorldBounds(windowSize); 47 CreateWorldBounds(windowSize);
48 48
49 // Create an actor that can handle mouse events. 49 // Create an actor that can handle mouse events.
50 - mPhysicsRoot = Layer::New();  
51 - mPhysicsRoot[Actor::Property::SIZE] = Vector2(windowSize.GetWidth(), windowSize.GetHeight());  
52 - mPhysicsRoot[Actor::Property::ANCHOR_POINT] = Dali::AnchorPoint::CENTER; 50 + mPhysicsRoot = Layer::New();
  51 + mPhysicsRoot[Actor::Property::SIZE] = Vector2(windowSize.GetWidth(), windowSize.GetHeight());
  52 + mPhysicsRoot[Actor::Property::ANCHOR_POINT] = Dali::AnchorPoint::CENTER;
53 mPhysicsRoot[Actor::Property::PARENT_ORIGIN] = Dali::ParentOrigin::CENTER; 53 mPhysicsRoot[Actor::Property::PARENT_ORIGIN] = Dali::ParentOrigin::CENTER;
54 54
55 mFrameCallback = new FrameCallback(*this); 55 mFrameCallback = new FrameCallback(*this);
56 AddFrameCallback(Stage::GetCurrent(), *mFrameCallback, window.GetRootLayer()); 56 AddFrameCallback(Stage::GetCurrent(), *mFrameCallback, window.GetRootLayer());
57 Stage::GetCurrent().KeepRendering(30); 57 Stage::GetCurrent().KeepRendering(30);
58 58
59 -  
60 return mPhysicsRoot; 59 return mPhysicsRoot;
61 } 60 }
62 61
@@ -73,10 +72,10 @@ void PhysicsImpl::CreateWorldBounds(Window::WindowSize size) @@ -73,10 +72,10 @@ void PhysicsImpl::CreateWorldBounds(Window::WindowSize size)
73 // But, can't use actors in update, so cache transform. 72 // But, can't use actors in update, so cache transform.
74 SetTransform(Vector2(size.GetWidth(), size.GetHeight())); 73 SetTransform(Vector2(size.GetWidth(), size.GetHeight()));
75 74
76 - int xBound=size.GetWidth()/2;  
77 - int yBound=size.GetHeight()/2; 75 + int xBound = size.GetWidth() / 2;
  76 + int yBound = size.GetHeight() / 2;
78 77
79 - cpBody *staticBody = cpSpaceGetStaticBody(mSpace); 78 + cpBody* staticBody = cpSpaceGetStaticBody(mSpace);
80 79
81 if(mLeftBound) 80 if(mLeftBound)
82 { 81 {
@@ -89,10 +88,10 @@ void PhysicsImpl::CreateWorldBounds(Window::WindowSize size) @@ -89,10 +88,10 @@ void PhysicsImpl::CreateWorldBounds(Window::WindowSize size)
89 cpShapeFree(mTopBound); 88 cpShapeFree(mTopBound);
90 cpShapeFree(mBottomBound); 89 cpShapeFree(mBottomBound);
91 } 90 }
92 - mLeftBound = AddBound(staticBody, cpv(-xBound, -yBound), cpv(-xBound, yBound));  
93 - mRightBound = AddBound(staticBody, cpv( xBound, -yBound), cpv( xBound, yBound));  
94 - mTopBound = AddBound(staticBody, cpv(-xBound, -yBound), cpv( xBound, -yBound));  
95 - mBottomBound = AddBound(staticBody, cpv(-xBound, yBound), cpv( xBound, yBound)); 91 + mLeftBound = AddBound(staticBody, cpv(-xBound, -yBound), cpv(-xBound, yBound));
  92 + mRightBound = AddBound(staticBody, cpv(xBound, -yBound), cpv(xBound, yBound));
  93 + mTopBound = AddBound(staticBody, cpv(-xBound, -yBound), cpv(xBound, -yBound));
  94 + mBottomBound = AddBound(staticBody, cpv(-xBound, yBound), cpv(xBound, yBound));
96 } 95 }
97 96
98 void PhysicsImpl::SetTransform(Vector2 worldSize) 97 void PhysicsImpl::SetTransform(Vector2 worldSize)
@@ -104,7 +103,7 @@ void PhysicsImpl::SetTransform(Vector2 worldSize) @@ -104,7 +103,7 @@ void PhysicsImpl::SetTransform(Vector2 worldSize)
104 103
105 cpShape* PhysicsImpl::AddBound(cpBody* staticBody, cpVect start, cpVect end) 104 cpShape* PhysicsImpl::AddBound(cpBody* staticBody, cpVect start, cpVect end)
106 { 105 {
107 - cpShape* shape = cpSpaceAddShape(mSpace, cpSegmentShapeNew(staticBody,start, end,0.0f)); 106 + cpShape* shape = cpSpaceAddShape(mSpace, cpSegmentShapeNew(staticBody, start, end, 0.0f));
108 cpShapeSetElasticity(shape, 1.0f); 107 cpShapeSetElasticity(shape, 1.0f);
109 cpShapeSetFriction(shape, 1.0f); 108 cpShapeSetFriction(shape, 1.0f);
110 cpShapeSetFilter(shape, NOT_GRABBABLE_FILTER); 109 cpShapeSetFilter(shape, NOT_GRABBABLE_FILTER);
@@ -114,7 +113,7 @@ cpShape* PhysicsImpl::AddBound(cpBody* staticBody, cpVect start, cpVect end) @@ -114,7 +113,7 @@ cpShape* PhysicsImpl::AddBound(cpBody* staticBody, cpVect start, cpVect end)
114 PhysicsActor& PhysicsImpl::AddBall(::Actor actor, float mass, float radius, float elasticity, float friction) 113 PhysicsActor& PhysicsImpl::AddBall(::Actor actor, float mass, float radius, float elasticity, float friction)
115 { 114 {
116 Dali::Mutex::ScopedLock lock(mMutex); 115 Dali::Mutex::ScopedLock lock(mMutex);
117 - cpBody* body = cpSpaceAddBody(mSpace, cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, radius, cpvzero))); 116 + cpBody* body = cpSpaceAddBody(mSpace, cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, radius, cpvzero)));
118 cpBodySetPosition(body, cpv(0, 0)); 117 cpBodySetPosition(body, cpv(0, 0));
119 cpBodySetVelocity(body, cpv(0, 0)); 118 cpBodySetVelocity(body, cpv(0, 0));
120 119
@@ -122,11 +121,11 @@ PhysicsActor&amp; PhysicsImpl::AddBall(::Actor actor, float mass, float radius, floa @@ -122,11 +121,11 @@ PhysicsActor&amp; PhysicsImpl::AddBall(::Actor actor, float mass, float radius, floa
122 cpShapeSetElasticity(shape, elasticity); 121 cpShapeSetElasticity(shape, elasticity);
123 cpShapeSetFriction(shape, friction); 122 cpShapeSetFriction(shape, friction);
124 123
125 - int id = actor[Actor::Property::ID]; 124 + int id = actor[Actor::Property::ID];
126 Dali::Property::Index index = actor.RegisterProperty("uBrightness", 0.0f); 125 Dali::Property::Index index = actor.RegisterProperty("uBrightness", 0.0f);
127 mPhysicsActors.insert(std::make_pair(id, PhysicsActor{actor, body, this, index})); 126 mPhysicsActors.insert(std::make_pair(id, PhysicsActor{actor, body, this, index}));
128 actor[Actor::Property::PARENT_ORIGIN] = Dali::ParentOrigin::TOP_LEFT; 127 actor[Actor::Property::PARENT_ORIGIN] = Dali::ParentOrigin::TOP_LEFT;
129 - actor[Actor::Property::ANCHOR_POINT] = Dali::AnchorPoint::CENTER; 128 + actor[Actor::Property::ANCHOR_POINT] = Dali::AnchorPoint::CENTER;
130 mPhysicsRoot.Add(actor); 129 mPhysicsRoot.Add(actor);
131 return mPhysicsActors.at(id); 130 return mPhysicsActors.at(id);
132 } 131 }
@@ -134,7 +133,7 @@ PhysicsActor&amp; PhysicsImpl::AddBall(::Actor actor, float mass, float radius, floa @@ -134,7 +133,7 @@ PhysicsActor&amp; PhysicsImpl::AddBall(::Actor actor, float mass, float radius, floa
134 PhysicsActor& PhysicsImpl::AddBrick(Dali::Actor actor, float mass, float elasticity, float friction, Vector3 size) 133 PhysicsActor& PhysicsImpl::AddBrick(Dali::Actor actor, float mass, float elasticity, float friction, Vector3 size)
135 { 134 {
136 Dali::Mutex::ScopedLock lock(mMutex); 135 Dali::Mutex::ScopedLock lock(mMutex);
137 - cpBody* body = cpSpaceAddBody(mSpace, cpBodyNew(mass, cpMomentForBox(mass, size.width, size.height))); 136 + cpBody* body = cpSpaceAddBody(mSpace, cpBodyNew(mass, cpMomentForBox(mass, size.width, size.height)));
138 cpBodySetPosition(body, cpv(0, 0)); 137 cpBodySetPosition(body, cpv(0, 0));
139 cpBodySetVelocity(body, cpv(0, 0)); 138 cpBodySetVelocity(body, cpv(0, 0));
140 139
@@ -142,11 +141,11 @@ PhysicsActor&amp; PhysicsImpl::AddBrick(Dali::Actor actor, float mass, float elastic @@ -142,11 +141,11 @@ PhysicsActor&amp; PhysicsImpl::AddBrick(Dali::Actor actor, float mass, float elastic
142 cpShapeSetFriction(shape, friction); 141 cpShapeSetFriction(shape, friction);
143 cpShapeSetElasticity(shape, elasticity); 142 cpShapeSetElasticity(shape, elasticity);
144 143
145 - int id = actor[Actor::Property::ID]; 144 + int id = actor[Actor::Property::ID];
146 Dali::Property::Index index = actor.RegisterProperty("uBrightness", 0.0f); 145 Dali::Property::Index index = actor.RegisterProperty("uBrightness", 0.0f);
147 mPhysicsActors.insert(std::make_pair(id, PhysicsActor{actor, body, this, index})); 146 mPhysicsActors.insert(std::make_pair(id, PhysicsActor{actor, body, this, index}));
148 actor[Actor::Property::PARENT_ORIGIN] = Dali::ParentOrigin::TOP_LEFT; 147 actor[Actor::Property::PARENT_ORIGIN] = Dali::ParentOrigin::TOP_LEFT;
149 - actor[Actor::Property::ANCHOR_POINT] = Dali::AnchorPoint::CENTER; 148 + actor[Actor::Property::ANCHOR_POINT] = Dali::AnchorPoint::CENTER;
150 mPhysicsRoot.Add(actor); 149 mPhysicsRoot.Add(actor);
151 return mPhysicsActors.at(id); 150 return mPhysicsActors.at(id);
152 } 151 }
@@ -154,7 +153,7 @@ PhysicsActor&amp; PhysicsImpl::AddBrick(Dali::Actor actor, float mass, float elastic @@ -154,7 +153,7 @@ PhysicsActor&amp; PhysicsImpl::AddBrick(Dali::Actor actor, float mass, float elastic
154 cpBody* PhysicsImpl::AddMouseBody() 153 cpBody* PhysicsImpl::AddMouseBody()
155 { 154 {
156 Dali::Mutex::ScopedLock lock(mMutex); 155 Dali::Mutex::ScopedLock lock(mMutex);
157 - auto kinematicBody = cpBodyNewKinematic(); // Mouse actor is a kinematic body that is not integrated 156 + auto kinematicBody = cpBodyNewKinematic(); // Mouse actor is a kinematic body that is not integrated
158 return kinematicBody; 157 return kinematicBody;
159 } 158 }
160 159
@@ -171,7 +170,7 @@ void PhysicsImpl::HighlightBody(cpBody* body, bool highlight) @@ -171,7 +170,7 @@ void PhysicsImpl::HighlightBody(cpBody* body, bool highlight)
171 Actor actor = mPhysicsRoot.FindChildById(physicsActor->GetId()); 170 Actor actor = mPhysicsRoot.FindChildById(physicsActor->GetId());
172 if(actor) 171 if(actor)
173 { 172 {
174 - actor[physicsActor->GetBrightnessIndex()] = highlight?1.0f:0.0f; 173 + actor[physicsActor->GetBrightnessIndex()] = highlight ? 1.0f : 0.0f;
175 } 174 }
176 } 175 }
177 } 176 }
@@ -181,13 +180,13 @@ Vector3 PhysicsImpl::TranslateToPhysicsSpace(Vector3 vector) @@ -181,13 +180,13 @@ Vector3 PhysicsImpl::TranslateToPhysicsSpace(Vector3 vector)
181 { 180 {
182 // root actor origin is top left, DALi Y is inverted. 181 // root actor origin is top left, DALi Y is inverted.
183 // Physics origin is center. Y: 0->1 => 0.5=>-0.5 182 // Physics origin is center. Y: 0->1 => 0.5=>-0.5
184 - return Vector3(vector.x-mWorldOffset.x, mWorldOffset.y-vector.y, vector.z); 183 + return Vector3(vector.x - mWorldOffset.x, mWorldOffset.y - vector.y, vector.z);
185 } 184 }
186 185
187 // Convert from physics space to root actor local space 186 // Convert from physics space to root actor local space
188 Vector3 PhysicsImpl::TranslateFromPhysicsSpace(Vector3 vector) 187 Vector3 PhysicsImpl::TranslateFromPhysicsSpace(Vector3 vector)
189 { 188 {
190 - return Vector3(vector.x+mWorldOffset.x, mWorldOffset.y-vector.y, vector.z); 189 + return Vector3(vector.x + mWorldOffset.x, mWorldOffset.y - vector.y, vector.z);
191 } 190 }
192 191
193 // Convert a vector from dali space to physics space 192 // Convert a vector from dali space to physics space
@@ -210,39 +209,38 @@ void PhysicsImpl::Integrate(float timestep) @@ -210,39 +209,38 @@ void PhysicsImpl::Integrate(float timestep)
210 { 209 {
211 cpSpaceStep(mSpace, timestep); 210 cpSpaceStep(mSpace, timestep);
212 } 211 }
213 -// if(mDynamicsWorld->getDebugDrawer() && mPhysicsDebugState)  
214 -// {  
215 -// mDynamicsWorld->debugDrawWorld();  
216 -// } 212 + // if(mDynamicsWorld->getDebugDrawer() && mPhysicsDebugState)
  213 + // {
  214 + // mDynamicsWorld->debugDrawWorld();
  215 + // }
217 } 216 }
218 217
219 cpBody* PhysicsImpl::HitTest(Vector2 screenCoords, Vector3 origin, Vector3 direction, Vector3& localPivot, float& distanceFromCamera) 218 cpBody* PhysicsImpl::HitTest(Vector2 screenCoords, Vector3 origin, Vector3 direction, Vector3& localPivot, float& distanceFromCamera)
220 { 219 {
221 - Vector3 spacePosition = TranslateToPhysicsSpace(Vector3{screenCoords});  
222 - cpVect mousePosition = cpv(spacePosition.x, spacePosition.y);  
223 - cpFloat radius = 5.0f;  
224 - cpPointQueryInfo info = {0};  
225 - cpShape *shape = cpSpacePointQueryNearest(mSpace, mousePosition, radius, GRAB_FILTER, &info); 220 + Vector3 spacePosition = TranslateToPhysicsSpace(Vector3{screenCoords});
  221 + cpVect mousePosition = cpv(spacePosition.x, spacePosition.y);
  222 + cpFloat radius = 5.0f;
  223 + cpPointQueryInfo info = {0};
  224 + cpShape* shape = cpSpacePointQueryNearest(mSpace, mousePosition, radius, GRAB_FILTER, &info);
226 225
227 - cpBody *body{nullptr}; 226 + cpBody* body{nullptr};
228 227
229 if(shape && cpBodyGetMass(cpShapeGetBody(shape)) < INFINITY) 228 if(shape && cpBodyGetMass(cpShapeGetBody(shape)) < INFINITY)
230 { 229 {
231 // Use the closest point on the surface if the click is outside the shape. 230 // Use the closest point on the surface if the click is outside the shape.
232 cpVect nearest = (info.distance > 0.0f ? info.point : mousePosition); 231 cpVect nearest = (info.distance > 0.0f ? info.point : mousePosition);
233 - body = cpShapeGetBody(shape);  
234 - cpVect local = cpBodyWorldToLocal(body, nearest);  
235 - localPivot.x = local.x;  
236 - localPivot.y = local.y;  
237 - localPivot.z = 0.0; 232 + body = cpShapeGetBody(shape);
  233 + cpVect local = cpBodyWorldToLocal(body, nearest);
  234 + localPivot.x = local.x;
  235 + localPivot.y = local.y;
  236 + localPivot.z = 0.0;
238 } 237 }
239 return body; 238 return body;
240 } 239 }
241 240
242 -  
243 cpConstraint* PhysicsImpl::AddPivotJoint(cpBody* body1, cpBody* body2, Vector3 localPivot) 241 cpConstraint* PhysicsImpl::AddPivotJoint(cpBody* body1, cpBody* body2, Vector3 localPivot)
244 { 242 {
245 - cpVect pivot{localPivot.x, localPivot.y}; 243 + cpVect pivot{localPivot.x, localPivot.y};
246 cpConstraint* joint = cpPivotJointNew2(body2, body1, cpvzero, pivot); 244 cpConstraint* joint = cpPivotJointNew2(body2, body1, cpvzero, pivot);
247 cpConstraintSetMaxForce(joint, 50000.0f); // Magic numbers for mouse feedback. 245 cpConstraintSetMaxForce(joint, 50000.0f); // Magic numbers for mouse feedback.
248 cpConstraintSetErrorBias(joint, cpfpow(1.0f - 0.15f, 60.0f)); 246 cpConstraintSetErrorBias(joint, cpfpow(1.0f - 0.15f, 60.0f));
@@ -253,7 +251,7 @@ cpConstraint* PhysicsImpl::AddPivotJoint(cpBody* body1, cpBody* body2, Vector3 l @@ -253,7 +251,7 @@ cpConstraint* PhysicsImpl::AddPivotJoint(cpBody* body1, cpBody* body2, Vector3 l
253 void PhysicsImpl::MoveMouseBody(cpBody* mouseBody, Vector3 position) 251 void PhysicsImpl::MoveMouseBody(cpBody* mouseBody, Vector3 position)
254 { 252 {
255 cpVect cpPosition = cpv(position.x, position.y); 253 cpVect cpPosition = cpv(position.x, position.y);
256 - cpVect newPoint = cpvlerp(cpBodyGetPosition(mouseBody), cpPosition, 0.25f); 254 + cpVect newPoint = cpvlerp(cpBodyGetPosition(mouseBody), cpPosition, 0.25f);
257 cpBodySetVelocity(mouseBody, cpvmult(cpvsub(newPoint, cpBodyGetPosition(mouseBody)), 60.0f)); 255 cpBodySetVelocity(mouseBody, cpvmult(cpvsub(newPoint, cpBodyGetPosition(mouseBody)), 60.0f));
258 // Normally, kinematic body's position would be calculated by engine. 256 // Normally, kinematic body's position would be calculated by engine.
259 // For mouse, though, we want to set it. 257 // For mouse, though, we want to set it.