Angel 3.2
A 2D Game Prototyping Engine
PhysicsActor.h
1 
2 // Copyright (C) 2008-2013, Shane Liesegang
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of the copyright holder nor the names of any
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
29 
30 #pragma once
31 
32 #include "../Actors/Actor.h"
33 
34 #include <Box2D/Box2D.h>
35 struct b2ShapeDef;
36 
38 
44 class PhysicsActor : public Actor
45 {
46 public:
55  PhysicsActor();
56 
63  virtual ~PhysicsActor();
64 
68  {
69  SHAPETYPE_BOX,
70  SHAPETYPE_CIRCLE,
71  };
72 
84  void SetDensity(float density);
85 
95  void SetFriction(float friction);
96 
106  void SetRestitution(float restitution);
107 
116  void SetShapeType(eShapeType shapeType);
117 
130  void SetIsSensor(bool isSensor);
131 
144  void SetGroupIndex(int groupIndex);
145 
154  void SetFixedRotation(bool fixedRotation);
155 
159  virtual void InitPhysics();
160 
166  virtual void CustomInitPhysics() {}
167 
182  void ApplyForce(const Vector2& force, const Vector2& point);
183 
198  void ApplyLocalForce(const Vector2& force, const Vector2& point);
199 
206  void ApplyTorque(float torque);
207 
224  void ApplyLinearImpulse(const Vector2& impulse, const Vector2& point);
225 
232  void ApplyAngularImpulse(float impulse);
233 
240  b2Body *GetBody() { return _physBody; }
241 
248  void ResetBody() { _physBody = NULL; }
249 
254  void SetSize(float x, float y = -1.f);
255 
266  void SetDrawSize(float x, float y = -1.f);
267 
272  void SetPosition(float x, float y);
273 
278  void SetPosition(const Vector2& pos);
279 
284  void SetRotation(float rotation);
285 
290  void MoveTo(const Vector2& newPosition, float duration, String onCompletionMessage="") {}
291 
296  void RotateTo(float newRotation, float duration, String onCompletionMessage="") {}
297 
302  void ChangeSizeTo(const Vector2& newSize, float duration, String onCompletionMessage="") {}
303 
308  void ChangeSizeTo(float newSize, float duration, String onCompletionMessage="") {}
309 
316  virtual const String GetClassName() const { return "PhysicsActor"; }
317 
318 protected:
319  virtual void InitShape(b2Shape* /*shapeDef*/ ) {}
320  b2Body *_physBody;
321 
322  float _density;
323  float _friction;
324  float _restitution;
325  eShapeType _shapeType;
326  bool _isSensor;
327  int _groupIndex;
328  bool _fixedRotation;
329 
330 private:
331  friend class World;
332 
333  void _syncPosRot(float x, float y, float rotation);
334 };
335