Cornell Cocos
Cornell Extensions to Cocos2d
All Classes Functions Variables Enumerations Enumerator Friends
CUObstacle.h
1 //
2 // CUObstacle.cpp
3 // Cornell Extensions to Cocos2D
4 //
5 // Cocos2d fits well with Box2d physics. However, it tightly couples the physics
6 // into the scene graph, which is the cardinal sin. With that said, there are some
7 // times in which coupling is okay for convenience reasons (particularly when we
8 // have the option to uncouple). This module is such an example; it couples the
9 // bodies and fixtures from Box2d into a single class, making the physics easier
10 // to use (in most cases).
11 //
12 // This file is based on the CS 3152 PhysicsDemo Lab by Don Holden, 2007
13 //
14 // Author: Walker White
15 // Version: 11/24/15
16 //
17 #ifndef __CU_OBSTACLE_H__
18 #define __CU_OBSTACLE_H__
19 
20 #include <Box2D/Dynamics/b2Body.h>
21 #include <Box2D/Dynamics/b2Fixture.h>
22 #include <iostream>
23 #include <cocos2d.h>
24 #include "CUWireNode.h"
25 
26 
27 NS_CC_BEGIN
28 
29 #pragma mark -
30 #pragma mark Obstacle
31 
46 class CC_DLL Obstacle : public Ref {
47 private:
49  CC_DISALLOW_COPY_AND_ASSIGN(Obstacle);
50 
51 protected:
53  b2BodyDef _bodyinfo;
55  b2FixtureDef _fixture;
57  b2MassData _massdata;
59  Vec2 _drawScale;
62 
64  Node* _node;
68  string _tag;
69 
70 
71 #pragma mark -
72 #pragma mark Scene Graph Internals
73 
79  virtual void resetSceneNode() { }
80 
89  virtual void positionSceneNode();
90 
106  virtual void resetDebugNode() { }
107 
116  virtual void positionDebugNode();
117 
118 private:
120 
121  bool _remove;
123  bool _dirty;
124 
125 
126 public:
127 #pragma mark -
128 #pragma mark BodyDef Methods
129 
139  virtual b2BodyType getBodyType() const { return _bodyinfo.type; }
140 
150  virtual void setBodyType(b2BodyType value) { _bodyinfo.type = value; }
151 
161  virtual Vec2 getPosition() const { return Vec2(_bodyinfo.position.x,_bodyinfo.position.y); }
162 
171  virtual void setPosition(const Vec2& value) { setPosition(value.x,value.y); }
172 
179  virtual void setPosition(float x, float y) { _bodyinfo.position.Set(x,y); }
180 
186  virtual float getX() const { return _bodyinfo.position.x; }
187 
193  virtual void setX(float value) { _bodyinfo.position.x = value; }
194 
200  virtual float getY() const { return _bodyinfo.position.y; }
201 
207  virtual void setY(float value) { _bodyinfo.position.y = value; }
208 
216  virtual float getAngle() const { return _bodyinfo.angle; }
217 
223  virtual void setAngle(float value) { _bodyinfo.angle = value; }
224 
234  virtual Vec2 getLinearVelocity() const {
235  return Vec2(_bodyinfo.linearVelocity.x,_bodyinfo.linearVelocity.y);
236  }
237 
246  virtual void setLinearVelocity(const Vec2& value) { setLinearVelocity(value.x,value.y); }
247 
254  virtual void setLinearVelocity(float x, float y) { _bodyinfo.linearVelocity.Set(x,y); }
255 
261  virtual float getVX() const { return _bodyinfo.linearVelocity.x; }
262 
268  virtual void setVX(float value) { _bodyinfo.linearVelocity.x = value; }
269 
275  virtual float getVY() const { return _bodyinfo.linearVelocity.y; }
276 
282  virtual void setVY(float value) { _bodyinfo.linearVelocity.y = value; }
283 
291  virtual float getAngularVelocity() const { return _bodyinfo.angularVelocity; }
292 
298  virtual void setAngularVelocity(float value) { _bodyinfo.angularVelocity = value; }
299 
310  virtual bool isActive() const { return _bodyinfo.active; }
311 
322  virtual void setActive(bool value) { _bodyinfo.active = value; }
323 
334  virtual bool isAwake() const { return _bodyinfo.awake; }
335 
346  virtual void setAwake(bool value) { _bodyinfo.awake = value; }
347 
358  virtual bool isSleepingAllowed() const { return _bodyinfo.allowSleep; }
359 
370  virtual void setSleepingAllowed(bool value) { _bodyinfo.allowSleep = value; }
371 
388  virtual bool isBullet() const { return _bodyinfo.bullet; }
389 
406  virtual void setBullet(bool value) { _bodyinfo.bullet = value; }
407 
415  virtual bool isFixedRotation() const { return _bodyinfo.fixedRotation; }
416 
424  virtual void setFixedRotation(bool value) { _bodyinfo.fixedRotation = value; }
425 
434  virtual float getGravityScale() const { return _bodyinfo.gravityScale; }
435 
444  virtual void setGravityScale(float value) { _bodyinfo.gravityScale = value; }
445 
459  virtual float getLinearDamping() const { return _bodyinfo.linearDamping; }
460 
474  virtual void setLinearDamping(float value) { _bodyinfo.linearDamping = value; }
475 
489  virtual float getAngularDamping() const { return _bodyinfo.angularDamping; }
490 
504  virtual void setAngularDamping(float value) { _bodyinfo.angularDamping = value; }
505 
512  void setBodyState(const b2Body& body);
513 
514 #pragma mark -
515 #pragma mark FixtureDef Methods
516 
525  float getDensity() const { return _fixture.density; }
526 
536  virtual void setDensity(float value) { _fixture.density = value; }
537 
549  float getFriction() const { return _fixture.friction; }
550 
562  virtual void setFriction(float value) { _fixture.friction = value; }
563 
575  float getRestitution() const { return _fixture.restitution; }
576 
588  virtual void setRestitution(float value) { _fixture.restitution = value; }
589 
599  bool isSensor() const { return _fixture.isSensor; }
600 
610  virtual void setSensor(bool value) { _fixture.isSensor = value; }
611 
623  b2Filter getFilterData() const { return _fixture.filter; }
624 
638  virtual void setFilterData(b2Filter value) { _fixture.filter = value; }
639 
640 
641 #pragma mark -
642 #pragma mark MassData Methods
643 
652  virtual Vec2 getCentroid() const { return Vec2(_massdata.center.x,_massdata.center.y); }
653 
662  virtual void setCentroid(const Vec2& value) { setCentroid(value.x,value.y); }
663 
670  virtual void setCentroid(float x, float y);
671 
680  virtual float getInertia() const { return _massdata.I; }
681 
690  virtual void setInertia(float value);
691 
699  virtual float getMass() const { return _massdata.mass; }
700 
708  virtual void setMass(float value);
709 
713  virtual void resetMass() { _masseffect = false; }
714 
715 
716 #pragma mark -
717 #pragma mark Garbage Collection
718 
726  bool isRemoved() const { return _remove; }
727 
736  void markRemoved(bool value) { _remove = value; }
737 
747  bool isDirty() const { return _dirty; }
748 
758  void markDirty(bool value) { _dirty = value; }
759 
760 
761 #pragma mark -
762 #pragma mark Scene Graph Methods
763 
775  const Vec2& getDrawScale() const { return _drawScale; }
776 
789  virtual void setDrawScale(const Vec2& value) { setDrawScale(value.x,value.y); }
790 
804  virtual void setDrawScale(float x, float y);
805 
815  Node* getSceneNode() const { return _node; }
816 
829  void setSceneNode(Node* node);
830 
844  WireNode* getDebugNode() const { return _debug; }
845 
862  void setDebugNode(WireNode* node);
863 
864 
865 #pragma mark -
866 #pragma mark Physics Methods
867 
875  virtual b2Body* getBody() const { return nullptr; }
876 
887  virtual bool activatePhysics(b2World& world) { return false; }
888 
895  virtual void deactivatePhysics(b2World& world) {}
896 
910  virtual void update(float delta) {}
911 
912 
913 #pragma mark -
914 #pragma mark Debugging Methods
915 
922  string getName() const { return _tag; }
923 
931  void setName(string value) { _tag = value; }
932 
942  string toString() const;
943 
955  friend ostream& operator<<(ostream& os, const Obstacle& obj);
956 
957 
958 #pragma mark -
959 #pragma mark Initializers
960 CC_CONSTRUCTOR_ACCESS:
961  /*
962  * Creates a new physics object at the origin.
963  */
964  Obstacle(void);
965 
975  virtual ~Obstacle();
976 
982  virtual bool init() { return init(Vec2::ZERO); }
983 
991  virtual bool init(const Vec2& vec);
992 
993 };
994 
995 NS_CC_END
996 
997 #endif /* defined(__CU_OBSTACLE_H__) */
virtual void setBodyType(b2BodyType value)
Definition: CUObstacle.h:150
virtual float getAngularDamping() const
Definition: CUObstacle.h:489
b2Filter getFilterData() const
Definition: CUObstacle.h:623
virtual float getY() const
Definition: CUObstacle.h:200
virtual b2Body * getBody() const
Definition: CUObstacle.h:875
virtual bool isBullet() const
Definition: CUObstacle.h:388
virtual float getAngularVelocity() const
Definition: CUObstacle.h:291
virtual void setPosition(float x, float y)
Definition: CUObstacle.h:179
virtual void setPosition(const Vec2 &value)
Definition: CUObstacle.h:171
virtual void setAwake(bool value)
Definition: CUObstacle.h:346
virtual void setFriction(float value)
Definition: CUObstacle.h:562
virtual void resetSceneNode()
Definition: CUObstacle.h:79
virtual void setLinearDamping(float value)
Definition: CUObstacle.h:474
virtual void setX(float value)
Definition: CUObstacle.h:193
virtual void setVX(float value)
Definition: CUObstacle.h:268
virtual void setFilterData(b2Filter value)
Definition: CUObstacle.h:638
virtual bool isAwake() const
Definition: CUObstacle.h:334
string _tag
Definition: CUObstacle.h:68
virtual float getGravityScale() const
Definition: CUObstacle.h:434
bool isDirty() const
Definition: CUObstacle.h:747
b2FixtureDef _fixture
Definition: CUObstacle.h:55
virtual void resetMass()
Definition: CUObstacle.h:713
virtual bool isActive() const
Definition: CUObstacle.h:310
virtual void setLinearVelocity(float x, float y)
Definition: CUObstacle.h:254
virtual void setSensor(bool value)
Definition: CUObstacle.h:610
virtual void setGravityScale(float value)
Definition: CUObstacle.h:444
virtual Vec2 getCentroid() const
Definition: CUObstacle.h:652
virtual void setCentroid(const Vec2 &value)
Definition: CUObstacle.h:662
virtual float getAngle() const
Definition: CUObstacle.h:216
Node * getSceneNode() const
Definition: CUObstacle.h:815
WireNode * getDebugNode() const
Definition: CUObstacle.h:844
Vec2 _drawScale
Definition: CUObstacle.h:59
virtual float getX() const
Definition: CUObstacle.h:186
virtual void setLinearVelocity(const Vec2 &value)
Definition: CUObstacle.h:246
virtual float getInertia() const
Definition: CUObstacle.h:680
Definition: CUWireNode.h:75
virtual float getMass() const
Definition: CUObstacle.h:699
virtual bool isFixedRotation() const
Definition: CUObstacle.h:415
void markRemoved(bool value)
Definition: CUObstacle.h:736
virtual void resetDebugNode()
Definition: CUObstacle.h:106
virtual bool init()
Definition: CUObstacle.h:982
virtual void setAngularDamping(float value)
Definition: CUObstacle.h:504
virtual b2BodyType getBodyType() const
Definition: CUObstacle.h:139
void markDirty(bool value)
Definition: CUObstacle.h:758
bool isRemoved() const
Definition: CUObstacle.h:726
virtual void deactivatePhysics(b2World &world)
Definition: CUObstacle.h:895
virtual bool isSleepingAllowed() const
Definition: CUObstacle.h:358
virtual bool activatePhysics(b2World &world)
Definition: CUObstacle.h:887
virtual void setDensity(float value)
Definition: CUObstacle.h:536
void setName(string value)
Definition: CUObstacle.h:931
float getFriction() const
Definition: CUObstacle.h:549
virtual void setFixedRotation(bool value)
Definition: CUObstacle.h:424
float getRestitution() const
Definition: CUObstacle.h:575
virtual float getVX() const
Definition: CUObstacle.h:261
virtual Vec2 getLinearVelocity() const
Definition: CUObstacle.h:234
virtual float getLinearDamping() const
Definition: CUObstacle.h:459
Definition: CUObstacle.h:46
virtual void update(float delta)
Definition: CUObstacle.h:910
string getName() const
Definition: CUObstacle.h:922
virtual Vec2 getPosition() const
Definition: CUObstacle.h:161
virtual void setVY(float value)
Definition: CUObstacle.h:282
virtual void setDrawScale(const Vec2 &value)
Definition: CUObstacle.h:789
Node * _node
Definition: CUObstacle.h:64
const Vec2 & getDrawScale() const
Definition: CUObstacle.h:775
float getDensity() const
Definition: CUObstacle.h:525
virtual float getVY() const
Definition: CUObstacle.h:275
virtual void setRestitution(float value)
Definition: CUObstacle.h:588
WireNode * _debug
Definition: CUObstacle.h:66
virtual void setAngle(float value)
Definition: CUObstacle.h:223
b2MassData _massdata
Definition: CUObstacle.h:57
virtual void setActive(bool value)
Definition: CUObstacle.h:322
virtual void setY(float value)
Definition: CUObstacle.h:207
bool _masseffect
Definition: CUObstacle.h:61
b2BodyDef _bodyinfo
Definition: CUObstacle.h:53
virtual void setSleepingAllowed(bool value)
Definition: CUObstacle.h:370
bool isSensor() const
Definition: CUObstacle.h:599
virtual void setBullet(bool value)
Definition: CUObstacle.h:406
virtual void setAngularVelocity(float value)
Definition: CUObstacle.h:298